AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tastenkombination Ctrl+K+P erkennen

Ein Thema von taaktaak · begonnen am 25. Nov 2007 · letzter Beitrag vom 26. Nov 2007
Antwort Antwort
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#1

Tastenkombination Ctrl+K+P erkennen

  Alt 25. Nov 2007, 22:00
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
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Tastenkombination Ctrl+K+P erkennen

  Alt 25. Nov 2007, 22:12
Hey,

Also in Delphi kannst Du dir ja mal die Komponente Delphi-Referenz durchsuchenTHotkey anschauen. Ggf. lässt sich ja damit dein gewünschter Hotkey realisieren.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#3

Re: Tastenkombination Ctrl+K+P erkennen

  Alt 25. Nov 2007, 22:32
Hmm, also das ist wohl nicht das was ich suche. Abgesehen davon, dass ich nicht verstehe, wieso das eine optisch sichtbare Komponente ist, können hiermit offenbar Kürzel wie Ctrl+K+P nicht erkannt werden. Hat noch jemand anders eine Idee?
Gruß Ralph
Ralph
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#4

Re: Tastenkombination Ctrl+K+P erkennen

  Alt 25. Nov 2007, 22:58
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:
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;
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.

Gute Nacht aus Hamburg
Ralph
Ralph
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: Tastenkombination Ctrl+K+P erkennen

  Alt 25. Nov 2007, 23:40
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...
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#6

Re: Tastenkombination Ctrl+K+P erkennen

  Alt 26. Nov 2007, 00:04
Hallo Thomas,

man sollte vor dem Schlafengehen nicht mehr ins Forum schauen 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:
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;
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!

Vielen Dank für den Hinweis!
Gute Nacht aus Hamburg
Ralph
Ralph
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: Tastenkombination Ctrl+K+P erkennen

  Alt 26. Nov 2007, 00:17
Zitat von taaktaak:
... 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!
Hier wird einiges übersehen ! ^K ist ein einzelner "Buchstabe". Für ^P gilt dasselbe. Soll ^K oder ^P keinen Unterschied machen, dann sorge ich mich ernsthaft um das zugrunde liegende Programm.

Ansonsten gilt in Delphi : die Ctrl-Zeichen im OnKeyDown auswerten und alles danach im OnKeyPress. 8)
Gruß
Hansa
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#8

Re: Tastenkombination Ctrl+K+P erkennen

  Alt 26. Nov 2007, 00:25
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
Ralph
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#9

Re: Tastenkombination Ctrl+K+P erkennen

  Alt 26. Nov 2007, 00:47
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:
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;
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.

Oder habe ich dich völlig missverstanden?
Ralph
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:03 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