В RichEdit в качестве текста вставлял твой же код. Находит все че хочешь
Код:
procedure TForm1.Button1Click(Sender: TObject);
var n : longint;
T : array[0..40000] of char;
ss,sss:string;
begin
{for l1:=0 to richedit1.Lines.Count-1 do begin}
ss:=RichEdit1.Text;
for i:=0 to length(ss)-1 do begin
T[i]:=ss[i];
end;
sss:=Edit1.text;
for i:=0 to length(sss) do begin
S[i]:=sss[i];
end;
m:=length(sss);
//Prefix;
k:=0;
n:=length(ss);
for i:=0 to n do begin
while (k>0) and (S[k+1]<>T[i]) do
k:=P[k];
if S[k+1]=T[i] then
k:=k+1;
if k=m then begin
//showmessage('vhodit');
with RichEdit1 do begin
SetFocus;
SelStart:=i-m;
Perform(EM_SCROLLCARET,0,0); //это для прокрутки (если найденное слово вне видимой области)
SelLength:= Length(sss);
end;
k:=P[k];
sleep(400); //это чтобы успеть посмотреть,
//как выделяется найденное
end;
end;
{end;}
end;