Добавляем пункты в системное меню Windows.
Добавляем пункты в системное меню Windows.
Добавляем пункты в системное меню Windows. Вы, наверное, задавались вопросом, почему системное меню постоянно одно и тоже ? Пример показывает, как добавить туда такие пункты как "about" или "information", или что-нибудь ещё. Совместимость: delphi 3.x (или выше) Нам понадобится две вещи, первая это item id, который может быть любым целым числом. Второе это Описание(caption) для нашего пункта меню. Нам понадобится также процедура, которая будет принимать сообщения window для определения нажатия на наш пункт меню. unit ohyeah; interface uses sysutils, wintypes, winprocs, messages, classes, graphics, controls, forms, dialogs, menus; type tform1 = class (tform) procedure formcreate (sender : tobject); private {private declarations} public {public declarations} procedure winmsg (var msg : tmsg; var handled : boolean); procedure dowhateever; end; var form1 : tform1; implementation {$r *.dfm} const itemid = 99; // id номер для пункта меню. Может быть любым procedure tform1.winmsg (var msg : tmsg; var handled : boolean); begin if msg.message = wm_syscommand then if msg.wparam = itemid then dowhatever; end; procedure tform1.formcreate (sender : tobject); begin application.onmessage := winmsg; appendmenu (getsystemmenu (form1.handle, false), mf_separator, 0, ''); appendmenu (getsystemmenu (form1.handle, false), mf_byposition, itemid, '&my menu'); appendmenu (getsystemmenu (application.handle, false), mf_separator, 0, ''); appendmenu (getsystemmenu (application.handle, false), mf_byposition, itemid,'&my menu minimized'); end; procedure tform1.dowhatever; begin exit; // Вы можете добавить здесь всё, что угодно end; end. ********************************************************************** Добавить пункт в системное меню, написать обработчик его выбора и перехватить сообщение о выборе пункта из системного меню. Примечание: Константа WM_USER используется в приложении для определения собственных сообщений. Значения от 0 до (WM_USER-1) зарезервированы для системных сообщений. type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure OnMyMenu; private procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND; end; var Form1: TForm1; implementation {$R *.DFM} const SC_MyMenuItem = WM_USER + 1; //---------------------------------------------------- procedure TForm1.FormCreate(Sender: TObject); begin // добавление своего пункта в системное меню приложения AppendMenu(GetSystemMenu(Handle, FALSE), MF_SEPARATOR, 0, ''); AppendMen! u(GetSystemMenu(Handle, FALSE), MF_STRING, SC_MyMenuItem, 'Новый пункт в меню'); end; //---------------------------------------------------- procedure TForm1.OnMyMenu; Begin // Обработка нажатия на новый пункт меню End; //---------------------------------------------------- procedure TForm1.WMSysCommand(var Msg: TWMSysCommand); begin // перехват события выбора нового пункта меню if Msg.CmdType = SC_MyMenuItem then OnMyMenu else inherited; end;