Показать сообщение отдельно
  #1  
Старый 15.11.2012, 17:48
I, Dementia I, Dementia вне форума
Прохожий
 
Регистрация: 15.11.2012
Сообщения: 1
Репутация: 10
По умолчанию Полноценная функция MS Word "Найти далее", richedit1

Здравствуйте. Нужно написать программу для процедуры поиска в 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;
Ответить с цитированием