Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Concatenar variable a nombre de objeto (https://www.clubdelphi.com/foros/showthread.php?t=68236)

cslbcn 02-06-2010 16:15:04

Concatenar variable a nombre de objeto
 
Hola. Sé que esto que pregunto en javascript y en php se puede hacer, pero no consigo hacerlo en Deplhi.

Tengo 12 checkboxes llamados: ck1, ck2, ck3 ... ck12

Quiero que en un bucle for, me marque todos los checkbox como true

Código Delphi [-]

for k:=1 to 12 do
begin
    ck+k.Checked := true;
end;

el ck+k es lo que no le gusta al compilador... Como se puede hacer? Gracias

Caro 02-06-2010 16:56:34

Hola cslbcn, puedes utilizar FindComponent, pero también podrías cambiar por un CheckListBox y acceder directamente a sus items recorriendo dicho componente.

Código Delphi [-]
 Check : TComponent;
begin
 for k:=1 to 12 do
  begin
   Check := FindComponent('ck'+IntToStr(k));
   if Assigned(Check) then
    TCheckBox(Check).Checked := True;
  end;

Saluditos

cecam 02-06-2010 17:37:35

Tambien se puede hacer así para encontrar/recorrer componentes :
Código:

 
for i := 0 to ComponentCount - 1 do begin
      if  Components[i] is TCheckBox
      then TCheckBox(Components[i]).Checked:=True
  end;

Saludos!!

cslbcn 07-06-2010 13:47:06

Hola. Los ejemplos de antes funcionaron. He intentado aplicar eso en otro caso y no funciona.

Cuando hago click en una Label, quiero que cambie el formato de esta. Para ellos llamo a un procedure de este tipo:

Código Delphi [-]
procedure TFMante.cambiarFormato(Objeto:String; Estado:String; Categoria:String);
begin

  if (Estado = 'mouseClick') then
  begin

    TLabel(Objeto).Font.Color := clAqua;
    
  end;

end;

Cuando hago la llamada, en Objeto envío el nombre de la label (labelUsuarios1, por ejemplo). Entonces

TLabel(Objeto).Font.Color := clAqua;
debería ser reemplazado por:
TLabel(labelUsuarios1).Font.Color := clAqua;

Pero al hacerlo no funciona, el programa peta. Creo que es porque envío el nombre como String...

Alguna idea? Gracas

Caro 07-06-2010 21:18:55

Hola cslbcn, si quieres manejarlo como String debes utilizar FindComponent o de la forma que te indica cecam tienes que recorrer e ir preguntando por su Name.

Código Delphi [-]
 if (Estado = 'mouseClick') then
  begin

    TLabel(FindComponent(Objeto)).Font.Color := clAqua;
    
  end;

No te sería mejor manejar tu parámetro Objeto como TLabel?.

Saluditos

cslbcn 08-06-2010 14:55:08

Gracias por la ayuda. Tal y como propones ya cumple con lo que quiero. Tengo que manejar la función con varios objetos con varios nombres y de esta forma funciona perfecto.

Muchas gracias.


La franja horaria es GMT +2. Ahora son las 07:36:14.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi