Autor Beitrag
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Sa 16.04.11 15:50 
Hi,

in einem Programm habe ich auf der Form ein KeyDown Event. (KeyPreview ist true).
Auf die Pfeiltasten sind Aktionen gelegt, was auch an sich klappt.
Doch habe ich auf der Form noch ein RichEdit, welches Probleme macht.
Und zwar wenn ich jetzt die linke oder rechte Pfeiltaste drücke, geht der Cursor ersteinmal durch das gesamte RichEdit, bevor dann das KeyDown Event ausgelöst wird.
Habe schon vieles versucht - die Box disabled, beim OnEnter den Focus wieder abgegeben oder ihr ein eigenes KeyDown Event gegeben, was dann aber gelegentlich doppelt ausgelöst wird(zusammen mit dem FormEvent).

Weiß jemand Rat?

Liebe Grüße
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 16.04.11 16:00 
Du musst nur zusätzlich die Verarbeitung im RichEdit unterdrücken:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TYourForm.YourRichEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if Key in [VK_LEFT, VK_RIGHT, VK_UP, VK_DOWN] then
    Key := 0;
end;
Das FormKeyDown-Event wird aber bei KeyPreview auf True immer sofort ausgelöst. :gruebel:

Für diesen Beitrag haben gedankt: HenryHux
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Sa 16.04.11 16:14 
Vielen Dank, das hab ich gesucht.
Klappt jetzt so wie es soll.

lg
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: So 17.04.11 13:46 
Hi,

leider habe ich das Problem immer noch bzw. schon wieder.
Um das mal zu veranschaulichen habe ich schnell was zusammengeklickt -> Siehe Anhang.
Und zwar wenn man in das Edit Feld klickt, reagiert die Form auf einen Key-Anschlag.
Doch wenn man auf einen Button klickt, und danach einen der Pfeiltasten drückt, werden nur die Buttons durchgeschaltet.
Trotz KeyPreview. Zwar könnte ich für jeden Button ein eigenes Event anlegen, aber in meinem Projekt habe ich mehr als nur 3 Buttons =)
Mit "normalen" Tasten klappt es zwar, mir geht es aber um die Pfeiltasten.


Lg

Beispiel (zip, 83.95 KB)
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 17.04.11 13:52 
Wenn du Controls drin hast, musst du auch noch auf WM_GETDLGCODE reagieren und Windows mit DLGC_WANTARROWS mitteilen, dass du diese Tastendrücke selbst behandeln möchtest.
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: So 17.04.11 14:16 
Ok, das klappt für alle Controls, bis auf die, die in GroupBoxen oder Panels sind.
Kann ich das auch regeln ohne mir eine eigene Komponente abzuleiten?