Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
6-11662
Son!K
2003-10-07 21:14
2003.12.04
прокси


3-11585
Nick-From
2003-11-16 01:06
2003.12.04
Переменные TpFibDataSet и TpFibTransaction


1-11610
Peter
2003-11-25 22:13
2003.12.04
открытие txt-файла


8-11620
McSimm
2003-08-01 17:23
2003.12.04
Просьба высказаться в опросе Стоит ли объединить Media / Игры?


6-11690
Volcano
2003-10-04 17:10
2003.12.04
Нужны заголовки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский