Programación General > Delphi
Duda Sobre El Tcomponents
(1/1)
Perrero:
Holas, tengo una dudapara acceder a ciertos TMemos, tengo el siguiente codigo:
--- Código: Text --- Randomize(); For i:=10 to 14 do If Components[i] is TMemo then Begin Seleccion:= Random(37)+1; Caracter:= Saca_Caracter(Seleccion); TMemo(Components[i]).Text:= Caracter; End;
En el for tuve que ponerle de 10 a 14, ya que si no le pongo esos valores, escribe en otros componentes, pero mi duda es. ¿Al poner TMemo(Components).Text:= Caracter; ya no estoy especificando que solo debe ser los componentes del TMemo y por tal los valores del for no deberian de ser de 0 a 4? y si estoy poniendo ese codigo ¿Por que escribe en otros componentes que no son TMemos?, por ejemplo, por que en un boton pone el caracter si no es TMemo?
Enko:
TForm.Components[Index: Integer]: TComponents.
La propiedad components es una lista de los componentes que posee la form.
Lo unico que hace es guardar las direcciones de memoria en donde se encuentra cada instancia de cualquier componente que pertenece a la From especifica.
Por eso, cuando escribes
--- Código: Text --- TMemo(Comonents[Index]) Lo que se hace, es indicar al compilador que en la direccion de memoria donde apunta Components[Index] se encuentra un objeto de tipo TMemo y este te permite acceder a sus propiedades especificas.
El index te lo autogenera Delphi, por eso es que tienes que escribir los Index que el le asigna.
Si quieres, puedes usar tu propia lista de componentes.
--- Código: Text --- var myComponentes: TList;begin myComponents := TList.Create; myComponents.Add(Memo1); myComponents.Add(Memo2); myComponents.Add(Memo3); myComponents.Add(Memo4); for iCount=0 to myComponents.Count - 1 do begin if myComponents[iCount] is TMemo then TMemo(Components[i]).Text:= Caracter; end; myComponents.Free;end;
Navegación
Ir a la versión completa