AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Wie THtmlViewer.OnImageRequest mit TEdgeBorwser umsetzen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie THtmlViewer.OnImageRequest mit TEdgeBorwser umsetzen?

Ein Thema von Rolf Frei · begonnen am 14. Jul 2022 · letzter Beitrag vom 15. Jul 2022
Antwort Antwort
Rolf Frei

Registriert seit: 19. Jun 2006
629 Beiträge
 
Delphi 11 Alexandria
 
#1

Wie THtmlViewer.OnImageRequest mit TEdgeBorwser umsetzen?

  Alt 14. Jul 2022, 16:35
Ich habe hier noch den THtmlViewer im Einsatz, der aber leider betreffs CSS nicht mehr so recht auf der Zeit ist. Grundlegende Sachen unterstützt er zwar, aber vieles eben auch nicht. Daher habe ich mir überlegt, diesen nun mit den TEdgeBrowser zu ersetzen. Leider fehlen mir da aber praktisch alle Feauters des THmtmlViewers, die ich bisher benötigt habe und habe keine Ahnung wie ich diese im Edge Browser umsetzen kann.

Ich nutze die Events OnImageRequest/OnImageRequeted um dynamisch Bilder zur Runtime zu generieren und diese als Stream im Event an THtmlViewer zu übegeben. Die Image-URL der geladen HMTL-Seite (übergabe als String und nicht als Datei) wird auch von mir mit speziellen Informationen gefüttert, anhand derer ich dann im OnImageRequest Event, genau weiss was für ein Bild ich erzeugen muss. Diese Image-"Url's" sind so nicht vom Browser selber ladbar. (Beispiel: <img href="123@ID-5@abcdgfhts">)

Ein weiteres Problem: Durch das Klicken auf ein solches Bildes, will ich eine Aktion in meinem Programm ausführen.Auhc hier shenich keine Lösung wie das umgesetzt werden kann.

Das hat alles sehr poblemlos mit dem THtmlViwer funktioniert, aber mit dem TEdgeBrowser, als auch dem TWebBrowser, sehe ich da keine Möglichkeit, diesen als lokale HTML Engine zu nutzen. Ich will den nicht als Browser für Internetseiten nutzen, sondern einfach nur von mir erzeugten HTML-Text und speziell formatierte Images-Urls anzeigen.

Kann mir da jemand weiterhelfen wie ich da vorgehen kann? Ist das überhaupt so umsetzbar mit dem TEgdeBrowser oder soll ich doch besser beim THtmlViewer bleiben?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Wie THtmlViewer.OnImageRequest mit TEdgeBorwser umsetzen?

  Alt 14. Jul 2022, 16:45
Ich würde das z.B. mit ICS (u.U. reichen auch die Serverkomponenten von Delphi auch aus) umsetzen und das über einen lokalen Webserver laufen zu lassen.
Dieser erzeugt "0815" HTML5-Code, welches du dann mit der TEdgeBrowser anzeigen lässt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.123 Beiträge
 
Delphi 12 Athens
 
#3

AW: Wie THtmlViewer.OnImageRequest mit TEdgeBorwser umsetzen?

  Alt 14. Jul 2022, 17:00
