Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-02-2010
Avatar de principiante22
principiante22 principiante22 is offline
Miembro
 
Registrado: nov 2006
Ubicación: Santo Domingo - Rep.Dom.
Posts: 90
Poder: 18
principiante22 Va por buen camino
Lista de formularios activos

Saludos Club,

Hay alguna lista de los formularios que están visibles organizada por el orden de visibilidad de los formularios?

Por ejemplo, si tengo este código:

Código Delphi [-]
Form3.Show; 
Form1.Show; 
From2.Show;

Hay alguna forma de saber que el form1 está delante del form3? No puede ser con el Screen.ActiveForm porque este me daría el form2 y no es lo que necesito.

Lo que quiero es tener un formulario delante de todos los demás de la aplicación pero no delante de las demás aplicaciones. Se les ocurre alguna forma?

Bueno, espero haberme explicado bien.

Gracias de antemano.
__________________
Att: ΓħΞ ŘēąĿ βļåķΣ
Responder Con Cita
  #2  
Antiguo 19-02-2010
cocute cocute is offline
Miembro
 
Registrado: nov 2008
Posts: 403
Poder: 16
cocute Va por buen camino
no entiendo bien lo que quieres hacer porque primero dices que quieres saber que form esta delante y luego que quieres que un determinado form esté delante, si es esto último quizas con esto:
Form1.BringToFront;
Responder Con Cita
  #3  
Antiguo 19-02-2010
Avatar de principiante22
principiante22 principiante22 is offline
Miembro
 
Registrado: nov 2006
Ubicación: Santo Domingo - Rep.Dom.
Posts: 90
Poder: 18
principiante22 Va por buen camino
Saludos cocute, esto me traerá al form1, pero no es eso lo que quiero. Lo que quiero es, si los tres formularios están visibles, cúal es el orden en que están presentandose.

Por ejemplo, con el mismo código que plantee al principio:

Código Delphi [-]
Form3.Show; 
Form1.Show; 
Form2.Show;

Esto me dará el siguiente orden de visibilidad:

1- Form2
2- Form1
3- Form3

Pero si le doy clic al form1, me dará el siguiente orden:

1- Form1
2- Form2
3- Form3

Lo que necesito saber es si el form2 está delante del form3.

Espero haberme explicado mejor.
__________________
Att: ΓħΞ ŘēąĿ βļåķΣ
Responder Con Cita
  #4  
Antiguo 19-02-2010
Avatar de DriverOp
DriverOp DriverOp is offline
Miembro
 
Registrado: ago 2007
Posts: 93
Poder: 17
DriverOp Va por buen camino
Creo que lo tengo.

En el fondo, lo que tú quieres saber es el z-order de las ventanas actualmente mostradas. El z-order es el orden en el que están "apiladas" las ventanas en la pantalla. Siendo la que está "arriba de todo" la ventana con el z-order cero y así en orden creciente hasta la última.

La API de Windows tiene dos funciones para saber el z-order de las ventanas, por el momento pude determinar el z-order de todas las ventanas abiertas (la de la aplicación actual y las del resto de las aplicaciones) usando estas dos funciones:

GetTopWindow() devuelve el handle de la ventana con z-order cero si le pasas cero como parámetro:

Código Delphi [-]
var
  h: hwnd;
begin
  h:=GetTopWindow(0);
...

Luego:
GetNextWindow() devuelve la siguiente ventana según su z-order del handle que le pasas como parámetro, el segundo parmámetro sirve para indicarle la dirección en la que quieres recorrer el z-order:

Código Delphi [-]
var
  h: hwnd;
begin
  h:=GetTopWindow(0);
  while h <> 0 do
    begin
       h := GetNextWindow(h,GW_HWNDNEXT);
    end;

Lo que hago aquí es obtener el handle de la ventana "arriba de todo" y luego entro al ciclo en el que recorro todas las ventanas hasta abajo de la pila de ventanas. La última ventana no tiene una ventana siguiente y la función GetNextWindow devuelve cero, con lo que finaliza el ciclo.

Código Delphi [-]
var
  h: hwnd;
  z: integer;
begin
  Memo1.Lines.Clear;
  h:=GetTopWindow(0);
  z:=0;
  while h <> 0 do
    begin
      if h = Form1.Handle then
        Memo1.Lines.Add(IntToStr(z)+' Es el form1.');
      if h = Form2.Handle then
        Memo1.Lines.Add(IntToStr(z)+' Es el form2.');
      if h = Form3.Handle then
        Memo1.Lines.Add(IntToStr(z)+' Es el form3.');
      h := GetNextWindow(h,GW_HWNDNEXT);
      inc(z);
    end;
end;

Este sería el código con el que podrías comenzar a experimentar. La variable z te dirá el z-order de las ventanas.
Responder Con Cita
  #5  
Antiguo 20-02-2010
Avatar de principiante22
principiante22 principiante22 is offline
Miembro
 
Registrado: nov 2006
Ubicación: Santo Domingo - Rep.Dom.
Posts: 90
Poder: 18
principiante22 Va por buen camino
Esto era exactamente lo que necesitaba

Todavía no lo he probado pero eso era lo que necesitaba. Muchas gracias
__________________
Att: ΓħΞ ŘēąĿ βļåķΣ
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Componentes activos de una red Indira Redes 0 06-12-2007 17:35:35
Form activos lalo Varios 0 13-01-2005 14:21:53
lista de formularios jpep Varios 10 26-07-2003 12:48:11
Ver temas activos de Hoy andres1569 Varios 5 20-06-2003 00:15:06


La franja horaria es GMT +2. Ahora son las 18:50:15.


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
Copyright 1996-2007 Club Delphi