AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Memo durchsuchen

Ein Thema von smart · begonnen am 26. Dez 2010 · letzter Beitrag vom 26. Dez 2010
 
Benutzerbild von himitsu
himitsu

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

AW: Memo durchsuchen

  Alt 26. Dez 2010, 10: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.
Ein Therapeut entspricht 1024 Gigapeut.

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


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz