我是用dll的方式添加项目的,已经可以实现了
但是不知道如何添加图标,就像winrar那样,在"添加到压缩文件...."前面有个小图标

解决方案 »

  1.   

    TImageListPopupMenu的Images属性选择ImageList,添加菜单项目的时候选择imageIndex
      

  2.   

    不是啊,是windows的系统右键菜单
    比如右键点击一个文件时弹出来的菜单
      

  3.   

    不带图标的菜单可以参考
    \Demos\ActiveX\ShellExt\contmenu.dpr图像主要在IContextMenu3.HandleMenuMsg2里绘制具体的可以去网上找一篇《Windows 外壳扩展编程入门实例》
    里面说俄很详细
      

  4.   

    你可以把图片放进资源文件里,然后读进来,我用的图片是bmp格式的,大小好像必须是14*14的:
    function TContextMenu.QueryContextMenu(Menu: HMENU; indexMenu, idCmdFirst,
              idCmdLast, uFlags: UINT): HResult;
    var
      pic1 : HBITMAP;
      pic2 : HBITMAP;
      subMenu : Integer;
    begin
      Result := 0; // or use MakeResult(SEVERITY_SUCCESS, FACILITY_NULL, 0);  if ((uFlags and $0000000F) = CMF_NORMAL) or
         ((uFlags and CMF_EXPLORE) <> 0) then begin
        // Add  menu item to context menu
        subMenu := CreateMenu;
        InsertMenu(subMenu, indexMenu, MF_STRING or MF_BYPOSITION, idCmdFirst + idQQ, '运行 QQ ');
        InsertMenu(subMenu, indexMenu, MF_STRING or MF_BYPOSITION, idCmdFirst + idDelphi, '运行 Delphi ');
        InsertMenu(Menu, indexMenu, MF_SEPARATOR or MF_BYPOSITION, idCmdFirst, nil);
        InsertMenu(Menu, indexMenu, MF_STRING or MF_BYPOSITION or MF_POPUP, subMenu,'运行程序');
        InsertMenu(Menu, indexMenu, MF_SEPARATOR or MF_BYPOSITION, idCmdFirst, nil);
        pic1 := LoadImage(HInstance,MakeIntResource(1),IMAGE_BITMAP,0,0,LR_LOADMAP3DCOLORS);
        pic2 := LoadImage(HInstance,MakeIntResource(2),IMAGE_BITMAP,0,0,LR_LOADMAP3DCOLORS);
        SetMenuItemBitmaps(Menu, idCmdFirst + idQQ, MF_BYCOMMAND ,pic1,pic1);
        SetMenuItemBitmaps(Menu,idCmdFirst + idDelphi,MF_BYCOMMAND,pic2,pic2);
        // Return number of menu items added
        Result := 4; // or use MakeResult(SEVERITY_SUCCESS, FACILITY_NULL, 1)
      end;
    end;