TShiftState-Äquivalent für übrige Tasten

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
mulcheo
Beiträge: 57
Registriert: Do 1. Aug 2013, 15:11

TShiftState-Äquivalent für übrige Tasten

Beitrag von mulcheo »

Hi,

ich möchte in meinem MouseDown Event prüfen, ob während des Mausclicks ein bestimmter Key gedrückt wird. Für alle Steuerungstasten kann ich ja TShiftState verwenden, also etwa für [Alt]:

Code: Alles auswählen

if (ssAlt in Shift) and (Button = mbLeft) then begin
  /code
end;
Nun würde ich gerne auch abfragen können, ob etwa Buchstaben oder Zahlentasten gedrückt oder, genauer gesagt, gehalten werden. Wie kann ich das möglichst simpel umsetzen? Eine Idee (noch nicht getestet) wäre, mit OnKeyDown bzw. OnKeyUp globale Variablen (entweder booleans für jeweils einzelne keys oder eine, die mir den gedrückten Key codiert) zu verknüpften, die ich dann im MouseDown-Event via if-Abfrage einbinde ... aber geht's auch leichter bzw. mit weniger 'Variablenmüll' ?

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: TShiftState-Äquivalent für übrige Tasten

Beitrag von theo »

Ich glaube nicht, dass es einfacher geht als mit OnKey...
Man kann natürlich den Status eines Keys unabhängig davon abfragen mit

Code: Alles auswählen

uses ... LCLIntf, LCLType;   

GetKeyState(VK_SHIFT) and $8000;   
aber ich denke nicht, dass dies deinen Fall vereinfacht.

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: TShiftState-Äquivalent für übrige Tasten

Beitrag von wp_xyz »

mulcheo hat geschrieben:
Mi 8. Dez 2021, 11:39
ich möchte in meinem MouseDown Event prüfen, ob während des Mausclicks ein bestimmter Key gedrückt wird. [...] Nun würde ich gerne auch abfragen können, ob etwa Buchstaben oder Zahlentasten gedrückt oder, genauer gesagt, gehalten werden. Wie kann ich das möglichst simpel umsetzen?
Ich kann mir nicht vorstellen, wie das in der Praxis funktionieren soll, wenn sich auf dem Formular ein Edit, Memo, o.ä. befindet und dieses den Fokus hat. Diese Taste muss auf jeden Fall vor dem Mausklick gedrückt sein und rattert dann das Edit voll, weil dieses ja den Fokus hat.

mulcheo
Beiträge: 57
Registriert: Do 1. Aug 2013, 15:11

Re: TShiftState-Äquivalent für übrige Tasten

Beitrag von mulcheo »

[Idee aus meinem ersten Post nun umgesetzt]: ach verdammt, wp_xyz hat Recht, quasi ...
wenn ich einen key wie [p] gedrückt halte, kann ich die Maus garnicht mehr bewegen, weil hier irgendwie der Eventhandler überlastet (?) ist. Die Grundidee rund um OnKeyDown und OnKeyUp hat indes ganz gut funktioniert; aber damit ist natürlich alles hinfällig ... Wenn ich das gerade so anteste, dann scheinen nur die Tasten im TShiftState die Mausbewegung nicht zu blocken.

Wie könnte hier ein Workaround aussehen?
Eine Option wäre sicher, dass ich vom Plan eines 'Gedrückthaltens' weggehe, aber das wäre bestenfalls Plan B.
btw. Edit, Memos etc. gibt's auf diesem speziellen Form bewusst nicht: ich benutze (von dem Problem hier losgelöst) keypress als primären Userinput, das Randproblem, dass die Taste mir also in irgendein Inputfeld reinrauscht, habe ich nicht.

[update]: oh, okay, okay... also ich merke gerade, dass der Effekt nur die Bewegung des Mauscorsors via Touchpad unterbindet und das Problem auf Windowsebene liegt [fix läuft gerade]... :oops:

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: TShiftState-Äquivalent für übrige Tasten

Beitrag von Winni »

Hi!

Bau Dir einen event stack, ein dynamisches Array, das enthält Records.

Das Record besteht aus

* dem Sender
* MouseOderKey
* dem Shiftstate
* dem TMousebutton
* dem VK_Key
* evtl noch dem Zeitpunkt = TDateTime=now


Wann immer ein Event ausgelöst wird, kommt ein neues Record hinzu.
Wenn Du wissen willst, was los ist, klapperst Du den Stack von oben ab :
Wenn das letzte Mouse-event "onMouseDown" war, muss die noch gedrückt sein etc.

Fummel, fummel.

Warum willst Du das wissen??

Winni

Antworten