Вниз
Скачать: CL | DM;

Как программно закрыть окно с сообщением   Найти похожие ветки 

 
pavlov   (2004-03-19 10:39) [0]

Привет всем!

Представте ситуацию, что ваше приложение (не дай бог :) )
допустило ошибку, и винда в ответ на эту ошибку
вывело сообщение с ее описанием (ну типа access violation
или тому подобное).
Или вы вывели окно сообщения сами, скажем:
 Application.MessageBox("Трали-вали","Тили-тили", MB_OK);

Как программно закрыть это окно сообщения,
чтобы главная форма снова стала активной?
Подскажите пожалуста, очень надо!
Спасибо за внимание.


 
Плохиш   (2004-03-19 10:50) [1]

>pavlov   (19.03.04 10:39)

> винда в ответ на эту ошибку
> вывело сообщение с ее описанием

Начнём с того, что сообщение вывела не винда
TApplication.OnException + F1

> Или вы вывели окно сообщения сами,

Если программа вывела сообщение, значит она ждёт каких-то действий от пользователя. Во всех остальных случаях сообщения выводится не должны.


 
pavlov   (2004-03-19 11:02) [2]

Допустим.
Но меня интересует больше как прихлопнуть это сообщение.
Именно программно!


 
vk_3057 ©   (2004-03-24 16:01) [3]

Так как окно сообщения этот всё таки окно, то оно имеет свой Handle, который можно получить, а затем сделать его невидимым:
ShowWindow(WndHandle,SW_HIDE);
или закрыть его:
SendMessage(WndHandle,WM_CLOSE,0,0);


 
Defunct ©   (2004-03-24 16:09) [4]

Но меня интересует больше как прихлопнуть это сообщение.
Именно программно!


SendMessage(GetActiveWindow, WM_CLOSE, 0,0);


 
LexXP ©   (2004-03-24 16:12) [5]

Надо не дать появиться этому окну.
Во всех критичных местах пиши

try
except
end


 
Digitman ©   (2004-03-24 16:16) [6]


> pavlov   (19.03.04 11:02) [2]


в твоих руках - куча возможностей по недопущению такой "проблемы".. да и не проблема это вовсе ..

зачем создавать себе трудности только ради того, чтобы затем их героически преодолевать ?


 
Digitman ©   (2004-03-24 16:19) [7]


> Или вы вывели окно сообщения сами, скажем:
>  Application.MessageBox("Трали-вали","Тили-тили", MB_OK);


да, вывели.. предположим .. и, значит, мы ожидаем действий пользователя, от которых напрямую зависит дальнейшее ветвление алгоритма

спрашивается, зачем просить пользователя сказать "А" или "В", сли мы столь упрямы и все равно пойдем по пути "С" ?


 
Defunct ©   (2004-03-24 16:27) [8]

pavlov   (19.03.04 10:39)  

PS: Если у вас возник подобный вопрос, то может самое простое решение поставить в DPR файле перед Application.Run строку:
Halt(0);

и не мучить пользователя, компьютер, да и себя в т.ч.


 
Rem ©   (2004-03-24 16:52) [9]

см. Плохиш (19.03.04 10:50) [1]
TApplication.OnException

И лучше при этом "невыведенное сообщение" писать в лог, чтобы разработчик (Вы) имел возможность обнаружить свои ошибки. А иначе не избегнуть жалоб пользователей на то, что "программа ничего не делает и ничего не сообщает".

Лирическое отступление: А еще круче - отсылать сразу разработчику скрытым письмом по электроной почте сообщение об ошибке. Пользователи будут "ужасно" рады такой "активности программы", а интернет-провайдер (разработчика) разорвет договор из-за высокого траффика входящих писем.
Короче, как говорится: "Мы, программисты 80-х, Вам, программистам 00-х, передаем все баги и глюки, которые были в наших программах! Все возможные и невозможные Runtime Error"ы и Access Violation"ы! В добрый путь!"...


 
WebErr ©   (2004-03-24 16:54) [10]

Самое лучшее это:

> Defunct ©   (24.03.04 16:09) [4]
> SendMessage(GetActiveWindow, WM_CLOSE, 0,0);



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.027 c
3-1081831117
ANB
2004-04-13 08:38
2004.04.11
вычисляемые поля в запросе


14-1079425178
able
2004-03-16 11:19
2004.04.11
Люди, зацените сайт


11-1051875935
MaximusXP
2003-05-02 15:45
2004.04.11
Интерфейс в стиле ХР


1-1082808957
AndreyL
2004-04-24 16:15
2004.04.11
Zagruzka procedure pri starte programmi ili zagruzke formi!


1-1082457212
Паша5
2004-04-20 14:33
2004.04.11
Удаление пустых строк в StringGrid




   Наверх