Moin,
hier im Forum kam die Frage auf, wie man eine kleine Webseite mit Bildern etc. in kompakter Form mit seiner Anwendung weitergeben kann. Es sollte möglichst nur eine Datei sein, sodass der Anwender nicht direkt an die Seiten und Dateien heran kann.
Ich gab dann die Vorlage, und unser hochgeschätzer Moderator Christian Seehase wußte, wie wir das dann umsetzen müssen. Dies hier kam dabei am Ende raus:
Worum geht es?
Es geht also darum, eine komplette Webseite mit Bildern, Stylesheets und
html-Seiten in einer
DLL als Ressourcen unterzubringen. Im IE lassen sich Dateien aus Ressourcen direkt, ohne weitere Hilfsmittel anzeigen!
(Die Fehlermeldung "Seite nicht gefunden..." ist z.B. auf die gleiche Weise im Explorer untergebracht:
res://C:\
WINNT\system32\shdoclc.dll/dnserror.htm )
Tja, dann wollen wir mal anfangen:
Die Webseite
Die Webseite die wir in der
Dll unterbringen wollen, die hat folgende Struktur:
Code:
|
+- images ----+- background.jpg
| |
+- index.htm +- logo.gif
| |
+ style.css +- dprules.gif
Ist klar, das die Pfade dann in der
html-Datei relativ sein müssen. Im Beispielprojekt seht ihr, was ich damit meine.
Die Resourcen
So, als erstes erstellen wir ein Script für den Resource Compiler.
resdemo.rc
Code:
index.htm
HTML index.htm
style.css
HTML style.css
background.jpg IMAGES images\background.jpg
dprules.gif IMAGES images\dprules.gif
logo.gif IMAGES images\logo.gif
Bei der Erstellung des Projektes musste ich leider feststellen, das sich dieses Script mit dem Resource Compiler von Borland (Delphi 6) nicht komplilieren lässt... Er scheint mit dem ResType
HTML (oder 23) nicht klarzukommen. Aber dafür funktioniert das ganz wunderbar mit dem Resource Builder ( Shareware, 30 Tage Testversion,
http://www.sicomponents.com ).
Jetzt wollen wir noch eben den Aufbau des Scriptes erläutern.
Jede Zeile für sich betrachtet hat das Format "ResName ResType Dateiname".
In unserem Fall muss der ResName immer gleich dem Dateinamen der einzubindenden Datei sei, inklusive der Endung. Der ResType ist für alle Dateien im Wurzelverzeichnis der Seite immer
HTML (oder numerisch 23). Für die Dateien in den Unterverzeichnissen ist der ResType dann der Name des Unterverzeichnisses. (Im Beispiel eben "images".) Es lassen sich auch mehrere Verzeichnisse einbinden, aber ich vermute mal, nur eine Verzeichnis-Ebene tief. Mit Leerzeichen und Umlauten wäre ich äußerst sparsam... bzw. die funktionieren dabei dann eh nicht.
Die DLL
Als nächstes erstellen wir ein neues
Dll-Projekt... Am besten mit Notepad, das geht in diesem Fall noch am schnellsten.
resdemo.dpr
Delphi-Quellcode:
library resdemo;
{$R website\resdemo.RES}
begin
end.
Eben fix kompilieren mit "dcc32 resdemo" und fertig. (Okay, wer will, der darf auch die
IDE benutzen.

)
Feierabend!
Und schon ist der Kuchen gegessen, sag ich mal. Unsere
DLL ist damit schon fertig!
Betrachten lässt sich das ganze nun im IE unter folgender Adresse:
Code:
res://{ kompletter Pfad zu
DLL }\resdemo.dll/index.htm
Viel Spaß damit,
Gruß
Wormid
P.S.: Die
DLL hinterher mit UPX oder ähnlichem zu packen ist übrigens eine ganz schlechte Idee! Ich wollte es nur mal gesagt haben.
Edit: Zipfile vergessen...
Debuggers don't remove Bugs, they only show them in Slow-Motion.