Hi,
Ich möchte mir einen selbst gebauten
HTML-Code der sich in einem String befindet
anzeigen lassen.
Da der (T)Webbrowser an solchen Funktionen wie
LoadFromStream usw. gespart hat muss
man mit einem Trick die Angelegenhet umgehen.
Dazu bauen wir uns eine Hilfsklasse:
Delphi-Quellcode:
// ...
implementation
// ...
type
TWebBrowserHelper = Class
private
FWebBrowser: TWebBrowser;
public
constructor Create(const WebBrowser: TWebBrowser);
procedure LoadFromStream(const Stream: TStream);
procedure LoadFromString(const HTMLText: string);
procedure InternalLoadDocumentFromStream(
const Stream: TStream);
property WebBrowser: TWebBrowser read fWebBrowser;
end;
constructor TWebBrowserHelper.Create;
begin
inherited Create;
FWebBrowser := WebBrowser;
end;
procedure TWebBrowserHelper.LoadFromString(const HTMLText: string);
var
StringStream: TStringStream;
begin
StringStream := TStringStream.Create(HTMLText);
try
LoadFromStream(StringStream);
finally
StringStream.Free;
end;
end;
procedure TWebBrowserHelper.InternalLoadDocumentFromStream(
const Stream: TStream);
var
PersistStreamInit: IPersistStreamInit;
StreamAdapter: IStream;
begin
// Get IPersistStreamInit interface on document object
if WebBrowser.Document.QueryInterface(IPersistStreamInit, PersistStreamInit) = S_OK then
begin
// Clear document
if PersistStreamInit.InitNew = S_OK then
begin
// Get IStream interface on stream
StreamAdapter := TStreamAdapter.Create(Stream);
// Load data from Stream into WebBrowser
PersistStreamInit.Load(StreamAdapter);
end;
end;
end;
procedure TWebBrowserHelper.LoadFromStream(const Stream: TStream);
begin
WebBrowser.Navigate('about:blank');
InternalLoadDocumentFromStream(Stream);
end;
// -----------------------------------------------------------------------------
var
MyBrowser: TWebBrowserHelper;
procedure TForm1.Button1Click(Sender: TObject);
begin
MyBrowser := TWebBrowserHelper.Create(Webbrowser1);
try
MyBrowser.LoadFromString(Memo1.Text);
finally
MyBrowser.Free;
end;
end;
Leider funktioniert das nur ein mal, danach bekommt man nur eine Leere Seite angezeigt.
Woran kann das liegen ?