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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2006, 20:46   #1
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию Проблемы с 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.
Alar вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с 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