![]() |
Re: Maus in Fenster halten
ich habe es jetzt per timer gelöst. Intervall alle 0,1 sekunde. Ist zwar nicht die beste Lösung, funktioniert aber.
Delphi-Quellcode:
Hat jemand noch ne Verbesserungsmöglichkeit (außer Hook)?
procedure Mousefreeze (wHandle : HWND);
var Rect : TRect; begin GetWindowRect(wHandle, Rect); //Die Werte dann eventuell etwas anpassen Rect.Left:=Rect.Left+10; Rect.Right:=Rect.Right-20; Rect.Top:=Rect.Top+30; Rect.Bottom:=Rect.Bottom-10; ClipCursor(@Rect); end; procedure TForm1.Button1Click(Sender: TObject); var Result : string; Rect : TRect; begin Result := inputbox('Handle finden', 'Geben Sie bitte den Namen des Fensters ' + 'ein, von dem das Window-Handle ermittelt werden soll.',''); wHandle := FindWindowByTitle(Result); if wHandle <> 0 then // if we found the Window-Handle begin ShowMessage('Window-Handle found'); // ShowWindow(h, SW_Maximize); Mousefreeze(wHandle); Timer1.Enabled := true; end else ShowMessage('not found.'); end; procedure TForm1.Timer1Timer(Sender: TObject); begin Mousefreeze(wHandle); end; |
Re: Maus in Fenster halten
Versuch mal den Fensterclassennamen also nicht den Fenstertitel des Games herrauszufinden.
zB. mit ![]() Nutze danach Findwindow mit beiden Parametern. |
Re: Maus in Fenster halten
Delphi-Quellcode:
warum sagt er mir hier als Fehler: Zu viele Parameter?
procedure TfrmMain.Mousefreeze (wHandle : HWND);
var Rect : TRect; begin GetClientRect(wHandle, Rect); //Die Werte dann eventuell etwas anpassen //Rect.Left:=Rect.Left+vLeft; //Rect.Right:=Rect.Right-vRight; //Rect.Top:=Rect.Top+vTop; //Rect.Bottom:=Rect.Bottom-vBottom; ClipCursor(@Rect); end; ![]() |
Re: Maus in Fenster halten
aber hier ist es anders deklariert :zwinker:
Delphi-Quellcode:
Was dort die gloable Variable war, ist bei dir die globale Funktion aus der Windows.pas:
function TCustomForm.GetClientRect: TRect;
![]() Und darum paßt hierzu auch diese Antwort: Zitat:
|
Re: Maus in Fenster halten
dann müsste es doch eigentlich so sein oder?
Delphi-Quellcode:
trotzdem: Zu viele Parameter
procedure TfrmMain.Mousefreeze (wHandle : HWND);
var Rect : TRect; begin Rect := GetClientRect(wHandle); //Die Werte dann eventuell etwas anpassen //Rect.Left:=Rect.Left+vLeft; //Rect.Right:=Rect.Right-vRight; //Rect.Top:=Rect.Top+vTop; //Rect.Bottom:=Rect.Bottom-vBottom; ClipCursor(@Rect); end; |
Re: Maus in Fenster halten
entweder: Rect := Self.GetClientRect();
oder: Windows.GetClientRect(Handle,Rect); |
Re: Maus in Fenster halten
DIESES GetClientRect liefert nur das ClientRect von der Form
und es möchte eben keine Parameter haben, denn es weiß ja was es will und braucht dieses nicht mitgeteilt zu bekommen. In diesem Fall wäre die Angabe eines Namespace recht hilfreich.
Delphi-Quellcode:
Windows.GetClientRect(wHandle, Rect);
|
Re: Maus in Fenster halten
Qualifizier den Aufruf doch einfach.
Delphi-Quellcode:
[edit] :oops: 2. Seite übersehen [/edit]
procedure TfrmMain.Mousefreeze (wHandle : HWND);
var Rect : TRect; begin Windows.GetClientRect(wHandle, Rect); //Unit davorschreiben //Die Werte dann eventuell etwas anpassen //Rect.Left:=Rect.Left+vLeft; //Rect.Right:=Rect.Right-vRight; //Rect.Top:=Rect.Top+vTop; //Rect.Bottom:=Rect.Bottom-vBottom; ClipCursor(@Rect); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz