Главная страница
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.042 c
15-1163490325
IntruderLab
2006-11-14 10:45
2006.12.03
Восстановление панели компонентов


3-1159288763
Climber
2006-09-26 20:39
2006.12.03
BDE &amp; FoxPro &amp; SQL


15-1163203226
Германн
2006-11-11 03:00
2006.12.03
Общество защиты от животных


2-1163535181
DoktorX
2006-11-14 23:13
2006.12.03
А вы не могли бы мне подсказать как сравнить по пикселам два ч/б


6-1152986864
anton773
2006-07-15 22:07
2006.12.03
InternetSetFilePointer