HTML aus Ressourcen DLL lesen

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

HTML aus Ressourcen DLL lesen

Beitrag von Lorca »

Hallo zusammen, :)

dank dem Kollegen PascalDragon und vielen anderen aus diesem Forum, ist es mir nun möglich Stringtabellen aus einer Ressourcen DLL sehr komfortabel auszulesen ( Siehe viewtopic.php?p=123624#p123624).
Nochmals danke für eure nette Hilfe.

Nun würde ich gerne HTML Daten ( liegen im XML Format vor) aus einer Ressourcen Datei auslesen.
Ich habe zwar festgestellt, das ich dazu einen READER benötige, weis jedoch nicht welchen, ob es so einen gibt, und wo ich den finden kann.

Kann jemand von euch helfen?

Viele Grüße
Lorca :)

Benutzeravatar
theo
Beiträge: 10499
Registriert: Mo 11. Sep 2006, 19:01

Re: HTML aus Ressourcen DLL lesen

Beitrag von theo »

Wie bitte?

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1436
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: HTML aus Ressourcen DLL lesen

Beitrag von fliegermichl »

Du mußt die units dom und xmlread einbinden. Darin befindet sich eine Routine, welche xml Daten aus einer Datei oder einem Stream lesen kann.

Soner
Beiträge: 624
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: HTML aus Ressourcen DLL lesen

Beitrag von Soner »

Du musst deine HTML-Datei als RCDATA in deinem Programm oder in irgendeine DLL einbinden und so auslesen:

Code: Alles auswählen

var
  Stream: TResourceStream;
begin
  // 'ResourceX' ist der Name den du gegeben hast. 
  Stream := TResourceStream.Create(HINSTANCE, 'ResourceX', RT_RCDATA);
  try
    LoadFromStream(Stream);
    //hier weiter der gelesene Resource arbeiten
    //.... 
  finally
    Stream.Free;
  end;
end; 
Vielleicht hilft auch Lazarus-Wiki dabei.

Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

Re: HTML aus Ressourcen DLL lesen

Beitrag von Lorca »

Hallo zusammen :)

zunächst ganz herzlichen Dank für eure freundlichen Antworten. :)

Leider war es nicht besonders Hilfreich, da ich nicht nur ein Lazarus Rookie bin, sondern auch mit HTML sehr wenig zu tun hatte :(
Mit keiner Silbe habe ich erwähnt, das ich die HTML Ressourcen DLL selber gebaut habe. Deshalb lieber Theo, Dein Entsetzen war umsonst und verschwendete Energie :lol:

Die Funktion "ReadXMLFile" funktioniert zwar, wenn ich ich auf eine XML Datei gehe. Wie ich diese jedoch aus einer Ressouren DLL
auslesen kann weiß und verstehe ich derzeit nicht. :(
Sollte jemand von euch ein Anwendungsbeispiel haben, wie man HTML Daten aus einer Ressourcen DLL ausliest, würde ich mich wirklich sehr freuen.


Im Anhang ist mal ein Screen-Shot von einer der DLLs wie ich sie vorgefunden habe.

Vllt. Sollte ich den Hintergrund besser beleuchten, damit man sich ein besseres Bild machen kann.
Bei den von mir auszulesenden Ressourcen DLLs handelt es sich um ein 20 Jahre altes Microsoft Spiel.
Die einzelnen DLLs enthalten sowohl Stringtables als auch HTML Daten.

Deshalb ist ein Lesen über RT_Data meines Wissens nicht sinnvoll, da diese Daten unter HTML abgespeichert sind, lieber Soner.
Ich lasse mich jedoch (als Rookie) sehr gerne eines besseren belehren :D

Nun ich weis, das XML Daten in der IT als Schnittstellendaten verwendet werden.

Dies ist auch in diesem Ur alten Spiel der Fall.
So sehen z.B. technische Eigenschaften von Bordgeschützen anders aus, als Spezifikationen von Raumschiffen, Raketen usw.
Ich denke das war auch der Grund von Microsoft für eine derartige Zusammenstellung in den DLLs.
Wie auch immer, ich bin gerade dabei, ein Modifikationsprogramm zu schreiben, um z.B die Waffenreichweite / Stärke usw. verändern zu können. Die HTML Einträge werden nun innerhalb des Spiels ausgelesen, und wenn gewünscht angezeigt. Allerdings muss ich dazu nicht nur
die o.g. Modifikationen vornehmen, sondern auch diese HTMLs (XMLs) entsprechend anpassen.

Es mag durchaus sein, das dies alles heute anders gemacht wird. Ich bin jedoch in Frührente und möchte nicht völlig verblöden. Also habe ich mir vorgenommen weiterhin IT Probleme zu lösen und für mich, neue Sachen zu lernen, wozu ich während meiner meiner beruflichen Tätigkeit nie Zeit hatte. (Deshalb auch oft meine (für euch) abstrusen Fragen :lol: )

Viele Grüße
Lorca :)
Dateianhänge
FL_Disco.PNG
(23.23 KiB) Noch nie heruntergeladen

wp_xyz
Beiträge: 4893
Registriert: Fr 8. Apr 2011, 09:01

Re: HTML aus Ressourcen DLL lesen

Beitrag von wp_xyz »

Lorca hat geschrieben:
Mi 5. Jul 2023, 12:36
Sollte jemand von euch ein Anwendungsbeispiel haben, wie man HTML Daten aus einer Ressourcen DLL ausliest, würde ich mich wirklich sehr freuen.
Im beigefügten Beispiel siehst du, wie man eine als Ressource eingebundene HTML-Datei auslesen und in einem IpHtmlPanel anzeigen kann.
Dateianhänge
html_in_resource_2.zip
(2.87 KiB) 71-mal heruntergeladen

Benutzeravatar
theo
Beiträge: 10499
Registriert: Mo 11. Sep 2006, 19:01

Re: HTML aus Ressourcen DLL lesen

Beitrag von theo »

Lorca hat geschrieben:
Mi 5. Jul 2023, 12:36
Deshalb lieber Theo, Dein Entsetzen war umsonst und verschwendete Energie :lol:
"Wie bitte?" ist kein Ausdruck des Entsetzens sondern ein Ausdruck des nicht Verstehens.
Es hat mich auch keine Energie gekostet dies zu schreiben. Energie kostet es, zu verstehen was du meinst. :lol:
Ich sehe auch in deinem Screenshot eigentlich kein HTML sondern nur XML unter einem HTML Label, deshalb bin ich immer noch etwas verwirrt.
Vielleicht können dir Windows Benutzer besser helfen als ich.

Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

Re: HTML aus Ressourcen DLL lesen

Beitrag von Lorca »

Hallo zusammen, hallo theo, hallo wp_xyz :)

herzlichen Dank für eure netten Antworten.

@theo: Das die Begriffe "HTML" und "Stringtable" in einer Ressourcen DLL nur Labels sind war mir nicht klar. Ich bin davon ausgegangen das dies definierte Typen sind und diese auch nur mit einem Typisierten Reader zu lesen sind. Wie jedoch in der Antwort von wp_xyz zu sehen ist scheint es auch mit RT_Data lesbar zu sein. Also wieder etwas dazu gelernt. Danke :)

@wp_xyz: Danke für das Beispiel. Das muss ich noch erst genauer betrachten, da ich es nicht gänzlich verstehe. Du liest dieses XML aus einer XML Datei und nicht aus einer Ressoucen DLL. Hier benötige ich ein wenig zeit um dies zu verstehen und zu lernen. Dennoch ganz herzlichen Dank. :)
Denn die eingebetteten Units: IpHtml und Ipfilebroker kenne ich nicht und fördern mein Verständnis für die weitere Verarbeitung.

Also nochmals danke schön und
Viele Grüße
Lorca

Benutzeravatar
theo
Beiträge: 10499
Registriert: Mo 11. Sep 2006, 19:01

Re: HTML aus Ressourcen DLL lesen

