Das FormKeyPress-Ereignis wird niemals "doppelt" aufgerufen, damit es überhaupt aufgerufen wird muss Form.KeyPreview := TRUE gesetzt werden (im Objektinspektor, oder per Code).
Nur in diesem Fall bekommt man in FormKeyPress
vor der ComboBox die Gelegenheit zu entscheiden, ob eine eigene Verarbeitung in Frage kommt bzw. eine spezielle Reaktion auf die Taste erwünscht ist. Auch kann man hier Entscheiden ob sie eventuell nicht an die ComboBox übergeben werden soll (Key := #0).
Folgendes (ansonsten sinnbefreites) Beispiel zeigt dir ein paar Möglichkeiten (auf der Form befinden sich ein Memo, eine ComboBox und eine Checkbox):
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
KeyPreview := TRUE;
// KeyPreview := FALSE;
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
//
Memo1.Lines.Add(Format('Key: %s', [Key]));
if UpCase(Key)='C' then
begin
CheckBox1.Checked := Not CheckBox1.Checked;
end;
if Key='a' then
begin
Key := #0;
Memo1.Lines.Add('No lower case ''a'' at all!');
end;
if Key='v' then
begin
Key := UpCase(Key);
end;
end;