如何在表单的系统菜单中添加带有图标的项目?
How can I add an item with icon in the system menu of a form?
这是我的代码,但图标除外
procedure TForm1.FormCreate(Sender: TObject);
var item : TMenuItemInfo;
begin
with item do
begin
cbSize := SizeOf(MenuItemInfo);
fMask := MIIM_TYPE or MIIM_ID;
fType := MFT_STRING;
wID := 180;
dwTypeData := PChar('Test');
cch := 4;
hbmpItem := Image1.Picture.Bitmap.Handle; //Image1 is TImage
end;
InsertMenuItem(GetSystemMenu(Handle, FALSE),0,true,item);
end;
几个问题:
您没有在使用前清除 TMenuItemInfo
实例。调用时未分配的字段可能包含无效或错误的数据。
使用
ZeroMemory(@item, SizeOf(item));
在程序开始时。
您的 fMask
和 fType
成员组合不正确。
改用以下内容
fMask := MIIM_STRING or MIIM_BITMAP or MIIM_ID;
// fType := MFT_STRING;
即不赋值fType
这是测试的示例片段,其中 TImage
包含描绘橙色背景上的数字 2 的图像。即作为图标添加到新菜单项。 (这是你的问题)
按要求添加测试代码:
// Note! Your `Image1` must have a bitmap loaded
procedure TForm39.AddSystemMenuItem;
var
item : TMenuItemInfo;
begin
ZeroMemory(@item, SizeOf(item));
with item do
begin
cbSize := SizeOf(MenuItemInfo);
fMask := MIIM_STRING or MIIM_BITMAP or MIIM_ID;
// fType := MFT_STRING;
wID := 180;
dwTypeData := PChar('Test');
cch := 4;
hbmpItem := Image1.Picture.Bitmap.Handle; //Image1 is TImage
end;
if not InsertMenuItem(GetSystemMenu(Handle, FALSE),0,true,item) then
ShowMessage('Failed');
end;
procedure TForm39.Button1Click(Sender: TObject);
begin
AddSystemMenuItem;
end;
这是我的代码,但图标除外
procedure TForm1.FormCreate(Sender: TObject);
var item : TMenuItemInfo;
begin
with item do
begin
cbSize := SizeOf(MenuItemInfo);
fMask := MIIM_TYPE or MIIM_ID;
fType := MFT_STRING;
wID := 180;
dwTypeData := PChar('Test');
cch := 4;
hbmpItem := Image1.Picture.Bitmap.Handle; //Image1 is TImage
end;
InsertMenuItem(GetSystemMenu(Handle, FALSE),0,true,item);
end;
几个问题:
您没有在使用前清除
TMenuItemInfo
实例。调用时未分配的字段可能包含无效或错误的数据。使用
ZeroMemory(@item, SizeOf(item));
在程序开始时。
您的
fMask
和fType
成员组合不正确。改用以下内容
fMask := MIIM_STRING or MIIM_BITMAP or MIIM_ID; // fType := MFT_STRING;
即不赋值
fType
这是测试的示例片段,其中 TImage
包含描绘橙色背景上的数字 2 的图像。即作为图标添加到新菜单项。 (这是你的问题)
按要求添加测试代码:
// Note! Your `Image1` must have a bitmap loaded
procedure TForm39.AddSystemMenuItem;
var
item : TMenuItemInfo;
begin
ZeroMemory(@item, SizeOf(item));
with item do
begin
cbSize := SizeOf(MenuItemInfo);
fMask := MIIM_STRING or MIIM_BITMAP or MIIM_ID;
// fType := MFT_STRING;
wID := 180;
dwTypeData := PChar('Test');
cch := 4;
hbmpItem := Image1.Picture.Bitmap.Handle; //Image1 is TImage
end;
if not InsertMenuItem(GetSystemMenu(Handle, FALSE),0,true,item) then
ShowMessage('Failed');
end;
procedure TForm39.Button1Click(Sender: TObject);
begin
AddSystemMenuItem;
end;