• Domingo 22 de Diciembre de 2024, 14:34

Autor Tema:  Duda Sobre El Tcomponents  (Leído 1179 veces)

Perrero

  • Miembro MUY activo
  • ***
  • Mensajes: 209
    • Ver Perfil
Duda Sobre El Tcomponents
« en: Martes 16 de Mayo de 2006, 18:05 »
0
Holas, tengo una dudapara acceder a ciertos TMemos,  tengo el siguiente codigo:

Código: Text
  1.  
  2. Randomize();
  3.   For i:=10 to 14 do
  4.     If Components[i] is TMemo then
  5.     Begin
  6.       Seleccion:= Random(37)+1;
  7.       Caracter:= Saca_Caracter(Seleccion);
  8.       TMemo(Components[i]).Text:= Caracter;
  9.     End;
  10.  
  11.  

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

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Duda Sobre El Tcomponents
« Respuesta #1 en: Martes 16 de Mayo de 2006, 18:27 »
0
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
  1.  
  2. TMemo(Comonents[Index])
  3.  
  4.  
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
  1.  
  2. var
  3.   myComponentes: TList;
  4. begin
  5.   myComponents := TList.Create;
  6.   myComponents.Add(Memo1);
  7.   myComponents.Add(Memo2);
  8.   myComponents.Add(Memo3);
  9.   myComponents.Add(Memo4);
  10.  
  11.   for iCount=0 to myComponents.Count - 1 do
  12.   begin
  13.     if myComponents[iCount] is TMemo then
  14.           TMemo(Components[i]).Text:= Caracter;
  15.   end;
  16.   myComponents.Free;
  17. end;
  18.  
  19.