Entwickler-Ecke

Sonstiges (Delphi) - Ärger mit Tastaturabfrage


mk2 - Di 01.10.02 11:28
Titel: Ärger mit Tastaturabfrage
Hallo allerseits,

Ich wuerde gerne die Curcortasten in meinem Programm abfragen.

1.Problem:

die Betätigung der Cursortasten löst weder ein KeyDown noch ein Keypress Ereignis aus. Das konnte ich noch lösen indem ich mittels timer alle 100 ms oder so die funktion GetAsyncKeyState aufrufe, allerdings gibts da vielleicht ne elegantere loesung.

2. und viel ärgerlicheres Problem:

Wie kann ich verhindern, dass die Cursortasten von delphi zur Steuerung der Komponenten, die auf meinem formular sind (buttons etc.) verwendet werden? Z.B. wird durch drücken der CursorDown Taste der itemindex der Radiogroupbox verändert.

Wäre nett, wenn mir jemand helfen kann

mfg micha


Delete - Di 01.10.02 11:34

Im OnKeyDown-Ereigniss solltest du eigentlich an die Cursortasten mittels der virtuellen Tastaturcodes drankommen (VK_LEFT, VK_RIGHT, VK_UP, VK_DOWN).


mk2 - Di 01.10.02 11:46

das dachte ich eigentlich auch, aber das problem ist, dass das ereignis durch drücken der cursortasten überhaupt nicht ausgelöst wird.

kann man ausprobieren indem man einfach mal ne form erstellt und beim keydown immer ne message ausgibt. die message erscheint beim drücken fast jeder taste aber nicht bei den cursortasten.

mfg micha


Delete - Di 01.10.02 11:50


Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key = VK_LEFT then
    Messagebox(0, '', '', 0);
end;

Geht!


DeCodeGuru - Di 01.10.02 11:50

Hi mk2,

Luckie hat vollkommen recht und selbst bei mir funtzt des.

Versuchs mal mit folgendem Code:


Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_Down then
    ShowMessage('Nach unten ;-)');
end;


Delete - Di 01.10.02 11:54

DeCodeGuru hat folgendes geschrieben:

Luckie hat vollkommen recht

Hast du was anderes erwartet? :mrgreen:
Zitat:

und selbst bei mir funtzt des.

Wunder der Technik. :roll:


DeCodeGuru - Di 01.10.02 11:58

Zitat:
Hast du was anderes erwartet?


Natürlich nicht :beer:

Zitat:
Wunder der Technik.


:mrgreen:


LCS - Di 01.10.02 12:02

Luckie hat folgendes geschrieben:

Wunder der Technik. :roll:

Ja, aber nur wenn er KeyPreview auf seinem Formular aktiviert hat. Er hat ja Komponenten drauf. :mgreen:

Gruss Lothar


mk2 - Di 01.10.02 13:04

besten dank für die hilfe

ihr habt recht es funktioniert - allerdings nur solange meine form keine komponenten wie buttons etc. hat. sobald da ein paar buttons sind kommen die cursor tasten nicht mehr an. Daran ändert leider auch keypreview nichts.

soweit ich das feststellen konnte gilt das nur für die cursor-tasten und tab -wahrscheinlich weil das die Tasten sind die von windows für die navigation innerhalb von einem fenster gebraucht werden. das wuerd ich gerne ausstellen

na ja, vielleicht hat ja jemand noch ne idee

mfg micha


LCS - Di 01.10.02 13:13

Hi
ich habs gerade nochmal ausprobiert. Es funktioniert definitiv in OnKeyUp. Jede Menge Komponenten auf dem Formular, KeyPreview := True. Liefert sowohl Cursor als auch Tab-Taste

Gruss Lothar


mk2 - Mi 02.10.02 08:54

hey danke, mit onkeyup gehts wirklich, aber komisch dass onkeydown nicht funktioniert. kann mir noch jemand bei der 2. frage weiterhelfen ?