Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ShiftState bei MouseMove (https://www.delphipraxis.net/35233-shiftstate-bei-mousemove.html)

Alter Mann 4. Dez 2004 09:30


ShiftState bei MouseMove
 
Hallo,

wie kann ich erkennen welche Maustaste bereits gedrückt ist, wenn die Maus über eine Componente gezogen wird?
Die Auswertung des ShiftState in MouseMove bringt nichts, da ShiftState durch MouseDown gesetzt wird.
Die Maustaste wurde ausserhalb gedrückt und anschließen über die Componente bewegt, daher ist ShiftState in
MouseMove = 0.
Wie kann also erkennen welche Maustaste gedrückt ist?

jbg 4. Dez 2004 09:35

Re: ShiftState bei MouseMove
 
Zitat:

Zitat von Alter Mann
Die Auswertung des ShiftState in MouseMove bringt nichts, da ShiftState durch MouseDown gesetzt wird.

Wei denn das?

Zitat:

Die Maustaste wurde ausserhalb gedrückt und anschließen über die Componente bewegt, daher ist ShiftState in MouseMove = 0.
Hast du die Maustaste aus der Maus herausgebrochen? :lol:

Zitat:

Wie kann also erkennen welche Maustaste gedrückt ist?
Also normalerweise reicht mir da ein "if ssLeft in ShiftState", aber wenn das angeblich nicht funktioniert, was ich mir jetzt gar nicht vorgstellen kann, dann könntest du in MouseDown eine Variable auf die Maustaste setze und bei MouseUp den Inhalt der Variable löschen.

Sharky 4. Dez 2004 09:35

Re: ShiftState bei MouseMove
 
Zitat:

Zitat von Alter Mann
...Wie kann also erkennen welche Maustaste gedrückt ist?

Hai,
Du könntest Dir in einer Variablen merken wie der Status der Maustasten ist und diese dann im MouseMove auswerten.

Alter Mann 4. Dez 2004 10:05

Re: ShiftState bei MouseMove
 
Ich habe mich wahrscheinlich undeutlich ausgedrückt. Es soll so funktionieren wie im Explorer, dort können Datei ausgewählt werden, in dem die linke Maustaste gedrückt wird und anschließend die Dateien mittels 'MouseMove' auswählt werden.
Es geht also darum zuerkennen welche Maustaste oder Keyboard-Taste gedrückt ist bevor die Maus über die Componente gezogen wird. So etwas wie WM_GETMOUSEKEY und anschließend prüfen ob die Maus sich über der Componente befindet.

jim_raynor 4. Dez 2004 10:08

Re: ShiftState bei MouseMove
 
Besser ist glaube GetKeyState(VK_LBUTTON)<0. Das kleiner 0 muss sein, da die Bits im Rückgabewert ganz merkwürdig gesetzt werden ;)

Alter Mann 4. Dez 2004 10:13

Re: ShiftState bei MouseMove
 
Ok, GetKeyState hört sich gut an.

Benötige nur noch einen Tipp wie ich erkennen kann, ob die Maus über die Komponente gezogen wird.
MouseMove wird nähmlich nicht ausgelöst, sobald eine Taste (Maus oder Tastatur) gedrückt ist.

TStringlist 4. Dez 2004 10:26

Re: ShiftState bei MouseMove
 
wegen der Maus-Capture feuert natürlich auch immer nur das MouseMove-Event von demjenigen Control, auf welchem du auch MouseDown ausgeführt hast. Du müsstest also immer dort kontrollieren, wo die Maus gerade ist ...was wohl schlecht möglich ist. Bleibt also dieses entweder per Timer zu machen oder per MouseHook, imo.

Alter Mann 4. Dez 2004 10:28

Re: ShiftState bei MouseMove
 
Ich danke Euch, werde es mit dem MausHook versuchen.

Schönes Wochenende. :wink:


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