Delphi-PRAXiS
Seite 1 von 3  1 23      

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/)
-   -   Focus-Problem bei Firemonkey (https://www.delphipraxis.net/169822-focus-problem-bei-firemonkey.html)

eddie11 14. Aug 2012 12:22

Focus-Problem bei Firemonkey
 
Hi allerseits,

ich möchte nach der Eingabe in einem Edit-Feld den Inhalt überprüfen. Das mach ich im OnExit-Ereignis des Edit-Controls:
Code:
procedure TForm1.Edit1Exit(Sender: TObject);
begin
  if Edit1.Text<>'xx' then begin
    ShowMessage('Error: <>xx');
    Edit1.SetFocus();
  end;
end;
- ich Prüfe ich in meinem Beispiel auf 'xx' ab,
- im Fehlerfall setze ich den Focus zurück auf das Edit-Feld

die Prüfung funktioniert: es kommt die Fehlermeldung
anschließend wird der Focus aber NICHT auf das Edit-Feld gesetzt, sondern das Feld, welches das Verlassen des Edit-Feldes veranlasst hat, hat jetzt den Focus. Das gleiche Beispiel in VCL funktioniert einwandfrei. Ist das ein Bug in Firemonkey oder muss ich da irgend etwas anders machen?

danke

mkinzler 14. Aug 2012 12:30

AW: Focus-Problem bei Firemonkey
 
Zitat:

welches das Verlassen des Edit-Feldes veranlasst hat
? :gruebel:

Btw. nimm besser Sender statt Edit1

eddie11 14. Aug 2012 12:54

AW: Focus-Problem bei Firemonkey
 
naja, vielleicht habe ich mich ein bisschen undeutlich ausgedrückt, ich versuchs nochmal:

Ich habe auf der Form zwei Edit-Felder, Edit1 und Edit2. Wenn Edit1 den Focus hat und ich dann auf Edit2 klicke, dann wird das OnExit von Edit1 aufgerufen (Prüfung), Edit2 ist also das Feld, welches "das Verlassen des EditFeldes veranlasst" hat. Aufgrund der negativen Prüfung auf "xx" soll der Focus wieder zurück auf Edit1 - das passiert aber nicht, Edit2 hat jetzt den Focus. Ich möchte aber, dass der Focus von Edit1 nur dann weg ist, wenn die Eingabeprüfung ok war.

Zitat:

Btw. nimm besser Sender statt Edit1
warum?

Klaus01 14. Aug 2012 12:56

AW: Focus-Problem bei Firemonkey
 
Hallo,

Edit1.setFokus gibt es bei FM nicht?

Grüße
Klaus

eddie11 14. Aug 2012 12:59

AW: Focus-Problem bei Firemonkey
 
Zitat:

Edit1.setFokus gibt es bei FM nicht?
doch, funktioniert auch üblicherweise. Aber in der oben beschriebenen Konstellation wird es anscheinend irgendwie ignoriert, bzw. die Aktivierung des zweiten Feldes wird erst danach durchgeführt.

mkinzler 14. Aug 2012 13:00

AW: Focus-Problem bei Firemonkey
 
Zitat:

Zitat von eddie11 (Beitrag 1178200)
naja, vielleicht habe ich mich ein bisschen undeutlich ausgedrückt, ich versuchs nochmal:

Ich habe auf der Form zwei Edit-Felder, Edit1 und Edit2. Wenn Edit1 den Focus hat und ich dann auf Edit2 klicke, dann wird das OnExit von Edit1 aufgerufen (Prüfung), Edit2 ist also das Feld, welches "das Verlassen des EditFeldes veranlasst" hat. Aufgrund der negativen Prüfung auf "xx" soll der Focus wieder zurück auf Edit1 - das passiert aber nicht, Edit2 hat jetzt den Focus. Ich möchte aber, dass der Focus von Edit1 nur dann weg ist, wenn die Eingabeprüfung ok war.

Zitat:

Btw. nimm besser Sender statt Edit1
warum?

Weil
-die Methode dann auch für andere Edits funktioniert
-auch nach Ändern der Bezeichnung des Edits funktioniert
-auch für andere Komponenten nutzbar ist
...

eddie11 14. Aug 2012 13:03

AW: Focus-Problem bei Firemonkey
 
Zitat:

Weil
-die Methode dann auch für andere Edits funktioniert
-auch nach Ändern der Bezeichnung des Edits funktioniert
-auch für andere Komponenten nutzbar ist
...
ok, das ist klar, mach ich auch üblicherweise so
ist ja nur ein Beispiel...

Insider2004 14. Aug 2012 15:21

AW: Focus-Problem bei Firemonkey
 
VCL <> FMX (leider). Schreibe eine Fehlermeldung in QC.

himitsu 14. Aug 2012 15:39

AW: Focus-Problem bei Firemonkey
 
Und so?
Delphi-Quellcode:
procedure TForm1.Edit1Exit(Sender: TObject);
begin
  if Edit1.Text<>'xx' then begin
    ShowMessage('Error: <>xx');
    Edit1.SetFocus();
    Abort;
  end;
end;
Eventuell wird ja erst verlassen (inkl. OnExit) und dann betreten, womit dann im FMX das Setzen des Fokus nach deinem Zurücksetzen passieren würde.

Abort hilft aber nur, wenn kein Try-Finally drumrum ist, wo erst im Finally-Block der Fokus gesetzt wird, bzw. wenn in einem drumrumliegenden Try-Except nicht die stille Abort-Exception beachtet wird (welches gerne vergessen wird, womit dann der Abbruchvorgang vorzeitig abbricht).

eddie11 15. Aug 2012 06:08

AW: Focus-Problem bei Firemonkey
 
ja geil, das hat es gebracht. Nach dem ABORT wird keine weitere Aktion (Focus setzen) mehr ausgeführt. Das funktioniert also in meinem Sinne. Nur der Cursor ist dann weg :shock: aber den krieg ich schon irgendwie wieder.

Danke vielmals :bounce2::bounce2::bounce2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:09 Uhr.
Seite 1 von 3  1 23      

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