Delphi-PRAXiS
Seite 1 von 2  1 2      

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 12:06


Maus in Fenster halten
 
Guten Tag,

mein Ziel ist etwas komisch. Ich möchte Wacraft III im Fenster-Modues spielen, um ab und an auch noch etwas chatten zu können. Außerdem fummel ich gern rum und es macht mir Spaß sowas umzusetzten, deshalb folgende Fragen:

1. Ich habe es geschafft, dass der Cursor nach dem klick auf meinen Button nur noch im Wacraft III Fenster bewegt werden kann. (Siehe Code) Allerdings geht das nur solange, solange ich NIRGENDS auf meinem Desktop hinklicke, nach dem ersten klick, egal wo hin ist die Wirkung aufgehoben. Warum?

Delphi-Quellcode:
procedure Mousefreeze (wHandle : HWND);
var Rect : TRect;
begin
  GetWindowRect(wHandle, Rect);
  ClipCursor(@Rect);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  h: hwnd;
  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.','');
  h := FindWindowByTitle(Result);
  if h <> 0 then // if we found the Window-Handle
  begin
    ShowMessage('Window-Handle found');
//    ShowWindow(h, SW_Maximize);
    Mousefreeze(h);
  end
  else
    ShowMessage('not found.');
end;
2. Leider kann man mit dieser Methode zwar nicht außerhalb des Fenstes mit der Maus agieren, aber die Windows-Balken wie zB Maximieren und Minimieren sind weiterhin erreichbar. Wie schaffe ich es, dass die Maus wirklich im Fenster und nicht nur "auf dem Fenster" bleibt? Das quasi nur der Inhalt, aber nicht das eigentliche Fenster erreibar ist?

MFG

DeddyH 15. Nov 2009 12:12

Re: Maus in Fenster halten
 
Zu 2: versuch es mal mit GetClientRect statt GetWindowRect.

MaToBe 15. Nov 2009 12:40

Re: Maus in Fenster halten
 
Mit GetClientRect nimmt er sich irgendwie immer den ganzen Desktop und dann da etwa von (0/0) bis zu (500/500)... funktioniert also nicht.

€: Die ganzen Probleme liegen nicht daran, dass ich es an einem Spiel ausprobiere. Zu testzwecken verwende ich immer NotePad und dort geht es nicht.

Neutral General 15. Nov 2009 13:01

Re: Maus in Fenster halten
 
Zitat:

Zitat von MaToBe
Mit GetClientRect nimmt er sich irgendwie immer den ganzen Desktop und dann da etwa von (0/0) bis zu (500/500)... funktioniert also nicht.

€: Die ganzen Probleme liegen nicht daran, dass ich es an einem Spiel ausprobiere. Zu testzwecken verwende ich immer NotePad und dort geht es nicht.

Naja du hast das ClientRect ja... Du musst es nur auf die Position des Fensters umrechnen ;)

lbccaleb 15. Nov 2009 13:08

Re: Maus in Fenster halten
 
Zu 1 :lol:

Also bei dem Problem wirst du wohl an einem Maus Hook nicht vorbeikommen!

Progman 15. Nov 2009 13:39

Re: Maus in Fenster halten
 
Das Rect "per Hand" berechnen.
Delphi-Quellcode:
h.Left:=MainForm.Left+10;
h.Top:=MainForm.Top+50;
h.Right:=h.Left+MainForm.Width-20;
h.Bottom:=h.Top+MainForm.ClientHeight-60;
Und dann eben bissel probieren, bis es so ist, wie man möchte.
So mach ich das immer beim eigenen Fenster ;)
Und diese Methode eben auf h anwenden, in dem man h etwas verkleinert.

MaToBe 15. Nov 2009 15:18

Re: Maus in Fenster halten
 
Zitat:

Zitat von lbccaleb
Zu 1 :lol:

Also bei dem Problem wirst du wohl an einem Maus Hook nicht vorbeikommen!

kann mir jemand das mit dem Mouse Hook erklären?

Progman 15. Nov 2009 16:23

Re: Maus in Fenster halten
 
Warum nicht so:
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;
Das ist die einfachste Variante und man brauch nicht extra einen Hook ;)

MaToBe 15. Nov 2009 16:32

Re: Maus in Fenster halten
 
doch scheinbar schon...

das funktioniert einwandfrei, sobald ich aber irgendwo hinklicke verliert der code seine wirkung und die maus ist wieder offen...

lbccaleb 15. Nov 2009 17:03

Re: Maus in Fenster halten
 
Such mal hier im Forum und per Google, dort sollte es ne menge Tuts geben.
Ich kann dir da auch nicht so weiter Helfen, bin auch nicht sehr Informiert in dem Thema.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 Uhr.
Seite 1 von 2  1 2      

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