onKeypress im Edit

Hallo!

Folgende Situation: Ich habe ein Edit und möchte durch die Pfeiltasten (hoch und runter) etwas ganz anderes bewirken! Wenn ich diese nun aber im onKeypress abfrage, wandert aber der cursor nach links oder rechts! Was mache ich falsch???

Florian

Hi Florian,

Folgende Situation: Ich habe ein Edit und möchte durch die
Pfeiltasten (hoch und runter) etwas ganz anderes bewirken!
Wenn ich diese nun aber im onKeypress abfrage, wandert aber
der cursor nach links oder rechts! Was mache ich falsch???

Du darfst nicht das OnKeyPress-Event des Edits verwenden. Wenn dieses aufgerufen wird, ist es nämlich schon zu spät, weil der Tastendruck das Edit eben bereits erreicht und dieses darauf reagiert hat. Deshalb mußt Du die Tastendruck-Message „vorher“ abfangen. Bevor das Edit sie bekommt, passiert sie das Formular. Also mußt Du ihr im KeyPress-Ereignis des Formulars auflauern. Wichtig ist dabei, daß Du das „KeyPreview“-Property des Formulars im Objektinspektor auf TRUE setzt (ist standardmäßig FALSE). Sonst funktioniert es nicht.

Probier mal das aus:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
IF (Key=VK_DOWN) THEN
begin
Key := 0; // *
Height := Height+3; // **
end;

IF (Key=VK_UP) THEN
begin
Key := 0; // *
Width := Width+3; // **
end
end;

Die Zeilen „*“ schalten die Cursor-rechts-links-Bewegung aus. Auf das Drücken der (nicht-existierenden) Taste mit dem Code „0“ zeigen alle Controls keine Reaktion. Das erwähnte „Auflauern“ drückt sich durch die IF-THEN-Abfragen aus.

Die Zeilen „**“ mußt Du durch den Code ersetzen, der Dein „irgendwas anderes“ bewirkt. Hier bewirken sie testweise eine Größenänderung des Formulars, damit man sehen kann, daß beim Drücken auf Cursor up/down was passiert.

MfG
Martin