Delphi-Quellcode:
procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: word;
Shift: TShiftState);
begin
if Key = Char(VK_RETURN) then begin
i := ComboBox1.Items.IndexOf(ComboBox1.Text);
if i >= 0 then
ComboBox1.ItemIndex := i;
end;
end;
Was ist da das Problem?
Das Problem ist die Inkompatibilität zwischen Integer und Char. Chars enthalten immer nur ein Zeichen: 'a' oder 'X' oder '&' usw. Der Wert, der in dieser Variablen gespeichert wird, bezieht sich auf die
ASCII-Tabelle: Wenn du die linke Alt-Taste gedrückt hältst und auf deinem Nummernblock 65 eingibst, erhältst du ein 'A'. Das 'A' erhältst du auch durch Angabe von Chr(65). In KeyDown wird nun genau dieser Wert übergeben, und zwar als Word. Erst durch Chr(65)oder #65 wird daraus ein Char. VK_Return ist ebenfalls ein Integer, gespeichert in irgend einer der Delphi-System-Units als Konstante, Um den Wert von VK_Return ermitteln, kannst du ihn z.B. in einem Label anzeigen: Label1.Caption := IntToStr(VK_Return);
Integer-Typen sind z.b: Word, Byte, LongInt, aber auch abgeleitete Typen wie z.B. TColor. Alle Integer-Typen können weder Zeichen noch Kommazahlen (Float-Werte) aufnehmen. Manche Integer-Typen können nur positive Zahlen (0 bis ...) aufnehmen, andere dagegen auch negative (-32768 bis 32768). Wenn im Parameter ein Word als Typ angegeben ist, kannst du diesen Wert nicht mit einem Char vergleichen (das wäre nicht mal Äpfel mit Birnen, das wäre Äpfel mit Broten).
Schau dir doch
diese Seite für Einsteiger einmal etwas genauer an. Es gibt noch mehr solche Einsteiger-Tutorials im Netz, die findest du aber sicher auch alleine
Zum Üben mit KeyDown und KeyPress empfehle ich den
Keyboard-Tutor vom Leuselator.