2015-08-17 7 views
6

Я хочу создать две разные версии моего приложения с разными значками на основе DEFINE. Мне удалось включить различные файлы ресурсов на основе определения, но я не могу избавиться от MAINICON в файле .res по умолчанию моего проекта.Условно изменить значок приложения с Delphi 2006

Я добавил ресурс Version1.rc файл со следующей строкой:

MAINICON icon "resource\icons\Version1.ico" 

Но если я пытаюсь скомпилировать MyProject с помощью IDE я всегда получаю следующее сообщение об ошибке:

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

Я пытался для редактирования MyProject.res с использованием редактора ресурсов и удаления MAINICON, но delphi автоматически, похоже, воссоздает файл, включая значок.

+0

Не позволяйте IDE управлять MyProject.res. Создайте скрипт сборки. Конечно, я регулярно предлагаю, чтобы здесь и каждый раз, когда я делаю, несколько человек не согласны со мной. Мне кажется, что мне нравится иметь повторяющийся процесс сборки, который не полагается на IDE ....... –

+0

@DavidHeffernan На данный момент я запускаю скрипт 'compile_resources.bat', а затем я нажимаю' Build All 'в моей группе проектов в среде IDE. Однако Delphi, похоже, перезаписывает MyProject.res в этом процессе. Я понимаю ценность наличия скрипта для компиляции всего, но я думаю, что это будет довольно некоторая работа. С другой стороны, я также хотел бы иметь возможность установить определение в среде IDE и создать правильный exe. –

+0

Вам просто нужно взять с себя IDE. Удалите строку '{$ R * .res}' из файла .dpr, и вам хорошо идти. С другой стороны, если вы предпочитаете строить в среде IDE, то вы будете бороться с такими задачами. Если это то, что вы предпочли бы делать, то это зависит от вас, очевидно. –

ответ

4

Я нашел решение благодаря комментариям Дэвида Хеффернана. Я закончил с следующее:

  • В IDE я извлекал «Включить информацию о версии» под параметры проекта и удалены {$R *.res} в файле проекта.
  • я удалил файл MyProject.res
  • Я добавил файл versioninfo.rc с информацией, что я ранее предусмотрено в IDE, как описано here.
  • Я добавил файлы icon_version1.rc и icon_version2.rc, который выглядел так:

    LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL 
    MAINICON icon "..\resources\icons\version1.ico" 
    
  • Я добавил файл Resources.pas в мой проект, который выглядел так:

    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. 
    
  • Я изменил мой существующий сценарий compile_resources.bat для компиляции дополнительных файлов ресурсов.

Теперь, если я определяю VERSION1, мое приложение имеет значок icon_version1.ico, в противном случае icon_version2.ico. Одно предупреждение: если информация о версии (или значке) изменена, мне нужно запустить compile_resources.bat, чтобы отразить изменения.