Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Obtener coordenadas relativas de la ventana por posicion (https://www.clubdelphi.com/foros/showthread.php?t=95048)

aguml 02-02-2021 21:08:49

Obtener coordenadas relativas de la ventana por posicion
 
Buenas, el titulo no creo que sea todo lo correcto.
Lo que tengo es una pequeña aplicación con la que obtengo las coordenadas de un boton dentro de una ventana, o sea, me voy desplazando por la ventana y voy viendo las coordenadas desde el lado derecho y superior de la ventana pero cuando me coloco encima de cualquier componente las coordenadas pasan a ser relativas a ese componente, o sea, toma como inicio la esquina superior izquierda del componente.
Eso esta bien pero quiero que no tome las coordenadas del boton, sino que me muestre solo las de la ventana aunque esté encima de un boton o lo que sea, solo de la ventana principal del proceso en el que esté el cursor. No se si me explico bien.
Ahora mismo tengo esto:
Código PHP:

void __fastcall TForm1::TimerTimer(TObject *Sender)
{
   
//Detengo el timer mientras se realizan las operaciones
   
Timer->Enabled false;

   
//Compruebo si tengo pulsada alguna de las dos teclas Ctrl
   //Si es así entro
   
if(CtrlDown() == true){
      
char nameClass[MAX_CLASS_NAME];
      
char nameWnd[512];
      
HWND hWnd;
      
int retval;
      
tagPOINT coordenadas;

      
//Obtengo la posicion del puntero
      
GetCursorPos(&coordenadas);

      
//Obtengo el hwnd de la ventana o componente sobre el que estoy situado
      
hWnd WindowFromPoint(coordenadas);

      
//Obtengo las coordenadas relativas a la ventana
      
RECT rect;
      
GetWindowRect(hWnd,&rect);
      
coordenadasRelativas.x=coordenadas.rect.left;
      
coordenadasRelativas.y=coordenadas.rect.top;
      
LabelCoorRelX->Caption coordenadasRelativas.x;
      
LabelCoorRelY->Caption coordenadasRelativas.y;
   }
   
Timer->Enabled true;



escafandra 06-02-2021 17:09:13

Prueba buscando el Parent:

Código PHP:

void __fastcall TForm1::TimerTimer(TObject *Sender)
{
   
//Detengo el timer mientras se realizan las operaciones
   
Timer->Enabled false;

   
//Compruebo si tengo pulsada alguna de las dos teclas Ctrl
   //Si es así entro
   
if(CtrlDown() == true){
      
char nameClass[MAX_CLASS_NAME];
      
char nameWnd[512];
      
HWND hWnd;
      
int retval;
      
tagPOINT coordenadas;

      
//Obtengo la posicion del puntero
      
GetCursorPos(&coordenadas);

      
//Obtengo el hwnd de la ventana o componente sobre el que estoy situado
      
hWnd WindowFromPoint(coordenadas);
      while(
GetParent(hWnd)) hWnd GetParent(hWnd); // <<------------------

      //Obtengo las coordenadas relativas a la ventana
      
RECT rect;
      
GetWindowRect(hWnd, &rect);

      
coordenadasRelativas.coordenadas.rect.left;
      
coordenadasRelativas.coordenadas.rect.top;

      
LabelCoorRelX->Caption coordenadasRelativas.x;
      
LabelCoorRelY->Caption coordenadasRelativas.y;
   }
   
Timer->Enabled true;  


Saludos.

aguml 06-02-2021 19:06:21

Wow lo pruebo el lunes y te digo que tal pero la verdad es que es algo tan sencillo que me jode bastante que no se me ocurrieron 😅

aguml 08-02-2021 13:10:11

Fue perfecto, gracias.


La franja horaria es GMT +2. Ahora son las 09:23:40.

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