Add icons with subset of images to CodeJock CommandBars

From DataFlex Wiki
Revision as of 11:34, 24 April 2008 by Wil (talk | contribs)
Jump to navigationJump to search

How to add icons with subset of images to CodeJock CommandBars.

If you add an icon with a subset of images to the CodeJock Commandbars, it will use the first icon in the set and in most cases it will look awful.

This function will use a different approach and use CodeJock's imagelist to load the icon. The result is that the appropriate icon in the set will be used instead of the first. The drawback is that the icon files must be in the path, embedding the images in the exe-file is not enough.

Just add the function below to your project (below "Use cCJCommandBarSystem.pkg" or such).


   Function AddImageType for cCJCommandBarSystem Boolean bIsIcon String sImage Integer iId Integer eImageType Returns Integer
       Handle hBitmap
       Variant vImageManager
       Handle hoImageIcons
       Integer iVoid eType 
       Boolean bOk
       String sImageName
       
       Move sImage to sImageName
       
       If (iId=0) Begin
           Get piLastImageId to iId
           Increment iId
           Set piLastImageId to iId
       End
       
       Move (If(bIsIcon,IMAGE_ICON,IMAGE_BITMAP)) to eType
       
       Move (LoadImage(GetModuleHandle(0), sImage, eType, 0, 0, 0)) to hBitmap
       If (hBitmap =0) Begin // the bitmap was not in the EXE resource
           Get_File_Path sImage to sImage // find path in DFPATH, if appropriate
           If (sImage <>"") Begin // The image was found!
               Move (LoadImage(0, sImage, eType, 0, 0, LR_LOADFROMFILE)) to hBitmap
           End
       End
   
       If hBitmap Begin
           // if a bitmap it appears we must add this via an image manager
           If (not(bIsIcon)) Begin
               Get Create U_cCJImageManagerIcons to hoImageIcons
               Get ComIcons to vImageManager
               Set pvComObject of hoImageIcons to vImageManager
               Send ComAddBitmap of hoImageIcons hBitmap iId eImageType False
               Send destroy of hoImageIcons
           End
           Else Begin
               // First check if we can find the icon file.
               // Loading from file works much better with subset of icons
               Get_File_Path sImageName to sImageName // find path in DFPATH, if appropriate
               If (sImageName <>"") Begin // The image was found!
                   Get Create U_cCJImageManagerIcons to hoImageIcons
                   Get ComIcons to vImageManager
                   Set pvComObject of hoImageIcons to vImageManager
                   Send ComLoadIcon of hoImageIcons sImageName iId eImageType 
                   Send destroy of hoImageIcons
               End
               // We where not able to find the file, use original code.
               Else Begin
                   // this works with alpha blends - even when passed false
                   Send ComAddIconHandle hBitmap iId eImageType False
               End
           End
           Move (DeleteObject(hBitmap)) to iVoid
       End
       Function_Return (If(hBitmap<>0,iId,0))
   End_Function