|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
29.10.2006, 20:46 | #1 |
Александр
Администратор
Регистрация: 28.10.2006
Сообщений: 17,597
|
Проблемы с TFindDialog
перенесено со старого форума. сообщение от johnvp.
Суть проблемы в следующем, когда диалог запущен и виден на экране в onFind необходимо очистить строку поиска, если присваеваешь FindText:='', то на экране строка поиска остается прежней без изменения, если делать так: finddialog.CloseDialog; finddialog.Execute; то диалог закрывается и не открывается. Помогите хоть каким нибудь советом, а то мозги уже совсем не работают перенесено со старого форума. сообщение от plague. Программа, реализующая поиск при выборе пользователем раздела меню Поиск (имя MFind), может иметь следующий вид: var SPos:integer; ... procedure TForm1.MFindClick(Sender: TObject); begin {запоминание позиции курсора} SPos:=Memo1.SelStart; with FindDialog1 do begin {начальное значение текста поиска - текст, выделенный в Memo1} FindText:=Memo1.SelText; {позиционирование окна диалога внизу Memo1} Position:=Point(Form1.Left,Form1.To p+Memo1.Top+Memo1.Height); {удаление из диалога кнопок "Вверх", "Вниз", "Только слово целиком"} Options:=Options + [frHideUpDown,frHideWholeWord]; {выполнение} Execute; end; end; procedure TForm1.FindDialog1Find(Sender: TObject); begin with FindDialog1 do begin if frMatchCase in Options {поиск с учетом регистра} then Memo1.SelStart:=Pos(FindText,Copy(M emo1.Lines.Text,SPos+1,Length(Memo1 .Lines.Text)))+Spos-1 {поиск без учета регистра} else Memo1.SelStart:=Pos(AnsiLowerCase(F indText),AnsiLowerCase(Copy(Memo1.L ines.Text,SPos+1, Length(Memo1.Lines.Text))))+Spos-1; if Memo1.SelStart>=Spos then begin {выделение найденного текста} Memo1.SelLength:=Length(FindText); {изменение начальной позиции поиска} SPos:=Memo1.SelStart+Memo1.SelLengt h+1; end else if MessageDlg('Текст "'+FindText+'" не найден. Продолжать диалог?', mtConfirmation,mbYesNoCancel,0) <> mrYes then CloseDialog; end; Memo1.SetFocus; end; В программе вводится переменная SPos, сохраняющая позицию, начиная с которой надо проводить поиск. http://binom-press.ru перенесено со старого форума. сообщение от johnvp. Дело в том, что я использую существующий объект TFindDialog все работает, но понадабилось кое-что переписать и столкнулся с выше описанной проблемой, заменять все на собственный диалог не совсем разумно из-за частоты использования и объема уже написанной программы, к тому же программа работаент без збрев уже в течении пяти лет, и что-то кардинально менять не хочется. перенесено со старого форума. сообщение от ZuLu. Привет! Все дело в том, что когда присваиваешь значение свойству FindText вызывается функция: procedure TFindDialog.SetFindText(const Value: string); begin StrLCopy(FFindText, PChar(Value), SizeOf(FFindText) - 1); end; Которая по сути своей ничего не делает только копирует значение в закрытое свойство FFindText. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблемы с WIN+D | Altera | Общие вопросы Delphi | 4 | 15.08.2008 15:55 |
Проблемы с Mozilla | KsanDra | JavaScript, Ajax | 1 | 29.10.2007 11:44 |
Проблемы с DLL | Дмитрий2006 | Общие вопросы C/C++ | 5 | 15.10.2007 12:43 |
Проблемы с FPC | Акашаев Нурлан | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 10.07.2007 17:09 |
проблемы с INI | delphi | Общие вопросы Delphi | 4 | 10.04.2007 00:28 |