Hi,
Grundsätzlich sollten Löschvorgänge in einer Zeichenkette "von hinten" gestartet werden.
also
Delphi-Quellcode:
procedure TForm1.Edt_Change(Sender: TObject);
var i: integer;
Ausgabe: String;
Begin
Ausgabe := Edt_.Text;
For i:= length(Ausgabe) downto 1 do
Begin
If Ausgabe[i] <> '' then
If (Ausgabe[i] <> ' ') and
(Ausgabe[i] <> '.') and
(Ausgabe[i] <> '-') then
Begin
showmessage('Ungültige(s) Zeichen in der Eingabe!');
Delete(Ausgabe,i,1);
Edt_.Text := Ausgabe;
End;
End;
End;//Edt_Change
In einer Vorwärtsschleife kann es passieren, daß Du einzelne Elemente nicht prüfst
Beispiel:
W.XY-Z
i steht auf 1, löscht W (Zeichenkette wird kürzer)
i steht auf 2, löscht X
i steht auf 3, löscht nichts (Y ist hier nun an 2. Stelle)
...
Einfach mal zum nachdenken
Grüße
Michael