我有一个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;
为什么图标出不来???

解决方案 »

  1.   

    to bestluo(要学):控件有这个属性吗??是哪个属性?请指点一下!
      

  2.   

    我修改了一下你的代码,这样就可以显示图片了!
    因为我只显示图片,而没有加上菜单原有的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;
      

  3.   

    to lkj999(路在自己脚下):还是不行啊,你这两句:
    ImageList1.GetBitmap(TmenuItem(Sender).ImageIndex,bmp);
    acanvas.StretchDraw(arect,bmp) ;把我的菜单置成乳白色的XP菜单了,不是我imagelist1加载的图片
      

  4.   

    1、你要//TmenuItem(Sender).Hint:=Inttostr(TmenuItem(Sender).ImageIndex);
        注释掉,注意你TmenuItem(Sender).ImageIndex不要为 -1
    2、也有可能你的ImageList1里面是ICON图标,尝试改成BMP。
    3、我都测试可以哦
      

  5.   

    to LKJ99(路在自己脚下):
    我注释了//TmenuItem(Sender).Hint:=Inttostr(TmenuItem(Sender).ImageIndex);
    imagelist我也改成了BMP图。MainMenu1的Owerdraw也是true.
    结果还是把我的菜单置成乳白色的XP菜单了,不是我imagelist1加载的图片,且菜单文字也没了。
      

  6.   

    我再给你发邮件!肯定可以!procedure TForm1.Open1DrawItem(Sender: TObject; ACanvas: TCanvas;
      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;