Ich schreib garde an nem aufgemotzten Windows Editor.
Und dazu muss ich ja auch in dem Memo nach Wörtern suchen.
Nun bietet ja Richedit eine kleine Funktion die Findtext heist, aber wie ich feststellen musste besitzt Memo die Funktion nicht.
Also hab ich das Internet angeschmissen und hier im Forum gesucht und wieder Erwarten nichts passendes gefunden(Hinweise auf pos() zählen da mit drunter).
Ihr könnt mich natürlich eines Besseren belehren
Lange Rede kurzer Unsinn.... hab ich mir die Funktion halt selber geschreiben:
AMemo: Memo in dem gesucht wird
Search_Text:zu suchender Text
Direction: Suchrichtung (true=vorwärts,false=rückwärts)
Case_Sensitiv: Groß und Kleinschreibung beachten/missachten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49:
| function MemoFindText(AMemo:TMemo;Search_Text:string;Direction,Case_Sensitiv:bool):integer; var sstart,slength,sendpos,i:integer; cut:string; c:char; begin sstart:=AMemo.SelStart; slength:=AMemo.SelLength; sendpos:=length(AMemo.lines.text); if Case_sensitiv=false then ansilowercase(Search_Text); if direction=true then begin for i:=sstart+slength to sendpos do begin c:=AMemo.lines.text[i]; if Case_sensitiv=false then c:=ansilowercase(c)[1]; if c=Search_Text[1] then begin cut:=copy(AMemo.lines.text,i,length(Search_text)); if Case_sensitiv=false then cut:=ansilowercase(cut); if cut=Search_text then begin result:=i-1; exit; end; end; end; end else begin for i:=sstart-slength downto 0 do begin c:=AMemo.lines.text[i]; if Case_sensitiv=false then c:=ansilowercase(c)[1]; if c=Search_Text[1] then begin cut:=copy(AMemo.lines.text,i,length(Search_text)); if Case_sensitiv=false then cut:=ansilowercase(cut); if cut=Search_text then begin result:=i-1; exit; end; end; end; end; result:=-1;end; |
Die Funktion läuft ganz gut. Sie liefert die Anfangsposition des gesuchen Wortes wieder.
ABER bei großen Datei wird sie leider sehr langsam
Habt ihr irgendwelche Ideen wie man diese Funktion optimieren kann ?