FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Vector de componentes
quisiera saber si se puede hacer un vector de componentes, me haré entender mejor.
normalmente uno tiene tantos componentes como vaya colocando, pero si yo quiero que se hagan tantos componentes como fueran necesarios segun datos ingresados... Ejemplo: TLabel *Label1; TLabel *Label2; TLabel *Label3; ... Sucesivamente pero se puede hacer de alguna manera que quedara como: TLabel Label[10]; en este caso serian 10 Label, pero entonces se crearían según necesidad de los datos a ingresar como: TLabel Label[variable]; aunque con las variables se puede usar el new, no se si se pueda algo parecido con las formas, no se si la idea que tengo se pueda realizar, o lo mas aproximado posible. Gracias! |
#2
|
||||
|
||||
Leo la siguiente frase:
Cita:
Por lo que sé, Builder también usa VCL, por lo que debería funcionar algo así (ojo, que lo hago de memoria y no tengo Builder para probarlo, de hecho nunca lo he usado así que no estoy seguro de cómo define los métodos y las propiedades): Código:
/* Añadir un label al formulario. */ int MiFormulario::AnnadeLabel (char *TextoLabel) { TLabel *Objeto; // Ahora no recuerdo cuál es el método para añadir componentes a un TForm, // y no me apetece buscarlo. this->addComponent (Objeto = new TLabel (this)); // Voy a suponer que usa un patrón "get/set" para las propiedades. Objeto->setCaption (TextoLabel); Objeto->setParent (this->PanelDeEtiquetas); Objeto->Tag = this->CuentaElementos++; // Ya no recuerdo cómo es la clase string, pero esto debería funcionar. Objeto->setName ((string)("etiqueta") + itostr (Objeto->Tag)); return Objeto->Tag; } Si necesitas obtener un objeto concreto, accede a la lista de componentes de TForm (supongo que en Builder también lo implementan) y busca por nombre o por Tag. [edito] Acaba de ocurrírseme que puedes usar realloc. Última edición por Ñuño Martínez fecha: 01-06-2011 a las 14:30:30. |
#3
|
||||
|
||||
Pongamos un ejemplo sencillo:
Código:
void __fastcall TForm1::Button1Click(TObject *Sender) { TLabel* L = new TLabel(this); // Creamos y asignamos el Owner L->Left = 0; L->Top = 0; L->Caption = "Label"; L->Parent = this; // Asignamos el Parent } Parent: La ventana donde se mostrará el nuevo componente. Puede interesarte que la VCL tiene también la Clase TList, una clase para manejar arrays de punteros. Saludos. |
#4
|
|||
|
|||
la verdad no me deja nada claro, mejor dicho, como seria el metodo para crear n cantidad de componentes Edit segun sea necesario... un componente dinamico, gracias!
ejemplo: si necesitara tomar los nombres de ciudades visitadas y en componente Edit ingresaran una cantidad, ejemplo 6 a continuacion mostrara 6 componenetes Edit para ingresar en cada uno un nombre de ciudad, y en la siguiente ejecucion fueran 8 mostrara los 8 componentes necesarios, pero que no haya necesidad de hacerlos uno a uno si depronto se llegan a necesitar mas o menos no sea problema!...gracias por la colaboracion! Última edición por odiseeus fecha: 06-06-2011 a las 11:53:18. |
#5
|
||||
|
||||
Hola.
No entendí bien lo que preguntaste en tu primer mensaje. Pero ahora, luego de leer el segundo, me parece que es lo que te contesto escafandra. Por ejemplo: Código:
void __fastcall TForm1::CrearEdits(int Cant) { for(int i=0;i < 10; i++) { TEdit *TE = new TEdit(this); TE->Left = 8; TE->Top = i*30+20; TE->Name = "Edit"+IntToStr(i+1); TE->Parent = this; } } Ejemplo de llamada que crea 10 TEdit: Código:
void __fastcall TForm1::Button1Click(TObject *Sender) { CrearEdits(10); } Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 06-06-2011 a las 12:11:10. |
#6
|
|||
|
|||
que pena no haberme hecho entender bien desde un principio, pero es exactamente como lo explicaste ecsifa... muchas gracias!... completamente útil tu colaboración!... Gracias!
|
#7
|
|||
|
|||
que pena preguntar tanto, pero después de varios y distintos intentos a lo cual no he podido, como se hace para eliminar o destruir los mismos componentes creados en la explicación anterior? gracias.
|
#8
|
||||
|
||||
Cita:
Cita:
Saludos. |
#9
|
|||
|
|||
ok el owner se encarga eliminar los componentes al terminar la ejecución del formulario! (entendido)... pero si se crean en tiempo de ejecución, como destruyo esos mismos en tiempo de ejecución?, sin ser necesario finalizar el formulario. gracias!
|
#10
|
||||
|
||||
Hola odiseeus.
Una forma puede ser: Código:
... TObjectList *ObjLst = new TObjectList; void __fastcall TForm1::CrearEdits(int Cant) { for(int i=0;i < 10; i++) { TEdit *TE = new TEdit(this); TE->Left = 8; TE->Top = i*30+20; TE->Name = "Edit"+IntToStr(i+1); TE->Parent = this; ObjLst->Add(TE); } } void __fastcall TForm1::btnCrearClick(TObject *Sender) { CrearEdits(10); } //--------------------------------------------------------------------------- void __fastcall TForm1::btnLiberarClick(TObject *Sender) { ObjLst->Free(); } ...
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#11
|
|||
|
|||
nuevamente mil gracias! ecfisa, siempre he dicho que es grandioso tener un conocimiento, pero realmente ingenioso es saberlo trasmitir!... y en este foro si que lo saben hacer!.. mil gracias de nuevo!.. éxitos!
|
#12
|
|||
|
|||
hola de nuevo, una preguntas mas, si quiero acceder a una de las propiedades de los Edit creados en el ejemplo anterior, como seria, pues no puedo colocar ej:
Código:
Edit1->Text = "texto1"; Edit2->Text = "texto2"; ... //n cantidad de Edit creados.... como se hace? |
#13
|
||||
|
||||
Hola odiseeus.
Podes acceder por el método FindComponent, por ejemplo: Código:
void __fastcall TForm1::Button1Click(TObject *Sender) { /* Forma 1 (recomendada) */ TEdit *e2 = static_cast<TEdit*>(FindComponent("Edit2")); e2->Text = "Texto 2"; e2->Color = clMoneyGreen; /* Forma 2 */ TEdit *e1 = ((TEdit*)FindComponent("Edit1")); e1->Text = "Texto 2"; e1->Color = clSkyBlue; /* a una propiedad */ ((TEdit*)FindComponent("Edit3"))->Cursor = crHandPoint; }
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Cantidad de -A- en un vector | luisito2011 | Varios | 9 | 13-05-2011 09:27:46 |
vector con timage | einarcito | Gráficos | 1 | 20-09-2008 17:31:53 |
Guardar en un archivo el vector de componentes de una form | Majo | Varios | 33 | 19-02-2004 20:28:51 |
Liberar un vector... | Tanix | PHP | 6 | 28-08-2003 10:36:36 |
un vector de checkbox | superhopi | OOP | 3 | 07-05-2003 17:42:34 |
|