Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Resourcen komplett manuell einbinden (https://www.delphipraxis.net/202205-resourcen-komplett-manuell-einbinden.html)

hzzm 9. Okt 2019 09:53

Resourcen komplett manuell einbinden
 
Ich wuerde gerne den RAD-Studio Dialog "Resourcen und Bilder..." vermeiden.
Ich habe dort circa 1000 kleine Icons und Bilder eingepflegt, jetzt ist das Tool einfach zu langsam geworden.
Wenn ich ein neues Icon hinzufuege und OK klicke, haengt sich die IDE 0 Sekunden bis 40 Minuten auf, um die Resourcen-Aenderungen einzukompilieren.

Daher wuerde ich jetzt gerne die gesamt Arbeit des Resourcen-Pflegers "Resourcen und Bilder..." manuell ausfuehren.
Ich habe bisher versucht, ein neues icon in der .rc hinzuzufuegen. Es liegt neben hundert anderen, Name und Pfad sind also definitiv korrekt.
Ich speichere die .rc im Texteditor und starte den Resourcen-Compiler - mit der Befehlszeile der IDE imitiert - manuell in cmd:
Code:
D:\Program Files (x86)\Embarcadero\Studio\17.0\bin>cgrc.exe -c65001 MyProjectResource.rc -foMyProject.dres
Dabei wird auch die .dres erzeugt. Sie hat die erwartete Groesse und ich gehe davon aus, dass meine Neue Resource hier beruecksichtigt wird.

Wenn ich in der IDE nun das Projekt erzeuge und starte, sehe ich, dass die manuell hinzugefuegte Zeile in der .rc nun automatisch entfernt und meine Resource nicht verfuegbar wird.
Ich mache beim Ablauf irgendwas falsch: Ich vermute, ich muesste mit cgrc die resourcen noch in die .exe einkompilieren, das heisst in cmd
Code:
cgrc.exe -v MyProjectResource.rc MyProject.exe
CodeGear Resource Compiler/Binder
Version 1.2.2 Copyright (c) 2008-2012 Embarcadero Technologies Inc.

Error: Unable to invoke ilink32.exe
erhalte dann aber diesen Fehler. Im Windows PATH ist das Embarcadero bin-Verzeichnis eingestellt, aber ich finde Systemweit sowieso keine ilink32.exe.

Wie komme ich ans Ziel?
Danke.

Edit:
Wenn ich nur brcc32.exe benutze, wird eine .res erzeugt, die auch die passende Filesize der .dres hat.
Die .res, die brcc32 eigentlich erzeugen will, ist bei mir seit jeher nur ~120kB gross, enthaelt also definitiv nicht meine Bild-Resourcen.
Ich gehe deshalb davon aus, dass ich die von brcc32 erzeugte .res in .dres umbenennen muss, um die vorherige (automatisch korrekt generierte) .dres zu ersetzen.

Das fuehrt aber auch nicht zum Ziel. Meine Neue Zeile in der .rc wird auch automatisch entfernt und die Resource steht nicht zu Verfuegung.

Uwe Raabe 9. Okt 2019 10:30

AW: Resourcen komplett manuell einbinden
 
Erzeuge doch einfach eine neue RC-Datei unter einem anderen Namen und füge diese dann einfach über Shift-F11 zum Projekt hinzu.

Die projekteigene RC-Datei unterliegt der Kontrolle der IDE und wird immer neu erzeugt. Etwaige manuelle Änderungen gehen dabei verloren.

bcvs 9. Okt 2019 13:32

AW: Resourcen komplett manuell einbinden
 
Ich nehme für so etwas den Resource Builder von SiComponents. Das Ergebnis ist eine .res-datei die ich dann einfach einbinde mit

{$R MyResource.res}

Oder, wenn du volle Kontrolle über die Resourcen haben willst:

Komentiere das
{$R *.RES}
in der .dpr aus und packe alles (also auch MainIcon und Manifest) in eine eigene .Res
Dann kann die die IDE nicht mehr dazwischenfunken.

TurboMagic 9. Okt 2019 17:14

AW: Resourcen komplett manuell einbinden
 
Es gibt im Internet verschiedene Ressourceneditoren, z.B. auch Collin Wilsons XNResource Editor.
Diese können auch .res Dateien erzeugen, die man dann mittels {$R MeineDatei.res} in eine Unit oder die dpr
einbinden kann.

hzzm 10. Okt 2019 06:27

AW: Resourcen komplett manuell einbinden
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1449358)
Erzeuge doch einfach eine neue RC-Datei unter einem anderen Namen und füge diese dann einfach über Shift-F11 zum Projekt hinzu.

