Einzelnen Beitrag anzeigen

barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#1

Fokuswechsel zwischen zwei Komponenten

  Alt 15. Jun 2004, 13:55
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?
Gruß,

Barnti
  Mit Zitat antworten Zitat