2015-08-17 15 views
6

Ich möchte zwei verschiedene Versionen meiner Anwendung mit verschiedenen Symbolen auf der Grundlage einer DEFINE erstellen. Es ist mir gelungen, verschiedene Ressourcendateien basierend auf der Definition aufzunehmen, aber ich kann die MAINICON in der Standard-RES-Datei meines Projekts nicht loswerden.Bedingte Änderung Anwendungssymbol mit Delphi 2006

Ich habe eine Ressource Version1.rc Datei mit der folgenden Zeile:

MAINICON icon "resource\icons\Version1.ico" 

Aber wenn ich versuche, MyProject zu kompilieren die IDE Ich bekomme immer folgende Fehlermeldung:

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

Ich habe versucht, Bearbeiten MyProject.res mit einem Ressourceneditor und löschte MAINICON, aber Delphi scheint automatisch die Datei einschließlich des Symbols neu zu erstellen.

+0

Lassen Sie die IDE MyProject.res nicht verwalten. Lass dein Build-Skript es erstellen. Natürlich schlage ich routinemäßig vor, dass hier und jedes Mal, wenn ich es tue, mehrere Leute mit mir nicht übereinstimmen. Es scheint nur ich zu sein, der gerne einen wiederholbaren Build-Prozess hat, der nicht auf der IDE beruht ....... –

+0

@DavidHeffernan Im Moment starte ich ein Skript 'compile_resources.bat' und dann klicke ich auf' Build All 'in meiner Projektgruppe in der IDE. Delphi scheint jedoch die MyProject.res in diesem Prozess zu überschreiben. Ich verstehe den Wert eines Skripts, um alles zu kompilieren, aber ich denke, das wäre ziemlich viel Arbeit. Auf der anderen Seite möchte ich auch in der Lage sein, eine Definition in der IDE zu setzen und die richtige exe erzeugen zu lassen. –

+0

Sie müssen nur von der IDE übernehmen. Entfernen Sie die Zeile "{$ R * .res}" aus der .dpr-Datei und Sie können loslegen. Auf der anderen Seite, wenn Sie lieber in der IDE bleiben, dann werden Sie mit solchen Aufgaben kämpfen. Wenn Sie das lieber tun würden, liegt das natürlich bei Ihnen. –

Antwort

4

Ich fand eine Lösung dank der Kommentare von David Heffernan. Ich landete mit dem folgenden:

  • In dem IDE I „Include Versionsinfo“ unter Projektoptionen entfernt und entfernt {$R *.res} in der Projektdatei.
  • I entfernt, um die Datei MyProject.res
  • I gegeben, um eine Datei versioninfo.rc mit der Information, dass ich früher in der IDE vorgesehen, wie here beschrieben.
  • Ich habe die Dateien icon_version1.rc und icon_version2.rc, die wie folgt aussah:

    LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL 
    MAINICON icon "..\resources\icons\version1.ico" 
    
  • ich eine Datei Resources.pas zu meinem Projekt hinzugefügt, die wie folgt aussah:

    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. 
    
  • ich meine modifizierte vorhandenes Skript compile_resources.bat zum Kompilieren der zusätzlichen Ressourcendateien.

Nun, wenn ich VERSION1 definieren, hat meine Anwendung das Symbol icon_version1.ico, sonst icon_version2.ico. Eine Einschränkung: Wenn Versionsinfo (oder Symbol) geändert wird, muss ich compile_resources.bat ausführen, um die Änderungen widerzuspiegeln.

Verwandte Themen