Einzelnen Beitrag anzeigen

ToZie

Registriert seit: 17. Feb 2004
43 Beiträge
 
Delphi 10.3 Rio
 
#1

TWebBrowser Inhalt aus TStringList laden

  Alt 19. Jan 2010, 10:33
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
  Mit Zitat antworten Zitat