AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls feststellen welches Feld vor dem aktuellen Feld den Focus hatte?
Thema durchsuchen
Ansicht
Themen-Optionen

feststellen welches Feld vor dem aktuellen Feld den Focus hatte?

Ein Thema von khh · begonnen am 12. Feb 2011 · letzter Beitrag vom 15. Feb 2011
Antwort Antwort
Seite 1 von 2  1 2      
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#1

feststellen welches Feld vor dem aktuellen Feld den Focus hatte?

  Alt 12. Feb 2011, 15:54
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
Karl-Heinz
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

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

  Alt 12. Feb 2011, 15:57
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.
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

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

  Alt 12. Feb 2011, 16:10
ist es möglich das vorherige Feld, welches den Focus hatte auszulesen?
Ist mir leider nicht bekannt.

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 SetFocusedControl überschreibst.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
hans ditter

Registriert seit: 25. Jun 2010
Ort: Niedersachsen
263 Beiträge
 
Turbo Delphi für Win32
 
#4

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

  Alt 12. Feb 2011, 16:16
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
RudiRüsselSeineSocketKomponente - SirRufo (--> Chat mit PM)

Delphi Programming is the best one!
  Mit Zitat antworten Zitat
Benutzerbild von skh
skh

Registriert seit: 17. Aug 2005
Ort: Saarland
28 Beiträge
 
Delphi 7 Professional
 
#5

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

  Alt 12. Feb 2011, 16:47
Ich würde mit Tag's arbeiten...
Karl-Heinz
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#6

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

  Alt 12. Feb 2011, 16:52
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
Karl-Heinz
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

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

  Alt 12. Feb 2011, 17:12
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 )
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#8

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

  Alt 12. Feb 2011, 17:14
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.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#9

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

  Alt 12. Feb 2011, 17:21
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
  Mit Zitat antworten Zitat
David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#10

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

  Alt 15. Feb 2011, 12:45
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:26 Uhr.
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