Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Mit ENTER das Nächste Feld selektieren (so wie Tab) (https://www.delphipraxis.net/66722-mit-enter-das-naechste-feld-selektieren-so-wie-tab.html)

Karstadt 3. Apr 2006 08:44

Datenbank: Mysql • Version: 4 • Zugriff über: direct

Mit ENTER das Nächste Feld selektieren (so wie Tab)
 
Hallo. Wass muss ich tun, damit ich mit Enter taste das Nächste Feld in DBGRIB Auswählen kann?

Mfg Karstadt
Delphi-Quellcode:

procedure Tf_pnv.dbg_auftragKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  If Key = 13 then Key := 9;
end;
Funktioniert leider nicht

Luckie 3. Apr 2006 08:49

Re: Mit ENTER das Nächste Feld selektieren (so wie Tab)
 
Das hatten wir schon so oft, mit der Suche sollte sich da bestimmt was finden lassen, man muss die Suche nur bemühen.

Hier im Forum suchenenter tab und wenn man die Suche nur auf die CodeLib beschränkt wird es sogar noch übersichtlicher: enter tabenter tab.

MisterNiceGuy 3. Apr 2006 08:58

Re: Mit ENTER das Nächste Feld selektieren (so wie Tab)
 
Delphi-Quellcode:
If Key = 13 then Edit2.setfocus;

Luckie 3. Apr 2006 09:10

Re: Mit ENTER das Nächste Feld selektieren (so wie Tab)
 
Zitat:

Zitat von MisterNiceGuy
Delphi-Quellcode:
If Key = 13 then Edit2.setfocus;

Sehr effektiv, wenn man 15 Edits hat. Warum diese unsinnige Lösung, wenn man mit der Suche eine gescheite findet?

MagicAndre1981 3. Apr 2006 09:14

Re: Mit ENTER das Nächste Feld selektieren (so wie Tab)
 
Für die Komponentenliebhaber hat JEDI auch was dabei, dass das macht :wink:

Karstadt 3. Apr 2006 09:25

Re: Mit ENTER das Nächste Feld selektieren (so wie Tab)
 
Ha ha ha :)

Delphi-Quellcode:
procedure Tf_pnv.dbg_auftragKeyPress(Sender: TObject; var Key: Char);
begin
  If Key = #13 then Key := #39;
end;
Einfacher als ich gedacht habe :)

Mavarik 3. Apr 2006 09:27

Re: Mit ENTER das Nächste Feld selektieren (so wie Tab)
 
Oder nimm einfach eine Komponente!

Zum Beispiel diese hier

Frank :coder:

Luckie 3. Apr 2006 09:29

Re: Mit ENTER das Nächste Feld selektieren (so wie Tab)
 
Meine Güte, irgendwie scheint niemand in der Lage zu sein auf die Links in meinem Posting zu klicken. :roll:
Delphi-Quellcode:
if Key = #13 then Self.Perform(WM_NEXTDLGCTL,0,0);

Karstadt 3. Apr 2006 09:43

Re: Mit ENTER das Nächste Feld selektieren (so wie Tab)
 
Probier doch selber aus. wichtig ist ES GEHT HIER UM DBGRIB und dort funktioniert das nicht! Est selberprobieren dann posten!

Delphi-Quellcode:
  if Key = #13 then self.Perform(WM_NEXTDLGCTL,0,0);
Es soll nicht von eine Komponente zu einen andere Komponente das Tab gesetzt werden sondern von feld zu feld!

Karstadt 3. Apr 2006 10:12

Re: Mit ENTER das Nächste Feld selektieren (so wie Tab)
 
Das Problem ist nur. Wenn ich in einen Bearbeitungsmodus bin dann funktioniert das nicht.

Delphi-Quellcode:
  if (Key = 13) And (mqr_artikelliste.State <> dsBrowse) Then
  begin
    mqr_artikelliste.post;
  end;

  If Key = 13 then
  begin
    dbg_auftrag.Enabled := False;
    dbg_auftrag.Enabled := True;
    dbg_auftrag.SetFocus;
    Key := 9;
  end;
hat jemand eine Idee (Die Suche hat mir in diesen Fall überhaupt nicht geholfen :(

Hansa 3. Apr 2006 12:57

Re: Mit ENTER das Nächste Feld selektieren (so wie Tab)
 
wie wärs mit :

Delphi-Quellcode:
if key = #13 then
  Col := Col + 1;
Und zwar im OnKeyPress des Grids. Bei dir steht "key = 13", vermute deshalb, daß es im OnKeyDown ist und somit eventuell zu früh.

alzaimar 3. Apr 2006 13:43

Re: Mit ENTER das Nächste Feld selektieren (so wie Tab)
 
Im OnKeyDown ist der Key ein 'Virtual Key Code'.
Im OnKeyPress kommen nur 'druckbare' Zeichen an (also keine Cursor- oder Funktionstasten). Hier ist Key ein Char und bezeichnet das Zeichen selbst.

Richtig wäre im OnKeyDown der Form (mit KeyPreview=True) das hier:
Delphi-Quellcode:
Procedure TMyForm.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  If Key= VK_RETURN Then Key := VK_TAB;
end;
Das ist eigentlich das genau Gleiche wie der nicht funktionierende Code von Karstadt, aber "besser", weil mit VK_ Konstanten (obwohl VK_RETURN = 13 und VK_TAB = 9 :mrgreen: ).

Das funktioniert auch mit DBGrid und allen anderen Controls... wenn, ja wenn man der Form über
Delphi-Quellcode:
MyForm.KeyPreview = True
sagt, das sie (die Form) die Tastendrücke bitte zuerst bekommen soll. Denn offensichtlich wird das ENTER von irgendwem abgefangen. Mit KeyPreview=True passiert das meistens nicht. Da es aber einige Controls gibt, die sich per WndProc noch vor das OnKeyDown der Form schalten, wäre die perfekte Vorgehensweise, die WndProc der Form zu überschreiben. Hier fängt man die WM_KEYDOWN - Message ab und ändert im Message-Record den wParam entsprechend.

Nils_13 3. Apr 2006 13:53

Re: Mit ENTER das Nächste Feld selektieren (so wie Tab)
 
Wozu soll man denn immer Komponenten benutzen ? Es ist doch viel sinnvoller keine zu benutzen, da die Qualität des Programms dadurch steigt.

alzaimar 3. Apr 2006 13:58

Re: Mit ENTER das Nächste Feld selektieren (so wie Tab)
 
Komponenten? Weils einfach ist. Aber stell die Frage in einem eigenen Thread.

Hansa 3. Apr 2006 18:34

Re: Mit ENTER das Nächste Feld selektieren (so wie Tab)
 
Zitat:

Zitat von alzaimar
...Das funktioniert auch mit DBGrid und allen anderen Controls... wenn, ja wenn man der Form über
Delphi-Quellcode:
MyForm.KeyPreview = True
sagt, das sie (die Form) die Tastendrücke bitte zuerst bekommen soll.

Das mag künstlerisch richtig sein, aber hier wird eher das Handwerk benötigt. :lol: Habe nachgeschaut :

Delphi-Quellcode:
procedure TfrmEin.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  EnterTab(Sender,Key,Shift,[],[],true);
end;

procedure TfrmEin.sgEnter(Sender: TObject);
begin
  KeyPreview := false;
  sg.SetFocus;
...
end;

procedure TfrmEin.sgExit(Sender: TObject);
begin
  KeyPreview := true;
end;

...
Luckie hat ja den Link zu EnterTab bereits gepostet. Die Controls der Form werden bei mir immer mit Enter verlassen / bestätigt. Dies bedeutet EnterTab setzen und KeyPreview auch auf true setzen. Aber eben NICHT im Grid (siehe Source) !!! Hier irrt sich der Künstler. :mrgreen:

tschinkes 23. Jul 2008 12:44

Re: Mit ENTER das Nächste Feld selektieren (so wie Tab)
 
Zitat:

Zitat von MagicAndre1981
Für die Komponentenliebhaber hat JEDI auch was dabei, dass das macht :wink:

Welche Komponente ist das den? Oo Jedi hat soviel das man echt den Überblick verliert. Wäre schön wenn du mir sagen könntest wo ich die finde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:30 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