Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Recorrido por objetos en forma de array. (https://www.clubdelphi.com/foros/showthread.php?t=62947)

vpepen 22-01-2009 15:50:18

Recorrido por objetos en forma de array.
 
Buenos días a tod@s.

Primeramente les doy las gracias por toda la ayuda que he recibido desde que ingresé a este valioso club.

Tengo la siguiente situación:

Me gustaría saber si existe la forma de hacer un recorrido por los objetos colocados en un form. Por ejemplo, tengo en un form 20 label y con una estructura repetitiva quiero asignar un determinado valor a cada uno de los label sin tener que referirme a cada uno de ellos individualmente.

Las gracias anticipadas.

Víctor

jorge82 22-01-2009 16:02:54

Hola, así puedes recorrer los componentes en un form:

Código Delphi [-]
var
  I: Integer;
begin
  for I := 0 to ComponentCount-1 do
  begin
    if Components[i] is TLabel then
    begin
      TLabel(Components[i]).Caption := 'Titulo' + IntToStr(I);
    end;
  end;
end;

Espero te sirva.

dec 22-01-2009 16:04:36

Hola,

Sí que es posible. El formulario tiene una propiedad "Controls", que, es un Array con los controles (componentes visuales) que contiene. Y luego tiene también una propiedad "ControlsCount". Con estas dos propiedades ya puedes hacer ya lo que quieres. Algo así:

Código Delphi [-]
var
  i: integer;
begin
  for i := 0 to Form1.ControlsCount-1 do
  begin
    if Controls[i] is TEdit then
    begin
      TEdit(Controls[i]).Label := 'Hey!';
      {...}
    end;
  end;
end;

PD. El compañero jorge82 apunta a usar las propiedades "Components" y "ComponentsCount". Podría servir también, empero, teniendo en cuenta que "Components" y "Controls" no son exactamente iguales. Pero tendría ahora que revisar la ayuda... y eso que en estos foros se ha tratado ya sobre las diferencias entre ambas propiedades. :rolleyes:

vpepen 22-01-2009 16:11:13

Gracias Jorge y David por sus prontas respuestas.

La solución que plantea Jorge es muy similar a la de David, sólo que la única diferencia es que David utiliza Controls y Jorge Components, pero en definitiva no veo diferencia alguna, ya que con ambas pude resolver.

Gracias a Ambos...


Saludos.

vpepen 22-01-2009 17:49:29

Implementado el código que ustedes me facilitaron he encontrado que al ejecutar la instrucción dentro de una estructura repetitiva:

For i := 0 to ComponentCount-1 do begin
TLabel(Components[i]).Caption := 'Titulo'
end;

Le asigna el texto 'Titulo' a todos los componentes en el form y no exclusivamente a los Label.


Saludos.

vpepen 22-01-2009 18:06:08

Disculpen mi despiste, ya pude ver lo que sucede, olvidé la sentencia IF :rolleyes:

Gracias

roman 23-01-2009 03:19:39

Controls vs Components

Controls es la lista de controles visuales contenidos directamente en el objeto
Components es la lista de componentes cuyo dueño es el objeto

Normalmente, el dueño de los componentes que hay en un formulario es el formulario mismo, pero no todos los controles estarán contenidos directamente en el formulario, ya que podrían estar en un panel.

// Saludos

vpepen 23-01-2009 13:11:12

Cita:

Empezado por roman (Mensaje 335613)
Controls vs Components

Controls es la lista de controles visuales contenidos directamente en el objeto
Components es la lista de componentes cuyo dueño es el objeto

Normalmente, el dueño de los componentes que hay en un formulario es el formulario mismo, pero no todos los controles estarán contenidos directamente en el formulario, ya que podrían estar en un panel.

// Saludos

Gracias Roman por tu explicación.....

Saludos.


La franja horaria es GMT +2. Ahora son las 20:14:29.

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