Huhu,
ich bin am verzweifeln. Irgendwie finde ich keinen Weg um den in einer TStringList gespeicherten Inhalt einer Webseite im TWebBrowser fehlerfrei anzuzeigen. Da es hier im Forum bereits einige Threads zu diesem Thema gibt und ich schon einiges probiert habe möchte ich kurz anreissen was ich bereits probiert habe:
Delphi-Quellcode:
procedure TMyWB.LoadFromStrings(const aStrings: TStrings);
var
ms: TMemoryStream;
begin
// AssignDocument erzeugt ein leeres Dokument mit den nötigen Flags
// und wartet auf dessen Fertigstellung
if not assigned(Document) then AssignDocument;
ms:=TMemoryStream.Create;
aStrings.SaveToStream(ms);
(Document as IPersistStreamInit).Load(TStreamadapter.Create(ms));
ms.free;
end;
Das funktioniert soweit zwar, aber wie
hier beschrieben funktioniert es nicht immer - und zwar immer dann nicht wenn der
HTML Code größer als 4kb ist. Der im erwähnten Thread angeführte Lösungsvorschlag über:
Delphi-Quellcode:
procedure TMyWB.LoadFromStrings(const aStrings: TStrings);
var
Range: IHTMLTxtRange;
begin
if not assigned(Document) then AssignDocument;
Range:=((Document as IHTMLDocument2).body as IHTMLBodyElement).createTextRange;
Range.pasteHTML(aStrings.Text);
end;
setzt leider nur den Body, mein Dokument enhält jedoch Scripts die ausgeführt werden müssen. Ein dritter Weg:
Delphi-Quellcode:
procedure TMyWB.LoadFromStrings(const aStrings: TStrings);
var
v: OLEVariant;
begin
if not assigned(Document) then AssignDocument;
v:=VarArrayCreate([0, 0], varVariant);
v[0]:=AStrings.Text;
(Document as IHTMLDocument2).Write(PSafeArray(TVarData(v).VArray));
(Document as IHTMLDocument2).Close;
end;
bindet im Kopf des Dokuments angegebene scripts (<script src="..."></script>) nicht ein. Sicher habe ich da irgendwo einen Denkfehler oder schlicht zu wenig Ahnung von der Materie - vielleicht hat ja einer von Euch noch die eine oder andere Idee.
lg
Torsten