Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.03;
Скачать: CL | DM;

Вниз

отношение FindDialog к клавише Enter   Найти похожие ветки 

 
vertal ©   (2006-11-11 23:09) [0]

Есть TFindDialog, Options=[frDown,frDisableUpDown] но одна проблема - событие OnFind возникает, только если нажать на кнопку "найти". А я хочу, чтобы оно возникало и при нажатии Enter в строке ввода. Есть ли какой-нибудь простой способ (без подмены оконной процедуры) этого добиться?


 
Leonid Troyanovsky ©   (2006-11-12 00:05) [1]


> vertal ©   (11.11.06 23:09)  

> на кнопку "найти". А я хочу, чтобы оно возникало и при нажатии
> Enter в строке ввода. Есть ли какой-нибудь простой способ


Есть, конечно.
Тем более, что оная есть кнопка по умолчанию.

--
Regards, LVT.


 
vertal ©   (2006-11-12 12:37) [2]


> Leonid Troyanovsky ©   (12.11.06 00:05) [1]

Сейчас проверил еще раз - был неправ - событие OnFind все-таки возникает при нажатии Enter. Проблема в том, что при нажатии Enter поле FindText не приводится в соответствие с содержимым строки ввода, а при нажатии на кнопку "Найти далее" - приводится. То есть у меня в обработчике OnFind первой строкой шло

if Length(FindDialog.FindText) <> 0 then
  ....

, поэтому при установке Brekpoint после этого if эта часть программы не вызывалась при нажатии Enter.
Сейчас заменил эту строку на

var
  EditWnd: HWND;
 TxtLen: Integer;
 TextToFind: string;
begin
  EditWnd := FindWindowEx(FindDialog.Handle, 0, "EDIT", nil);
   TxtLen := GetWindowTextLength(EditWnd);
   if TxtLen <> 0 then
   begin
     SetLength(TextToFind, TxtLen);
     GetWindowText(EditWnd, PChar(TextToFind), TxtLen+1);
     fmMain.FindDialog.FindText := TextToFind;
     .....

Так работает, и это конечно лучше, чем подмена оконной процедуры, но все-таки такое поведение FIndDialog ненормально. Это недоработка Borland или я чего-то не понимаю?


 
KilkennyCat ©   (2006-11-12 13:31) [3]

Борланд не может предусмотреть всех желаний. Но оставляет возможность для их реализации :)


 
Leonid Troyanovsky ©   (2006-11-12 14:48) [4]


> vertal ©   (12.11.06 12:37) [2]

> таки возникает при нажатии Enter. Проблема в том, что при
> нажатии Enter поле FindText не приводится в соответствие
> с содержимым строки ввода, а при нажатии на кнопку "Найти


Чего-то я не смог воспроизвести подобное.
И если даже оно имеет место, то виноват д.б. не борланд, IMHO.

--
Regards, LVT.


 
vertal ©   (2006-11-12 20:22) [5]


> Leonid Troyanovsky ©   (12.11.06 14:48) [4]

D7, Win 2000 Pro, размер файла Dialogs.pas - 72017 байт, 100% воспроизводимость ситуации

По поведению это все таки недоработка в Dialogs.pas


 
Leonid Troyanovsky ©   (2006-11-12 21:02) [6]


> vertal ©   (12.11.06 20:22) [5]

>  100% воспроизводимость ситуации


Открой новый проект, размести на форме FindDialog,
напиши в обработчике OnFind:
with Sender as TFindDialog do Self.Caption := FindText;

Ну, и расскажи о результатах.

--
Regards, LVT.


 
vertal ©   (2006-11-12 22:01) [7]

> Leonid Troyanovsky ©   (12.11.06 21:02) [6]
Да. Вы вправы. С FindDialog все нормально. Телегу на Borland я накатал незаслуженно. Проблема была в том, что в моем проекте для одного из пунктов меню формы был назначен Shortcut = Enter. При нажатии Enter в диалоге в троке ввода вызывался обработчик этого пункта меню, а уже из него - я сам вызывал OnFind этого диалога. Причем писалось это несколько месяцев назад, а странное поведение Enter заметил только на днях. Ну с кем не бывает...



Страницы: 1 вся ветка

Текущий архив: 2006.12.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.054 c
15-1163591838
PHPDeveloper
2006-11-15 14:57
2006.12.03
InnoSetup


15-1163348628
Михель
2006-11-12 19:23
2006.12.03
Не могу починить DMClient, заглючил и не лечится...


2-1163848810
Handle
2006-11-18 14:20
2006.12.03
OpenProcess


15-1163193656
ArtemESC
2006-11-11 00:20
2006.12.03
Как сделать поддержку субтитров?


15-1163183862
DillerXX
2006-11-10 21:37
2006.12.03
Ведёте/вели ли вы жизненный дневник?