Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Fokuswechsel zwischen zwei Komponenten (https://www.delphipraxis.net/24098-fokuswechsel-zwischen-zwei-komponenten.html)

barnti 15. Jun 2004 12:55


Fokuswechsel zwischen zwei Komponenten
 
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?

ibp 15. Jun 2004 13:10

Re: Fokuswechsel zwischen zwei Komponenten
 
könnte es ein, daß das die box solange den focus hat, bis keyup abgearbeitet wurde?
gruß rené

barnti 15. Jun 2004 13:14

Re: Fokuswechsel zwischen zwei Komponenten
 
Hi,
dann sollte es aber gar nicht funktionieren. Es geht aber in der ersten Spalte des Grids...

Weitere Ideen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz