AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TabOrder dynamisch...

Ein Thema von BigAl · begonnen am 6. Jun 2022 · letzter Beitrag vom 9. Jun 2022
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.505 Beiträge
 
Delphi 12 Athens
 
#1

AW: TabOrder dynamisch...

  Alt 6. Jun 2022, 22:52
Im OnKeyDown von E1, E3 und E5 beim TAB ein SetFocus auf F6 und merken, von wem es kam.
Und im OnKeyDown auf TAB reagieren und SetFocus entsprechend dem gespeichertem Vorgänger.


Natürlich könnte man auch im OnEnter von E1/E3/E5 schauen die Taborder umschreiben.
(E6 an die entsprechende Stelle verschieben, also zwischen E1-E7, E3-E8, E5-E9 usw, .... bzw. E6.TabOrder:=TEdit(Sender).TabOrder+1 )
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 6. Jun 2022 um 22:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.730 Beiträge
 
Delphi 12 Athens
 
#2

AW: TabOrder dynamisch...

  Alt 6. Jun 2022, 23:51
Nur so ne Idee: Du könntest im Form das GetTabOrderList überschreiben. Erst rufst du inherited auf und erhältst die aktuelle Reihenfolge der WinControls, die du aber dann noch beliebig verändern kannst. Du wirst dir irgendwie das letzte Control merken müssen, um das nächste korrekt in der Liste zu platzieren. Womöglich reicht nicht mal nur das letzte wenn es auch Fälle geben kann, wo z.B. zwei dieser E6-Kandidaten untereinander stehen.

Denke daran, dass man mit Shift-TAB auch den korrekten Rückweg nimmt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#3

AW: TabOrder dynamisch...

  Alt 7. Jun 2022, 05:49
Beides gute Ideen. Das mit GetTabOrderList überschreiben muss ich mir mal genauer anschauen. Mir schwebt da grad so 'ne Idee im Kopf rum mit mehreren Tab-Listen (sind maximal drei). Je nach Zustand könnte ich dann die entsprechende aktivieren.

Ich denke das könnte die Lösung sein .

Danke!
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
498 Beiträge
 
Delphi 12 Athens
 
#4

AW: TabOrder dynamisch...

  Alt 7. Jun 2022, 07:50
Würde es nicht auch reichen, zur Laufzeit im OnEnter Event Tabstop entsprechend zu setzen und TabOrder zu lassen. Dabei könnte ein Event für alle Edits gesetzt werden und anhand der Taborder des gerade akuellen Edits bei den anderen TabStop gesetzt werden.
hier mal ein Beispiel:
Delphi-Quellcode:
procedure TForm1.e1Enter(Sender: TObject);
  function EditColumn(AEdit: TEdit): Integer;
  begin
    case AEdit.TabOrder of
      0, 1, 7:
       Result := 0;
      2, 3, 8:
       Result := 1;
      4, 5, 9:
       Result := 2;
      else
        Result := -1;
    end;
  end;
var
  I, Col: Integer;
  WC: TControl;
  E: TEdit;
begin
  if Sender is TEdit then
  begin
    Col := EditColumn(TEdit(Sender));
    for I := 0 to TEdit(Sender).Parent.ControlCount - 1 do
    begin
      WC := TEdit(Sender).Parent.Controls[I];
      if WC is TEdit then
      begin
        E := TEdit(WC);
        E.TabStop := (E = E6) or (EditColumn(E) = Col);
        if E.TabStop then
          E.Color := clInfoBk
        else
          E.ParentColor := True;
      end;
    end;
  end;
end;
Zur Verdeutlichung habe ich auch die Farbe gesetzt. Das ist aber nur gemacht, um im Beispiel zu sehen, ob es auch klappt.

Geändert von BerndS ( 7. Jun 2022 um 10:02 Uhr) Grund: E6 immer Tabstop True
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: TabOrder dynamisch...

  Alt 7. Jun 2022, 09:45
Wenn es total dynamisch sein soll, würde ich mir das Tags property zu nutze machen.
Tags entsprechend Priorität fortlaufend vergeben, angenommen es wird ein "Hauptsprungziel" erschaffen, dann ab in eine 1000er Zählung, untergeordnete in eine 2000er usw.
Nun beim KeyDown event das aktuelle Tag auslesen und entsprechend dessen Inhalt das vorige/nächste Tag finden und fokussieren.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:24 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