Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Cursor im fremden Client zentrieren (https://www.delphipraxis.net/133707-cursor-im-fremden-client-zentrieren.html)

LDericher 7. Mai 2009 10:03


Cursor im fremden Client zentrieren
 
Hallo nochmal, einen hab ich doch noch ;)

Die Funktion GetClientRect liefert ja für die obere linke Ecke eines Fenster-Clients (0|0).
Kann ich diese Koordinaten irgendwie umrechnen auf absolute Koordinaten?
Ich muss irgendwie den Border vom Fenster miteinbeziehen, wenn ich den Cursor exakt in die Clientmitte setzen will...

Das Fenster ist nicht von mir. Bisher arbeite ich mit dem gesamten Fenster (mit Border), was allerdings bei der Y-Koordinate zu Fehlern führt...
Na ja, vielleicht kann mir ja jemand helfen ;)

LDer.

DeddyH 7. Mai 2009 10:50

Re: Cursor im fremden Client zentrieren
 
GetWindowRect gibt Dir doch die Screen-Koordinaten zurück. Somit solltest Du beide Rechtecke miteinander verrechnen können. Ggf. müsstest Du die fehlenden Faktoren (Höhe der Titelleiste, Rahmenbreite etc.) noch mit GetSystemMetrics oder SystemParametersInfo holen.

LDericher 7. Mai 2009 11:03

Re: Cursor im fremden Client zentrieren
 
Hab mir jetz selbst was gebaut:

Delphi-Quellcode:
type
  TWindowStruct=record
    Left,
    Top,
    Width,
    Height:integer;
    end;

function GetClientRectAbs(InHandle:HWND):TWindowStruct;
var
  cliRect,
  wndRect:TRect;
  bWidth,
  bHeight:integer;
begin
if(InHandle<>0)then
  begin
  GetWindowRect(InHandle, wndRect);
  Windows.GetClientRect(InHandle, cliRect);
  if(wndRect.Top+cliRect.Bottom<>wndRect.Bottom)then
    begin
    bWidth:=(wndRect.Right-wndRect.Left-cliRect.Right)div 2;
    bHeight:=wndRect.Bottom-wndRect.Top-cliRect.Bottom-bWidth;
    end else
    begin
    bWidth:=0;
    bHeight:=0;
    end;
  Result.Left:=wndRect.Left+bWidth+1; //Lieber ein-zwei Pixel verlieren, als das Zielfenster verlassen!
  Result.Top:=wndRect.Top+bHeight+1;
  Result.Width:=cliRect.Right-2;
  Result.Height:=cliRect.Bottom-2;
  end else
  begin
  Result.Left:=0;
  Result.Top:=0;
  Result.Width:=0;
  Result.Height:=0;
  end;
end;
Trotzdem Danke! Dachte halt, es ginge einfacher...

Der LDer.

hathor 7. Okt 2009 11:01

Re: Cursor im fremden Client zentrieren
 
Guckst Du hier:
http://www.delphipraxis.net/internal...=908998#908998


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz