Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11639
Последний выпуск: 19.06.2015

Организация функции ПОИСК в TMemo

Автор: Предводителев Сергей /Niko/
Источник: http://niko.net.ru/
2003 год

Представленный ниже код я использовал при написании текстового редактора. Всё вроде работает.

Итак, на форме должны быть TMemo (Editor), TFindDialog (FindDialog) и TButton (Button).

Сначала напишем обработчик нажатия на кнопку:

procedure TForm1.ButtonClick(Sender: TObject);
begin
 FindDialog.Execute; // Открытие диалога Поиск
end;

В свойствах диалога должны быть True опции frHideWholeWord (Скрыть в диалоге выбор флажка "Только слово целиком"), frHideMatchCase (Скрыть в диалоге выбор флажка "С учётом регистра") и frDown (по-умолчанию направление поиска вниз), все остальные опции должны быть False.

В Editor свойство HideSelection должно быть False.

Теперь напишем обработчик на нажатие кнопки Найти далее в диалоге Поиск.

Должны быть описаны следующие переменные и метки:

var
 SelPos,X,i:integer;
 s,textE:string;
label 1;

Для начала посмотрим, в каком направлении нужно искать и соответственно выберем текст в котором надо искать:

if frDown in FindDialog.Options
 then Editor.SelStart:=Editor.SelStart+Editor.SelLength; // это для "поиск далее"
textE:=Editor.Text;
X:=Editor.SelStart+1;
if frDown in FindDialog.Options
 then
  textE:=Copy(textE,X,Length(textE)-X+1)
 else
  textE:=Copy(textE,0,X-1);
s:=FindDialog.FindText; // переменной s присваивается строка, которую нужно найти

Теперь напишем код собственно поиска:

if frDown in FindDialog.Options
 then
{ код поиска вниз }
  begin
   SelPos := Pos(s,textE);
   if SelPos > 0
    then
     begin
      Editor.SelStart := SelPos + X - 2;
      Editor.SelLength:=length(s);
     end
    else ShowMessage(pchar('Текст "'+ FindDialog.FindText+'" не найден.'));
  end
 else
{ код поиска вверх } 
  begin
   for i:=length(textE)-length(s) downto 1 do
    if copy(textE,i,length(s))=s
     then
      begin
       Editor.SelStart := i-1;
       Editor.SelLength:=Length(s);
       goto 1;
      end;
   ShowMessage(pchar('Текст "'+ FindDialog.FindText+'" не найден.'));
   1:
  end;

Если строка найдена, то она выделяется, если нет, то выдаётся соответствующее сообщение.

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
Аноним
Мне нравитсяМне не нравится
10 ноября 2005, 14:10:50
а как же поиск слова типа "EdIt"?
если в поиске мы пишем Edit или edit.
Такой способ поиска ищет только точное название слова или символов!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог