我有一个MainMenu1和一个ImageList1控件,MainMenu1的images-->ImageList1,
ImageList1里加载了一幅ICO图标,MainMenu1的自菜单即各个MenuItem的imageindex都是-1,我要实现下列效果:
当点击MainMenu1时,弹出下拉菜单时没有图标,当鼠标指到MainMenu1的下拉菜单时加载图标,如下,当鼠标移到打开文件[O]下拉菜单时,在它前面加载一个图标。当鼠标移到
保存文件[S]下拉菜单时,在它前面加载一个图标。而打开文件[O]下拉菜单前的图标消失。
例:
文件[F]
打开文件[O]
保存文件[S]
.
.
.
代码如下:在子菜单的DrawItem写
if not Selected then
begin
TmenuItem(Sender).Hint:=Inttostr(TmenuItem(Sender).ImageIndex);
TmenuItem(Sender).ImageIndex:=-1;
acanvas.TextRect(arect,arect.Left,arect.Top,(sender as tmenuitem).Caption);
end else begin
if TmenuItem(Sender).Hint<>'' then
TmenuItem(Sender).ImageIndex:=StrToint(TmenuItem(Sender).Hint);
acanvas.TextRect(arect,arect.Left+30,arect.Top,(sender as tmenuitem).Caption);
end;
为什么图标出不来???
ImageList1里加载了一幅ICO图标,MainMenu1的自菜单即各个MenuItem的imageindex都是-1,我要实现下列效果:
当点击MainMenu1时,弹出下拉菜单时没有图标,当鼠标指到MainMenu1的下拉菜单时加载图标,如下,当鼠标移到打开文件[O]下拉菜单时,在它前面加载一个图标。当鼠标移到
保存文件[S]下拉菜单时,在它前面加载一个图标。而打开文件[O]下拉菜单前的图标消失。
例:
文件[F]
打开文件[O]
保存文件[S]
.
.
.
代码如下:在子菜单的DrawItem写
if not Selected then
begin
TmenuItem(Sender).Hint:=Inttostr(TmenuItem(Sender).ImageIndex);
TmenuItem(Sender).ImageIndex:=-1;
acanvas.TextRect(arect,arect.Left,arect.Top,(sender as tmenuitem).Caption);
end else begin
if TmenuItem(Sender).Hint<>'' then
TmenuItem(Sender).ImageIndex:=StrToint(TmenuItem(Sender).Hint);
acanvas.TextRect(arect,arect.Left+30,arect.Top,(sender as tmenuitem).Caption);
end;
为什么图标出不来???
解决方案 »
- 98下的WINSOCK.DLL和xp下的有什么不同
- treeview控件中,怎么判断所选节点,是不是树的分支中的末节点呢
- 我朋友的同事(美女)歌唱比赛,来UP一下呀,还有可能获奖哦~~~~
- 最近刚开了个BBS...散分
- 今天既爽又不爽~~~~~~~~~~~
- dbGrid______cxGrid 转换问题,高分请教!急急急急急急急急!!!!!!!
- 在delphi中的以一个字符为分隔符的函数是什么?
- 关于全局变量的一个小问题
- 将一张表的所有记录,导如到以存在的表中,用adocommand怎么实现,要不要执行后用ADOTABLE.POST
- 有关于COOKIE开发的详细资料及例子吗?
- 怎样实现倒计时?急,在线等待!
- 有关RS232的问题。。 在线和等
因为我只显示图片,而没有加上菜单原有的Caption,
所以你还要修改一下:把显示图片的Canvas的RIGHT改小点,
把显示Caption的Canvas的Left改大点。
procedure TForm1.Open1DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
var bmp:TBitmap;
begin
if not Selected then
begin
//TmenuItem(Sender).Hint:=Inttostr(TmenuItem(Sender).ImageIndex);
TmenuItem(Sender).ImageIndex:=-1;
acanvas.TextRect(arect,arect.Left,arect.Top,(sender as tmenuitem).Caption);
end else begin
bmp := TBitmap.Create ;
if TmenuItem(Sender).Hint<>'' then
TmenuItem(Sender).ImageIndex:=StrToint(TmenuItem(Sender).Hint);
ImageList1.GetBitmap(TmenuItem(Sender).ImageIndex,bmp);
acanvas.StretchDraw(arect,bmp) ;
//acanvas.TextRect(arect,arect.Left+30,arect.Top,(sender as tmenuitem).Caption);
bmp.free ;
end;end;
ImageList1.GetBitmap(TmenuItem(Sender).ImageIndex,bmp);
acanvas.StretchDraw(arect,bmp) ;把我的菜单置成乳白色的XP菜单了,不是我imagelist1加载的图片
注释掉,注意你TmenuItem(Sender).ImageIndex不要为 -1
2、也有可能你的ImageList1里面是ICON图标,尝试改成BMP。
3、我都测试可以哦
我注释了//TmenuItem(Sender).Hint:=Inttostr(TmenuItem(Sender).ImageIndex);
imagelist我也改成了BMP图。MainMenu1的Owerdraw也是true.
结果还是把我的菜单置成乳白色的XP菜单了,不是我imagelist1加载的图片,且菜单文字也没了。
ARect: TRect; Selected: Boolean);
var bmp:TBitmap; MyRect:TRect ;
begin
if not Selected then
ACanvas.TextRect(ARect,ARect.Left+2,ARect.Top,(Sender as Tmenuitem).Caption)
else
begin
bmp := TBitmap.Create ;
ImageList1.GetBitmap(TmenuItem(Sender).ImageIndex,bmp);
MyRect := ARect ;
MyRect.Right := MyRect.Left + 20 ;
ACanvas.StretchDraw(MyRect,bmp) ; ARect.Left := MyRect.Right ;
ACanvas.TextRect(ARect,ARect.Left+3,ARect.Top,(Sender as Tmenuitem).Caption); bmp.free ;
end;end;