Fehler tritt nur unter Delphi12 auf.
Habe mir jetzt beholfen, indem ich noch ein application.processmessages zugefügt habe.
Irgendwie wird beim Setzen von StyleElements etwas in die MessageQueue gesetzt, was SelStart und SelLenght nachträglich ändert, nachdem OnChange von dem Edit abgearbeitet wurde.
Delphi-Quellcode:
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;
application.ProcessMessages;
aEdit.SelStart := lSelStart;
aEdit.SelLength := lSelLenght;
end;