Hallo,
ich habe ein DBGrid über dem eine Lookupbox 'schwebt'. Navigiert man im Grid in ein Feld, welches ein Lookupfeld ist, so wird die Box sichtbar gemacht und der entsprechende Wert in der Box angezeigt.
Für das OnKeyPress-Ereignis des Grid habe ich das folgende implementiert:
Delphi-Quellcode:
procedure TForm_Main.DBGrid_DetailKeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['a'..'z','A'..'Z','0'..'9'] )then exit;
if (Grid.SelectedField.KeyFields = LookupBox.KeyField) then
begin
LookupBox.SetFocus;
SendMessage(LookupBox.Handle, WM_Char, word(Key), 0);
end;
end;
So wird die Box fokussiert sobald man eine Taste drückt.
Für das Ereignis LookupBox_OnKeyDown:
Delphi-Quellcode:
procedure TForm_Main.DBLookupBox_GridMasterKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
var Index: Integer;
begin
if char(key)=char(VK_RETURN) then
begin
DBGrid_Master.SelectedIndex:= DBGrid_Master.SelectedIndex+1;
DBGrid_Master.SetFocus;
showmessage(IntToStr(DBGrid_Master.SelectedIndex));
end;
end;
So soll bei 'OnKeyDown' der Box, wenn Return, der Fokus an das Grid zurückgegeben werden und das nächste Feld den Fokus erhalten.
Leider funktioniert das nur für das erste Feld. Für alle folgenden Felder wird der Fokus nicht gesetzt. Gebe ich den SelectedIndex aus, wird dieser korrekt inkrementiert.
Wo ist mein Fehler?