Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > RichEdit: проблема с FindText


Автор: Alexeyt 31.12.2008, 15:00
Делаю поиск в RichEdit (текст в UTF8, поддерживается RichEdit WinXP SP2).
Файл выложен http://atorg.net.ru/temp/Find_next_UTF8.txt.

Первый поиск буквы "а" (английской): успешно.
Поиск далее (от смещения найденного + 1): неудачно - в этом проблема.
Т.е. поиск далее всегда ничего не находит в этом файле. Можно и более длинные слова искать.

В коде ищу через метод TRichEdit.FindText.


Автор: Rrader 1.1.2009, 09:44
Код из справки вроде работает smile 
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  FindDialog1.Position := Point(RichEdit1.Left + RichEdit1.Width, RichEdit1.Top);
  FindDialog1.Execute;
end;

procedure TForm1.FindDialog1Find(Sender: TObject);
var
  FoundAt: LongInt;
  StartPos, ToEnd: Integer;
begin
  with RichEdit1 do
  begin
    { Begin the search after the current selection if there is one }
    { Otherwise, begin at the start of the text }
    if SelLength <> 0 then
      StartPos := SelStart + SelLength
    else
      StartPos := 0;
    { ToEnd is the length from StartPos to the end of the text in the rich edit control }
    ToEnd := Length(Text) - StartPos;
    FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd, [stMatchCase]);
    if FoundAt <> -1 then
    begin
      SetFocus;
      SelStart := FoundAt;
      SelLength := Length(FindDialog1.FindText);
    end;
  end;
end;

Автор: Alexeyt 1.1.2009, 10:55
Код из справки работает не совсем. Он находит "а", но не находит второе вхождение "ap" (в слове Apollo в конце файла, ссылка выше). Или просто "Apollo". Опцию MatchCase я убрал.

ОТличия от моего:
У меня был поиск до MaxInt, а в коде - до Length(Text) - StartPos. В случае UTF-8 файла такое число возможно некорректно.

Добавлено @ 11:08
Решение: искать надо до MaxInt - StartPos.
Тогда ищет корректно...


Автор: Nastroenie 18.5.2009, 13:29
а можно коментарии к данному коду на русском языке, не совсем понятен алгоритм поиска с заменой

Автор: Alexeyt 18.5.2009, 15:42
проблема решена, см выше, комментировать что-то нет смысла.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)