Delphi-PRAXiS
Seite 1 von 2  1 2      

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/)
-   -   feststellen welches Feld vor dem aktuellen Feld den Focus hatte? (https://www.delphipraxis.net/158300-feststellen-welches-feld-vor-dem-aktuellen-feld-den-focus-hatte.html)

khh 12. Feb 2011 15:54

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

freak4fun 12. Feb 2011 15:57

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. :)

Uwe Raabe 12. Feb 2011 16:10

AW: feststellen welches Feld vor dem aktuellen Feld den Focus hatte?
 
Zitat:

Zitat von khh (Beitrag 1081248)
ist es möglich das vorherige Feld, welches den Focus hatte auszulesen?

Ist mir leider nicht bekannt.

Zitat:

Zitat von khh (Beitrag 1081248)
Ich möchte nach dem Verlassen eines Feldes zum vorherigen Feld zurück kehren.

Wie stellst du dir das vor? Ein Feld wird auch verlassen, wenn der Benutzer in ein anderes Feld klickt. Ich fände es gar nicht nett, wenn ich dann zwangsweise woanders hingeleitet würde.

Eine Focus-Änderung bekommst du übrigens mit, wenn du
Delphi-Quellcode:
SetFocusedControl
überschreibst.

hans ditter 12. Feb 2011 16:16

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:
function Focus(Focus: HWND)
var preFocus, nowFocus: HWND;
begin
   if not(preFocus = Focus) then
   begin
     preFocus:=nowFocus;
     nowFocus:=Focus;
   end;
end
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.

@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

skh 12. Feb 2011 16:47

AW: feststellen welches Feld vor dem aktuellen Feld den Focus hatte?
 
Ich würde mit Tag's arbeiten...

khh 12. Feb 2011 16:52

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

himitsu 12. Feb 2011 17:12

AW: feststellen welches Feld vor dem aktuellen Feld den Focus hatte?
 
Delphi-Quellcode:
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;
(ungetestet, aber ich glaub es sollte laufen :stupid: )

s.h.a.r.k 12. Feb 2011 17:14

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.

Reinhard Kern 12. Feb 2011 17:21

AW: feststellen welches Feld vor dem aktuellen Feld den Focus hatte?
 
Zitat:

Zitat von khh (Beitrag 1081263)
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.

Hallo,

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

David Martens 15. Feb 2011 12:45

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 16:18 Uhr.
Seite 1 von 2  1 2      

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