我想在动态创建的TMenuItem中添加一个位图。在这个代码中它不工作,我的菜单上没有图像。怎么了?
procedure TForm3.FormCreate(Sender: TObject);
var
item : TmenuItem;
icon : TIcon;
begin
item := TMenuItem.Create(PopupMenu1);
item.Caption := 'coucou';
icon := TIcon.Create;
icon.LoadFromFile('d:\SmallIcon.ico');
icon.Height := 16;
icon.Width := 16;
item.Bitmap.Canvas.Draw(0,0,icon);
PopupMenu1.Items.Add(item);
end;发布于 2011-07-29 00:05:43
添加这行
item.Bitmap.SetSize(16,16);作为第三个。然后它就起作用了。
因此,您的代码将如下所示:
var
item : TmenuItem;
icon : TIcon;
begin
item := TMenuItem.Create(PopupMenu1);
item.Caption := 'coucou';
item.Bitmap.SetSize(16,16); // <--- set size of bitmap
icon := TIcon.Create;
icon.LoadFromFile('d:\SmallIcon.ico');
icon.Height := 16;
icon.Width := 16;
item.Bitmap.Canvas.Draw(0,0,icon);
PopupMenu1.Items.Add(item);
end;虽然我同意大卫的观点。最好使用TImageList。
发布于 2011-07-29 00:02:46
TMenuItem上的Bitmap属性不适用于此。你真的应该使用图片列表来代替。这将允许您以可管理的方式在您的UI元素之间共享图像。
将图标添加到菜单上的TImageList.
Images属性(即PopupMenu1)以引用图像列表。当然,您也应该使用操作,在这种情况下,您只需要为操作设置ImageIndex,框架会负责将其分配给菜单项。
顺便说一句,我要指出的是,Vista主题菜单的Delphi实现有大量的细微缺陷,其中许多都与图像绘制有关。然而,这些bug在视觉上的影响相对较小。
发布于 2011-07-29 00:07:40
a)一旦里面有一个图像,你就不能设置TIcon尺寸--如果你加载的图标还不是16x16,你会得到一个异常;b)你不能指明你的父菜单是否使用了TImageList (如果是,你就不能设置单独的图像);c)默认情况下,我不认为tmenuitem位图有特定的大小/颜色深度或其他任何东西。您需要正确地创建一个TBitmap来分配给TMenuItem.Bitmap (假设您的父菜单没有使用TImageLists)。
https://stackoverflow.com/questions/6861825
复制相似问题