![]() |
Tastenkombination Ctrl+K+P erkennen
Moin, Moin,
benötige mal einen Denkanstoß wie man z.B. das oben genannte Tastenkürzel erkennen kann. Ctrl+K ist ja klar, aber wie komme ich dann innerhalb des Events an den zweiten Buchstaben. In Turbo-Pascal genügte ein zweites ReadKey (oder so ähnlich, ist verdammt lange her) oder ein direkter Zugriff auf den Tastaturpuffer. Den müsste es doch heute eigentlich auch noch geben! Oder? Gruß Ralph |
Re: Tastenkombination Ctrl+K+P erkennen
Hey,
Also in Delphi kannst Du dir ja mal die Komponente ![]() mfG mirage228 |
Re: Tastenkombination Ctrl+K+P erkennen
Hmm, also das ist wohl nicht das was ich suche. Abgesehen davon, dass ich nicht verstehe, wieso das eine optisch sichtbare Komponente ist, :spin2: können hiermit offenbar Kürzel wie Ctrl+K+P nicht erkannt werden. Hat noch jemand anders eine Idee?
Gruß Ralph |
Re: Tastenkombination Ctrl+K+P erkennen
So, Antwort selbst gefunden.
Mein Ansatz mit dem Tastaturpuffer war schon 'ne gute Idee. Lösung nachstehend, falls es mal ein Anderer gebrauchen kann - Maus hin, Maus her, manchmal geht es mit der Tastatur einfach schneller...
Delphi-Quellcode:
Ach ja, darauf achten, dass Großbuchstaben für die Indizierung des Arrays verwendet werden, mit Kleinbuchstaben (also z.B. ord('k') funktioniert's nicht.
procedure ~~.FormKeyDown(~~~~);
var KeybState : TKeyboardState begin GetKeyboardState(KeybState); // in Unit Windows deklariert if (KeybState[VK_Control] and 128=128) and // Ctrl (KeybState[ord('K')] and 128=128) and // K (KeybState[ord('P')] and 128=128) then begin // P ... .. . end; end; Gute Nacht aus Hamburg Ralph |
Re: Tastenkombination Ctrl+K+P erkennen
Bei der Lösung sollte aber ein CTRL-P K das gleiche bewirken. Dein Code achtet damit nicht auf die Reihenfolge der Tastendrücke. Auch würde der Code funktionieren, wenn alle 3 Tasten gedrückt sind. Aber im Normalfall werden diese Wordstar Tastenkommandos nacheinander eingetippt, also CTRL-K und danach das P. Siehe auch CTRL-K B, CTRL-K K, CTRL-K C, CTRL-K V, CTRL-K X, etc.
/EDIT: Habe gerade am Threadtitel gesehen, dass es nicht dein Ziel ist Wordstar Kommandos nachzuahmen sondern wirklich alle drei Tasten gleichzeitig drücken. Damit ist der Hinweis dann natürlich hinfällig. Ich frage mich nur noch, ob billige Tastatur(en/matrix) diese drei Tasten auch gleichzeitig unterstützen, vor allem weil zwei nicht Umschalttasten beteiligt sind... |
Re: Tastenkombination Ctrl+K+P erkennen
Hallo Thomas,
man sollte vor dem Schlafengehen nicht mehr ins Forum schauen :stupid: Also das hat mich jetzt nicht ruhen lassen. Es sollte natürlich ausgeschlossen sein, dass Ctrl-P K als identisch mit Ctrl-K P erkannt wird. Die Gleichzeitigkeit ist nach meiner Einschätzung als relativ zu betrachten: Habe das mal an mir selbst ausgetestet. Es fällt einem im Eifer des Eintippens nicht wirklich auf, ob man die beiden ersten (also Ctrl und K) beide schon losgelassen hat, wenn der dritte Buchstabe gedrückt wird. Habe jetzt folgende Lösung, die mir etwas absonderlich erscheint. Aber sieh selbst...
Delphi-Quellcode:
Zuerst hatte ich es (natürlich?!) in anderer Reihenfolge (Test auf K und dann auf P) - aber nur so funktioniert es?! In dieser Version wird nur Ctrl+K+P erkannt, nicht Ctrl+P+K. Die Gleichzeitigkeit (ich sagte es schon) erscheint mir unwichtig!
procedure TfoTest9.FormKeyDown(Sender:TObject;var Key:Word;Shift:TShiftState);
var KeybState : TKeyboardState; begin if SSCtrl in Shift then if Key=ord('P') then begin GetKeyboardState(KeybState); if KeybState[ord('K')] and 128=128 then begin sm('Ctrl+K P'); // << ShowMessage für Tippfaule //... //.. //. end; end; end; Vielen Dank für den Hinweis! Gute Nacht aus Hamburg Ralph |
Re: Tastenkombination Ctrl+K+P erkennen
Zitat:
Ansonsten gilt in Delphi : die Ctrl-Zeichen im OnKeyDown auswerten und alles danach im OnKeyPress. 8) |
Re: Tastenkombination Ctrl+K+P erkennen
Moin Hansa - keine Sorge ist derzeit nur eine Spielerei!
Habe aufgrund deines Hinweises feststellen müssen dass es nun mit ^K und ^P nicht mehr so recht funktionieren will. Aber selbst Delphi reagiert ja auf Ctr+K+P (wenn alle 3 Tasten gleichzeitig gedrückt werden) Es muss also eine saubere Lösung geben. Meine ist es offensichtlich noch nicht. So, nun aber wirklich ins Bett! Gute Nacht Ralph |
Re: Tastenkombination Ctrl+K+P erkennen
Oh shit, für 'ne Spielerei ist es jetzt schon ziemlich spät geworden.
Hansa, deine Sorgen um mein Programm kann ich eigentlich nicht mehr ganz nachvollziehen. Folgender Code zeigt, dass ^K und ^P sauber erkannt werden und auch Ctrl+K+P, nicht aber Ctrl+P+K.
Delphi-Quellcode:
Problem ist, dass jedes Ctrl+K+P für einen kurzen Zeitraum auch ein Ctrl+K ist - aber ist das nicht auch mit einem DoppelClick so, der ist für eine in Windows definierte Zeitspanne auch erst einmal ein einfacher Click. Optimierung wäre also in diesem "Tastaturfall", ebenfalls eine Zeitspanne zu definieren, innnerhalb derer der zweite Buchstabe gedrückt werden muss, um als 3er-Kombination gewertet zu werden.
procedure TfoTest9.FormKeyDown(Sender:TObject;var Key:Word;Shift:TShiftState);
var KeybState : TKeyboardState; begin if SSCtrl in Shift then begin if Key=ord('P') then begin GetKeyboardState(KeybState); if KeybState[ord('K')] and 128=128 then label1.caption:='Ctrl+K+P' else label1.caption:='Ctrl P'; end; if Key=ord('K') then label1.caption:='Ctrl K'; end; end; Oder habe ich dich völlig missverstanden? Ralph |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:05 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 by Thomas Breitkreuz