Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TWebbrowser aus Stream speisen (https://www.delphipraxis.net/79944-twebbrowser-aus-stream-speisen.html)

TBx 31. Okt 2006 15:58


TWebbrowser aus Stream speisen
 
Hallo!

Ich möchte eine TWebBrowser-Komponente ohne Umweg über das Filesystem speisen.
Die darzustellenden Daten liegen als Stream vor (Html-Seiten, docs, pdfs etc).

Kann mir jemand einen Ansatz vermitteln, wie ich den Stream an die TWebBrowser-Komponente übergebe, ohne den Umweg über das Filesystem zu machen?

Gruß

Thomas

marabu 31. Okt 2006 16:17

Re: TWebbrowser aus Stream speisen
 
Hallo Thomas,

einen von mehreren möglichen Wegen kannst du mit der Funktion LoadDocument() gehen: klick

Grüße vom marabu

Meflin 31. Okt 2006 17:32

Re: TWebbrowser aus Stream speisen
 
Delphi-Quellcode:
procedure SetHTML(MemoryStream: TMemoryStream; WebBrowser: TWebBrowser);
begin
  WebBrowser.Navigate('about:blank');
  while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do begin
   Application.ProcessMessages;
  end;
  if Assigned(WebBrowser.Document) then begin
    try
      MemoryStream.Seek(0, 0);
      (WebBrowser.Document as IPersistStreamInit).Load
        (TStreamAdapter.Create(MemoryStream));
    finally
      MemoryStream.Free;
    end;
  end;
end;

TBx 1. Nov 2006 07:09

Re: TWebbrowser aus Stream speisen
 
Vielen Dank Euch beiden schonmal für die Info.
Das ist noch nicht so ganz das, was ich erreichen möchte.

Es ist so, daß ich die Funktionalitäten von TWebbrowser dazu mißbrauche, verschiedene Dateien (gif, tiff, pdf, doc, xls etc) in einem Fenster meines Programmes anzuzeigen.
Bisher habe ich das so gelöst, daß ich die Datei (die bei mir im Blobfeld einer Datenbank geparkt ist) über einen Filestream temporär auf die Platte schmeiße und dann mittels
Delphi-Quellcode:
WebBrowser.Navigate ('MyLocalFile')
anzeige.
Ich würde mir hier nur gern den Umweg über das Filesystem sparen.
Hat jemand eine Idee, wie bzw. ob das realisierbar ist?

Gruß

Thomas

Meflin 1. Nov 2006 10:01

Re: TWebbrowser aus Stream speisen
 
Hm? Verstehe ich jetzt nicht ganz. Meine Funktion schreibt einen Stream direkt in einen TWebBrowser, ohne Umweg! Also nimmst du eben statt einem FileStream einen MemoryStream, rufst damit die Prozedur auf und fertig!


TBx 1. Nov 2006 11:32

Re: TWebbrowser aus Stream speisen
 
Zitat:

Zitat von Meflin
Hm? Verstehe ich jetzt nicht ganz. Meine Funktion schreibt einen Stream direkt in einen TWebBrowser, ohne Umweg!

Stimmt, das tut die Funktion. Klappt auch sehr gut.
Ich schreibe jetzt aber z. B. eine PDF-Datei in den Stream. Dann bekomme ich im TWebbrowser dannach eine Darstellung, als hätte ich die PDF-Datei in einem beliebigen Texteditor aufgemacht.
Arbeite ich mit dem Navigate, zieht TWebbrowser automatisch das PDF-Viewer-Plugin an und stellt die PDF-Datei richtig dar.
Hierzu holt sich TWebbrowser die Infos offenbar direkt aus dem Dateiinhalt, der Dateiname und die Extension sind beliebig austauschbar.

Zitat:

Zitat von Meflin
Also nimmst du eben statt einem FileStream einen MemoryStream, rufst damit die Prozedur auf und fertig!

Ich mache es in diesem Fall mit einem TIB_Blobstream.
Nur kriege ich den TWebbrowser eben dann nicht dazu, festzustellen, was ich ihm da biete und es dann korrekt darzustellen.

Gruß

Thomas

thkerkmann 1. Nov 2006 11:47

Re: TWebbrowser aus Stream speisen
 
Hi,

dein Browser kann keine pdf Datei darstellen.

Wenn du diese auf die Platte schreibst und ein navigate machst, lädt der Browser das Plugin dafür und dieses stellt die Datei dar. Also wirst du wohl den Umweg gehen müssen, wenn es sich um Dateien handelt, die der Browser nicht direkt darstellen kann, denn wenn du ihm einen Stream anbietest bist Du schon an einer Stelle wo nur noch Browser kompatible Daten verarbeitet werden.

Gruss
Thomas.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz