Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Obtener el ancho y alto de la ventana (https://www.clubdelphi.com/foros/showthread.php?t=92328)

SaraTorres 02-10-2017 06:35:30

Obtener el ancho y alto de la ventana
 
Hola chicos
Me he matado buscando cómo usar la función: GetWindowRect()
lo que pasa es que quiero obtener el ancho y alto de la ventana
pero no logro hacerlo. Sólo puedo obtener las coordenadas pero no el tamaño.

Si alguien me comparte el código, se lo agradecería de antemano.
Cuídense :)

Neftali [Germán.Estévez] 02-10-2017 12:57:47

A partir de la solución que se muestra por ejemplo en este hilo, puedes hacer algo como esto:

1) Crea un proyecto VCL nuevo
2) Coloca un Timer
3) Programa los eventos OnCreate y OnTimer con lo siguiente:

Código Delphi [-]
procedure TForm2.FormCreate(Sender: TObject);
begin
  VMess := FindWindow('Notepad', nil);
  Timer1.Interval := 50;
end;

procedure TForm2.Timer1Timer(Sender: TObject);
var
  Tam: TRect;
begin
  if vMess <> 0 then begin
    GetWindowRect(VMess, Tam);
    Self.Caption := 'Posición: ' + InttoStr(Tam.Left) + ' ; ' + IntToStr(Tam.Top) + ' - '
                    +'Tamaño: ' + IntToStr(Tam.Right - Tam.Left) + 'x' + IntToStr(Tam.Bottom - Tam.Top);
  end
end;

4) La variable debe estar definida como (global o como propiedad):

Código Delphi [-]
var
  VMess : HWND;

Debería resultar algo así:


SaraTorres 02-10-2017 14:31:42

Dimensiones diferentes
 
Cita:

Empezado por Neftali (Mensaje 521422)
A partir de la solución que se muestra por ejemplo en este hilo, puedes hacer algo como esto:

Muchas gracias Neftali
El código funciona pero tengo una ventana de 640x480 y las nuevas
dimensiones que me da son: 656x519

Hay alguna manera para conseguir sólo el área de la ventana (client area)?
Saludos

Neftali [Germán.Estévez] 02-10-2017 15:25:44

Puedes utilizar la API GetClientRect.
Sustituye el código anterior por este:
Código Delphi [-]
  if vMess <> 0 then begin
    GetWindowRect(VMess, Tam);
    Self.Caption := 'Posición: ' + InttoStr(Tam.Left) + ' ; ' + IntToStr(Tam.Top) + ' - '
                    +'Tamaño: ' + IntToStr(Tam.Right - Tam.Left) + 'x' + IntToStr(Tam.Bottom - Tam.Top);

    WINAPI.Windows.GetClientRect(VMess, TamClient);
    Self.Caption := Self.Caption + ' -  Cliente => ' +
                    'Posición: ' + InttoStr(TamClient.Left) + ' ; ' + IntToStr(TamClient.Top) + ' - '
                    +'Tamaño: ' + IntToStr(TamClient.Right - TamClient.Left) + 'x' + IntToStr(TamClient.Bottom - TamClient.Top);

  end
  else begin
    Self.Caption := 'Ventana de  no encontrada';
  end;

Si repites el ejemplo obtendrás esto:




Para una ventana de 640x480 su área cliente es: 624x421, que parece bastante lógico.
La diferencia de ancho son 16 pixels (de los bordes decho e izquierdo) y la diferencia de alto es 59 (del borde inferior y del título y del menú).

SaraTorres 02-10-2017 17:01:49

Cita:

Empezado por Neftali (Mensaje 521428)
Puedes utilizar...

Eres un Neftalí... gracias por tu gran apoyo a la comunidad.
Muchos saludos


La franja horaria es GMT +2. Ahora son las 23:14:13.

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