Откорректировал процедуру поиска текста:
Код:
procedure TForm1.FindDialog1Find(Sender: TObject);
begin
with FindDialog1 do
begin
RichEdit1.SelStart := Pos(AnsiLowerCase(FindText),
AnsiLowerCase(Copy(RichEdit1.Lines.Text, SPos + 1, Length(RichEdit1.Lines.Text)))) + SPos - 1;
if RichEdit1.SelStart >= SPos then
begin
RichEdit1.SelLength := Length(FindText); { Выделение найденного текста }
SPos := RichEdit1.SelStart + RichEdit1.SelLength + 1; { Изменение начальной позиции поиска }
RichEdit1.Perform(EM_SCROLLCARET,0,0);
RichEdit1.SetFocus;
end
else
if MessageDlg('Текст "' + FindText + '" не найден. Продолжать поиск?',
mtConfirmation, mbYesNoCancel, 0) <> mrYes then
CloseDialog;
end;
RichEdit1.SetFocus;
end;
Теперь скроллбар прокручивается нормально, но появилась новая напасть: пока поиск идет в видимой части RichEdit, то выделение слова полностью соответствует искомому, но как только поиск начинается за видимой областью, то каретка (и выделение) начинают свое движение. То есть выделение сдвигается относительно искомого слова вправо. И чем дальше поиск - тем больше сдвиг.