Создание своих пунктов в системном меню
Нам нужно создать ловушку сообщения WM_SYSCOMMAND и значение WPARAM сообщения, чтобы определить какой пункт меню выбран. В общем, все, что нужно сделать заключается в следующем:
- Создать новую форму Delphi.
- Переопределить событие OnMessage, назначив новую процедуру для обработки события OnMessage.
- Определить константы, которые будут использоваться, как идентификатор для пунктов меню.
- В событии OnCreate формы создать пункты меню при помощи функции API AppendMenu.
Вот пример использования:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } procedure WinMsgHandler( var Msg : TMsg; var Handled : Boolean); end; var Form1: TForm1; const MyItem1 = 100; { Иденнификатор пункта меню 1. Любое значение WORD} MyItem2 = 101; { Идентификатор пункта меню 2 } MyItem3 = 102; { Идентификатор пункта меню 3 } implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin { Сначала нужно указать, что обработчик сообщений приложения отличается от значения по умолчанию } Application.OnMessage := WinMsgHandler; { Добавим разделитель в меню } AppendMenu(GetSystemMenu(Self.Handle, False), MF_SEPARATOR, 0, ''); { Добавляем пункт меню. Так как Item ID высокий, используя константу MF_BYPOSITION поместим пункты последними в системном меню } AppendMenu(GetSystemMenu(Self.Handle, False), MF_BYPOSITION, MyItem1, 'Пункт моего меню № 1'); AppendMenu(GetSystemMenu(Self.Handle, False), MF_BYPOSITION, MyItem2, 'Пункт моего меню № 2'); AppendMenu(GetSystemMenu(Self.Handle, False), MF_BYPOSITION, MyItem3, 'Выход из программы'); end; procedure TForm1.WinMsgHandler(var Msg : TMsg; var Handled : Boolean); begin { Если системное сообщение...} if Msg.Message=WM_SYSCOMMAND then { Поместим обработчик сюда. ShowMessage для демонстрации } Case Msg.wParam of MyItem1: ShowMessage('Нажали меню 1'); MyItem2: ShowMessage('Нажали меню 2'); MyItem3: Close; { А здесь выходим из приложения } end; end; end.
Вот и все! Это очень просто!
Комментарии