Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2008, 05:58   #1
Rigard
 
Регистрация: 20.07.2008
Сообщений: 5
По умолчанию Поиск в тексте

как зделать поиск в тексте (memo1 ) с помощью FindDialog и кнопочки ? Заранее огромное спасибо!
(найденый текст должен выделяться другим цветом[как в блокноте])
...::: Читеры правят миром! :::...
Rigard вне форума Ответить с цитированием
Старый 27.07.2008, 14:13   #2
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

В Memo встроенной поддержки форматированного текста, используй RichEdit с вкладки Win32, у него есть метод FindText
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 27.07.2008, 22:02   #3
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Код:
//Вызов поиска
procedure TForm1.N10Click(Sender: TObject);
begin
  Spos:=memo1.SelStart;//Запоминание позиции курсора
  with finddialog1 do
  begin
    // Начальное значение поиска текста, выделенный в Мемо
    findtext:=memo1.SelText;
    //позиция окна поиска по центру программы
    position:=point(((Screen.ActiveForm.Left+(screen.ActiveForm.Width div 2))-(374 div 2)),((Screen.ActiveForm.Top + (Screen.ActiveForm.Height div 2))-(134 div 2)));
    //удаление из диалога кнопок “Вверх”, “Вниз”, “Только слово цылеком”
    options:=options+ [frhideupdown,frhidewholeword] ;
    execute;//запуск диалога
  end;
end;

//событие диалога FindDialog "onFind"
procedure TForm1.FindDialog1Find(Sender: TObject);
begin
  with finddialog1 do begin
    if frmatchcase in options then
    //поискс с учётом регистра
      Memo1.SelStart:=pos(findtext,copy(memo1.Lines.Text,spos+1,Length(memo1.Lines.text)))+spos-1
    else
    //поиск без учета регистра
      Memo1.SelStart:=pos(ansilowercase(findtext),ansilowercase(copy(memo1.Lines.Text,spos+1,Length(memo1.Lines.text))))+spos-1;
     //выделение найденного текста
    if memo1.SelStart>=spos then begin memo1.SelLength:=Length(findtext);
    //изменение начальной позиции поиска
    spos:=memo1.SelStart + memo1.SelLength+1;
    end else
    MessageBeep(MB_ICONASTERISK);
    MessageDlg('Вашь текст ненайден', mtInformation, [mbOk], 0);
    memo1.SetFocus;
  end;
end;
dr.Chas вне форума Ответить с цитированием
Старый 14.10.2008, 18:22   #4
Claster
Форумчанин
 
Аватар для Claster
 
Регистрация: 02.09.2008
Сообщений: 340
По умолчанию

Применил данный код не к мемо а к Ричедиту, spos обьявил как integer так как писал что неизвестный идентификатор. Всё компилит но выводит всеровно что текст не найден!!! даже если такая строка есть!
Цитата:
- Только сисадмин может попросить у начальства 20$ на память...
Claster вне форума Ответить с цитированием
Старый 14.10.2008, 19:05   #5
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

скорей всего SPos нужно записать так:
Код:
...........................................
    { Public declarations }
  end;

var SPos :Integer; // <<<<<<=
  Form1: TForm1;

implementation

{$R *.dfm}
...........................................
Alter вне форума Ответить с цитированием
Старый 14.10.2008, 21:15   #6
Claster
Форумчанин
 
Аватар для Claster
 
Регистрация: 02.09.2008
Сообщений: 340
По умолчанию

Всеровно ничего, всего лишь поменялось то что я их обьявил глобально а не в теле процедуры, действие аналогично ничего не происходит пишиться лишь текст постоянно Вашь текст ненайден',
Цитата:
- Только сисадмин может попросить у начальства 20$ на память...
Claster вне форума Ответить с цитированием
Старый 14.10.2008, 23:02   #7
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

поиск начинается с позиции каретки в Memo, по коду.
Alter вне форума Ответить с цитированием
Старый 15.10.2008, 00:00   #8
Claster
Форумчанин
 
Аватар для Claster
 
Регистрация: 02.09.2008
Сообщений: 340
По умолчанию

Вот взял с учебника код попроще!!! Ищет и выделяен необходимое нам слово

Код:
procedure TForm1.FindDialog1Find(Sender: TObject);
begin
if pos(FindDialog1.FindText,RichEdit1.Text)<>0 then
begin
RichEdit1.HideSelection:=false;
RichEdit1.SelStart:=pos(FindDialog1.FindText,RichEdit1.Text)-1;
RichEdit1.SelLength:=Length(FindDialog1.FindText);
end
else MessageDlg('Строка '+FindDialog1.FindText+' не найдена!', mtConfirmation, [mbYes], 0);

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
FindDialog1.Execute;
end;
Цитата:
- Только сисадмин может попросить у начальства 20$ на память...
Claster вне форума Ответить с цитированием
Старый 15.10.2008, 00:06   #9
Роман Радер
Форумчанин
 
Аватар для Роман Радер
 
Регистрация: 16.12.2006
Сообщений: 859
По умолчанию

так учитывается регистр принудительно.
лучше так, как говорили раньше в постах
Роман Радер вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
картинка в тексте Prisian Общие вопросы Delphi 2 05.10.2007 14:01
Поиск слов в тексте pleer Общие вопросы Delphi 5 23.09.2007 08:19
Help! Вопрос о выделенном тексте. enot Общие вопросы Delphi 5 10.09.2007 16:27
Смена кодировок в тексте r-sol Общие вопросы Delphi 3 06.04.2007 11:55