Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Recorrer todos los formularios de mi Aplicacion (https://www.clubdelphi.com/foros/showthread.php?t=63156)

rgstuamigo 31-01-2009 15:52:45

Recorrer todos los formularios de mi Aplicacion
 
Hola amigos ,quisas ya este tema ya se a tratado en alguna otra ocacion,pero he buscado en el foro y no he encontrado algo acorde a mis necesidades y al parecer es muy facilito hacerlo:o.(¡Que malo que soy..!:eek:)
Bueno.. ¿como se hace para recorrer todos los formularios de mi aplicacion y poder habilitar o deshabilitar algunos controles(botones)de todos los formularios ?, ya que mis formularios todos la mayoria de ellos tienes casi la misma interfaz y los mismos nombres de componentes, ojo se hacerlo para un formulario, pero no se como hacer para obtener referencias de los demas ya que son Muchos,:rolleyes:.
Bueno para un solo form, lo hago asi (digamos que quiero deshabilitar un boton con nombre Button1);
Código Delphi [-]
procedure TForm1.Button4Click(Sender: TObject);
var i:Byte;
begin
    i:=0;
     while ( ido
      begin
       if (Form2.Controls[i] is TButton) and
           ((Form2.Controls[i] as TButton).Name='Button1')then
           (Form2.Controls[i] as TButton).Enabled:=False;
           Inc(i);
      end;

end;
Bueno eso tendria que ser para todos los formularios pero eso es lo que no se como seria,debe haber una forma de tener una lista(array talves)de todos los formularios de la aplicacion (talves usando el objeto Application pero cual metodo?) y asi hacerme un metodo que haga lo que deseo.
Gracias de antemano por su colaboracion....
Saludos a todos...:)
EDITO: La parte del While no se por no se ve bien parece las etiquetas de la sintaxis para delphi esta un poco mala, he trataodo de editarle y sigue asi, de todas forma lo pongo aqui haber si sale bien:rolleyes::
Código Delphi [-]
while ( i

rgstuamigo 31-01-2009 15:59:02

Ni modos:( lo pongo sin sintaxis delphi
Cita:

while ( i<Form2.ControlCount)

Delphius 31-01-2009 16:43:35

Hola rgstuamigo,
No tengo Delphi a mano, pero si no me falla la memoria, TApplication tiene una propiedad vectorial llamada Forms. Mediante esta se puede iterar y trabajar con los forms abiertos al momento:

Código Delphi [-]
Application.Forms[0]....;

Saludos,

rgstuamigo 31-01-2009 17:08:47

Hola Delphius , al parecer no existe esa propiedad que mencionas.:o

Delphius 31-01-2009 17:20:29

Perdón, Screen.Forms y con Screen.FormsCount.:D

Saludos,

rgstuamigo 31-01-2009 17:43:30

Ok Gracias amigo Delphius parece que funciona.
Pero mira la curiosidad que se me pego; ¿que tiene que ver Screen con los Form?:confused: a mi parecer la propiedad Forms deberia ser parte del objeto
Application:rolleyes: Bueno es cosa de mi nomas.:D
Otra cosa que me resulto curiosa fue que que el objeto Application tiene una propiedad Components que segun yo lo entendia que suponia que eran todos y absolutamente todos los componentes de la aplicacion ,claro esta por llamarse Application :rolleyes:pero al parecer no es asi si no que serian solo los formularios(vaya ¿no?¿quien entiende?) de la aplicasion claro con la excepcion de que el Components[0] no se sabe cual es, pues la unica diferencia que veo entre Screen.FormsCount y Application.ComponentCount seria (segun yo) que el segundo tiene uno mas,es decir aparte de tener todos los formularios tiene uno mas ¿Pero quien es es uno mas?, pues no lo se:o.
por que ni siquiera se puede saber su nombre ni para que se utiliza.
Yo lo probe con este codigo:
Código Delphi [-]
procedure TForm1.Button8Click(Sender: TObject);
var i:Byte;
begin
 for  i:=0  to Application.ComponentCount-1 do
  begin
  ShowMessage(Application.Components[i].Name);
 end;
end;
Seguro habra algun GURU que nos explique,;).
Saludos y muchas gracias....:)

Delphius 31-01-2009 17:58:17

Cita:

Empezado por rgstuamigo (Mensaje 336724)
Seguro habra algun GURU que nos explique,;).
Saludos y muchas gracias....:)

Si, seguro hay un GURU: se llama F1:);)

Saludos,

rgstuamigo 31-01-2009 18:00:57

Cita:

Si, seguro hay un GURU: se llama F1:);)
Je,je,je,je :):D:D.

Delphius 31-01-2009 18:35:39

Bueno, a modo de resumen la explicación simple es esta:

Application.Components[] Mantiene la referencia a todos los forms que existen para la aplicación.

SCreen.Forms[] Lista a todos los forms (descendientes de TForm) que fueron creados y están disponibles en el momento.

Ahora bien, el listado de los forms en SCreen.Forms está dado en función del orden Z, es decir: según como se van abriendo.

Saludos,


La franja horaria es GMT +2. Ahora son las 16:15:44.

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