TForm1 = class(TForm) ... private { Private declarations } procedure TrayDefaultHandler (var Message:TMessage); public { Public declarations } data:tnotifyicondata; ... end; ... var Form1: TForm1; ... const WM_TRAYICON = WM_USER+1; ID_TRAYICON = 1; ... implementation ... procedure TForm1.FormCreate(Sender: TObject); var H:THandle; begin H:=AllocateHWnd(self.TrayDefaultHandler); Data.cbSize:=SizeOf(TNotifyIconData); Data.Wnd:=H; Data.uCallbackMessage:=WM_TRAYICON; Data.uFlags:=NIF_ICON or NIF_TIP or NIF_MESSAGE; Data.hIcon:=Application.Icon.Handle; StrPCopy (data.szTip,Application.Title); Shell_NotifyIcon (NIM_ADD,@data); ... end; ... procedure TForm1.TrayDefaultHandler (var Message:TMessage); var pt:tpoint; begin if Message.Msg=WM_TRAYICON then begin if Message.LParam=WM_RBUTTONDOWN then begin getcursorpos(pt); FORM1.PopupMenu1.Popup(pt.X,pt.Y); //всплывающее меню end; if Message.LParam=WM_LBUTTONDOWN then if iswindowvisible(Application.Handle) and iswindowvisible(Handle) then //это чтоб при щелчке левой кнопкой сворачивалось-разворачивалось begin ShowWindow(Handle, SW_HIDE); ShowWindow(Application.Handle,SW_HIDE); end else begin ShowWindow(Handle, SW_NORMAL); ShowWindow(Application.Handle,SW_NORMAL); end; end; end; ...
TForm1 = class(TForm) ... private { Private declarations } procedure WMQueryEndSession(var Msg : TWMQueryEndSession); message WM_QUERYENDSESSION; ... implementation ... procedure TForm1.WMQueryEndSession(var Msg : TWMQueryEndSession); begin inherited; //делаем все что нужно перед закрытием Msg.Result:=1; close; //закрываем end;
if message.Msg=WM_QUERYENDSESSION then begin message.Result:=1; end;
TForm1 = class(TForm) ... private { Private declarations } procedure TrayDefaultHandler (var Message:TMessage); procedure WMQueryEndSession(var Msg : TWMQueryEndSession); message WM_QUERYENDSESSION; public { Public declarations } data:tnotifyicondata; ... end; ... var Form1: TForm1; ... const WM_TRAYICON = WM_USER+1; ID_TRAYICON = 1; ... implementation ... procedure TForm1.WMQueryEndSession(var Msg : TWMQueryEndSession); begin inherited; //делаем все что нужно перед закрытием Msg.Result:=1; close; //закрываем end; ... procedure TForm1.FormCreate(Sender: TObject); var H:THandle; begin H:=AllocateHWnd(self.TrayDefaultHandler); Data.cbSize:=SizeOf(TNotifyIconData); Data.Wnd:=H; Data.uCallbackMessage:=WM_TRAYICON; Data.uFlags:=NIF_ICON or NIF_TIP or NIF_MESSAGE; Data.hIcon:=Application.Icon.Handle; StrPCopy (data.szTip,Application.Title); Shell_NotifyIcon (NIM_ADD,@data); ... end; ... procedure TForm1.TrayDefaultHandler (var Message:TMessage); var pt:tpoint; begin if Message.Msg=WM_TRAYICON then begin if Message.LParam=WM_RBUTTONDOWN then begin getcursorpos(pt); FORM1.PopupMenu1.Popup(pt.X,pt.Y); //всплывающее меню end; if Message.LParam=WM_LBUTTONDOWN then if iswindowvisible(Application.Handle) and iswindowvisible(Handle) then //это чтоб при щелчке левой кнопкой сворачивалось-разворачивалось begin ShowWindow(Handle, SW_HIDE); ShowWindow(Application.Handle,SW_HIDE); end else begin ShowWindow(Handle, SW_NORMAL); ShowWindow(Application.Handle,SW_NORMAL); end; end; if message.Msg=WM_QUERYENDSESSION then begin message.Result:=1; end; end; ...