AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Webseite aus Resourcen.dll im IE anzeigen

Webseite aus Resourcen.dll im IE anzeigen

Ein Tutorial von Wormid · begonnen am 16. Okt 2003 · letzter Beitrag vom 17. Okt 2003
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Wormid
Wormid
Registriert seit: 26. Aug 2003
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...
Angehängte Dateien
Dateityp: zip resdemo.zip (32,6 KB, 19x aufgerufen)
Debuggers don't remove Bugs, they only show them in Slow-Motion.
 
Christian Seehase

 
Delphi 11 Alexandria
 
#2
  Alt 16. Okt 2003, 22:56
Moin Wormid,

klasse. Prima umgesetzt

ähhhh....

Ein paar Anmerkungen hätte ich da aber doch noch:
Es funktioniert nur wenn zur Anzeige der IE verwendet wird, oder bei einem anderen Browser, der den Adresstyp res: unterstützt. (kam für meinen Geschmack nicht so ganz raus )

Wenn der Pfad zur DLL angegeben wird z.B.

Webbrowser1.Navigate('res://C:\Programme\Eigene\MeineHTMLRes.DLL/index.htm'); müssen im Pfad zur DLL Backslash ('\') verwendet werden.
Eigentlich unlogisch, da ja Adressen im Browser normaler Weise mit Slash ('/') angegeben werden, und der Slash im Dateisystem ansonsten auch als Pfadtrenner zugelassen ist.

Der Borland Resourcen Compiler scheitert (auch unter D5) übrigens am Punkt im Resourcennamen, der ja nun leider zwingend erforderlich ist.

Jetzt bliebe nur noch zu testen, was mit "exotischen" Zeichen (z.B. '=','\') im Resourcennamen ist.
Speziell wäre ja interessant, ob durch Verwendung des Backslash dann weitere Verzeichnisebenen möglich sind.
Ggf. wäre hier dann auch noch der Resourcentyp zu testen.

Was an dieser Verpackung von Webseiten noch interessant ist:
Die angezeigten Dateien tauchen nicht unter "Temporary Internet Files" auf.
  Mit Zitat antworten Zitat
Benutzerbild von Wormid
Wormid

 
Delphi XE2 Professional
 
#3
  Alt 16. Okt 2003, 23:22
Thx für die Blumen!


Soweit ich das jetzt gestest habe, so funktionieren Verzeichnisse in mehreren Ebenen nicht! Und mit Sonderzeichen wie _ oder = scheint es auch Probleme zu geben.

Schade eigentlich.


Gruß

Wormid
  Mit Zitat antworten Zitat
NicoDE
 
#4
  Alt 17. Okt 2003, 00:13
Zitat von Christian Seehase:
Der Borland Resourcen Compiler scheitert (auch unter D5) übrigens am Punkt im Resourcennamen, der ja nun leider zwingend erforderlich ist.
Den Microsoft Resource Compiler (rc 5.2.3790.0) stören die 'Sonderzeichen' nicht.
Der Lcc Resource Compiler (lrc 1.2) schneidet alles vor (inklusive) dem Punkt ab.


Gruß Nico
  Mit Zitat antworten Zitat
Benutzerbild von Evian
Evian

 
Delphi 6 Professional
 
#5
  Alt 17. Okt 2003, 09:29
Ich komm mit dem Link von Dir leider nicht ganz klar, was muss ich machen um den Microsoft Resource Compiler zu nutzen? Und kann man mit ihm res Dateinen erstellen, aus Dateien die z.B. so heißen:

Code:
produktindex.php_katid=45&short=0.htm
  Mit Zitat antworten Zitat
Benutzerbild von Wormid
Wormid

 
Delphi XE2 Professional
 
#6
  Alt 17. Okt 2003, 10:00
Um den Microsoft Resource Compiler zu benutzen, musst die Dir das Komplette Microsoft SDK runterladen. Im Unterverzeichnis "bin" im Programmverzeichnis des SDK's findest Du dann die RC.exe.

Aber um Dir den download zu ersparen (obwohl es nie falsch ist, das SDK auf der Platte zu haben), habe ich das mal eben mit dem Dateinamen, den Du oben angeben hast getestet:

Zitat von Mircosoft Resource Compiler:
resdemo.rc(6) : error RC2135 : file not found: test\produktindex.php_katid
Es sieht so aus, als würde auch dieser Compiler nicht mit dem Zeichen "=" im Dateinamen klarkommen



Ich befürchte, wenn Du Deine statischen PHP-Seiten in die DLL einbinden willst, dann wird Du Dir erst was wegen der Dateinamen (und der Verlinkung) einfallen lassen müssen.


Gruß

Wormid
  Mit Zitat antworten Zitat
Benutzerbild von Evian
Evian

 
Delphi 6 Professional
 
#7
  Alt 17. Okt 2003, 10:13
Danke Dir auf jeden Fall, dass Du es mal ausprobiert hast ...
aber *heul* seid 2 Tagen versuch ich nun meine Seite in
eine DLL zu bringen und immer kommt eine neue Hirde?

Och menno

... das gehärt zwar nicht wirklich in den Treat(kann es ja dann wieder rausnehmen), aber kennst Du eine möglichkeit die PHP seite in HTML seiten zu speichern, ohne die Sonderzeichen?!

Evi
  Mit Zitat antworten Zitat
Benutzerbild von Wormid
Wormid

 
Delphi XE2 Professional
 
#8
  Alt 17. Okt 2003, 10:22
Ich denke, es bleibt Dir nur der Weg, die Dateien in gültige Namen umzubenennen. Das Problem ist dabei natürlich, das auch alle Referenzen (a href, img src usw) in den Dateien geändert werden müssten.
Vielleicht gibt es ja fertige Tools, mit denen das geht - ich kenne so jetzt aber keins.

Gruß

Wormid
  Mit Zitat antworten Zitat
Benutzerbild von Evian
Evian

 
Delphi 6 Professional
 
#9
  Alt 17. Okt 2003, 11:24
Mh... ich hab doch einen Fortschritt gemacht,
ich hab die neuste Version von SDK runtergeladen
und es ausprobiert... es funktioniert.
Er pakt alles in eine res Datei(auch alle Dateien mit Sonderzeichen)
ohne Fehlermeldung, und es lässt sich auch prima eine DLL Datei
compilieren...das einzige Problem ist nur, dass keine Bilder angezeigt werden.

Woran könnte es liegen?
  Mit Zitat antworten Zitat
Christian Seehase

 
Delphi 11 Alexandria
 
#10
  Alt 17. Okt 2003, 11:33
Mion Evian,

wenn ich mal kurz bremsen darf:
Das gehört jetzt nicht mehr unbedingt hier mit rein, sondern zu Deinem ursprünglichen Thread, der zu diesem geführt hat.
Es wäre ganz gut, das warum usw. dort weiter zu behandeln. (mit Verweis auf diesen Thread).

Danke.
  Mit Zitat antworten Zitat
Themen-Optionen Tutorial durchsuchen
Tutorial 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 20:39 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