Danke für die Beiträge und die Lösung von jaenicke, das sieht durchaus sehr professionell aus, auch die Info mit dem zerstörten
Handle hat mir weitergeholfen.
Unter Delphi 2010 stellt sich das nun wie folgt da: beim zweiten Betreten erscheint das Feld nun komplett "leer", das Programm friert kurz ein, und danach flimmert sich der Cursor am Anfang des leeren Edit-Feldes einen ab... Funktioniert bei mir also leider nicht.
Ich habe mir erlaubt, in Anbetracht dessen, dass es wohl ein grundlegenderes Problem von Delphi oder Windows ist/sei könnte, eine Quick-and-Dirty-Lösung zu basteln, da für eine so unbedeutende Funktion mit so großen Problemen eine schnelle unkomplizierte Lösung für mich sinnvoller ist, als die Ursache zu beheben (die evtl. in Windows oder Delphi liegt, und sich eh meinem Zugriff entzieht)...
Delphi-Quellcode:
procedure TForm2.edtPasswordEnter(Sender: TObject);
begin
Timer1.Tag := 1;
Timer1.Enabled := True;
end;
procedure TForm2.edtPasswordExit(Sender: TObject);
begin
Timer1.Tag := 0;
Timer1.Enabled := True;
end;
procedure TForm2.Timer1Timer(Sender: TObject);
begin
// Der Timer hat ein Interval von 10 ms
Timer1.Enabled := False;
if Timer1.Tag = 0 then begin
edtPassword.PasswordChar := '*';
end else begin
edtPassword.PasswordChar := #0;
end;
end;
Beim Betreten oder Verlassen des Edit-Feldes löse aktiviere ich nun den Timer. Je nachdem ob der Text sichtbar (1) oder unsichtbar/verschlüsselt (0) sein soll, erhält der Timer einen anderen Tag. Der Timer ändert dann den Passwordchar, da nach ~10ms davon auszugehen ist, dass das
Handle vom TEdit korrekt freigegeben und neu erzeugt wurde, so dass der jetzige Befehl problemlos klappen
sollte.
Edit:
Die von Uwa Raabe verlinkte Lösung funktioniert scheinbar auch zuverlässig:
Delphi-Quellcode:
procedure TForm2.edtPasswordEnter(Sender: TObject);
begin
SendMessage(edtPassword.Handle, EM_SETPASSWORDCHAR, 0, 0);
end;
procedure TForm2.edtPasswordExit(Sender: TObject);
begin
SendMessage(edtPassword.Handle, EM_SETPASSWORDCHAR, Ord('*'), 0);
end;
Edit2: Lösung scheint zuverlässig zu funktionieren. Bitte beachten: Neuere Windows-Versionen verwenden -trotz "*" als PasswordChar- den gefüllten Kreis "●". Das sieht natürlich komisch aus, wenn man das Programm startet, das Passwort steht in ● da, man klickt rein, verlässt es wieder, und da stehen *... Ich habe jetzt mal im Objektinspektor den PasswordChar direkt auf "●" gesetzt, und bei OnEditExit nun Ord('●') stehen, damit auf jeden Fall durchgehend das selbe Zeichen drin steht.
Delphi 10.4 32-Bit auf Windows 10 Pro 64-Bit, ehem. Delphi 2010 32-Bit auf Windows 10 Pro 64-Bit