Die projekteigene RC-Datei unterliegt der Kontrolle der IDE und wird immer neu erzeugt. Etwaige manuelle Änderungen gehen dabei verloren.

Danke an Alle fuer die Infos.
Ich habe jetzt alles aus "Resourcen und Bilder..." geloescht und meine eigene MyProjectCustom.dres kompiliert und daneben gelegt, die komplett zu sein scheint (Dateigroesse).

Im Hauptprogramm MyProject.dpr wird ja
Delphi-Quellcode:
{$R *.dres}
direkt am Anfang geladen. Das heisst, es sollte auch meine Custom.dres erwischen.
Wenn ich jetzt allerdings meine Resourcen im Code per
Delphi-Quellcode:
.LoadFromResourceName()
einladen will, werden sie nicht gefunden.

Wo haengts denn?
Im git sehe ich, dass ca. 1000 Resource-Eintraege aus der .dproj entfernt wurden.


Edit:
Hat sich erledigt!
*.dres faengt meine MyProject.dres NICHT!
Das war unerwartet. *.dres scheint hier lediglich zu bedeuten <AppName>.dres und nicht <wildcard>.dres?

bcvs 10. Okt 2019 07:25

AW: Resourcen komplett manuell einbinden
 
Zitat:

Zitat von hzzm (Beitrag 1449401)
Das war unerwartet. *.dres scheint hier lediglich zu bedeuten <AppName>.dres und nicht <wildcard>.dres?

Ja, so ist es.

Das verhält sich genauso wie das
Delphi-Quellcode:
{$R *.DFM}
in den Form-Units. Damit werden auch nicht alle DFMs, sondern nur die zum Form gehörige eingebunden.

Uwe Raabe 10. Okt 2019 10:52

AW: Resourcen komplett manuell einbinden
 
Es muss auch keine DRES-Endung sein, die wird von der IDE lediglich zur Unterscheidung von der *.RES eingeführt. Eine simple MyProjectCustom.res tut es hier dann auch.

Das bringt mich aber wieder auf meinen ursprünglichen Vorschlag, einfach die RC-Datei mit deinen Resourcen in das Projekt einzubinden. Unter der Annahme, daß diese MyProjectCustom.rc heißt, würde die dann in der Projektverwaltung als eigene Datei auftauchen (und ließe sich leicht im Editor öffnen). Es wird auch ein Eintrag der Form
Delphi-Quellcode:
{$R 'MyProjectCustom.res' 'MyProjectCustom.rc'}
in die DPR eingefügt, was dazu führt, daß bei Änderungen in der RC-Datei oder bei einem Build die zugehörige RES-Datei automatisch neu erzeugt wird. Das verhindert auch unliebsame Überraschungen, wenn sich die Bildchen mal inhaltlich ändern sollten und man vergisst die RES neu zu erzeugen.

hzzm 10. Okt 2019 13:32

AW: Resourcen komplett manuell einbinden
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1449426)
Delphi-Quellcode:
{$R 'MyProjectCustom.res' 'MyProjectCustom.rc'}
die RC-Datei mit deinen Resourcen in das Projekt einzubinden

Ah, ja. Das ist sicherlich die eleganteste Loesung, insbesondere dann, wenn mehrere Personen im Projekt arbeiten.
Danke :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz