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 abfragen ob mouse button down / EGAL wo die maus gerade ist? (https://www.delphipraxis.net/108468-abfragen-ob-mouse-button-down-egal-wo-die-maus-gerade-ist.html)

Cylence 14. Feb 2008 08:21


abfragen ob mouse button down / EGAL wo die maus gerade ist?
 
Hi,

ich habe eine sidebar programmiert, und für diese hätte ich es gerne das - wenn man am rand des bildschirms zb im explorer oder irgendeinem programm egal welches scrollt mit der maus, oder ein fenster verschiebt, die sidebar nicht ausfährt, weil eben ein button gedrückt ist von der maus, und die sidebar nur ausfährt wenn kein mausbutton gedrückt ist. ich hoffe ihr versteht was ich meine.

Also wie kann ich ermitteln ob ein mousebutton gedrückt ist, völlig unabhängig von der mauseposition und auch wenns eben nicht über meiner form ist. Ist das möglich? Ich habe schon einmal if (not mouse.isdragging) versucht aber das funktioniert leider nicht... gibts es etwas derartiges?


Hoffe mir kann jemand helfen...

Tom

SirThornberry 14. Feb 2008 08:27

Re: abfragen ob mouse button down / EGAL wo die maus gerade
 
mir ist keine Methode bekannt außer einen Hook zu verwenden. Du wirst zum Beispiel auch in einem Programm nie ein MouseUp bekommen wenn vorher kein MouseDown da war. Zumindest sind das meine Erfahrungen.

Cylence 14. Feb 2008 08:41

Re: abfragen ob mouse button down / EGAL wo die maus gerade
 
nein das will ich ja auch garnich, in dre sidebar ist ein timer der abfragt ob die maus am rand des bidlschirms is und wenn ja dann wird die sidebar eben ausgefahren. Aber wenn eben ein mausbutton down ist, dann soll ja die sidebar nich ausgefahren werden, weil sie dann ja garnich gewollt ist in dem moment, ich hab eben nochwas gefunden funzt aber auch nich...


Delphi-Quellcode:
  if ((Mous.X > (Screen.Width -2)) And (Playlistform.Left = Screen.Width)) then SlideNOWTimer.Enabled := True;
     if ((Mous.X < (Screen.Width -(Playlistform.ClientWidth))) AND (Playlistform.Left = (Screen.Width -(Playlistform.ClientWidth)))) then begin
     if (not Popupopen) and [b](GetKeyState(1)= 0)[/b] then begin
        SlideNOWTimer.Enabled := True;
        Exit;
     end;
  end;

das getkeystate(1) soll angeblich den zustand des mousebuttons angeben 0 nicht pressend 1 pressed, geht aber auch nich...

Cylence 14. Feb 2008 08:43

Re: abfragen ob mouse button down / EGAL wo die maus gerade
 
ok ich dämlich, habs an der falschen stelle eingebaut, also genau so gehts tatsächlich...

(GetKeyState(1)= 0)

sagt mir button is nich down also los gehts...

noch besser ist:

(GetAsyncKeyState(1)= 0)

und beim start der function/Prozedur einmal

GetAsyncKeyState(1)


falls es mal jemand braucht so klappts jetzt bei mir

Luckie 14. Feb 2008 09:33

Re: abfragen ob mouse button down / EGAL wo die maus gerade
 
Mal so aus dem Kopf, ich bin in der Schule, guck mal, ob dir MSDN-Library durchsuchenSetCapture eventuell weiterhilft. Aber ich glaube, das funktioniert nur, wenn dein Programm aktiv ist.

Cylence 14. Feb 2008 10:22

Re: abfragen ob mouse button down / EGAL wo die maus gerade
 
Hi,

danke danke, aber ich habs ja schon, (GetAsyncKeyState(1)= 0) funktioniert genau wie ich es will...

Gruß

tom

SirThornberry 14. Feb 2008 14:46

Re: abfragen ob mouse button down / EGAL wo die maus gerade
 
warum eigentlich GetAsyncKeyState und nicht GetKeyState? Ich dachte so ein Verhalten wie bei AsyncKeyState ist genau das was du nicht willst.
Anstelle der 1 wäre es auch besser du verwendest die entsprechenden Konstanten (VK_LBUTTON,...) und vor allem diesen Absatz aus der Hilfe beachten!

Zitat:

The GetAsyncKeyState function works with mouse buttons. However, it checks on the state of the physical mouse buttons, not on the logical mouse buttons that the physical buttons are mapped to. For example, the call GetAsyncKeyState(VK_LBUTTON) always returns the state of the left physical mouse button, regardless of whether it is mapped to the left or right logical mouse button. You can determine the system's current mapping of physical mouse buttons to logical mouse buttons by calling
GetSystemMetrics(SM_SWAPBUTTON)

which returns TRUE if the mouse buttons have been swapped.

Cylence 14. Feb 2008 15:14

Re: abfragen ob mouse button down / EGAL wo die maus gerade
 
Hi,

ich hab es einmal mit GetKeyState versucht und da scheint es nich immer auf dem aktuellen stand zu sein, ich hab auch was gelesen das das nur angibt ob die taste seit dem letzten mal gedrückt wurde oder so ähnlich hat damit jedenfalls nich richtig funktioniert...

Mit GetAsyncKeyState klappts jetzt wunderbar genau das verhalten das ich wollte, die sidebar fährt nur noch aus, wenn die maustaste nicht gedrückt ist. und das is ja das verhalten was ich wollte. so das wenn man eben zb in nem anderen fenster rumscrollt oder ein fenster verschiebt oder so. die sidebar nicht reagiert.

Naja und das ich einfach 1 nimm kommt denk ich aufs selbe raus weil VK_LBUTTON ist ja 1 also machts keinen unterschied eigentlich... ich hatte das halt so gefunden online irgendwo...darum hab ichs mal so gepostet hier. Is denk ich aber auch nicht falsch so.

ok aber das andere was du mir noch geschrieben hast werde ich noch einbauen, ich kenn zwar niemand der die buttons vertauscht hat, aber das kann ich ja noch mit einbauen.

Danke Dir für Deine Info.

Gruß

tom


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 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