Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Recorrido de componentes (https://www.clubdelphi.com/foros/showthread.php?t=15479)

sur-se 25-10-2004 12:46:31

Recorrido de componentes
 
Hola. Utilizo Delphi 5. Estoy realizando un proceso que debe recorrer todos los objetos incluidos en el form para darles valor a unas propiedades. El problema lo tengo en recorrer todos los objetos. Incialmente lo plantee de la forma siguiente:
Código:

with Form1 do
begin
      for i:=0 to ControlCount-1 do Procesar(Controls[i]);
end;

El problema es que sólo recorre a un nivel, es decir, si tengo un panel que dentro tiene objetos, se queda en el panel y no procesa los elementos de dentro.
Bueno, lo planteo entonces como una función recursiva y ya está, pero el problema es que no puedo saber si un componente tiene a su vez mas hijos, ya que el proceso lo defino así
Código:

procedure analizar(Compo:TControl);
var i:integer;
begin
      if Compo.ControlCount>0 then
      begin
              for  i:=0 to Compo.ControlCount-1 do Analizar(Compo.Controls[i]);
      end
      else Procesar(Compo);

end;

Sin embargo, la propiedad ControlCount no existe para TControl. Una opción sería utilizar el with:
with Compo as TWinControl do ....
No sé cual sería la mejor opción. ¿Alguien se le ocurre la forma correcta?

Neftali [Germán.Estévez] 25-10-2004 12:54:14

Utiliza:

ComponenCount y Components[i], en lugar de ControlCount y Controls[i]
;)

sur-se 25-10-2004 16:21:12

Hola. Gracias por la respuesta. Efectivamente esa era otra posibilidad, usar Components, el problema está en los Frames, que no entra dentro, es decir, si el Frame tiene a su vez objetos dentro, no aparecen en la lista de Components del form, y hay que recorrerla para los del frame.
Salu2.

frudolph 25-10-2004 18:44:18

En Todo caso tendrías que recorrer cada Componente en Forma recursiva. Para simplificarlo podría ser algo así como:

if Components[i].ComponentCount > 0 then Procesar(Components[i]);


La franja horaria es GMT +2. Ahora son las 17:31:51.

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