Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Einbindung von Grafiken in Html-Seiten (https://www.delphipraxis.net/149865-einbindung-von-grafiken-html-seiten.html)

Ookami 1. Apr 2010 08:35


Einbindung von Grafiken in Html-Seiten
 
Einbindung von Grafiken in Html-Seiten über Indy-Server idHttpServer

Hallo zusammen,

ich muss eine Applikation erstellen, die Html-Seiten erstellt. Über Browser-Adresse http://127.0.0.1 kann ich das dann am Bildschirm betrachten.
Soweit, so gut. Es ist aber notwendig, einige Grafiken einzubauen und genau hier liegt der Hund begraben.
Hat jemand von euch das Problem schon mal gelöst, oder 'ne Idee. SelfHtml hat mir bei 95% geholfen, aber hier nicht mehr.
Ich habe auch alle (mir bekannten) Möglichkeiten zur Pfadangabe getestet. Ich glaube langsam ich habe hier einen grundlegenden Fehler in der Denke.

Wenn ich die Seite als Html abspeichere, funktioniert das dann.

Ein relevantes Stück aus dem Quellcode

Delphi-Quellcode:
 

    AResponseinfo.ContentText:= AResponseinfo.ContentText+
    +'     <td>

[img]../bild1.jpg[/img]</p></td>'

    ....

    +'     <td>

[img]../TLGreen.JPG[/img]</p></td>'
Alles andere funktioniert soweit. Die Seite wird erzeugt, die Tabelle, Buttons und alles andere mit. Aber anstatt der Grafiken kommt nur der Platzhalter für Grafik nicht gefunden.

Danke schon mal im Voraus

Daniel 1. Apr 2010 08:39

Re: Einbindung von Grafiken in Html-Seiten
 
Über die Angabe BASE HREF im Header kannst Du dem Browser sagen, wohin alle relativen Links aufgelöst werden sollen. Das könnte helfen. Offenbar sucht Dein TWebBrowser im falschen Verzeichnis nach den Grafiken. Die Alternative bestünde darin, den Bildern selbst gleich den absoluten Pfad mit auf den Weg zu geben: http://127.0.0.1/xxx/daniel.jpg oder so...

jfheins 1. Apr 2010 09:44

Re: Einbindung von Grafiken in Html-Seiten
 
Vielleicht solltest du dann mal auf den Platzhalter rechtsklicken und gucken, wo der Browser nach der Grafik gesucht hat.

Mir fallen da nämlich ein paar Sachen auf: Wenn du wirklich nur http://127.0.0.1 eingeben musst, dann ist die Angabe
Code:
[img]../bild1.jpg[/img]
schonmal unpraktisch - es gibt ja kein übergeordnetes Verzeichnis!

Außerdem muss dein Delphi-Programm natürlich auch die Bilder zurückliefern, wenn es danach gefragt wird - du darfst also nicht immer das gleiche zurückgeben im Event.

Ookami 2. Apr 2010 13:10

Re: Einbindung von Grafiken in Html-Seiten
 
Danke euch beiden erst mal.

Dir Daniel, die Sache mit dem base href hatte ich leider schon erfolglos eingesetzt.
Ich hatte das Ganze als Html-Datei händisch vorbereitet, um die Angaben dann nur noch an die AResponseinfo.ContentText zu übergeben.


die Angabe http://127.0.0.1/ war auch nicht ganz korrekt, es hätte http://127.0.0.1/login heißen müssen, sorry.

Dir jfheins,
Zitat:

Mir fallen da nämlich ein paar Sachen auf: Wenn du wirklich nur http://127.0.0.1 eingeben musst, dann ist die Angabe

Code: markieren
[img]../bild1.jpg[/img] schonmal unpraktisch - es gibt ja kein übergeordnetes Verzeichnis! (geb ich dir Recht. wie gesagt aus SelfHtml und... es funktioniert auch nicht)

Außerdem muss dein Delphi-Programm natürlich auch die Bilder zurückliefern, wenn es danach gefragt wird - du darfst also nicht immer das gleiche zurückgeben im Event.
Frage: was bitte meinst du mit "du darfst also nicht immer das gleiche zurückgeben im Event"?

Die Tips habe ich trotzdem nochmal benutzt. Der Erfolg bis jetzt,
Als Pfad wird mir beim Anklicken "file:///D:/Project/TLGreen.JPG" zurückgegeben (In D:\Project sind auch alle Dateien drin).
Den ins Programm eingesetzt ändert sich das angezeigte Symbol im Platzhalter. Also nicht mehr das rote X, sondern ein Image-Icon. Das Bild selbst kommt aber nicht.


Gruß Wolfgang und nochmals Danke an Alle

rollstuhlfahrer 2. Apr 2010 13:55

Re: Einbindung von Grafiken in Html-Seiten
 
Zitat:

Zitat von Ookami
Frage: was bitte meinst du mit "du darfst also nicht immer das gleiche zurückgeben im Event"?

Die Tips habe ich trotzdem nochmal benutzt. Der Erfolg bis jetzt,
Als Pfad wird mir beim Anklicken "file:///D:/Project/TLGreen.JPG" zurückgegeben (In D:\Project sind auch alle Dateien drin).
Den ins Programm eingesetzt ändert sich das angezeigte Symbol im Platzhalter. Also nicht mehr das rote X, sondern ein Image-Icon. Das Bild selbst kommt aber nicht.

Das ist hoffentlich nicht das was du im Sinne hattest. Du benutzt ja den Webserver bestimmt auch noch dazu, dass andere über ein Netzwerk auch darauf zugreifen können, oder? Dann solltest du die Bilder alle in ein Verzeichnis legen, wo der Webserver auch zugriff hat (ist ja schon) und dann dem Delphi-Programm sagen, dass alles was er nicht findet, soll er in diesem Ordner nachsehen. Heißt also: Dein Webserver prüft anhand von ARequestInfo.Document um was für eine Datei es sich handelt, die gesucht wird. Kann der Webserver das z.B. beantworten, weil er die Login-Seite schon kennt oder dynamisch zusammensetzt dann kann er hier schon antworten. Kennt er die Seite noch nicht, soll er in einem bestimmten Verzeichnis nachschauen, ob da nicht ne Datei existiert, die so heißt. Wenn ja, soll er die verschicken. Hier ist auch noch auf AResponseInfo.ContentType zu achten. Bilder lassen sich besser verschicken, wenn hier das richtige eingetragen ist. Für JPEGs gilt: "image/jpg" (nur als Hinweis).
In deiner Login-Seite sollten Pfade auf Netzlaufwerke/Festplatten/Dateien auf dem Rechner am Besten nicht vorkommen. Für das Logo kannst du ja z.B. http://127.0.0.1/img/logo.jpg nehmen. Übrigens kann dir bei solchen IP-Adressen niemand draufschauen, ob alles richtig ist.

Zitat:

Zitat von Ookami
Ich hatte das Ganze als Html-Datei händisch vorbereitet, um die Angaben dann nur noch an die AResponseinfo.ContentText zu übergeben.

Bei "externen" Dateien würde ich einen TFileStream mit AResponseInfo.ContentStream verwenden. Der wird auch über das Indy-Objekt wieder freigegeben.

Benrhard

Ookami 2. Apr 2010 15:56

Re: Einbindung von Grafiken in Html-Seiten
 
Ok, Danke noch mal, auch an Dich Bernhard - Problem ist nun gelöst.

offensichtlich kennt Ihr alle euch doch viel besser aus mit den indy-Komponenten. Ich bin da erst Anfänger. Hat mich bislang einfach nie interessiert.
Aus allem, was ich bislang gefunden habe, dies auch für diejenigen, die später mal das gleiche Problem haben.

1. Ich habe nun einen Pfad unter C:\ angelegt. - C:\Project
2. Im Programm habe ich eine Pfadangabe gemacht - WebPath = 'file:///Project/';
3. Diese Pfadangabe wird mit base href im Header miterzeugt. - <base href="'+ WebPath +'">


Meine Erkenntnis aus dem Ganzen war nun die:
Es ist gleichgültig in welchem Pfad die Exe liegt, sobald sie aufgerufen wird, will sie wie in WebPath definiert auf einen sobenannten Pfad in C: zugreifen.
Da ich selbst mich mit Webanwendungen nie beschäftigt habe, kann ich leider nicht sagen, warum das so ist.
Ich fände es toll, wenn jemand noch ein paar einfache Worte dazu verlieren könnte, die diese Frage klären.


Wie Edison doch sagte, mir sind nunmehr über 8000 Wege bekannt, wie man keine Glühlampe machen kann. Der eine einzige aber hätte mir schon genügt.

rollstuhlfahrer 2. Apr 2010 17:07

Re: Einbindung von Grafiken in Html-Seiten
 
Doch nicht file:/// . Du Solltest http://127.0.0.1/ nehmen. Das funktioniert dann auch.

Bernhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 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