Zitat:
for I := 0 to Memo1.Lines.Count do
Du meinst bestimmt -1
Delphi-Quellcode:
var
I, PosReturn, SkipChars: Integer;
begin
Skipchars := 0;
for I := 0 to Memo1.Lines.Count - 1 do
begin
PosReturn := Pos(FindDialog1.FindText, Memo1.Lines[I]);
if PosReturn <> 0 then
begin
Memo1.SetFocus;
Memo1.SelStart := SkipChars + PosReturn - 1;
Memo1.SelLength := Length(FindDialog1.FindText);
Break;
end;
//Inc(Skipchars, Length(Memo1.Lines[J]) + Length(sLineBreak);
Inc(Skipchars, Length(Memo1.Lines[J]) + Length(Memo1.Lines.LineBreak);
end;
Delphi-Quellcode:
var
PosReturn: Integer;
begin
PosReturn := Pos(FindDialog1.FindText, Memo1.Text);
if PosReturn <> 0 then
begin
Memo1.SetFocus;
Memo1.SelStart := PosReturn - 1;
Memo1.SelLength := Length(FindDialog1.FindText);
end;
end;
Und bezüglich des Weitersuchens ist es über .Text einfacher, da man sich dort nur eine Startposition merken/besorgen muß.
Nei der zeilenweisen Behandlung muß diese Position ja erstmal in Zeile+Spalte zerlegt werden, oder man merkt sich die Anzahl der vorherrigen Funde und muß dann jesemal komplett neu suchen und beim gewünschten Fund abbrechen.
Delphi-Quellcode:
var
PosReturn: Integer;
begin
if SucheVonVorn then
PosReturn := Pos(FindDialog1.FindText, Memo1.Text)
else
PosReturn := PosEx(FindDialog1.FindText, Memo1.Text,
Memo1.SelStart + Memo1.SelLength - 1);
if PosReturn <> 0 then
begin
Memo1.SetFocus;
Memo1.SelStart := PosReturn - 1;
Memo1.SelLength := Length(FindDialog1.FindText);
end;
end;
PS: Nicht mehrfach inder Schleife auf Memo1.Text und niemals auf Memo1.Lines.Text zugreifen ... wenn, dann Memo1.Text vorher in eine Stringvariable kopieren und Diese verwenden.