我有一个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 haoqingqlm(木头):ownerdraw设为true了,就是不行,不知道还有啥没注意?
      

  2.   

    我给你发了源代码的EMAIL了,怎么不行吗?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;