how to show several sizes of the icons help

Just starting out? Need help? Post your questions and find answers here.
mx101
User
User
Posts: 73
Joined: Thu Sep 18, 2008 3:21 pm

how to show several sizes of the icons help

Post by mx101 »

hi...

i need extract icons from a dll and i need show several sizes of each icon in ImageGadget.

i have one example from "netmaestro" but only show 2 sizes.

Code: Select all

file$ = #PB_Compiler_Home+"purebasic.exe"

; Query the file
num_icons = ExtractIconEx_(file$, -1, #Null, #Null, #Null)

If num_icons > 0
  ; Allow room for the icons
  Dim small(num_icons)
  Dim large(num_icons)
  
  ; Retrieve the icons
  ExtractIconEx_(file$, 0, large(), small(), num_icons)
  
  ; Look at the icons
  OpenWindow(0,0,0,640,480,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  
  Repeat
    ev=WaitWindowEvent()
    Select ev
      Case #PB_Event_Repaint
        hdc = StartDrawing(WindowOutput(0))
          DrawIconEx_(hdc, 10,20,small(0),0,0,0,0,#DI_NORMAL)
          DrawIconEx_(hdc, 50,20,large(0),0,0,0,0,#DI_NORMAL)
        StopDrawing()
    EndSelect  
  Until ev=#PB_Event_CloseWindow
EndIf

; That's enough work for now, have a beer ;)
anyone can help me?
User avatar
netmaestro
PureBasic Bullfrog
PureBasic Bullfrog
Posts: 8451
Joined: Wed Jul 06, 2005 5:42 am
Location: Fort Nelson, BC, Canada

Re: how to show several sizes of the icons help

Post by netmaestro »

Is this what you had in mind?

Code: Select all

Procedure ClearAlphaChannel(image)
  StartDrawing(ImageOutput(image))
    DrawingMode(#PB_2DDrawing_AlphaChannel)
    Box(0,0, ImageWidth(image), ImageHeight(image), RGBA(0,0,0,0))
  StopDrawing()
EndProcedure

file$ = #PB_Compiler_Home+"purebasic.exe"

; Query the file
num_icons = ExtractIconEx_(file$, -1, #Null, #Null, #Null)

If num_icons > 0
  ; Allow room for the icons
  Dim small(num_icons)
  Dim large(num_icons)
  
  ; Retrieve the icons
  ExtractIconEx_(file$, 0, large(), small(), num_icons)

  CreateImage(0,48,48, 32)
  ClearAlphaChannel(0)
  hdc = StartDrawing(ImageOutput(0))
    DrawIconEx_(hdc, 0,0,large(0),48,48,0,0,#DI_NORMAL)
  StopDrawing()
  
  CreateImage(1,64,64,32)
  ClearAlphaChannel(1)
  hdc = StartDrawing(ImageOutput(1))
    DrawIconEx_(hdc, 0,0,large(0),64,64,0,0,#DI_NORMAL)
  StopDrawing()

  ; Look at the icons
  OpenWindow(0,0,0,640,480,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  ImageGadget(0, 10,10,0,0,ImageID(0))
  ImageGadget(1, 70,10,0,0,ImageID(1))
  
  Repeat
    ev=WaitWindowEvent()
  Until ev=#PB_Event_CloseWindow
EndIf
BERESHEIT
mx101
User
User
Posts: 73
Joined: Thu Sep 18, 2008 3:21 pm

Re: how to show several sizes of the icons help

Post by mx101 »

netmaestro wrote:Is this what you had in mind?

Code: Select all

Procedure ClearAlphaChannel(image)
  StartDrawing(ImageOutput(image))
    DrawingMode(#PB_2DDrawing_AlphaChannel)
    Box(0,0, ImageWidth(image), ImageHeight(image), RGBA(0,0,0,0))
  StopDrawing()
EndProcedure

file$ = #PB_Compiler_Home+"purebasic.exe"

; Query the file
num_icons = ExtractIconEx_(file$, -1, #Null, #Null, #Null)

If num_icons > 0
  ; Allow room for the icons
  Dim small(num_icons)
  Dim large(num_icons)
  
  ; Retrieve the icons
  ExtractIconEx_(file$, 0, large(), small(), num_icons)

  CreateImage(0,48,48, 32)
  ClearAlphaChannel(0)
  hdc = StartDrawing(ImageOutput(0))
    DrawIconEx_(hdc, 0,0,large(0),48,48,0,0,#DI_NORMAL)
  StopDrawing()
  
  CreateImage(1,64,64,32)
  ClearAlphaChannel(1)
  hdc = StartDrawing(ImageOutput(1))
    DrawIconEx_(hdc, 0,0,large(0),64,64,0,0,#DI_NORMAL)
  StopDrawing()

  ; Look at the icons
  OpenWindow(0,0,0,640,480,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  ImageGadget(0, 10,10,0,0,ImageID(0))
  ImageGadget(1, 70,10,0,0,ImageID(1))
  
  Repeat
    ev=WaitWindowEvent()
  Until ev=#PB_Event_CloseWindow
EndIf
No, i want show several sizes of each icons contains ex 32x32 , 64x64, 256x256 etc.....

on your ex only increase the size of image of icon not the realy size

each icon contains several sizes ex: 16x16, 24x24, 32x32, 64x64 and i want show all sizes of each icon.
User avatar
netmaestro
PureBasic Bullfrog
PureBasic Bullfrog
Posts: 8451
Joined: Wed Jul 06, 2005 5:42 am
Location: Fort Nelson, BC, Canada

Re: how to show several sizes of the icons help

Post by netmaestro »

each icon contains several sizes ex: 16x16, 24x24, 32x32, 64x64 and i want show all sizes of each icon
If those sizes existed, the shown method wouldn't stretch them, just draw them as they are. It's still how you'd do it.
BERESHEIT
mx101
User
User
Posts: 73
Joined: Thu Sep 18, 2008 3:21 pm

Re: how to show several sizes of the icons help

Post by mx101 »

netmaestro wrote:
each icon contains several sizes ex: 16x16, 24x24, 32x32, 64x64 and i want show all sizes of each icon
If those sizes existed, the shown method wouldn't stretch them, just draw them as they are. It's still how you'd do it.
the the appearance of icons is horrible

here is the dll
http://rapidshare.com/files/330982320/fclibico.zip.html

thanks for trying help me
User avatar
netmaestro
PureBasic Bullfrog
PureBasic Bullfrog
Posts: 8451
Joined: Wed Jul 06, 2005 5:42 am
Location: Fort Nelson, BC, Canada

Re: how to show several sizes of the icons help

Post by netmaestro »

Ok, I downloaded that dll and ExtractIconEx found 40 icons in it, 20 @ 16*16 and 20 @ 32*32. So anything extracted using that function is at most 32*32, which won't look good stretched larger. I don't use that command much, so I'm not versed on its limitations. If there are larger icons in the file, it's possible that this function isn't getting them. If nobody else offers help I'll have time tomorrow to look into alternatives. Meanwhile, here is a place with info: http://msdn.microsoft.com/en-us/library/ms997538.aspx It's where I'll be looking for ideas for building extraction code from a .dll file.
BERESHEIT
mx101
User
User
Posts: 73
Joined: Thu Sep 18, 2008 3:21 pm

Re: how to show several sizes of the icons help

Post by mx101 »

netmaestro wrote:Ok, I downloaded that dll and ExtractIconEx found 40 icons in it, 20 @ 16*16 and 20 @ 32*32. So anything extracted using that function is at most 32*32, which won't look good stretched larger. I don't use that command much, so I'm not versed on its limitations. If there are larger icons in the file, it's possible that this function isn't getting them. If nobody else offers help I'll have time tomorrow to look into alternatives. Meanwhile, here is a place with info: http://msdn.microsoft.com/en-us/library/ms997538.aspx It's where I'll be looking for ideas for building extraction code from a .dll file.

ok thanks for your help i will wait
Denis
Enthusiast
Enthusiast
Posts: 778
Joined: Fri Apr 25, 2003 5:10 pm
Location: Doubs - France

Re: how to show several sizes of the icons help

Post by Denis »

You can enumerate the icons with API window EnumResourceNames_() (http://msdn.microsoft.com/en-us/library ... S.85).aspx) with parameters :

hModule : load dll with API LoadLibraryEx_()

Code: Select all

LoadLibraryEx_(FileName$, 0, #LOAD_LIBRARY_AS_DATAFILE)
lpszType : #RT_ICON

lpEnumFunc : the enumeration callback

lParam : it's a value you can use with the callback.

Then with API Findressource, LoadResource, LockResource and SizeofResource you get the ressource (icon) ans with API CreateIconFromResourceEx_() you can create the icon.
hIcon = CreateIconFromResourceEx_(LockResource_result, SizeofResource_result, #True, $00030000, #Icon_Size, #Icon_Size, #LR_DEFAULTCOLOR). Under Vista/Seven, compressed icons (png format) are created else not.

Don't forget to unload dll with API FreeLibrary_()
Created icons must be destroy with destroyIcon_() API

I put a code here some months ago but i didn't find it with the forum search fonction.
A+
Denis
mx101
User
User
Posts: 73
Joined: Thu Sep 18, 2008 3:21 pm

Re: how to show several sizes of the icons help

Post by mx101 »

Denis wrote:You can enumerate the icons with API window EnumResourceNames_() (http://msdn.microsoft.com/en-us/library ... S.85).aspx) with parameters :

hModule : load dll with API LoadLibraryEx_()

Code: Select all

LoadLibraryEx_(FileName$, 0, #LOAD_LIBRARY_AS_DATAFILE)
lpszType : #RT_ICON

lpEnumFunc : the enumeration callback

lParam : it's a value you can use with the callback.

Then with API Findressource, LoadResource, LockResource and SizeofResource you get the ressource (icon) ans with API CreateIconFromResourceEx_() you can create the icon.
hIcon = CreateIconFromResourceEx_(LockResource_result, SizeofResource_result, #True, $00030000, #Icon_Size, #Icon_Size, #LR_DEFAULTCOLOR). Under Vista/Seven, compressed icons (png format) are created else not.

Don't forget to unload dll with API FreeLibrary_()
Created icons must be destroy with destroyIcon_() API

I put a code here some months ago but i didn't find it with the forum search fonction.

thanks but is to much confuse for me i'm a newbie :oops:
User avatar
Shardik
Addict
Addict
Posts: 2058
Joined: Thu Apr 21, 2005 2:38 pm
Location: Germany

Re: how to show several sizes of the icons help

Post by Shardik »

I have written this example code to demonstrate how to extract all
icon groups contained as a resource in a library (PureBASIC.Exe in this
example) and to display all icons of each icon group in its native size.
I have tested this example successfully with WinXP Prof SP2 and Win7 RC1.

Code: Select all

; For in depth infos about icons in Windows read the MSDN article
; "Icons in Win32"
; (http://msdn.microsoft.com/en-us/library/ms997538.aspx)

EnableExplicit

#WindowHeight = 180 
#WindowWidth = 240 

Define *GrpIconDir.GRPICONDIR
Define i.I
Define IconHandle.I
Define *IconImage.ICONIMAGE
Define LibHandle.I
Define LibName.S = #PB_Compiler_Home + "PureBASIC.Exe"
Define MaxHeight.I
Define WindowDC.I
Define xLeft.I
Define yTop.I

NewList IconGroupID.I()

Procedure.I EnumResNameProc(ResHandle.I, ResType.I, ResName.I, AppParam.I) 
  Shared IconGroupID()

  AddElement(IconGroupID())
  IconGroupID() = ResName 

  ProcedureReturn #True 
EndProcedure 

Procedure.I EnumResTypeProc(ResHandle.I, ResType.I, AppParam.I)
  If ResType = #RT_GROUP_ICON 
    EnumResourceNames_(ResHandle, ResType, @EnumResNameProc(), 0) 
  EndIf 

  ProcedureReturn #True 
EndProcedure 

LibHandle = LoadLibraryEx_(@LibName, 0, #LOAD_LIBRARY_AS_DATAFILE) 

If LibHandle = 0 
  MessageRequester("Error", "Unable to load library " + LibName, #MB_ICONERROR) 
  End 
EndIf 

EnumResourceTypes_(LibHandle, @EnumResTypeProc(), 0) 

OpenWindow(0, 0, 0, #WindowWidth, #WindowHeight, "Icon-Library: " + GetFilePart(LibName), #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
yTop = 5
WindowDC = StartDrawing(WindowOutput(0))

ForEach IconGroupID()
  *GrpIconDir = LoadResource_(LibHandle, FindResource_(LibHandle, IconGroupID(), #RT_GROUP_ICON))

  If *GrpIconDir
    xLeft = 5

    DrawText(xLeft, yTop, "IconGroup #" + Str(IconGroupID()) + ":", #Black, #White)
    yTop + 25

    For i = 0 To *GrpIconDir\idCount - 1
      *IconImage = LoadResource_(LibHandle, FindResource_(LibHandle, *GrpIconDir\idEntries[i]\nID, #RT_ICON))
      IconHandle = CreateIconFromResourceEx_(*IconImage, *IconImage\icHeader\biBitCount, #True, $00030000, *GrpIconDir\idEntries[i]\bWidth, *GrpIconDir\idEntries[i]\bHeight, 0)

      DrawIconEx_(WindowDC, xLeft + 15, yTop, IconHandle, *GrpIconDir\idEntries[i]\bWidth, *GrpIconDir\idEntries[i]\bHeight, 0, 0, #DI_NORMAL)
      DestroyIcon_(IconHandle)
      DrawText(xLeft, yTop, "#" + Str(*GrpIconDir\idEntries[i]\nID), #Black, #White)

      xLeft + *GrpIconDir\idEntries[i]\bWidth + 30

      If MaxHeight < *GrpIconDir\idEntries[i]\bHeight
        MaxHeight = *GrpIconDir\idEntries[i]\bHeight
      EndIf
    Next i
  EndIf

  yTop + MaxHeight + 10
Next 

StopDrawing()

FreeLibrary_(LibHandle)

While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend
Update: I had to add DestroyIcon_(IconHandle) for each icon created
with CreateIconFromResourceEx_().
MSDN wrote:It is only necessary to call DestroyIcon for icons and cursors created with
the following functions: CreateIconFromResourceEx (if called without the
LR_SHARED flag), CreateIconIndirect, and CopyIcon. Do not use this function
to destroy a shared icon. A shared icon is valid as long as the module from
which it was loaded remains in memory.
Collection of cross-platform examples with API functions to extend PureBasic
mx101
User
User
Posts: 73
Joined: Thu Sep 18, 2008 3:21 pm

Re: how to show several sizes of the icons help

Post by mx101 »

Shardik wrote:I have written this example code to demonstrate how to extract all
icon groups contained as a resource in a library (PureBASIC.Exe in this
example) and to display all icons of each icon group in its native size.
I have tested this example successfully with WinXP Prof SP2 and Win7 RC1.

Code: Select all

; For in depth infos about icons in Windows read the MSDN article
; "Icons in Win32"
; (http://msdn.microsoft.com/en-us/library/ms997538.aspx)

EnableExplicit

#WindowHeight = 180 
#WindowWidth = 240 

Define *GrpIconDir.GRPICONDIR
Define i.I
Define IconHandle.I
Define *IconImage.ICONIMAGE
Define LibHandle.I
Define LibName.S = #PB_Compiler_Home + "PureBASIC.Exe"
Define MaxHeight.I
Define WindowDC.I
Define xLeft.I
Define yTop.I

NewList IconGroupID.I()

Procedure.I EnumResNameProc(ResHandle.I, ResType.I, ResName.I, AppParam.I) 
  Shared IconGroupID()

  AddElement(IconGroupID())
  IconGroupID() = ResName 

  ProcedureReturn #True 
EndProcedure 

Procedure.I EnumResTypeProc(ResHandle.I, ResType.I, AppParam.I)
  If ResType = #RT_GROUP_ICON 
    EnumResourceNames_(ResHandle, ResType, @EnumResNameProc(), 0) 
  EndIf 

  ProcedureReturn #True 
EndProcedure 

LibHandle = LoadLibraryEx_(@LibName, 0, #LOAD_LIBRARY_AS_DATAFILE) 

If LibHandle = 0 
  MessageRequester("Error", "Unable to load library " + LibName, #MB_ICONERROR) 
  End 
EndIf 

EnumResourceTypes_(LibHandle, @EnumResTypeProc(), 0) 

OpenWindow(0, 0, 0, #WindowWidth, #WindowHeight, "Icon-Library: " + GetFilePart(LibName), #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
yTop = 5
WindowDC = StartDrawing(WindowOutput(0))

ForEach IconGroupID()
  *GrpIconDir = LoadResource_(LibHandle, FindResource_(LibHandle, IconGroupID(), #RT_GROUP_ICON))

  If *GrpIconDir
    xLeft = 5

    DrawText(xLeft, yTop, "IconGroup #" + Str(IconGroupID()) + ":", #Black, #White)
    yTop + 25

    For i = 0 To *GrpIconDir\idCount - 1
      *IconImage = LoadResource_(LibHandle, FindResource_(LibHandle, *GrpIconDir\idEntries[i]\nID, #RT_ICON))
      IconHandle = CreateIconFromResourceEx_(*IconImage, *IconImage\icHeader\biBitCount, #True, $00030000, *GrpIconDir\idEntries[i]\bWidth, *GrpIconDir\idEntries[i]\bHeight, 0)

      DrawIconEx_(WindowDC, xLeft + 15, yTop, IconHandle, *GrpIconDir\idEntries[i]\bWidth, *GrpIconDir\idEntries[i]\bHeight, 0, 0, #DI_NORMAL)
      DestroyIcon_(IconHandle)
      DrawText(xLeft, yTop, "#" + Str(*GrpIconDir\idEntries[i]\nID), #Black, #White)

      xLeft + *GrpIconDir\idEntries[i]\bWidth + 30

      If MaxHeight < *GrpIconDir\idEntries[i]\bHeight
        MaxHeight = *GrpIconDir\idEntries[i]\bHeight
      EndIf
    Next i
  EndIf

  yTop + MaxHeight + 10
Next 

StopDrawing()

FreeLibrary_(LibHandle)

While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend
Update: I had to add DestroyIcon_(IconHandle) for each icon created
with CreateIconFromResourceEx_().
MSDN wrote:It is only necessary to call DestroyIcon for icons and cursors created with
the following functions: CreateIconFromResourceEx (if called without the
LR_SHARED flag), CreateIconIndirect, and CopyIcon. Do not use this function
to destroy a shared icon. A shared icon is valid as long as the module from
which it was loaded remains in memory.

thanks i will teste big thanks
User avatar
Michael Vogel
Addict
Addict
Posts: 2797
Joined: Thu Feb 09, 2006 11:27 pm
Contact:

Re: how to show several sizes of the icons help

Post by Michael Vogel »

This code eliminates one of the rare unsolved mysteries, thanks for that cool snippet! :)
User avatar
Shardik
Addict
Addict
Posts: 2058
Joined: Thu Apr 21, 2005 2:38 pm
Location: Germany

Re: how to show several sizes of the icons help

Post by Shardik »

mx101 wrote:thanks i will teste big thanks
Michael Vogel wrote:This code eliminates one of the rare unsolved mysteries, thanks for that cool snippet! :)
Thank you very much for the kind words. I am glad that my code has been helpful... 8)
Collection of cross-platform examples with API functions to extend PureBasic
Denis
Enthusiast
Enthusiast
Posts: 778
Joined: Fri Apr 25, 2003 5:10 pm
Location: Doubs - France

Re: how to show several sizes of the icons help

Post by Denis »

Here some infos for enumeration icons/icons group

It is possible to have alphanumerical identifier for resource, that is ResName in the enumeration callback (in your code EnumResNameProc() proc) could be a pointer to a string. Such cases are not common but exist.

FindResource must take care of that (see MS remark here http://msdn.microsoft.com/en-us/library ... S.85).aspx), API UpdateResource_() too.

here are a procedure and a macro for that (X86 only, it's OK in ASCII or unicode mode)

Code: Select all

Macro MAKEINTRESOURCE(INT)
(INT & $FFFF)
EndMacro


Procedure IS_INTRESOURCE(Val)
     Select (Val & $FFFF0000)
          Case  0
               ;// it's a numerical identifer for resource
               ProcedureReturn #True
               
          Default
               ;// it's a pointer to a string for resource
               ProcedureReturn #False
     EndSelect
EndProcedure
I've done many many many tries (for PureIconManager) but the only way to get it works is to use it inside the enumeration callback else you will get an error (87 as invalid parameter, but another error code is possible). May be a different segment for string storage (?).
That's only the way i foud to get it works.

If you add this in your callback :

Code: Select all

     If IS_INTRESOURCE(ResName)
     Else
          ;// it's a pointer to a string for resource
          Debug "String identifier PeekS(ResName) = " + PeekS(ResName)
     EndIf
you will display the string if the resource use such identifier.

If you change in your code

Code: Select all

*GrpIconDir = LoadResource_(LibHandle, FindResource_(LibHandle, MAKEINTRESOURCE(IconGroupID()), #RT_GROUP_ICON))
by

Code: Select all

ForEach IconGroupID()
     If IS_INTRESOURCE(IconGroupID())
          ;// it's a numerical identifer for resource
          *GrpIconDir = LoadResource_(LibHandle, FindResource_(LibHandle, MAKEINTRESOURCE(IconGroupID()), #RT_GROUP_ICON))
     Else
          ;// it's a pointer to a string for resource
          Debug Bin(IconGroupID())
          *GrpIconDir = LoadResource_(LibHandle, FindResource_(LibHandle, PeekS(IconGroupID()), #RT_GROUP_ICON))
     EndIf
it will failed if alphanumerical identifier is used (error 87).

That's why such code must be used inside enumeration callback.

Here is a zip file with 2 exe files (each with only one group with alphanumerical id). As you will see, the string is always in capital letter. If you try to use it without capital letter, it will failed.
For file cpviewer.exe, the group string is IDI_APPICON and for isignup.exe the group string is ICO_APP
zip file here

I hope it will help you.
A+
Denis
mx101
User
User
Posts: 73
Joined: Thu Sep 18, 2008 3:21 pm

Re: how to show several sizes of the icons help

Post by mx101 »

Denis wrote:Here some infos for enumeration icons/icons group

It is possible to have alphanumerical identifier for resource, that is ResName in the enumeration callback (in your code EnumResNameProc() proc) could be a pointer to a string. Such cases are not common but exist.

FindResource must take care of that (see MS remark here http://msdn.microsoft.com/en-us/library ... S.85).aspx), API UpdateResource_() too.

here are a procedure and a macro for that (X86 only, it's OK in ASCII or unicode mode)

Code: Select all

Macro MAKEINTRESOURCE(INT)
(INT & $FFFF)
EndMacro


Procedure IS_INTRESOURCE(Val)
     Select (Val & $FFFF0000)
          Case  0
               ;// it's a numerical identifer for resource
               ProcedureReturn #True
               
          Default
               ;// it's a pointer to a string for resource
               ProcedureReturn #False
     EndSelect
EndProcedure
I've done many many many tries (for PureIconManager) but the only way to get it works is to use it inside the enumeration callback else you will get an error (87 as invalid parameter, but another error code is possible). May be a different segment for string storage (?).
That's only the way i foud to get it works.

If you add this in your callback :

Code: Select all

     If IS_INTRESOURCE(ResName)
     Else
          ;// it's a pointer to a string for resource
          Debug "String identifier PeekS(ResName) = " + PeekS(ResName)
     EndIf
you will display the string if the resource use such identifier.

If you change in your code

Code: Select all

*GrpIconDir = LoadResource_(LibHandle, FindResource_(LibHandle, MAKEINTRESOURCE(IconGroupID()), #RT_GROUP_ICON))
by

Code: Select all

ForEach IconGroupID()
     If IS_INTRESOURCE(IconGroupID())
          ;// it's a numerical identifer for resource
          *GrpIconDir = LoadResource_(LibHandle, FindResource_(LibHandle, MAKEINTRESOURCE(IconGroupID()), #RT_GROUP_ICON))
     Else
          ;// it's a pointer to a string for resource
          Debug Bin(IconGroupID())
          *GrpIconDir = LoadResource_(LibHandle, FindResource_(LibHandle, PeekS(IconGroupID()), #RT_GROUP_ICON))
     EndIf
it will failed if alphanumerical identifier is used (error 87).

That's why such code must be used inside enumeration callback.

Here is a zip file with 2 exe files (each with only one group with alphanumerical id). As you will see, the string is always in capital letter. If you try to use it without capital letter, it will failed.
For file cpviewer.exe, the group string is IDI_APPICON and for isignup.exe the group string is ICO_APP
zip file here

I hope it will help you.
thanks very usefull, if i want show only one size of group ex: 64x64 how do this?
Post Reply