Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Tamaño de Ventana de Windows (https://www.clubdelphi.com/foros/showthread.php?t=54778)

pai_delpher 30-03-2008 20:52:54

Tamaño de Ventana de Windows
 
Saludos a todos en la comunidad.

Quiero saber la posición de una ventana de windows (la ventana del Windows Live Messenger), investigando supe de varias funciones de la API:

GetWindowPlacement y GetWindowRect

Ya probé con este código y variaciones en los Left, Right, Top y Bottom, pero no me muesta las coordenadas reales, no entiendo en que se basan las posiciones que recibo, por favor ayudenme a enterder como funcionan estas funciones.

Código Delphi [-]
Var
 VMess : HWND;
 Tam   : TRect;
 H, W  : Integer;
 Lugar : WindowPlacement;

begin
VMess := FindWindow(nil, 'Windows Live Messenger');
GetWindowRect(VMess, Tam);
//W := Tam.Right - Tam.Left;
//H := Tam.Bottom - Tam.Top;
//Lugar.length := sizeof(Lugar);
GetWindowPlacement(VMess, @Lugar);
W := Lugar.rcNormalPosition.Right - Lugar.rcNormalPosition.Bottom;
H := Lugar.rcNormalPosition.Left - Lugar.rcNormalPosition.Top;
Button1.Caption := IntToStr(W) + ' ; '+ IntToStr(H);
//Form1.Caption :=

Como verán lo intente de varias formas, pero no logro sacarlo. Mi objetivo es obtener la posición al iniciar y actualizala al moverla.

Desde ya Muchas Gracias.

PeterPunk 31-03-2008 12:07:43

Código Delphi [-]
 
var
  VMess : HWND;
procedure TForm1.FormCreate(Sender: TObject);
begin
  VMess := FindWindow(nil, 'Windows Live Messenger');
  Timer1.Interval := 50;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
  Tam: TRect;
begin
  if vMess <> 0 then
    begin
      GetWindowRect(VMess, Tam);
      Form1.Caption := 'Posición: ' + InttoStr(Tam.Left) + ' ; ' + IntToStr(Tam.Top) + ' - '
                      +'Tamaño: ' + IntToStr(Tam.Right - Tam.Left) + 'x' + IntToStr(Tam.Bottom - Tam.Top);
    end
end;
Saqué el FindWindow del timer para que no lo ejecutase case 50 milisegundos, pero si se cierra y abre el Windows Live Messenger mientras tu programa esté activo será mejor que lo vuelvas a meter.

pai_delpher 31-03-2008 12:20:11

Muchas gracias, de todas formas, ya me había dado cuenta del Left y Top. Me funcionó correctamente.

En relación al Timer mi idea era usar un evento de la API que me indique cuando la ventana es movida, más que nada por la lentitud y perdida de memoria innecesaria.

Desde ya muchas gracias por responder.

Saludos.


La franja horaria es GMT +2. Ahora son las 09:37:31.

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