Lösche doch einfach alles Unerwünschte raus?
Filtere sowas besser schon in OnKeyPress raus, denn dieses macht die Bediehung viel einfacher.
OnChange ist nur noch für Fälle, wie das Kopieren/Einfügen, welche OnKeyPress nicht abdeckt.
Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
var s: String;
i: Integer;
begin
s := TEdit(Sender).Text;
for i := Length(s) downto 1 do
if s[i] in ['0'..'9'] then
Delete(s, i, 1);
if s <> '' then
s[1] := AnsiUpperCase(s)[1];
//if TEdit(Sender).Text <> s then {das sollte in .Text schon drin sein}
TEdit(Sender).Text := s;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if TEdit(Sender).SelStart = 0 then
Key := AnsiUpperCase(Key)[1];
if Key in ['0'..'9'] then
Key := #0;
end;
Versuche so mal mitten in dem Text zu schreiben.
Bei dir wird ja der Cursor jedesmal auf das Textende gesetzt.