Beitrag von theo »

Lorca hat geschrieben:
Do 6. Jul 2023, 10:23
@theo: Das die Begriffe "HTML" und "Stringtable" in einer Ressourcen DLL nur Labels sind war mir nicht klar. Ich bin davon ausgegangen das dies definierte Typen sind und diese auch nur mit einem Typisierten Reader zu lesen sind. Wie jedoch in der Antwort von wp_xyz zu sehen ist scheint es auch mit RT_Data lesbar zu sein. Also wieder etwas dazu gelernt. Danke :)
Das "Label" war nicht so spezifisch gemeint, da ich als Linuxer von Windows Ressourcen DLLs nicht viel verstehe.
Ich meinte einfach, dass da HTML drauf steht (Label/Etikett), aber kein HTML drin ist (Etikettenschwindel :wink: ).
Deshalb wird dir z.B. das von wp_xyz vorgeschlagene IpHtmlPanel hier nicht viel nützen.
Zum Aufbau der Ressourcen DLL kann ich nichts sagen.

wp_xyz
Beiträge: 4893
Registriert: Fr 8. Apr 2011, 09:01

Re: HTML aus Ressourcen DLL lesen

Beitrag von wp_xyz »

Lorca hat geschrieben:
Do 6. Jul 2023, 10:23
@wp_xyz: [...] Du liest dieses XML aus einer XML Datei und nicht aus einer Ressoucen DLL.
Wieso meinst du das? Im OnCreate-Handler des Formulars wird ein TResourceStream erzeugt, der die mit Namen und Typ angegebene Ressource ausliest und an das IpHtmlPanel weiterreicht. Wie kommt die HTML-Datei in die Ressource? Am einfachsten in den Projekt-Optionen unter "Ressourcen" und "Hinzufügen". Der Ressource-Name ist im Prinzip der Dateiname, aber ohne Endung. Und der Ressourcentyp steht in dem Formular. Beim Zugriff auf die Ressource muss dem Typ noch ein "RT_" vorangestellt werden - dafür ist dann auch die Unit LCLType in der Uses-Zeile nötig.

Code: Alles auswählen

var
  stream: TStream;
begin
  stream := TResourceStream.Create(HINSTANCE, 'LOREM_IPSUM', RT_RCDATA); 
Alternativ zu dem eingebauten Dialog kann man eine Ressource auch mit dem Hilfsprogramm "lazres" erzeugen (lazres <name_der_ressourcedatei.res> <name_der_ersten_datei1> [, <name_einer_anderen_datei, ...])
Lorca hat geschrieben:
Do 6. Jul 2023, 10:23
Denn die eingebetteten Units: IpHtml und Ipfilebroker kenne ich nicht
Das IpHtmlPanel ist ein einfacher Viewer für HTML-Dokumente. Erwarte aber nicht zu viel - keine CSS-Origien, kein JavaScript, kein HTML5; das Ding stammt noch aus dem letzten Jahrtausend. Den HTML-Text kann man als String (IpHtmlPanel.SetHtmlFromStr(string)), Datei (IpHtmlPanel.SetHtmlFromFile(dateiname)) oder eben als Stream übergeben (IpHtmlPanel.SetFromStream(stream)). Enthält der HTML-Text Verweise auf Bilder, braucht man die Unit IpFileBroker, wo der TIpHtmlDataProvider implementiert ist, über den man in dem Event OnGetImage das Laden des gewünschten Bildes erledigen kann.

Das oben geschickte Projekt habe ich von einem anderen Projekt abgeleitet, in dem Bilder vorkommen. In dem aktuellen HTML-Text gibt es aber keine Bilder, daher kann man das weglassen. Hier eine vereinfachte Version.

XML-Datei kannst du genauso in der Ressource speichern und auslesen (nur halt nicht im IpHtmlPanel anzeigen - aber du hattest nach dem Auslesen von HTML gefragt).
Dateianhänge
html_in_resource_2-neu.zip
(2.66 KiB) 60-mal heruntergeladen

Antworten