gpt4 book ai didi

windows - 如何在表单的系统菜单中添加带有图标的项目?

转载 作者:行者123 更新时间:2023-12-02 01:55:56 25 4
gpt4 key购买 nike

这是我的代码,除了图标之外都有效

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;

最佳答案

几个问题:

  1. 您在使用前没有清除TMenuItemInfo实例。调用时,未分配的字段可能包含无效或错误的数据。

    使用

    ZeroMemory(@item, SizeOf(item));

    在程序开始时。

  2. 您的 fMaskfType 成员的组合不正确。

    使用以下内容代替

    fMask := MIIM_STRING or MIIM_BITMAP or MIIM_ID;
    // fType := MFT_STRING;

    也就是说,不要分配fType

这是测试的示例片段,其中 TImage 保存在橙色背景上描绘数字 2 的图像。这将作为图标添加到新菜单项中。 (这是你的问题)

enter image description here

根据要求添加测试代码:

// 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;

关于windows - 如何在表单的系统菜单中添加带有图标的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69602957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com