СообЧа > База Знаний > Программирование > Delphi

Вопрос

Как реализовать поиск текста в RichEdit с помощью FindDialog'a?

Ответ

var SPos: Integer; procedure TForm1.FindDialog1Find(Sender: TObject); begin with FindDialog1 do begin if frMatchCase in Options then { Поиск с учетом регистра } RichEdit1.SelStart := Pos(FindText, Copy(RichEdit1.Lines.Text, SPos + 1, Length(RichEdit1.Lines.Text))) + SPos — 1 else { Поиск без учета регистра } 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; { Изменение начальной позиции поиска } end else if MessageDlg('Текст "' + FindText + '" не найден. Продолжать диалог?', mtConfirmation, mbYesNoCancel, 0) <> mrYes then CloseDialog; end; RichEdit1.SetFocus; end; procedure TForm1.Button1Click(Sender: TObject); begin SPos := RichEdit1.SelStart; { Запоминание позиции курсора } with FindDialog1 do begin FindText := RichEdit1.SelText; { Начальное значение текста поиска — текст, выделенный в RichEdit } Position := Point(Form1.Left, Form1.Top + RichEdit1.Top + RichEdit1.Height); { Позиционирование окна диалога внизу RichEdit } Options := Options + [frHideUpDown, frHideWholeWord]; { Удаление из диалога кнопок "Вверх", "Вниз", "Только слово целиком" } Execute; { Выполнение } end; end;

В программе вводится переменная SPos, сохраняющая позицию, начиная с которой надо проводить поиск. При нажатии на кнопку появляется диалог, процедура FindDialog1Find (событие OnFind) обеспечивает поиск с учетом или без учета регистра в зависимости от флага frMatchCase. После нахождения очередного вхождения искомого текста этот текст выделяется в окне RichEdit и управление передается этому окну редактирования. Затем при нажатии пользователем в диалоговом окне кнопки «Найти далее», поиск продолжается в оставшейся части текста. Если искомый текст не найден, делается запрос пользователю о продолжении диалога. Если пользователь не ответил на этот вопрос положительно, то диалог закрывается методом CloseDialog.

При ответе использована книга «Программирование в Delphi 5» Архангельского А.Я.

Из конференции Expert_FAQ



Copyright © 2000-2004 Сообщество Чайников
Контактная информация