PDA

Ver la Versión Completa : Obtener el ancho y alto de la ventana


SaraTorres
02-10-2017, 06:35:30
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, (https://www.clubdelphi.com/foros/showthread.php?t=54778) 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:


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):


var
VMess : HWND;


Debería resultar algo así:

https://s26.postimg.org/51w6sb3k9/Ejemplo.gif

SaraTorres
02-10-2017, 14:31:42
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 (https://msdn.microsoft.com/es-es/library/windows/desktop/ms633503(v=vs.85).aspx).
Sustituye el código anterior por este:

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 <Notepad> no encontrada';
end;


Si repites el ejemplo obtendrás esto:

https://s26.postimg.org/quowcfb9l/Captura_2551.png


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
Puedes utilizar...
Eres un Neftalí... gracias por tu gran apoyo a la comunidad.
Muchos saludos