18.5.7. TFindDialog - диалог поиска

Стандартное диалоговое окно компонента TFindDialog используется для поиска фрагмента текста (рис. 18.43).

Свойства компонента:

property FindText: String; | Указывает образец для поиска
property Left: Integer; | Содержит горизонтальную позицию левого верхнего угла места появления окна
property Options: TFindOptions; | Определяет настройку диалога (см. ниже)
property Position: TPoint; | Содержит горизонтальную и вертикальную позицию левого верхнего угла места появления окна
property Top: Integer; | Содержит вертикальную позицию левого верхнего угла места появления окна

Для компонента определен следующий тип, использующийся в свойстве options:

TFindOption = (frDown, frFindNext, frHideMatchCase, frHideWholeWord, frHideUpDown, frMatchCase, frDisableMatchCase, frDisableUpDown, frDisableWholeWord, frReplace, frReplaceAll, frWholeWord, frShowHelp) ;

TFindOptions = set of TFindOption;

Рис. 18.43 . Стандартное окно компонента TFindDialog

Его значения имеют следующий смысл:

frDown frFindNext | Устанавливает поиск вперед по тексту
frHideMatchCase | Сообщает программе, что пользователь нажал кнопку Найти далее Убирает выбор в переключателе с учетом регистра
frHideWholeWord | Убирает выбор в переключателе только слово целиком
frHideUpDown | Прячет кнопки выбора направления поиска
frMatchCase | Устанавливает выбор в переключателе с учетом регистра
frDisableMatchCase | Запрещает выбор С учетом регистра
frDisableUpDown | Запрещает выбор направления поиска
frDisableWholeWord | Запрещает выбор только слово целиком
frReplace | Используется в компоненте TReplacteDialog и указывает на необходимость замены текущего выбора
frReplaceAll | Используется в компоненте TreplaceDialog и указывает на необходимость замены всех вхождений образца поиска
frWholeWord | Устанавливает выбор в переключателе Только слово целиком.
frShowHelp | Включает в окно кнопку Help

Спецификой диалога является реализуемая им возможность просмотра найденного фрагмента и при необходимости продолжение поиска. С этой целью для компонента определено событие OnFind:

TNotifyEvent, которое возникает всякий раз, когда пользователь нажимает кнопку найти далее. Обработчик события должен найти образец в тексте и показать его пользователю. Пусть, например, компонент Memol содержит отыскиваемый фрагмент и поиск идет с учетом регистра. Тогда обработчик может иметь такой вид:

procedure TFormI.FindDialoglFind(Sender: TObject);

var

SelPos: Integer;

begin

with TFindDialog(Sender) do

begin

// Ищем фрагмент в тексте

SelPos := Pos(FindText, Memol-Lines.Text);

if SelPos > 0 then

begin // Фрагмент найден - выделяем его

Memol.SelStart := SelPos - 1;

Memol.SelLength := Length(FindText);

end

else

ShowMessage ('Текст "' + FindText + '"не найден')

end;

end;