|
<< Нажмите, чтобы показать Содержание >> TCustomRichViewEdit.SearchText, SearchTextA, SearchTextW |
Выполняют поиск строки s в документе.
function SearchText(s: String;
SrchOptions: TRVESearchOptions): Boolean;
function SearchTextA(s: TRVAnsiString;
SrchOptions: TRVESearchOptions): Boolean;
function SearchTextW(s: TRVUnicodeString;
SrchOptions: TRVESearchOptions): Boolean;
Когда строка найдена, эти методы выделяют её и прокручивают окно, чтобы показать выделение. Это поведение можно изменить в событии OnTextFound, см. ниже.
Если нет выделенного* фрагмента, методы начинают поиск с позиции каретки*, вверх или вниз по документу, в зависимости от параметра SrchOptions.
Если есть выделение*, используется опция rvseoSmartStart. Если она включена:
▪при поиске вниз поиск начинается со второго выделенного* символа;
▪при поиске вверх поиск начинается с предпоследнего выделенного* символа.
(выделенные символы отсчитываются от начала документа, направление выделения игнорируется). Эта опция позволяет избежать повторного выделения одного и того же фрагмента при изменении направления поиска.
* если опция rvseoFromStored включена в SrchOptions, сохранённая позиция последнего результата поиска используется вместо выделенного фрагмента.
Если опция rvseoMultiItem включена, поиск может находить подстроку, образованную несколькими соседними текстовыми элементами. Если не включена, поиск выполняется в каждом текстовом элементе отдельно. Например, если документ содержит текст Привет, подстрока 'Привет' может быть найдена только при включении этой опции, поскольку 'При' и 'вет' относятся к разным элементам.
Примечание про Юникод:
В компоненте строки хранятся в юникодном формате. SearchTextA конвертирует s в Юникод и вызывает SearchTextW. Кодировка для конвертации задаётся кодовой страницей Style.DefCodePage.
SearchText работает:
▪как SearchTextA в Delphi 2007 и старее
▪как SearchTextW в Delphi 2009 и новее
▪со строками в кодировке UTF-8 в Lazarus.
Эти методы также можно использовать для поиска и замены. SearchText выделяет найденную строку, а InsertText заменяет её новой. См. важное примечание о поиске и замене в направлении снизу вверх в разделе, посвящённом InsertText.
Примечание: Существует несовместимость с программами, написанными с использованием более старых версий TRichView (1.0 – 1.1.4). Теперь, если опция rvseoDown не включена в SrchOptions, методы выполняют поиск вверх. В более старых версиях опции rvseoDown не было, и SearchText выполнял поиск только вниз.
Когда текст найден, вызывается событие OnTextFound. Если обработчик события не запрещает, найденный текст выделяется. Для выделения требуется отформатированный документ, поэтому (если вы не выполняете собственную обработку в OnTextFound и не запрещаете выделение) эти методы должны вызываться только тогда, когда документ отформатирован.
Как было сказано выше, при обычном использовании SearchText требует форматированный документ. Но есть сценарий, когда форматирование не обязательно. Первый вызов должен быть сделан с опцией rvseoFromStart. В обработчике события OnTextFound нужно запомнить позицию найденной строки методом StoreSearchResult и запретить выделение текста. Последующие вызовы аналогичны, но с опцией rvseoFromStored вместо rvseoFromStart.
Возвращаемое значение:
«Найдена ли строка?»
См. также:
▪TRichView.SearchText, -A, W;
▪глобальная функция GetRVESearchOptions;