2013-03-22 6 views
7

Avevo bisogno di aggiungere alcune icone al mio progetto come risorsa (non posso usare un TImageList in questo caso, a causa di un bug in TCoolTrayIcon, e non posso sostituire rapidamente il componente).L'aggiunta di un file .res al progetto sostituisce l'icona predefinita. Come impedirlo?

Ho creato uno script icons.rc per aggiungere i due file ico ad un file di risorse Delphi:

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

si compila bene per icons.res, così lo aggiungo alla prima unità della mia Delphi 7 del progetto:

{$R icons.res} 

poi memorizzare i manici in OnCreate() della MainForm:

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

e quindi utilizzare le maniglie vanno bene.

Ora al problema - dopo averlo fatto l'icona del progetto che è stata aggiunta nelle opzioni del progetto (in dimensioni da 16x16 a 48x48) viene sostituita dalla prima icona (16x16 redicon) che ho aggiunto in {$ R icone. res}.

Come evitare questo? Come aggiungere icone aggiuntive a un progetto come risorsa senza sostituire l'icona aggiunta in Opzioni progetto -> Applicazione -> Carica icona?

+0

per favore mostraci il tuo codice .dpr. – whosrdaddy

+0

Includo sempre l'icona principale in un file di risorse che controllo. –

+0

puoi includerlo in una DLL separata? "DLL di risorse" sono usate piuttosto frequentemente –

risposta

7

Il codice VCL codifica il nome 'MAINICON' per l'icona dell'applicazione. Questo può essere visto nel codice in TApplication.Create:

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

D'altra parte, il guscio presuppone che la prima icona nel vostro eseguibile è l'icona dell'applicazione principale. L'ordine utilizzato dalla shell è alfabetico in base al nome dell'icona.

La conseguenza di ciò è che tutte le icone dovrebbero avere nomi che appaiono dopo MAINICON nell'alfabeto.