Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.191.74.239] |
|
Сообщ.
#1
,
|
|
|
Умные люди, подскажите как при нажатии на Х(Закрыть) появлялся бы
messagedlg('Закрыть?',[mbOK,mbNo],0) и если No, то форма бы не закрывалась |
Сообщ.
#2
,
|
|
|
В событии OnClose формы запускай диалог, и если результат дилога mrNo поставь Action=caNone....
|
Сообщ.
#3
,
|
|
|
2repairman:
Лучше конечно пользоваться событием TForm.onCloseQuery 2Сергей: На TForm.onCloseQuery: IF MessageDlg('Закрыть?',[mbOK,mbNo],0)=mrNo then CanClose:=False; |
Сообщ.
#4
,
|
|
|
2Song:
А чем лучше ? Ситуацию можешь привести ? |
Сообщ.
#5
,
|
|
|
На onCloseQuery копия экземпляра формы ещё не уничтожен в динамической области памяти. В случае, если обрабатывается onClose с Action:=caNone система восстанавливает образ заново (регенерует) по инфе, которая в этот момент находиися на вершине стёка (Подробней - в книге Рихтера).
Т.е. я хотел сказать, что фиолетово в принципе, но если окно возможно не будет закрываться то лучше onCloseQuery, если же окно закроется в любом исходе то можно и onClose. Кроме того TForm.onCloseQuery - принятая норма среди программистов для обработчика закрытия для форм. |
Сообщ.
#6
,
|
|
|
А не проще перехватывать WM_CLOSE. Хотя onCloseQuery это и делает...
|
Сообщ.
#7
,
|
|
|
Цитата VDen, 22.06.02, 10:17:54 А не проще перехватывать WM_CLOSE. Хотя onCloseQuery это и делает... Грубейшая ошибка. Любоё сообщение в том числе и WM_CLOSE перехватывает приложение через обработчик сообщений (см. forms.pas) далее генерирует события onCloseQuery, onClose и потом Application.Terminate >> Не проще ли... Нет, не проще. |