Показать сообщение отдельно
  #4  
Старый 21.03.2017, 09:06
Аватар для ffpereverzev
ffpereverzev ffpereverzev вне форума
Новичок
 
Регистрация: 14.02.2017
Сообщения: 50
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Откорректировал процедуру поиска текста:

Код:
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, то выделение слова полностью соответствует искомому, но как только поиск начинается за видимой областью, то каретка (и выделение) начинают свое движение. То есть выделение сдвигается относительно искомого слова вправо. И чем дальше поиск - тем больше сдвиг.
Ответить с цитированием