В самом простом варианте - вот так.
Код:
unit asmMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
CM_ABOUT = WM_USER + 1;
procedure TForm1.FormCreate(Sender: TObject);
const
SNewMenuItemCaption = 'About';
var
Menu: HMENU;
MenuItemInfo: TMenuItemInfo;
lpszCapt: PChar;
begin
// Получаем дескриптор системного меню
Menu := GetSystemMenu(Handle, False);
// Добавляем пункт "About"
GetMem(lpszCapt, Length(SNewMenuItemCaption) + 1);
StrPCopy(lpszCapt, SNewMenuItemCaption);
FillChar(MenuItemInfo, SizeOf(MenuItemInfo), 0);
with MenuItemInfo do begin
cbSize := SizeOf(MenuItemInfo);
fMask := MIIM_STRING + MIIM_ID;
fType := MFT_STRING;
fState := 0;
wID := CM_ABOUT;
hSubMenu := 0;
hbmpChecked := 0;
hbmpUnchecked := 0;
dwItemData := 0;
dwTypeData := lpszCapt;
cch := Length(SNewMenuItemCaption);
end;
InsertMenuItem(Menu, 0, True, MenuItemInfo);
FreeMem(lpszCapt);
// Добавляем разделитель после нашего пункта
FillChar(MenuItemInfo, SizeOf(MenuItemInfo), 0);
with MenuItemInfo do begin
cbSize := SizeOf(MenuItemInfo);
fType := MFT_MENUBARBREAK;
end;
InsertMenuItem(Menu, 1, True, MenuItemInfo);
end;
procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
// Обрабатываем команду нашего пункта меню
if Msg.CmdType = CM_ABOUT then
ShowMessage('Insert item to system menu demo.');
inherited;
end;
end.
Здесь в начало меню формы добавляется пункт "About" и отделяется чертой. Есть еще функция AppendMenu, она совсем простая, но она добавляет только в конец меню. С ней выглядело бы так:
Код:
AppendMenu(Menu, MF_STRING, SC_ABOUT, 'About');
Если вы хотите добавить подменю, то нужно его предварительно создать и указать его дескриптор в поле hSubMenu структуры TMenuItemInfo. Ну и флаги другие, конечно, выставить в fMask (MIIM_SUBMENU). Меню создается функцией CreateMenu