procedure TForm1.WMICON(var msg: TMessage); var P: TPoint; begin case msg.LParam of // обработка обратных сообщений WM_LBUTTONUP: //по нажатию левой клавиши, WM_RBUTTONUP по правой begin GetCursorPos(p); SetForegroundWindow(Application.MainForm.Handle); PopupMenu1.Popup(P.X, P.Y); end; WM_LBUTTONDBLCLK: RestoreItemClick(Self); //как Default end; end;
procedure TForm1.WMSYSCOMMAND(var msg: TMessage); begin inherited; //обработка минимизирвания окна, не сворачевается а скрывается if (Msg.wParam = SC_MINIMIZE) then HideItemClick(Self); end;
procedure TForm1.RestoreMainForm; var i, j: Integer; begin Application.ShowMainForm := True; ShowWindow(Application.Handle, SW_RESTORE); ShowWindow(Application.MainForm.Handle, SW_RESTORE); if not ShownOnce then begin for I := 0 to Application.MainForm.ComponentCount - 1 do if Application.MainForm.Components[I] is TWinControl then with Application.MainForm.Components[I] as TWinControl do if Visible then begin ShowWindow(Handle, SW_SHOWDEFAULT); for J := 0 to ComponentCount - 1 do if Components[J] is TWinControl then ShowWindow((Components[J] as TWinControl).Handle, SW_SHOWDEFAULT); end; ShownOnce := True; end;
end;
procedure TForm1.CreateTrayIcon(n: Integer); var nidata: TNotifyIconData; begin with nidata do begin cbSize := SizeOf(TNotifyIconData); Wnd := Self.Handle; //HWND вашего окна (окна принимающего обратные сообщения) uID := 1; // номер значка uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; //обрабатываемые флаги uCallBackMessage := WM_MYICONNOTIFY; hIcon := Application.Icon.Handle; // то откуда сдергивается значек это может быть и ImageList и т.д. StrPCopy(szTip, Application.Title); // всплывающая строка, может быть любой string главное с нулевым окончанием end; Shell_NotifyIcon(NIM_ADD, @nidata); // добавление значка end;
procedure TForm1.DeleteTrayIcon(n: Integer); var nidata: TNotifyIconData; begin with nidata do begin cbSize := SizeOf(TNotifyIconData); Wnd := Self.Handle; uID := 1; end; Shell_NotifyIcon(NIM_DELETE, @nidata); // удаление значка end;
procedure TForm1.FileExitItem1Click(Sender: TObject); begin Close; end;
end.
{Также есть еще такая фигня Shell_NotifyIcon(NIM_Modify, @nidata) позволяет менять уже установленный значек, не прибегая к его убиванию и построению заново}