Ich würde beide Möglichkeiten kombinieren ... so würde das Eingabeverhalten des Edits nur minimal verändert
und vorallem nicht direkt auf das Edit1 zugreifen.
Vorteile: die Prozeduren können für mehrere Edits verwendet werden und man hat keine Probleme, falls man das Edit mal umbenennt.
Delphi-Quellcode:
// OnChange
procedure TForm1.Edit1Change(Sender: TObject);
var s: string;
i: Integer;
begin
s := (Sender as TEdit).Text;
if (s <> '') and (s[1] <> AnsiUpperCase(s)[1]) then
begin
s[1] := AnsiUpperCase(s)[1];
i := TEdit(Sender).SelStart;
TEdit(Sender).Text := s;
TEdit(Sender).SelStart := i;
end;
end;
// OnKeyPress
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (Sender as TEdit).SelStart = 0 then
Key := AnsiUpperCase(Key)[1];
end;