2013-03-22 7 views
7

Ich musste meinem Projekt einige Icons als Ressource hinzufügen (ich kann in diesem Fall keine TImageList verwenden, weil TCoolTrayIcon einen Fehler hat und ich die Komponente nicht schnell ersetzen kann).Das Hinzufügen einer RES-Datei zum Projekt ersetzt das Standardsymbol.Wie verhindern Sie das?

Ich habe einen icons.rc Skript erstellt die beide ico-Dateien in eine Delphi-Ressource-Datei hinzuzufügen:

redicon ICON "c:\icon\red.ico" 
greenicon ICON "c:\icon\green.ico" 

kompiliert es fein zu icons.res, so füge ich es an der ersten Einheit meines Delphi 7-Projekt:

{$R icons.res} 

dann speichere ich die Griffe in OnCreate() des Main:

hRedIcon := LoadIcon(hInstance,'redicon'); 
hGreenIcon := LoadIcon(hInstance,'greenicon'); 

und dann verwenden die Griffe sind in Ordnung.

Jetzt zum Problem - nachdem das Projekt-Symbol, das in den Projektoptionen (in den Größen 16x16 bis 48x48) hinzugefügt wurde, durch das erste Symbol (16x16 redicon), das ich hinzugefügt habe, in {$ R-Symbole. res}.

Wie kann dies verhindert werden? Wie fügt man einem Projekt zusätzliche Symbole als Ressource hinzu, ohne das Symbol zu ersetzen, das in den Projektoptionen -> Anwendung -> Symbol laden hinzugefügt wurde?

+0

Bitte zeigen Sie uns Ihren .dpr-Code. – whosrdaddy

+0

Ich füge immer das Hauptsymbol in eine Ressourcendatei ein, die ich kontrolliere. –

+0

können Sie es in einer separaten DLL enthalten? "Ressourcen-DLLs" werden eher häufig verwendet –

Antwort

7

Der VCL-Code codiert den Namen 'MAINICON' für das Symbol Ihrer Anwendung. Dies kann in dem Code in TApplication.Create zu sehen:

FIcon.Handle := LoadIcon(MainInstance, 'MAINICON'); 

Auf der anderen Seite nimmt die Schale, dass das erste Symbol in der ausführbaren Datei ist das Hauptanwendungssymbol. Die Reihenfolge, die die Shell verwendet, ist alphabetisch nach Symbolname.

Die Konsequenz daraus ist, dass alle Ihre Symbole Namen haben sollten, die nach MAINICON im Alphabet erscheinen.

Verwandte Themen