Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Maus in Fenster halten (https://www.delphipraxis.net/143405-maus-fenster-halten.html)

MaToBe 15. Nov 2009 17:06

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:
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;
Hat jemand noch ne Verbesserungsmöglichkeit (außer Hook)?

turboPASCAL 15. Nov 2009 18:44

Re: Maus in Fenster halten
 
Versuch mal den Fensterclassennamen also nicht den Fenstertitel des Games herrauszufinden.
zB. mit Hier im Forum suchenEDA oder [google]WinSpy++[/google] diesen herauszufinden. der Fenstertitel ist nicht immer eindeutig.

Nutze danach Findwindow mit beiden Parametern.

MaToBe 13. Feb 2010 09:58

Re: Maus in Fenster halten
 
Delphi-Quellcode:
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;
warum sagt er mir hier als Fehler: Zu viele Parameter?

Hier ist es doch so definiert oder?

himitsu 13. Feb 2010 10:02

Re: Maus in Fenster halten
 
aber hier ist es anders deklariert :zwinker:
Delphi-Quellcode:
function TCustomForm.GetClientRect: TRect;
Was dort die gloable Variable war, ist bei dir die globale Funktion aus der Windows.pas:
http://www.delphipraxis.net/internal...ghlight=global

Und darum paßt hierzu auch diese Antwort:
Zitat:

PS: TDE zeigt sogar an wo und wie das "Position" deklariert wurde.
Dort hätte man mal zuerst nachsehen sollen, als dieses Problem auftrat.

MaToBe 13. Feb 2010 10:11

Re: Maus in Fenster halten
 
dann müsste es doch eigentlich so sein oder?
Delphi-Quellcode:
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;
trotzdem: Zu viele Parameter

implementation 13. Feb 2010 10:20

Re: Maus in Fenster halten
 
entweder: Rect := Self.GetClientRect();
oder: Windows.GetClientRect(Handle,Rect);

himitsu 13. Feb 2010 10:23

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

DeddyH 15. Feb 2010 10:49

Re: Maus in Fenster halten
 
Qualifizier den Aufruf doch einfach.
Delphi-Quellcode:
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;
[edit] :oops: 2. Seite übersehen [/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:47 Uhr.
Seite 2 von 2     12   

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