![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
отношение FindDialog к клавише Enter
vertal © (2006-11-11 23:09:00)Есть TFindDialog, Options=[frDown,frDisableUpDown] но одна проблема - событие OnFind возникает, только если нажать на кнопку "найти". А я хочу, чтобы оно возникало и при нажатии Enter в строке ввода. Есть ли какой-нибудь простой способ (без подмены оконной процедуры) этого добиться?
vertal (2006-11-12 22:01:00) [1]> Leonid Troyanovsky © (12.11.06 21:02) [6]
Да. Вы вправы. С FindDialog все нормально. Телегу на Borland я накатал незаслуженно. Проблема была в том, что в моем проекте для одного из пунктов меню формы был назначен Shortcut = Enter. При нажатии Enter в диалоге в троке ввода вызывался обработчик этого пункта меню, а уже из него - я сам вызывал OnFind этого диалога. Причем писалось это несколько месяцев назад, а странное поведение Enter заметил только на днях. Ну с кем не бывает...
Leonid Troyanovsky (2006-11-12 21:02:00) [2]
> vertal © (12.11.06 20:22) [5]
> 100% воспроизводимость ситуации
Открой новый проект, размести на форме FindDialog,
напиши в обработчике OnFind:
with Sender as TFindDialog do Self.Caption := FindText;
Ну, и расскажи о результатах.
--
Regards, LVT.
vertal (2006-11-12 20:22:00) [3]
> Leonid Troyanovsky © (12.11.06 14:48) [4]
D7, Win 2000 Pro, размер файла Dialogs.pas - 72017 байт, 100% воспроизводимость ситуации
По поведению это все таки недоработка в Dialogs.pas
Leonid Troyanovsky (2006-11-12 14:48:00) [4]
> vertal © (12.11.06 12:37) [2]
> таки возникает при нажатии Enter. Проблема в том, что при
> нажатии Enter поле FindText не приводится в соответствие
> с содержимым строки ввода, а при нажатии на кнопку "Найти
Чего-то я не смог воспроизвести подобное.
И если даже оно имеет место, то виноват д.б. не борланд, IMHO.
--
Regards, LVT.
KilkennyCat (2006-11-12 13:31:00) [5]Борланд не может предусмотреть всех желаний. Но оставляет возможность для их реализации :)
vertal (2006-11-12 12:37:00) [6]
> 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 или я чего-то не понимаю?
Leonid Troyanovsky (2006-11-12 00:05:00) [7]
> vertal © (11.11.06 23:09)
> на кнопку "найти". А я хочу, чтобы оно возникало и при нажатии
> Enter в строке ввода. Есть ли какой-нибудь простой способ
Есть, конечно.
Тем более, что оная есть кнопка по умолчанию.
--
Regards, LVT.