| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > MDI |
| Автор: Dapo 9.7.2002, 03:46 |
| В MDI приложении требуется отловить нажатие оконной кнопки 'Close' (окно MdiChild) и произвести какие-нибудь действия? Спасибо. |
| Автор: Serhio 9.7.2002, 08:44 |
| Hi ! MDIChild как и любое другое окно имеет событие FormClose, Его и надо обработать. Удачи. (пример выслал на мыло) |
| Автор: Vit 9.7.2002, 16:00 |
| Обрабатывай OnCloseQuery |
| Автор: Dapo 10.7.2002, 06:36 |
| Спасибо, спасибо. Но я вообще-то "не первый год за мужем" OnClose и OnCloseQuery я проходил. У меня такая проблема: Дочернее окно может быть закрыто и другими способами (извне как бы). И вот на разные случаи должно происходить что-то разное, в том числе и в случае, когда я закрываю форму непосредственно через значок "закрыть". Проще говоря, есть на главной форме кнопка Button1 OnClick которой, ну скажем MDIChildForm.Close; Нажал я на кнопку и закрыл доч.форму (Action:=caFree) и получил сообщение 'Окно закрыто по кнопке Button1', а если я нажал значок на форме (ее оконную кнопку "закрыть"), то получил сообщение 'Окно закрыто системно' В общем в этом духе. |
| Автор: Fantasist 10.7.2002, 12:09 |
| Единственно, что приходит в голову, это либо следить за мышкой, и тогда легко узнать, что узер нажал на крестик, либо когда у тебя окно закрывается как-то по другому присылать свои сообщения и их обрабатывать. |
| Автор: Free 11.7.2002, 01:43 | ||
Может, я чего-то недопонял, но при нажатии Button1 - OnClose а при нажатии "кнопки с крестиком" - OnCloseQuery. Почему бы не написать:
|
| Автор: МММ 11.7.2002, 02:59 | ||||
Free ТАК НЕ ПОЙДЕТ!!!!! можешь сделать так или глобальную переменную, или через свойство form.tag первоначально она равна 0
Вроде должно работать |
| Автор: Dapo 17.7.2002, 12:59 |
| Вот решение касается не только MDI-формы type TForm1=class(TForm) ......... protected procedure WMSYSMESSAGE(var MSG:TMessage); message WM_SYSCOMMAND; ......... procedure TChannelForm.WMSYSMESSAGE(var MSG:TMessage); begin if MSG.WParam=SC_CLOSE then ShowMessage('системная кнопка'); else inherited; end; отреагирует только тогда, когда будет нажата системная кнопка 'close'; |
| Автор: Song 17.7.2002, 13:35 |
| WM_SYSCOMMAND, очевидно |
| Автор: Alex101 17.7.2002, 14:13 |
| WM_SYSCOMMAND отловит только ежели закрывать руками окно, лучше WM_DESTROY использовать, тогда везде отловишь Дааа... надо с самого начала вопрос читать Админ, пожалуй удали это - ответ не по существу... |
| Автор: Song 17.7.2002, 18:19 |
| Отлов WM_SYSCOMMAND предполагает отлов SC_CLOSE в качестве WParam, соответсвенно это событие возникает при любом закрытии будь то клавиатурой, будь то мышью или ещё как-то кроме как аварийном завершении соответсвующего процесса. Если Вы точно не знаете, не надо вводить людей в неправильную инфу и создавать подземный стук. |