<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://wiki.delphigl.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Doppelreim</id>
		<title>DGL Wiki - Benutzerbeiträge [de]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.delphigl.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Doppelreim"/>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php/Spezial:Beitr%C3%A4ge/Doppelreim"/>
		<updated>2026-05-25T14:29:07Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.27.4</generator>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Bilder_als_Ressourcen&amp;diff=15966</id>
		<title>Bilder als Ressourcen</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Bilder_als_Ressourcen&amp;diff=15966"/>
				<updated>2005-12-30T16:57:03Z</updated>
		
		<summary type="html">&lt;p&gt;Doppelreim: Erstellen von Ressourcen-Dateien und wie man die Daten wieder rausbekommt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Vorwort==&lt;br /&gt;
Eins vorneweg: Da ich noch OpenGL-Frischling bin, sollten die in diesem Artikel beschriebenen Methoden zwar funktionieren, jedoch bin ich fast der Überzeugung, dass sie Speicher- sowie Performancetechnisch eher miserabel sind...&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
Man kann Bilder (und auch jeglichen anderen Daten) beispielsweise in Ressourcen-Dateien packen,&lt;br /&gt;
um die .exe möglichst klein zu halten.&amp;lt;br&amp;gt;&lt;br /&gt;
Oder aber man freut sich, wenn man immer alle Grafiken in einer Datei zusammen hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Oder man verwendet Ressourcen-Dateien, damit &amp;quot;net jeder Wald und Wiesendepp mit Paint die Grafiken verunstalten kann&amp;quot; (Zitat Flash)&lt;br /&gt;
&lt;br /&gt;
Warum auch immer man sich für Ressourcen-Dateien entscheiden sollte, die Herangehensweise ist die selbe - nämlich folgende:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==.RES Datei Erstellen...==&lt;br /&gt;
Als erstes nehmen wir alle Grafiken, die wir brauchen, und packen sie in eine .res Datei.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;packen&amp;quot; weckt hier möglicherweise falsche Hoffnungen, denn die Daten werden dadurch nicht komprimiert, sie kommen bloß alle zusammen in eine Datei.&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine solche .res Datei zu erschaffen gibt es mehrere Wege - hier sind zwei:&lt;br /&gt;
&lt;br /&gt;
===einfach und schnell===&lt;br /&gt;
Man benutzt das Programm &amp;quot;PE Resource Explorer&amp;quot;, mit welchem man sich recht bequem seine Resourcen zusammen klicken kann. (Download: http://www.wilsonc.demon.co.uk/d10resourceeditor.htm)&lt;br /&gt;
&lt;br /&gt;
===selber tippen===&lt;br /&gt;
Die andere Möglichkeit ist etwas mehr Arbeit: Also schnappst du dir Notepad oder sonst irgendeinen Editor und erstellst eine Datei mit folgendem Format:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;Ressourcenbezeichner&amp;gt; &amp;lt;Resourcentyp&amp;gt; &amp;lt;Pfad zur Datei&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
beispielsweise:&amp;lt;br&amp;gt;&lt;br /&gt;
myCharTex BITMAP char.tga&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''Ressourcenbezeichner:''' ist der Name, den du der Ressource gibst. Statt einem String kannst du auch ne Zahl hinschreiben, also:&lt;br /&gt;
:10 BITMAP holla.bmp&lt;br /&gt;
:Muss man selber wissen, ob man lieber mit Strings oder Integers als Bezeichner arbeitet, hat bestimmt beides Vorzüge...&lt;br /&gt;
&lt;br /&gt;
:'''Ressourcentyp:''' Es gibt einige vordefinierte Typen (für Bitmaps, Jpgs, Cursor, Icon, usw)&lt;br /&gt;
:Für alle Sachen, die nicht explizit nen eigenen Typ haben gibt es RCDATA&lt;br /&gt;
:Das wär dann wohl allgemeine Datenvielfalt, oder so...&lt;br /&gt;
&lt;br /&gt;
:'''Pfad zur Datei:''' ist selbsterklärend denke ich.&lt;br /&gt;
:Kann sein, dass man Gänsefüsschen setzen muss, keine Ahnung - testen!&lt;br /&gt;
&lt;br /&gt;
Jetzt hast du im Editor zeilenweise deine Ressourcen angegeben und speicherst das Werk erstmal als Datei mit der Endung &amp;quot;.rc&amp;quot; ab.&amp;lt;br&amp;gt;&lt;br /&gt;
Dann gibt es in deinem Delphi Verzeichnis einen Ordner &amp;quot;bin&amp;quot; und in selbigem eine Datei brcc32.exe - die brauchen wir jetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Die .rc Datei enthält ja nur die Dateinamen zu den Ressourcen die du haben willst. brcc32.exe nimmt sich diese Datei und packt die darin angegebenen Ressourcen in eine .res Datei.&amp;lt;br&amp;gt;&lt;br /&gt;
Dazu ruft man die brcc32 in der Kommandozeile auf und übergibt als Parameter den Pfad zur .rc Datei&amp;lt;br&amp;gt;&lt;br /&gt;
Ipp Zipp Zapp, fertig ist die .res Datei &lt;br /&gt;
&lt;br /&gt;
Dieser zweite Weg ist zwar unter Umständen mehr Arbeit, aber dafür hat man dann auch n bisschen Hintergrundwissen abbekommen - kann ja nicht schaden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==...und einbinden==&lt;br /&gt;
Soweit so gut, wir haben die Resourcen alle in einer .res Datei und binden diese mit {$R lemon.RES} in unser Programm ein...&amp;lt;br&amp;gt;&lt;br /&gt;
HA! Wenn man die .res Datei in das Hauptprojekt eingebunden hätte, wäre sie beim compilieren mit in die .exe hineinkompiliert geworden wurden hätten werden. (wirt sain-gevezz, na wer kennt's?)&amp;lt;br&amp;gt;&lt;br /&gt;
Weil wir das aber nicht wollen, gehen wir her und erstellen in Delphi ein neues DLL Projekt.&amp;lt;br&amp;gt;&lt;br /&gt;
Den vorgeschriebenen Quelltext ersetzen wir mit:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pascal&amp;gt;&lt;br /&gt;
library lemon;&lt;br /&gt;
&lt;br /&gt;
{$R lemon.RES}&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/pascal&amp;gt;&lt;br /&gt;
wobei der Name der Library und &amp;quot;lemon.RES&amp;quot; natürlich auf eure Bedürfnisse angepasst werden sollte.&amp;lt;br&amp;gt;&lt;br /&gt;
Wunderbar, jetzt speichern wir das Projekt, compilieren es und der ein oder andere kann auch &amp;quot;Hosianna&amp;quot; rufen, denn jetzt haben wir eine wunderschöne .dll Datei, die all unsere Resourcen enthält. Und ich denke, jeder gewöhnliche Wald und Wiesen Depp, wird sich denken &amp;quot;Möh? DLL - Wasn datt da? Kann man das essen?? Lass ich mal lieber in Ruhe&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Hehe, aber wir sind noch nicht am Ziel... wir müssen die Daten ja auch wieder aus der DLL rausbekommen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ressourcen laden==&lt;br /&gt;
Zurück in der Hauptanwendung gehen wir folgendermaßen vor:&amp;lt;br&amp;gt;&lt;br /&gt;
Erstmal brauchen wir eine Variable vom Typen Papst ääh, Cardinal.&amp;lt;br&amp;gt;&lt;br /&gt;
Der weisen wir mittels&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pascal&amp;gt;&lt;br /&gt;
var h: cardinal;&lt;br /&gt;
h := LoadLibrary('lemon.dll');&lt;br /&gt;
&amp;lt;/pascal&amp;gt;&lt;br /&gt;
die eben erstelle DLL Datei zu.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn man jetzt in LoadFromRessource oder ähnlichen Funktionen als Parameter eine Instance angeben sollst, ist das unsere Cardinal Variable, die ja auf die DLL zeigt.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei der glBitmap.pas laden wir allerdings immer aus Streams - und zwar so:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pascal&amp;gt;&lt;br /&gt;
var myStream: TResourceStream&lt;br /&gt;
var h: Cardinal;&lt;br /&gt;
var foo: TglBitmap2D;&lt;br /&gt;
&lt;br /&gt;
h := LoadLibrary('lemon.dll');&lt;br /&gt;
myStream := TResourceStream.CreateFromID(h, 10, RT_RCDATA);&lt;br /&gt;
foo.LoadFromStream(myStream);&lt;br /&gt;
foo.GenTexture;&lt;br /&gt;
&amp;lt;/pascal&amp;gt;&lt;br /&gt;
damit würden wir aus der Datei lemon.dll eine RCDATA Resource mit dem Bezeichner 10 laden.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn man den Ressourcen String-Namen gegeben hat, benutzt man &amp;quot;Create&amp;quot; statt &amp;quot;CreateFromId&amp;quot; und gibt den String an.&lt;br /&gt;
&lt;br /&gt;
==Nachwort==&lt;br /&gt;
Sohohohoho, ich hoffe, ich habe alles Erwähneswerte erwähnt und wenn es jemandem hilft, dann bin ich mächtig stolz, auch mal ne Antwort gegeben zu haben, statt immer nur zu Fragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Abgesehen davon hoffe ich, dass ich an dieser Stelle Lossy eX für Geduld und Wissen danken darf :)&amp;lt;br&amp;gt;&lt;br /&gt;
Ciao&lt;/div&gt;</summary>
		<author><name>Doppelreim</name></author>	</entry>

	</feed>