AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Resourcen komplett manuell einbinden

Ein Thema von hzzm · begonnen am 9. Okt 2019 · letzter Beitrag vom 10. Okt 2019
Antwort Antwort
hzzm

Registriert seit: 8. Apr 2016
102 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Resourcen komplett manuell einbinden

  Alt 9. Okt 2019, 09:53
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.

Geändert von hzzm ( 9. Okt 2019 um 10:10 Uhr) Grund: Neue Erkenntnis
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
7.013 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Resourcen komplett manuell einbinden

  Alt 9. Okt 2019, 10:30
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
410 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Resourcen komplett manuell einbinden

  Alt 9. Okt 2019, 13:32
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.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
429 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Resourcen komplett manuell einbinden

  Alt 9. Okt 2019, 17:14
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.
  Mit Zitat antworten Zitat
hzzm

Registriert seit: 8. Apr 2016
102 Beiträge
 
Delphi 10 Seattle Professional
 
#5

AW: Resourcen komplett manuell einbinden

  Alt 10. Okt 2019, 06:27
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 {$R *.dres} direkt am Anfang geladen. Das heisst, es sollte auch meine Custom.dres erwischen.
Wenn ich jetzt allerdings meine Resourcen im Code per .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?

Geändert von hzzm (10. Okt 2019 um 06:38 Uhr)
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
410 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Resourcen komplett manuell einbinden

  Alt 10. Okt 2019, 07:25
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 {$R *.DFM} in den Form-Units. Damit werden auch nicht alle DFMs, sondern nur die zum Form gehörige eingebunden.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
7.013 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Resourcen komplett manuell einbinden

  Alt 10. Okt 2019, 10:52
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 {$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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
hzzm

Registriert seit: 8. Apr 2016
102 Beiträge
 
Delphi 10 Seattle Professional
 
#8

AW: Resourcen komplett manuell einbinden

  Alt 10. Okt 2019, 13:32
{$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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf