Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

перехват закрытия окна


Vazelin ©   (2006-08-06 19:57:00) 

Привет всем!
Как можно перехватить нажатие кнопки Х на форме?


Desdechado   (2006-08-07 11:47:00) [1]

> А если имеется в виду после нажатия не закрывать форму,
> а делать еще что-то
А разве в FormClose нельзя прописать Action:=caNone ?


Ketmar   (2006-08-07 10:49:00) [2]

> [4] Юрий Зотов ©   (06.08.06 21:12)

а так, видимо, интересней.


Юрий Зотов   (2006-08-06 21:12:00) [3]

1. if Msg.CmdType and $FFF0= SC_CLOSE...
2. А зачем вообще все это? Событие OnClose уже отменили?


Zeqfreed   (2006-08-06 20:21:00) [4]

> Как можно перехватить нажатие кнопки Х на форме?


type
 TForm1 = class(TForm)
 private
   { Private declarations }
 public
   procedure WMClose(var Msg : TWMClose); message WM_CLOSE;
   procedure WMNCLButtonDown(var Msg : TWMNCLButtonDown); message WM_NCLBUTTONDOWN;
 end;

. . .

procedure TForm1.WMClose(var Msg: TWMClose);
begin
 if (Tag = 1) then ShowMessage('OMG!!! You hit the close button!');
 inherited;
end;

procedure TForm1.WMNCLButtonDown(var Msg: TWMNCLButtonDown);
begin
 if (Msg.HitTest = HTCLOSE) then
  Tag := 1
 else
  Tag := 0;

 inherited;
end;


DprYg   (2006-08-06 20:14:00) [5]

А если имеется в виду после нажатия не закрывать форму, а делать еще что-то, то так:
Объявление
procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
Реализация
procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
 if Msg.CmdType = SC_CLOSE then ... else inherited;
end;


Rial   (2006-08-06 20:10:00) [6]

Событие
OnCloseQuery


Наверх

Титульная страница Поиск, карта сайта Написать письмо