Statische Bilder/HTML/CSS/JS/... kannst auch über das res:// Protokoll aus den Ressourcen deiner EXE oder einer DLL laden.
(alternativ zu einzeln auf der Platte liegenden Dateien über das file:// Protokoll)
https://docs.microsoft.com/en-us/pre...10218(v=vs.85)

Und jupp, einfach einen lokalen TIdHTTPServer in der EXE und dann auf http://localhost:port/einname (mußt nur bezüglich des Ports etwas anpassen, denn 80 oder 8080 würde ich nicht empfehlen)
* entweder "irgendeinen" statischen Port vorschreiben, den niemand Anderes auf dem PC nutzen darf (der frei sein muß)
* oder beim Start nach einem freien (5-stelligen) Port suchen und ihn sozusagen dynamisch anpassen

oder alternativ vielleicht mit NamedPipes o.Ä. versuchen
https://github.com/richfitz/httppipe
https://github.com/request/request/issues/2296

und dann gäbe es immernoch die Variante die Bilder ins %temp% zu legen und von da zu laden



PS: Bilder kann man auch ins HTML einbetten.
anstatt <img src=".../picture.png"> ein <img src="data:image/png;base64,..."> mit dem Dateiinhalt als Base64 (Delphi-Referenz durchsuchenTBase64Encoding / Base64EncodeBase64Encode / Hier im Forum suchenBase64Encode)

https://www.thesitewizard.com/html-t...ata-urls.shtml
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (14. Jul 2022 um 17:18 Uhr)
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
629 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Wie THtmlViewer.OnImageRequest mit TEdgeBorwser umsetzen?

  Alt 14. Jul 2022, 17:12
@Bernhard Geyer
Da es hier um ein nicht kommerzielles und hauptsächlich für den Eigenbedarf bestimmtes Programm geht, kann das auf keinen Fall die Lösung sein. Sowas macht Null Sinn für das was ich machen will und wäre wie mit Raketen auf Flöhe schiessen. Der Webserver hätte garnicht die nötigen Infos um die Bilder zu generieren. Das Klicken auf die Bilder und auslösen einer Reaktion in meinem Programm (wie ein TButton.OnClick) wäre auch noch nicht gelöst. Das Programm läuft offline und lokal und mit privaten Daten, die auf keinem Webserver irgendwas zu suchen haben.

Kann doch nicht sein, das man im eigenen Programm keine Events für das Anklicken oder das Laden von Bilddateien bekommt und da nach eigenen Wünschen eingreiffen kann. Ich will doch einfach nur die Anzeige eines HTML-String ohne Navigation etc.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.123 Beiträge
 
Delphi 12 Athens
 
#5

AW: Wie THtmlViewer.OnImageRequest mit TEdgeBorwser umsetzen?

  Alt 14. Jul 2022, 17:20
Nicht irgendein Webserver im Internet, sondern ein lokaler Webserver HTTP-Server, in deiner EXE ... genauer lesen

JS/HTML5 sollte für <IMG> Funktionen bieten, um den Click als Aufruf an deinen Webserver zurückzugeben. (falls es im TWebBrowser/TEdgeBrowser kein passendes OnClick-Event gibt)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (14. Jul 2022 um 17:25 Uhr)
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
629 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Wie THtmlViewer.OnImageRequest mit TEdgeBorwser umsetzen?

  Alt 14. Jul 2022, 17:34
Statische Bilder/HTML/CSS/JS/... kannst auch über das res:// Protokoll aus den Ressourcen deiner EXE oder einer DLL laden.
(alternativ zu einzeln auf der Platte liegenden Dateien über das file:// Protokoll)
https://docs.microsoft.com/en-us/pre...10218(v=vs.85)

Und jupp, einfach einen lokalen TIdHTTPServer in der EXE und dann auf http://localhost:port/einname (mußt nur bezüglich des Ports etwas anpassen, denn 80 oder 8080 würde ich nicht empfehlen)
* entweder "irgendeinen" statischen Port vorschreiben, den niemand Anderes auf dem PC nutzen darf (der frei sein muß)
* oder beim Start nach einem freien (5-stelligen) Port suchen und ihn sozusagen dynamisch anpassen

oder alternativ vielleicht mit NamedPipes o.Ä. versuchen
https://github.com/richfitz/httppipe
https://github.com/request/request/issues/2296

und dann gäbe es immernoch die Variante die Bilder ins %temp% zu legen und von da zu laden

PS: Bilder kann man auch ins HTML einbetten
https://www.thesitewizard.com/html-t...ata-urls.shtml
1. Die Bilder müssen dynamisch zur Runtime generiert werden, also nicht mit Resourcen.

2. Einen intgerierten Webserver nur um was so simples zu machen, was der THtmlViwer mit Leichtigkeit machen kann, ist fern jeglicher Realität und keine Lösung als Ersatz für die THmtlViwer Komponente, vor allem für meinen Verwendungszweck.

3. Die temporären Dateien wären sicher eine unschöne Notlösung, aber nichts was ich machen will, wenn es anders geht. Habe mir auch überlegt diese als Base64 zu encoden und diekt im HTML einzubetten. Das gefällt mir aber auch nicht so recht, da dadurch das Erstellen des HTML-Strings, vermutlich deutlich verlangsamt würde. Sind doch pro Seite jeweils ca. 50 Bilder.

4. Die Bilder sind ja nur ein Problem, aber die Interaktion, Events auf Tasten/Mausklicks etc. vom TEdgeBrowser und meiner Anwendung, muss doch irgendwie machbar sein ohne all diese unschönen Umwege. Wenn das nicht geht, dass ich auf Anklicken von Bildern in meinem Programm reagieren kann, inklusive Infos welches Bild angeklickt wurde, kann ich es eh vergessen.

Im Moment habe ich das Gefühl, dass diese Komponente rein dazu da ist, eine Webpage darzustellen, aber für die Interaktion mit der eigenen Anwendung nicht zu gebrauchen ist. Kann mir aber echt nicht vorstellen, dass MS da so eine Müll produziert hat, der keine Möglichkeit bietet, auf das Rendering und Aktionen der Seite Einfluss zu nehmen.

Geändert von Rolf Frei (14. Jul 2022 um 17:42 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Wie THtmlViewer.OnImageRequest mit TEdgeBorwser umsetzen?

  Alt 14. Jul 2022, 18:17
Zitat:
Die temporären Dateien wären sicher eine unschöne Notlösung, aber nichts was ich machen will, wenn es anders geht. Habe mir auch überlegt diese als Base64 zu encoden und diekt im HTML einzubetten. Das gefällt mir aber auch nicht so recht, da dadurch das Erstellen des HTML-Strings, vermutlich deutlich verlangsamt würde. Sind doch pro Seite jeweils ca. 50 Bilder.
Du sagst "wäre sicher" und "vermutlich würde". Probier es doch einfach aus, geht doch schnell.
Ist der Browser-Engine wohl ziemlich egal, und das Enkodieren als Base64 kann man auf heutigen Systemen auch vernachlässigen, solange du jetzt keine Bilder im Bereich von Dutzenden Megapixeln vorhattest.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Wie THtmlViewer.OnImageRequest mit TEdgeBorwser umsetzen?

  Alt 14. Jul 2022, 23:56
tedgebrowser-component-calling-native-code-from-a-script-running-on-the-embedde

Da wird dir gezeigt wie man interagieren könnte.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
629 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Wie THtmlViewer.OnImageRequest mit TEdgeBorwser umsetzen?

  Alt 15. Jul 2022, 17:53
Danke für den Link. Ja so könnte ich zumindest die Interaktion umsetzen. Mal schauen wie gut das funktioniert.
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:05 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