Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Tastaturabfrage
wayneschlegel - Sa 06.08.11 17:31
Titel: Tastaturabfrage
Hey !
ich möchte ein onkeypress Ereignis auf ein Objekt erstellen. Es soll allerdings nur stattfinden wenn beim doppelklick zusätzlich strg+alt gedrückt wird.
das kann für die profis hier nicht so schwierig sein. bei mir haperts an der syntax...hat vielleicht jemand ein paar stückchen code für mich ? :-)
vielen dank !
M.
Delphi-Laie - Sa 06.08.11 18:44
wayneschlegel hat folgendes geschrieben : |
ich möchte ein onkeypress Ereignis auf ein Objekt erstellen. Es soll allerdings nur stattfinden wenn beim doppelklick zusätzlich strg+alt gedrückt wird. |
OnKeyPress findet bei einem Tastaturdruckereignis statt, der Doppelklick ist hingegen ein Mausereignis (OnDblClick). Beides sind getrennte Ereignisse, die sich m.E. nicht so ohne weiteres "mischen" bzw. "vereinen" lassen.
jaenicke - Sa 06.08.11 18:47
wayneschlegel hat folgendes geschrieben : |
ich möchte ein onkeypress Ereignis auf ein Objekt erstellen. Es soll allerdings nur stattfinden wenn beim doppelklick zusätzlich strg+alt gedrückt wird. |
Also du willst ein OnKeyPress benutzen, aber einen Doppelklick abfangen, wenn andere Tasten unten sind? Wie jetzt? :eyecrazy: :nut:
Also mal zur Klarstellung:
OnKeyPress dient zur Reaktion auf einen Tastendruck mit der Tastatur.
OnDblClick dient zur Reaktion auf einen Doppelklick mit der Maus.
So, dann zum Problem:
Du kannst in OnKeyDown auf die Tastendrücke von Strg + Alt reagieren und dir deren Status merken und zurücksetzen, wenn sie in OnKeyUp wieder losgelassen werden. Dann kannst du im Doppeklick Ereignis einfach diesen Status abfragen.
Eine andere Möglichkeit wäre die Abfrage des Tastenstatus mit GetAsyncKeyState, aber das hat den Nachteil, dass eine Verzögerung bei der Doppelklickbehandlung dazu führen kann, dass die Tasten dann schon wieder losgelassen sind. Dafür hat es den Vorteil, dass es auch klappt, wenn beim Drücken der Tasten das Fenster noch nicht den Eingabefokus hatte.
wayneschlegel - Sa 06.08.11 20:39
ja genau ! Nur wenn die beiden Tasten shift und crtl zusammen gedrückt sind, dann soll das Ereignis stattfinden.
Das muss doch irgendwie gehen oder? Auf jeden Fall doch mit einer Abfrage beim Doppelklickereignis oder habe ich einen Denkfehler ?
Beipiel:
formKeydown...
if (shift = ([ssCtrl, ssShift]) + blabla then
begin
...
end;
was denkt Ihr ?
M.
jaenicke - Sa 06.08.11 21:28
Wie ich schon sagte:
jaenicke hat folgendes geschrieben : |
Du kannst in OnKeyDown auf die Tastendrücke von Strg + Alt reagieren und dir deren Status merken und zurücksetzen, wenn sie in OnKeyUp wieder losgelassen werden. Dann kannst du im Doppeklick Ereignis einfach diesen Status abfragen. |
Shift abfragen ist da schon eine gute Idee, nur musst du auch den Status speichern usw.
wayneschlegel - Sa 06.08.11 22:35
cool ! hast du evtl. nen demo code oder sowas ?
ein beispiel ?`was glaubst du wohl was ich alles ausprobiert habe... :-(
M.
jaenicke - Sa 06.08.11 22:43
So schwer ist das eigentlich nun wirklich nicht. :gruebel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| TFormX = ... public FKeysPressed: Boolean;
procedure TFormX.FormDblClick(Sender: TObject); begin if FKeysPressed then begin FKeysPressed := False; ShowMessage('Doppelklick angekommen'); end; end;
procedure TFormX.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin FKeysPressed := (ssCtrl in Shift) and (ssAlt in Shift); end;
procedure TFormX.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin FKeysPressed := FKeysPressed and not ((ssCtrl in Shift) and (ssAlt in Shift)); end; |
wayneschlegel - So 07.08.11 00:28
hm...und das soll funktionieren ? probier ich gleich morgen mal aus aber ich bin da eher skeptisch ehrlich gesagt.
M.
elundril - So 07.08.11 00:37
wäre es nicht eventuell einfach einfach GetAsyncKeystate in der DoubleClick-Procedure abzufragen?
lg elundril
jaenicke - So 07.08.11 08:23
wayneschlegel hat folgendes geschrieben : |
hm...und das soll funktionieren ? probier ich gleich morgen mal aus aber ich bin da eher skeptisch ehrlich gesagt. |
Ich habe es ausprobiert. ;-)
elundril hat folgendes geschrieben : |
wäre es nicht eventuell einfach einfach GetAsyncKeystate in der DoubleClick-Procedure abzufragen? |
Es hat beides Vor- und Nachteile, das habe ich ja oben schon geschrieben. :D
wayneschlegel - Do 11.08.11 21:47
Stimmt ! Hat super hingehauen !
Vielen Dank für die Hilfe !!!!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!