Delphi-PRAXiS

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/)
-   -   Delphi Problem mit Aktualisierung von Eigenschaften von TEdit (https://www.delphipraxis.net/145038-problem-mit-aktualisierung-von-eigenschaften-von-tedit.html)

JBJHJM 22. Dez 2009 12:59


Problem mit Aktualisierung von Eigenschaften von TEdit
 
Der Titel ist schlecht gewählt, lässt sich nur ausführlich erklären:

Mein Ziel:

3 TEdit Felder, becshriftet mit Edit1: Altes Passwort Edit2: Neues Passwort, Edit3: Neues Passwort wiederholen.
soweit kein Problem.
Wenn jetzt ein Edit zum schreiben ausgewählt wird, dann soll der Standardtext verschwinden und passwordchar auf * gesetzt werden.
Soweit auch kein Problem.
Wenn das Feld beschriftet wird, wird der text nicht resettet und der PasswordCHar bleibt leer. Wenn das Feld aber leer gelassen wird und abgewählt wird, solls resettet werden - PasswordChar aus, text auf Standard zurücksetzten.
So weit, so gut.
Die Funktionen die das bewirken, stehen im OnClick- und im OnMouseOver-Ereignis, und sehen etwa so aus:

Delphi-Quellcode:
procedure TForm3.Edit1Select(Sender: TObject);
begin
if Edit1.text = 'Altes Passwort' then
    begin Edit1.Text:= ''; Edit1.PasswordChar:= '*'; end;

if ((Edit2.Text = '') or (Edit2.Text = 'Neues Passwort'))
    then begin Edit2.Text:= 'Neues Passwort'; Edit2.PasswordChar:= #0; end
    else begin Edit2.PasswordChar:= '*'; end;

if ((Edit3.Text = '') or (Edit3.Text = 'Neues Passwort wiederholen'))
    then begin Edit3.Text:= 'Neues Passwort wiederholen'; Edit3.PasswordChar:= #0; end
    else begin Edit3.PasswordChar:= '*'; end;
end;
Jetzt kommt das Problem:
Wenn ich in Edit1 bin, und die TAB-Taste benutze, um ins nächste Edit zu springen, passiert - logischerweise - nichts, und das Passwort ist einfach sichtbar, was natürlich nicht sein darf.
Hat jemand eine Idee, wie ich den Sprung mit der TAB-Taste mit einbauen kann?

Niko 22. Dez 2009 13:10

Re: Problem mit Aktualisierung von Eigenschaften von TEdit
 
Hi,

du könntest zum Zurücksetzen das OnExit-Ereignis und zum Aktivieren von passwordchar das OnEnter oder KeyPress-Ereignis verwenden.

JBJHJM 22. Dez 2009 14:45

Re: Problem mit Aktualisierung von Eigenschaften von TEdit
 
Danke, funktioniert 1a!

Habe noch eine Frage, wenn ich jetzt das Menu mit den drei Edits öffne, ist das erste schon immer ausgewählt/aktiviert, sodass der text nicht mehr angezeigt wird! Gibts da irgendeine Eigenschaft (wie bei Button default), die festlegt, ob ein Edit schon gewählt ist?
Wenn nicht wirds wohl irgendwo am COde liegen...

Niko 22. Dez 2009 14:58

Re: Problem mit Aktualisierung von Eigenschaften von TEdit
 
Du kannst die Tabreihenfolge entsprechend ändern, aber das ist eher eine Notlösung. Das erste Steuerelement in der Tabreihenfolge bekommt am Anfang den Fokus.

Verleg doch lieber deinen Code vom OnEnter ins OnKeyPress (evtl. auch OnKeyDown), so dass du den Vorgabetext erst beim ersten Tastendruck löschst.

JBJHJM 22. Dez 2009 15:31

Re: Problem mit Aktualisierung von Eigenschaften von TEdit
 
Zitat:

Zitat von Niko
Du kannst die Tabreihenfolge entsprechend ändern, aber das ist eher eine Notlösung. Das erste Steuerelement in der Tabreihenfolge bekommt am Anfang den Fokus.

Verleg doch lieber deinen Code vom OnEnter ins OnKeyPress (evtl. auch OnKeyDown), so dass du den Vorgabetext erst beim ersten Tastendruck löschst.

Hm, da muss ich mir noch was einfallen lassen.

Von OnEnter nach OnKeyDown/Press ist nicht gut, denn wenn der Text noch da ist, während man den Fokus schon auf das Edit gesetzt hat, wird jeder User erstmal den Text markieren und löschen. Der Text muss wirklich direkt verschwinden, sobald jemand im Begriff ist, etwas reinzuschreiben.

So, ist gelöst! Einfach die Eigenschaft Edit.tabstop auf false setzen, dann wird nichts mehr fokussiert.
Kleiner Nachteil - man kann den Text nicht mehr markieren, aber das ist mir an dieser Stelle egal!

Nochmal vielen Dank, Niko!

sx2008 22. Dez 2009 15:48

Re: Problem mit Aktualisierung von Eigenschaften von TEdit
 
Zitat:

Zitat von JBJHJM
Die Funktionen die das bewirken, stehen im OnClick- und im OnMouseOver-Ereignis

Das sind die falschen Events.
Richtig wäre OnEnter = Feld wird betreten, gleichgültig ob mit Maus oder Tastatur
OnExit = Feld wird verlassen

JBJHJM 23. Dez 2009 00:20

Re: Problem mit Aktualisierung von Eigenschaften von TEdit
 
Zitat:

Zitat von sx2008
Zitat:

Zitat von JBJHJM
Die Funktionen die das bewirken, stehen im OnClick- und im OnMouseOver-Ereignis

Das sind die falschen Events.
Richtig wäre OnEnter = Feld wird betreten, gleichgültig ob mit Maus oder Tastatur
OnExit = Feld wird verlassen

Jup, in die ganzen verschiedenen Events bin ich noch nicht richtig eingearbeitet - zudem ich einfach mal behaupte, dass viele von ihnen wesentlich seltener verwendet werden, als andere, oder?

Auf jeden Fall ein Danke an euch beide! :cheers:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 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