Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Variable en Atributo [Edit(Variable).Text] (https://www.clubdelphi.com/foros/showthread.php?t=79148)

martini002 12-06-2012 01:38:31

Variable en Atributo [Edit(Variable).Text]
 
Saludos Amigos, donde quiera que se encuentren.

En esta ocasion les traigo una duda que tengo desde hace dias
pero que hasta ahora no he podido dar con una buena conclusion.

Esto es posible? o alguna semejanza, la cuestion
es que quiero almacenar en 1000 Edit's un valor en especial
digamos que el 0, Entonces la pregunta seria,
se puede colocar una variable en un atributo?

Ejemplo:
Llenamos 1000 Objetos Edit, con una secuencia 1,2,3..1000

Saludos,
Best,
Martin

Código Delphi [-]
Procedure LlenarEdits();
Var
  I:Integer;
begin
  for I:=1 to 1000 do
    begin
      Form1.Edit+IntToStr(I)+.Text:=I;//Aqui mi duda, Obviamente esto no es posible asi tal cual como esta escrito
    end;
end;

dec 12-06-2012 02:21:48

Hola,

Prueba con algo como "FindComponent", que, te permite buscar y obtener referencias de componentes por su nombre.

martini002 12-06-2012 02:39:56

Gracias!
A ver dejame revisar

Caral 12-06-2012 02:41:02

Hola
Cita:

Empezado por dec (Mensaje 434875)
Hola,
Prueba con algo como "FindComponent", que, te permite buscar y obtener referencias de componentes por su nombre.

Código Delphi [-]
var
  i :Integer;
  comp: TComponent;
begin
  for i := 1 to 3 do begin // aqui se pone la cantidad de edits, en este caso 3
  comp := FindComponent('Edit' + IntToStr(i));
  TEdit(comp).Text:= IntToStr(i);
  end;
Busca los edits y les coloca un numero en su texto.
Saludos

Pedro-Juan 13-06-2012 00:47:52

Hola,

No puedo resistirme a la curiosidad, ¿1000 Edits?

Un saludo.

martini002 13-06-2012 01:21:42

Cita:

Empezado por Pedro-Juan (Mensaje 434952)
Hola,

No puedo resistirme a la curiosidad, ¿1000 Edits?

Un saludo.

iba a poner un millon...
Haha, siempre que quiero automatizar algo pienso
y si tengo 1 millon de (algo) en este caso edits,
acaso debo llenarlos uno por uno? entonces alli viene
el planteamiento del problema, y digo, no creo,
debe haber algo que lo pueda hacer

Pedro-Juan 13-06-2012 01:31:35

Entendido Martin :)

Pero como dices:

Cita:

Empezado por martini002 (Mensaje 434873)
es que quiero almacenar en 1000 Edit's un valor en especial
digamos que el 0, Entonces la pregunta seria,
se puede colocar una variable en un atributo?

No lo entendía.

Un saludo.

martini002 20-06-2012 22:18:58

Hola Caral,
Tenia dias sin sentarme a programar esto
porque surgieron un par de cosas
pero he vuelto!

sabes que el FindComponent no me funciona correctamente
realmente quiero usar esa funcion para lo siguiente:

Código Delphi [-]
procedure ActualizarCartasMesa();
var
  I:Integer;
  Componente:TComponent;
begin
  For I:=1 to 10 do
    Begin
      Componente:=FindComponent('CartaMesa' + IntToStr(I));
      TImage(Componente).Picture.LoadFromFile(Getcurrentdir()+'\Imagenes\Cartas\'+IntToStr(VCartasMesa[i])+'.png');
    End
end;

pero me arroja un error:
"undeclared identifier FindComponent..."

agregue

Uses
System

pero sigue sin funcionar, que crees que esta pasando con eso?
gracias

ecfisa 20-06-2012 22:56:44

Hola martini002.


El método FindComponent no puede ser llamado igual que una función común, como todo método está ligado a un objeto.

Por otro lado, primero tendrías que buscar el componente y luego, si existe, realizar las acciones. Ejemplo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  I:Integer;
  Componente:TComponent;
begin
  for i:= 1 to 10 do
  begin
    Componente:= FindComponent('CartaMesa' + IntToStr(i)); // Aquí es:  Self.FindComponent (Self = Form1)
    if Componente <> nil then  // ¿ Existe el componente ?
      //...
  end
...

Saludos.

roman 21-06-2012 17:08:05

Realmente, debería prohibirse el uso de FindComponent ;).

Este método lo que hace es recorrer todos los componentes del formulario hasta encontrar el que tenga el nombre dado. Si tienes 10 objetos a buscar, entonces recorres 10 veces todos los componentes, y no digamos si tienes mil. Para eso, mejor los recorres una sóla vez:

Código Delphi [-]
for I := 0 to ComponentCount - 1 do
begin
  if SameText(Components[i].Name, 'CartaMesa' + IntToStr(I)) then
    TImage(Componente).Picture.LoadFromFile(...);
end;

Aún así, esto debería usarse sólo para algo ocasional. Si, por ejemplo, estás diseñando un juego de cartas, es de suponer que vas a tener que referirte a los componentes TImage que las representan múltiples veces. Entonces es mejor declarar un arreglo de objetos TImage:

Código Delphi [-]
Cartas: array[1..10] of TImage;

e inicializarlos, por ejemplo, en el constructor del formulario:

Código Delphi [-]
Cartas[1] := CartaMesa1;
Cartas[2] := CartaMesa2;
...
Cartas[10] := CartaMesa10;

Es una larga asignación, pero en el resto de la aplicación puedes ya usar las cartas directamente:

Código Delphi [-]
for I := 1 to 10 do
begin
  Carta[i].Picture.LoadFromFile(...);
end;

Incluso, si la asignación inicial es demasiado larga, quizá podrías colocar todas las cartas en un contenedor como un TPanel e inicializar así:

Código Delphi [-]
for I := 0 to Panel.ControlCount - 1 do
  TImage(Panel.Control[i]).LoadFromFile(...);

// Saludos


La franja horaria es GMT +2. Ahora son las 16:11:06.

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