Исходники.Ру - Программирование
Исходники
Статьи
Книги и учебники
Скрипты
Новости RSS
Магазин программиста

Главная » Статьи по программированию » Delphi - Все статьи »

Обсудить на форуме Обсудить на форуме

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

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

Итак, на форме должны быть 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;

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


Может пригодится:


Автор: Предводителев Сергей
Прочитано: 5691
Рейтинг:
Оценить: 1 2 3 4 5

Комментарии: (0)

Добавить комментарий
Ваше имя*:
Ваш email:
URL Вашего сайта:
Ваш комментарий*:
Код безопастности*:

Рассылка новостей
Рейтинги
© 2007, Программирование Исходники.Ру