Форум: "Основная";
Текущий архив: 2003.12.04;
Скачать: [xml.tar.bz2];
ВнизПроблема с фокусом ввода Найти похожие ветки
← →
AMogil (2003-11-25 09:44) [0]Есть форма, на которой находится строка ввода (TEdit). По выходу (OnExit) из этой строки в обработчике OnExit происхоят кое-какие проверки и может возникнуть исключение, которое обрабатывается в глобальном обработчике исключений (Application.OnException). При обработке исключения производится его анализ и вывод сообщения. Сообщения показывается в диалоге. Диалог не стандартный, но не хитрый. Просто создаем и модально показываем окно и при нажатии "Ок" коворим ему Release.
Проблема: после закрытия этого диалога окно, в котором вызвано исключение активно (заголовок синий (станд. настройки Win)), но не реагирует на нажатие клавишь. А самое главное не реагирует на первое (!) нажатие мыши. Т.е. при первом нажатии, окно как бы получает фокус ввода, а потом работает.
Причем иакая проблема только в обработчике ONExit пробовал весить тот же код на нажатие простой кнопки - все отлично работает.
Как бороться?
← →
Nikolay M. (2003-11-25 10:54) [1]Попробуй сделать перед показом диалога
Edit1.OnExit := nil;
а после показа
Edit1.OnExit := Edit1OnExit;
← →
AMogil (2003-11-25 11:27) [2]Спасибо.
Пробовал - не помогает. Кстати, попробовал выделить проблему "в чистом виде". Получилось. Рецепт:
Создаем новый проект, кладем на форму два TEdit. У первого в обработчике OnExit пишем что-то вроде:
procedure TForm1.Edit1Exit(Sender: TObject);
begin
if Edit1.Text <> Edit2.Text then
raise Exception.Create("");
end;
Бросаем на форму ApplicationExents и для OnException пишем:
procedure TForm1.ApplicationEvents1Exception(Sender: TObject;
E: Exception);
begin
MessageDlg("ddd", mtError, [mbOk], 0);
end;
Запускаем. Фокус ввода находится в Edit1, щелкаем мышкой на Edit2. Читаем сообщение и получаем описанный эффект. Кстати, если не мышкой щлекать, а нажать таб, то все работает нормально.
Почему?
← →
AMogil (2003-11-25 11:34) [3]По - моему очевидно, что это связано с обработкой событий нажатия кнопки мыши. Мне кажется форма получает WM_LBUTTONDOWN, потом происходит исключение в OnExit, показывается модальное окно, которое "забирает" на себя WM_LBUTTONUP. Однако пробовал посылать после закрытия диалога WM_LBUTTONUP окну, в котором возникло исключение - не выходит...
← →
AMogil (2003-11-25 17:21) [4]В связи с выше написанном. Как заставить форму снова "получить фокус"?
← →
ИдиотЪ (2003-11-25 17:33) [5]1. или локализуй обработчик исключения
2. или передавай как-то объект edit, чтобы потом сделать на него фокус
← →
AMogil (2003-11-25 21:22) [6]В том то и дело, что простое Edit1/Edit2 SetFocus не помогает. Тут проблема со всем приложением.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.12.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c