Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TWebBrowser Inhalt aus TStringList laden (https://www.delphipraxis.net/146402-twebbrowser-inhalt-aus-tstringlist-laden.html)

ToZie 19. Jan 2010 10:33


TWebBrowser Inhalt aus TStringList laden
 
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


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