PDA

Ver la Versión Completa : Agregar controles a un contenedor


senpiterno
07-09-2004, 07:19:06
Hola amigos

Me gustaria saber como puedo agregar controles a un contenedor de controles en tiempo de ejecucion, por ejemplo agregar botones o listas a un ScrollBox o Panel. A y como duda adicional, cuantos controles puede soportar un contenedor de estos ??.

De atemano se agradece cualquier ayuda.

jachguate
07-09-2004, 07:46:45
Agregar un control es tan sencillo como crear una nueva instancia del control que te interesa y establecer sus propiedades relevantes.

Por ejemplo, con un botón seria algo como:
(un ejemplo dice mas que mil palabras)

Procedure TForm1.BotonNuevo;

Var
bt : TButton;

Begin
bt := TButton.Create(self);
bt.parent := Panel1;
inc(FContadorBotones);
bt.name := 'boton' + IntToStr(FContadorBotones);
bt.caption := 'pinchame!';
bt.left := 10;
bt.top := 20 * (FContadorBotones - 1);
bt.onClic := TForm1.BotonClick;
end;


El parent es el "contenedor" en donde aparecera el botón. Me he cuidado de asignar un nombre único al botón, que en este caso, disparará el procedimiento TForm1.BotonClick en su evento OnClick. En este caso la definición BotonClick tiene que coincidir con la de TNotifyEvent. Es decir, recibir un parámetro de tipo TObject y pertenecer a una clase.

Luego, la posición, y listo!.

cuantos controles puede soportar un contenedor de estos NO creo que haya un límite teórico muy bajo en delphi, pues todo es manejado en memoria dinámica. Te limitan la memoria de tu equipo, y los recursos del sistema.

Por si las dudas, el indice de la propiedad controls es de tipo Integer, con lo que el límite teórico impuesto por este es de 2,147,483,647 controles. Te aseguro que tu windows morirá mucho antes de esto.. :D:D
Hasta luego.

;)

senpiterno
07-09-2004, 19:16:30
Gracias jachguate... me queda muy claro lo de como agregar controles a un contenedor, pero me gustaria que me ayudaras con lo de los eventos que generan estos controles creados dinamicamente, como por ejemplo como crear un array de controles que obedescan todos a un mismo evento, como el onclick por ejemplo....

eduarcol
07-09-2004, 20:12:54
bt.onClic := TForm1.BotonClick;




Disculpa que me meta, pero esa linea hace exactamente lo que tu quieres, lo unico es que debes haber definido un procedure llamado BotonClick con el parametro (Sender: TObject) dentro del formulario

roman
07-09-2004, 20:21:41
Disculpa que me meta

Más aún. He estado leyendo y releyendo el hilo preguntándome por qué jachguate puso en el ejemplo lo del contador. Tal parece que que se anticipó a la segunda pregunta de sempiterno. ¿Será que finalmente le entraron las clases de adivinación? :eek:

:D :D

// Saludos

jachguate
08-09-2004, 02:22:25
Tal parece que que se anticipó a la segunda pregunta de sempiterno. ¿Será que finalmente le entraron las clases de adivinación? :eek:

:D :D



:o:o:o es que ahora si he asistido... :D

Por cierto que no te he visto por alli... :D

Hasta luego.