Das Problem ist einfach, dass sich der Index der Memo.Lines ändert, sobald du eine Zeile daraus löschst.
Entweder du machst es mit downto ...
Delphi-Quellcode:
procedure TForm1.ReplaceClick(Sender: TObject);
var
i: integer;
begin
for i := Memo1.Lines.Count - 1 downto 0 do
begin
try
[Befehl]
except
Memo1.Lines.Delete(i);
end;
end;
ReplaceClick(Self);
end;
... oder einer repeat-until-Schleife
Delphi-Quellcode:
procedure TForm1.ReplaceClick(Sender: TObject);
var
i: integer;
begin
i := 0;
repeat
try
[Befehl]
except
Memo1.Lines.Delete(i);
i := 0;
continue; // kA, ob das in nem except-Block geht
end;
inc (i);
until i > Memo1.Lines.Count - 1;
ReplaceClick(Self);
end;
Du solltest dir auch überlegen, ob es das richtige ist, eine
Exception zu werfen, wenn dein Ereignis eintritt. Warum nicht eine if-Abfrage?
Delphi-Quellcode:
if WordFound (Memo1.Lines[i]) then
Memo1.Lines.Delete(i);
... oder so?