Beim Umstieg von Delphi 11 auf Delphi 12 bin ich auf ein unterschiedliches Verhalten gestoßen. Habe dazu ein kleines Testprogramm.
Folgendes soll erreicht werden:
Ein TEdit soll eine Warnfarbe anzeigen, wenn weniger als 3 Zeichen eingegeben wurden, danach soll es die Farbe des Syles anzeigen. Habe dazu mal einen Testcode:
Delphi-Quellcode:
procedure TForm1.EditChange(Sender: TObject);
begin
SetEditColor(TEdit(Sender), length(TEdit(Sender).text) <= 3);
end;
procedure TForm1.SetEditColor(const aEdit: TEdit; const aIsError: Boolean);
var
lSelStart: Integer;
lSelLenght: Integer;
begin
lSelStart := aEdit.SelStart;
lSelLenght := aEdit.SelLength;
if aIsError then
begin
aEdit.StyleElements := aEdit.StyleElements - [seClient];
aEdit.Color := clred
end
else
begin
aEdit.StyleElements := aEdit.StyleElements + [seClient];
aEdit.Color := clWindow;
end;
aEdit.SelStart := lSelStart;
aEdit.SelLength := lSelLenght;
end;
Ein Edit ist direkt auf dem Form platziert und ein Edit ist auf einem Panel platziert.
Beim Edit, welches direkt auf dem Form platziert ist, ist das verhalten wie erwartet. ab dem vierten Zeichen bekommt das Edit die Stylefarbe und der Cursor befindet sich hinter dem letzten Zeichen.
Beim Edit, welches auf dem Panel platziert ist, wird zwar die Farbe geändert, aber der ganze Text ist markiert. Was natürlich zur Folge hat, dass der bereits eingegebene Text beim nächsten Tastendruck entfernt wird.
Unter Delphi 11 war das Verhalten beider Edits gleich. Bei Delphi 12 ist das Verhalten der Edits wie beschrieben.
Übrigens ist bei beiden Edits nach dem vierten Zeichen "SelStart = 4" und "SelLength = 0". Wird bei dem Edit auf dem Panel aber komplett ignoriert und der ganze Text ist markiert.
Könnt Ihr das nachvollziehen?