![]() |
feststellen welches Feld vor dem aktuellen Feld den Focus hatte?
Hallo zusammen,
ist es möglich das vorherige Feld, welches den Focus hatte auszulesen? Ich möchte nach dem Verlassen eines Feldes zum vorherigen Feld zurück kehren. Alle Versuche dies über eine Änderung des Tab-Index zu erreichen sind gescheitert :-( Danke Gruss KHH |
AW: feststellen welches Feld vor dem aktuellen Feld den Focus hatte?
Du könntest dir eine Variable anlegen, in der du das aktuell fokusierte Feld merkst. Wenn ein anderes Feld den Folus bekommt kannst du das mit dem gespeicherten Wert vergleichen. :)
|
AW: feststellen welches Feld vor dem aktuellen Feld den Focus hatte?
Zitat:
Zitat:
Eine Focus-Änderung bekommst du übrigens mit, wenn du
Delphi-Quellcode:
überschreibst.
SetFocusedControl
|
AW: feststellen welches Feld vor dem aktuellen Feld den Focus hatte?
Ich hätte jetzt spontan auch an die Variablen-Lösung gedacht. Etwa so:
Delphi-Quellcode:
Dann kannst du ja in jeder OnKlick-Methode diese Funktion aufrufen. Am Besten machst du die Variablen dann noch global und dann kannst du jederzeit auslesen, wo du vorher warst.
function Focus(Focus: HWND)
var preFocus, nowFocus: HWND; begin if not(preFocus = Focus) then begin preFocus:=nowFocus; nowFocus:=Focus; end; end @Uwe: Wenn du aber z.B. verhindern möchtest, dass jemand ein Feld überspringt und nix eingibt, dann könnte man das z.B. machen, dass er immer wieder in das Feld zurückgeleitet wird... LG, hans ditter |
AW: feststellen welches Feld vor dem aktuellen Feld den Focus hatte?
Ich würde mit Tag's arbeiten...
|
AW: feststellen welches Feld vor dem aktuellen Feld den Focus hatte?
Ich habs jetzt mal so gemacht:
Im onEnter eine Variable gesetzt und in Abhängigkeit davon die Tabreihenfolge geändert. @uwe zu dem bestimmten Feld wird der User nur dann geleitet wenn er per tab oder enter das Feld verlässt. Sinn der Sache ist mit Enter (oder Tab) zwischen zwei Feldern hin und her springen zu können. Hintergund ist die Auswahl eines Artikels entweder über die Bezeichnung oder über die Artikelnummer. In Abhängigkeit der gewählten Auswahl muss nach Eingabe einer Menge, wieder zu diesem Feld zurückgekehrt werden. Also "Zwang" ist das keiner ;-) Danke euch, Gruss KHH |
AW: feststellen welches Feld vor dem aktuellen Feld den Focus hatte?
Delphi-Quellcode:
(ungetestet, aber ich glaub es sollte laufen :stupid: )
type
TForm3 = class(TForm) procedure FormCreate(Sender: TObject); private { Private-Deklarationen } FLastActive: TWinControl; procedure DoLastActive(var Msg: TMsg; var Handled: Boolean); public { Public-Deklarationen } property LastActiveControl: TWinControl read FLastActive; end; procedure TForm3.DoLastActive(var Msg: TMsg; var Handled: Boolean); var C, C2: TControl; begin if Msg.message = CM_EXIT then begin C2 := FindControl(Msg.hwnd); C := C2; while Assigned(C) and (C <> Self) do C := C.Parent; if Assigned(C) then FLastActive := C2; end; end; procedure TForm3.FormCreate(Sender: TObject); begin Application.OnMessage := DoLastActive; // oder besser noch ein TApplicationEvents auf die Form pappen und dort das OnMessage nutzen end; |
AW: feststellen welches Feld vor dem aktuellen Feld den Focus hatte?
Wie wäre es, sich in die Nachrichtenschleife einzuklinken und dann eine History über die zuletzt fokusierten Controls zu führen? Das wäre mir pauschal dazu eingefallen, wobei mir die Idee von Uwe Raabe via SetFocusedControl auch gefällt.
@himitsu: im Grund exakt die Idee, die ich vorgeschlagen habe, nur eben mit einem einzelnen Element und keiner History ;) Bei meiner Idee wäre das aktuelle Control dann auch noch mit in der History -- über Sinn und Unsinn kann man sicherlich noch streiten. |
AW: feststellen welches Feld vor dem aktuellen Feld den Focus hatte?
Zitat:
aber das heisst doch, du musst nur wissen, ob zuletzt Bezeichnung oder Nummer verwendet wurde, das kannst du dir doch merken. Die Felder weisst du dann ja, es kommen ja nur die 2 in Frage. Alles was du brauchst ist 1 Bit. Irgendwelche Event-Routinen zu überschreiben ist für so etwas der reine Overkill. Gruss Reinhard |
AW: feststellen welches Feld vor dem aktuellen Feld den Focus hatte?
Mach die Eingabe der Menge doch über ein kleines Popupfenster. Nach der Eingabe wird es geschlossen und du kehrst automatisch zum letzen fokusierten Element zurück.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:23 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