Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.081 Beiträge
 
Delphi 12 Athens
 
#3

AW: Memo durchsuchen

  Alt 26. Dez 2010, 11:55
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (26. Dez 2010 um 11:58 Uhr)
  Mit Zitat antworten Zitat