Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#12

Re: Mit ENTER das Nächste Feld selektieren (so wie Tab)

  Alt 3. Apr 2006, 13:43
Im OnKeyDown ist der Key ein 'Virtual Key Code'.
Im OnKeyPress kommen nur 'druckbare' Zeichen an (also keine Cursor- oder Funktionstasten). Hier ist Key ein Char und bezeichnet das Zeichen selbst.

Richtig wäre im OnKeyDown der Form (mit KeyPreview=True) das hier:
Delphi-Quellcode:
Procedure TMyForm.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  If Key= VK_RETURN Then Key := VK_TAB;
end;
Das ist eigentlich das genau Gleiche wie der nicht funktionierende Code von Karstadt, aber "besser", weil mit VK_ Konstanten (obwohl VK_RETURN = 13 und VK_TAB = 9 ).

Das funktioniert auch mit DBGrid und allen anderen Controls... wenn, ja wenn man der Form über
MyForm.KeyPreview = True sagt, das sie (die Form) die Tastendrücke bitte zuerst bekommen soll. Denn offensichtlich wird das ENTER von irgendwem abgefangen. Mit KeyPreview=True passiert das meistens nicht. Da es aber einige Controls gibt, die sich per WndProc noch vor das OnKeyDown der Form schalten, wäre die perfekte Vorgehensweise, die WndProc der Form zu überschreiben. Hier fängt man die WM_KEYDOWN - Message ab und ändert im Message-Record den wParam entsprechend.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat