Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #4  
Antiguo 19-02-2010
Avatar de DriverOp
DriverOp DriverOp is offline
Miembro
 
Registrado: ago 2007
Posts: 93
Poder: 19
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
 



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 21:14:44.


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