Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - WM_KEYDOWN: Shift und Ctrl?


Andreas Pfau - Mo 30.12.02 11:16
Titel: WM_KEYDOWN: Shift und Ctrl?
Hallo Leute,

wieder mal ein Prob. Ich habe eine Anwendung, die auf dir cursortasten reagieren soll. Ich verarbeite alle Tasten mit TForm.OnKeyDown. Um auch auf Cursortasten zu reagieren, fange ich Wm_KeyDown mit TApplicationEvents.OnMessage ab und leite sie an OnKeyDown weiter (damit alles zentral verarbeitet wird).

Aber: kann ich aus TMsg, was ja bei Wm_KeyDown gesendet wird, den Status von Shift un Ctrl herausfinden? Momentan verwende ich dazu GetKeyState(), aber geht das auch direkt?


Dev4u.ch - Mo 30.12.02 14:11

Füg folgenden Code bei Form1.ONKeyDown ein


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key = VK_SHIFT then
showmessage('Shift');

if key = VK_CONTROL then
showmessage('Control');

end;


gruss


Andreas Pfau - Mo 30.12.02 15:37

Sorry... das hatte ich nicht gemeint... :wink:

Was ich wollte war: wenn eine Taste gedrückt wird, wie finde ich dann mittels der von windows gesendeten Nachricht raus, ob gleichzeitig Shift und/oder Ctrl gedrückt wurde? Klar, mit GetKeyState geht das. Aber kann ich auch aus der TMsg-Struktur den Shift-/Ctrl-Status auslesen?


Dev4u.ch - Mo 30.12.02 15:41

ok..

ich versuchs nochmal..

Dies ist ein Beispielcode der erkannt ob Shift+A zu gleichen Zeit gedrückt werden..


Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if (Shift = [ssCtrl]) and (Key = 65) then
    ShowMessage('Strg + A gedrückt');

end;



vielleicht musst du von Form1 das Keypreview auf True setzten..


Tino - Mo 30.12.02 17:02

Dev4u.ch hat folgendes geschrieben:
ich versuchs nochmal..

ich denke das wird Andreas auch nicht helfen.

Andreas Pfau hat folgendes geschrieben:
Aber kann ich auch aus der TMsg-Struktur den Shift-/Ctrl-Status auslesen?


Gruß
TINO