Здравствуйте. Нужно написать программу для процедуры поиска в richedit1 функции Найти далее, причем, идентичность возможностям оной в Word'e должна быть полная. В интернете повсюду нахожу только кусками разные части нужного кода. При совмещении крыша едет набекрень
Вот что намалевал. Работает, но спустя несколько замен поисковых слов, начинает работать некорректно.
До регистра и примочек дела нет, это уже дело десятое. Искал бы нормально и упорядоченно и то неплохо было бы.
В коде, наверное, черт ногу сломит, но хоть идею подскажите, как по-человечески написать, пожалуйста.
Код:
var
i,j,l,m,p,flag:integer;
k:array[1..1000] of integer;
s:array[1..1000] of string;
procedure TForm1.N20Click(Sender: TObject);
begin
p:=1; flag:=0; l:=1; m:=0;
FindDialog1.Execute;
end;
procedure TForm1.FindDialog1Find(Sender: TObject);
begin
inc(m);
s[m]:=finddialog1.findtext;
richedit1.Text:=richedit1.text+s[m];
if s[m]<>s[m-1] then
begin
flag:=0;
for i:=1 to p do k[i]:=0;
p:=1;
end;
with richedit1 do
for i:=1 to length(text) do
begin
if text[i]=finddialog1.findtext[1] then
for j:=1 to length(finddialog1.findtext) do
if text[i+j-1]=finddialog1.findtext[j] then inc(k[p]);
if k[p]=length(finddialog1.findtext) then begin k[p]:=i-1; inc(p); end else k[p]:=0
end;
if p-1=0 then showmessage('Закончен просмотр элемента. искомый элемент не найден')
else
with richedit1 do
begin
HideSelection := False;
if flag=1 then
begin
inc(l);
SelStart := k[l];
end
else selstart:=k[l];
SelLength := Length(FindDialog1.FindText);
end;
flag:=1;