Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Conditionally change application icon with Delphi 2006

I want to produce two different versions of my application, with different icons based on a DEFINE. I succeeded to include different resource files based on the define but I cannot get rid of the MAINICON in the default .res file of my project.

I added a resource Version1.rc file with the following line:

MAINICON icon "resource\icons\Version1.ico"

But if I try to compile MyProject using the IDE I always get the following error:

E2161 Duplicate resource: Type 14 (ICON GROUP), ID MAINICON; File C:\MyProject\Version1.RES resource kept; file C:\MyProject\MyProject.RES resource discarded.

I tried to edit MyProject.res using a resource editor and deleted MAINICON, but delphi automatically seems to recreate the file including the icon.

like image 843
Alois Heimer Avatar asked Aug 17 '15 09:08

Alois Heimer


1 Answers

I found a solution thanks to the comments of David Heffernan. I ended up with the following:

  • In the IDE I removed "Include version info" under project options and removed {$R *.res} in the project file.
  • I removed the file MyProject.res
  • I added a file versioninfo.rc with the information, that I formerly provided in the IDE, as described here.
  • I added the files icon_version1.rc and icon_version2.rc, that looked like this:

    LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
    MAINICON icon "..\resources\icons\version1.ico"
    
  • I added a file Resources.pas to my project, that looked like this:

    unit Resources;
    
    interface
    
    implementation
    
    {$IFDEF VERSION1}
        {$R ICON_VERSION1.RES} //from ICON_VERSION1.RC
    {$ELSE}
        {$R ICON_VERSION2.RES} //from ICON_VERSION2.RC
    {$ENDIF}
    
    {$R VERSIONINFO.RES}  //from VERSIONINFO.RC
    
    end.
    
  • I modified my existing script compile_resources.bat to compile the additional resource files.

Now if I define VERSION1, my application has the icon icon_version1.ico, otherwise icon_version2.ico. One caveat: If version info (or icon) is modified I have to run compile_resources.bat to reflect the changes.

like image 90
Alois Heimer Avatar answered Nov 03 '22 19:11

Alois Heimer