TCustomRichView.SearchText, SearchTextA, SearchTextW

<< Нажмите, чтобы показать Содержание >>

TCustomRichView.SearchText, SearchTextA, SearchTextW

Выполняют поиск строки s в документе.

function SearchText(s: String;

  SrchOptions: TRVSearchOptions): Boolean;

function SearchTextA(s: TRVAnsiString;

  SrchOptions: TRVSearchOptions): Boolean;

function SearchTextW(s: TRVUnicodeString;

  SrchOptions: TRVSearchOptions): Boolean;

Когда строка найдена, эти методы выделяют её и прокручивают окно, чтобы показать выделение. Это поведение можно изменить в событии OnTextFound, см. ниже.

Если опция rvsroDown не включена в SrchOptions, методы выполняют поиск вверх по документу. Если включена, методы выполняют поиск вниз по документу.

Если опция rvsroFromStart включена в SrchOptions, поиск начинается с начала/конца документа. В противном случае, методы начинают поиск с текущего выделенного фрагмента*, если он существует. Если ничего не выделено, методы начинают поиск с первого видимого элемента документа (при поиске вниз) или с последнего видимого элемента (при поиске вверх).

Опция rvsroSmartStart используется только в том случае, если опция rvsroFromStart не включена. Если rvsroSmartStart включена и в документе есть выделение*, то:

при поиске вниз поиск начинается со второго выделенного* символа;

при поиске вверх поиск начинается с предпоследнего выделенного* символа.

(выделенные символы отсчитываются от начала документа, направление выделения игнорируется). Эта опция позволяет избежать повторного выделения одного и того же фрагмента при изменении направления поиска.

* если опция rvsroFromStored включена в SrchOptions, сохранённая позиция последнего результата поиска используется вместо выделенного фрагмента.

Если опция rvsroMultiItem включена, поиск может находить подстроку, образованную несколькими соседними текстовыми элементами. Если не включена, поиск выполняется в каждом текстовом элементе отдельно. Например, если документ содержит текст Привет, подстрока 'Привет' может быть найдена только при включении этой опции, поскольку 'При' и 'вет' относятся к разным элементам.

 

unicode Примечание про Юникод:

В компоненте строки хранятся в юникодном формате. SearchTextA конвертирует s в Юникод и вызывает SearchTextW. Кодировка для конвертации задаётся кодовой страницей Style.DefCodePage.

SearchText работает:

как SearchTextA в Delphi 2007 и старее

как SearchTextW в Delphi 2009 и новее

со строками в кодировке UTF-8 в Lazarus.

 

Примечание: Существует несовместимость с программами, написанными с использованием более старых версий TRichView (1.0 – 1.1.4). Теперь, если опция rvsroDown не включена в SrchOptions, методы выполняют поиск вверх. В более старых версиях опции rvsroDown не было, и SearchText выполнял поиск только вниз.

 

Когда текст найден, вызывается событие OnTextFound. Если обработчик события не запрещает, найденный текст выделяется. Для выделения требуется отформатированный документ, поэтому (если вы не выполняете собственную обработку в OnTextFound и не запрещаете выделение) эти методы должны вызываться только тогда, когда документ отформатирован.

 

Как было сказано выше, при обычном использовании методы требуют форматированный документ. Но есть сценарий, когда форматирование не обязательно. Первый вызов должен быть сделан с опцией rvsroFromStart. В обработчике события OnTextFound нужно запомнить позицию найденной строки методом StoreSearchResult и запретить выделение текста. Последующие вызовы аналогичны, но с опцией rvsroFromStored вместо rvsroFromStart.

 

Возвращаемое значение:

«Найдена ли строка?»

 

См. также методы TRichViewEdit:

SearchText, -A, -W

См. глобальные функции:

GetRVSearchOptions.

См. также:

Поиск в TRichView и TRichViewEdit.