Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > TFindDialog


Автор: mr.Anderson 2.1.2006, 18:57
Плиз, подскажите, как заставить его работать?! Вызвать-то его функцией Execute() не так сложно. А вот как сделать, чтобы он в TRichEdit искал и выделял?

Так. Это получилось сделать. Но есть проблема: он выделяет текст только после нажатия кнопки "отмена" в диалоговом окне поиска. А должен прямо как найдет. Как это сделать?

Автор: BreakPointMAN 2.1.2006, 20:17
Покажи, что и как ты там сделал... smile

Автор: mr.Anderson 2.1.2006, 20:28
Код

if(FindDialog1->Execute())
 {
  RichEdit1->SelStart=RichEdit1->Text.Pos(FindDialog1->FindTextA)-1;
  RichEdit1->SelLength=FindDialog1->FindTextA.Length();
 }

Автор: Partizan 3.1.2006, 01:28
Тебе следует это всё запихнуть в обработчик события OnFind smile (Само собой кроме FindDialog1->Execute();)

Автор: BreakPointMAN 3.1.2006, 01:39
sim7, почитай Архангельского... в конце концов, сколько можно?.. почти все вопросы, которые ты задаешь, в книге "Программирование в C++ Builder" у него рассмотрены прекрасно... а еще примеры, поставляемые с самим Builder'ом посмотри, кажется, там было с поиском что-то... smile

Автор: mr.Anderson 3.1.2006, 19:54
Partizan, я уже пробовал. Все равно выделение происходит после выхода из диалогового окна поиска. А не до этого.

BreakPointMAN, я уже второй день разыскиваю, где эту книженцию скачать. Старая ссылка (из раздела этого форума "Литература") уже не работает. Может, вы дадите?

Автор: codelord 3.1.2006, 20:50
http://www.megaupload.com/ru/?d=UL2R8FYL
там надо немного подождать (сек 40 )после чего нажать появившуюся кнопочку для закачки

Автор: Partizan 3.1.2006, 23:21
Цитата(sim7 @ 3.1.2006, 19:54)
Partizan, я уже пробовал. Все равно выделение происходит после выхода из диалогового окна поиска. А не до этого.

smile эххх...зелень(не обижайся smile это я так...любя...)..

Первое, что приходит в голову - передать фокус RichEditу...впоследствии можно возвращать фокус в FindDialog...
Код

  RichEdit1->SelStart=RichEdit1->Text.Pos(FindDialog1->FindTextA)-1;
  RichEdit1->SelLength=FindDialog1->FindTextA.Length();
  RichEdit1->SetFocus();


p.s. кстати...не забудь, что пользователь ждёт при каждом нажатии "Найти далее" следующего вхождения в тексте...поэтому надо реалиховать обработчик метода OnFind соответствующим образом...то есть чтобы всё было красиво, код нужно немного поменять...

Автор: mr.Anderson 4.1.2006, 17:40
Цитата
код нужно немного поменять

Вввввв, как же я не люблю намеки... smile Особенно в программировании. В каком смысле чуток поменять? Это как? Хоть принцип какой?

Автор: Guest 5.1.2006, 10:31
smile klassnie smily smile

Автор: mr.Anderson 5.1.2006, 17:24
Спасибо, Guest, мне сильно помог ваш ответ.

В общем, у меня все получилось. Отдельное спасибо Codelord'у, предоставившему мне примеры, в которых мне удалось разобраться.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)