![]() |
Memo durchsuchen
Ich suche eine ganz einfache Suchfunktion die einen Text in einem Memo durchsucht aber auch dopelte vorkommende Wörter markiert.
Delphi-Quellcode:
Habe hier mal was gefunden. sucht aber leider keine doppelten Wörter raus :-(
var
I, J, PosReturn, SkipChars: Integer; begin for I := 0 to Memo1.Lines.Count do begin PosReturn := Pos(FindDialog1.FindText,Memo1.Lines[I]); if PosReturn <> 0 then {gefunden!} begin Skipchars := 0; for J := 0 to I - 1 do Skipchars := Skipchars + Length(Memo1.Lines[J]); SkipChars := SkipChars + (I*2); SkipChars := SkipChars + PosReturn - 1; Memo1.SetFocus; Memo1.SelStart := SkipChars; Memo1.SelLength := Length(FindDialog1.FindText); Break; end; end; |
AW: Memo durchsuchen
Schau dir mal PosEx() an
|
AW: Memo durchsuchen
Zitat:
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:
Und bezüglich des Weitersuchens ist es über .Text einfacher, da man sich dort nur eine Startposition merken/besorgen muß.
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; 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:
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.
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; |
AW: Memo durchsuchen
Ein TMemo kann nur einen best. Bereich markiert darstellen.
Man könnte auf ein TRichEdit ausweichen und alle gefundenen Textstellen unterstreichen oder auch farblich hevorheben. |
AW: Memo durchsuchen
Vielen Dank, für die ausgibigen Tipps. War sehr lehreich! Danke.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:03 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