В общем, заработал поиск. Спасибо всем за советы и предложения! Выкладываю рабочий код для FindDialog. Авось, кому пригодится:
Код:
// Вызов окна поиска
procedure TForm1.Button5Click(Sender: TObject);
begin
SPos := RichEdit1.SelStart; { Запоминание позиции курсора }
with FindDialog1 do
begin
FindText := RichEdit1.SelText; { Начальное значение текста поиска - текст, выделенный в RichEdit }
Position := Point(Form1.Left, Form1.Top + RichEdit1.Top + RichEdit1.Height); { Позиционирование окна диалога внизу RichEdit }
Execute; { Выполнение }
end;
end;
// Обработка поискового запроса
procedure TForm1.FindDialog1Find(Sender: TObject);
var
FoundAt: LongInt;
StartPos, ToEnd: Integer;
mySearchTypes : TSearchTypes;
begin
mySearchTypes := [];
with RichEdit1 do
begin
if frMatchCase in FindDialog1.Options then
mySearchTypes := mySearchTypes + [stMatchCase];
if frWholeWord in FindDialog1.Options then
mySearchTypes := mySearchTypes + [stWholeWord];
{ Начать поиск с текущего положения каретки }
{ в противном случае начать с начала текста}
if SelLength <> 0 then
StartPos := SelStart + SelLength
else
StartPos := 0;
ToEnd := Length(Text) - StartPos;
FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd, mySearchTypes);
if FoundAt <> -1 then
begin
SetFocus;
SelStart := FoundAt;
SelLength := Length(FindDialog1.FindText);
end
else Application.MessageBox ('Поиск окончен!', 'Результат', mb_Ok + mb_IconAsterisk);
end;
end;