Delphi - Array de controles

 
Vista:

Array de controles

Publicado por Sergio Costa (3 intervenciones) el 28/03/2004 04:38:00
hola. Desde ya lesagradezco su ayuda. Quiesiera saber como hacer un array de controles dinamicamente y que todos respondan a un misco codigo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Array de controles

Publicado por M@rceloL (213 intervenciones) el 29/03/2004 02:37:07
A ver. Si entiendo bien, lo que querés hacer es un arreglo de objetos de algún tipo... y generarlos dinámicamente.

Por ejemplo, un arreglo de TImage's:

type TArrTImage=array[1..10] of TImage;

var Arreglo:TArrTImage;

Para crear cosas:

Arreglo[1]:=TImage.Create(Self);

Claro que tendrías que tener la cuenta de los ítemes que tenés creados...

Ahora, si los objetos no tienen porqué ser de la misma clase:

Podríamos hacer algo como un arreglo de objetos de la clase madre y después, por la magia del polimorfismo y la RTTI... todo debería funcionar...

Por ejemplo:

type TArrObj=array[1..10] of TObject;

var Arreglo=TArrObj;

Para crear algo, creo que sería así (pero no estoy seguro):

Arreglo[1]:=TImage.Create(Self);

ó si fuera un botón:

Arreglo[1]:=TButton.Create(Self);

OJO: No sé si la clase TObject es ancestra de TImage y TButton...

Algunas cosas podrían llamarse sin "saber" de que clase es el objeto, como el método "Free". Para otras cosas se podría hacer algo así:

if (Arreglo[1] is TButton) then (Arreglo[1] as TButton).Caption:='Holas';

SI es un TButton (is) entonces lo tomamos COMO (as) un TButton...

Espero me hayas entendido, cualquier cosa, preguntá de nuevo.

Suerte y felices compiladas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Array de controles

Publicado por Fer (269 intervenciones) el 29/03/2004 09:28:55
Vamos a ver. En primer lugar yo no utilizaría un array. Los conceptos "array" y "dinámico" son bastante difíciles de hacer trabajar juntos.

Para lo que tú quieres, Delphi ofrece una clase muy sencilla de utilizar, se trata de TList:

Un objeto de la clase TList es una lista de punteros. Cada puntero puede estar señalando a cualquier cosa.

Ejemplo: Si quieres crear una lista de controles en un form, en la sección private declara:

ListaDeControles: TList;

En el OnCreate del Form:
ListaDeControles := TList.Create;

En el OnDestroy:
ListaDeControles.Free;

En un procedimiento en el que quieras crear un control (p.ej. un botón);
var
vBoton: TButton;
begin
vBoton := TButton.Create;
ListaDeControles.Add(vBoton);

with vBoton do begin
Parent := Self;
Left := 10;
Top := 10;
OnClick := TuManejadorDeOnClick;
end;//with vBoton

Cuando necesites acceder a un objeto, no tienes más que referirte al él por índice o recorrer toda la lista en un for, o recorrerla preguntando si el control es del tipo que tú quieres (si es que almacenas distintos controles), etc.

Como puedes comprobar, es una clase con muchas posibilidades.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Array de controles

Publicado por Ing Francisco Arena (140 intervenciones) el 30/03/2004 00:12:20
En Delphi no existe el array de controles al estilo V. Basic.

Existe a mi criterio algo mejor: los eventos de los controles se pueden asignar a un mismo procedimiento (en tiempo de diseño desde la pestaña Eventos del Inspector de Objectos):

procedure TForm1.Button1Click(Sender: TObject);
begin
num:= StrToInt ((Sender As TButton).Caption);
x:= x + num;
end;

El parámetro Sender del evento OnClick de un componente representa a ese mismo componente, pero para poder usar todas sus propiedades y métodos hay que especificar mediante la línea:

(Sender AS TButton)

de qué componente se trata, en este caso un TButton.
De esta manera, por ejemplo un Button2 puede tener asignado el mismo procedimiento Button1Click para su evento OnClick, incluso un Label puede tener asignado ese mismo procedimiento en el mismo evento.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar