Текущий архив: 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.46 MB
Время: 0.036 c