Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TWebbrowser.document in Variable sichern (https://www.delphipraxis.net/61318-twebbrowser-document-variable-sichern.html)

ozz 19. Jan 2006 20:26


TWebbrowser.document in Variable sichern
 
Hallo zusammen,
weiß jemand von Euch, wie ich das aktive Dokument von einem TWebrowser in eine Variable (TDocument) sichern kann? Eine normals Zuweisung reicht nicht,da hier offensichtlich nur der Zeiger übergeben wird. Mit assign funktioniert es irgendwie auch nicht. Vielleicht auch, nur ich blicke nicht wie.

Danke!

marabu 19. Jan 2006 21:11

Re: TWebbrowser.document in Variable sichern
 
Hi,

so könnte es funktionieren:

Delphi-Quellcode:
uses
  ActiveX,
  SysUtils,
  SHDocVw,
  MSHTML;

procedure SaveDocument(doc: IDispatch; const fn: TFileName);
var
  pf: IPersistFile;
begin
  if doc.QueryInterface(IPersistFile, pf) = 0 then
    pf.Save(PWideChar(fn), false);
end;

procedure TDemoForm.SaveButtonClick(Sender: TObject);
begin
  SaveDocument(WebBrowser.Document, 'c:\inetpub\wwwroot\marabu.html');
end;
Grüße vom marabu

ozz 20. Jan 2006 06:26

Re: TWebbrowser.document in Variable sichern
 
Hallo Marabu,
danke für deine Hilfe. Ich habe es mal ausprobiert, leider ist der Rückgabewert von QueryInterface immer ungleich 0.Diese Zugriff wird also nicht unterstützt. Ich habe es dann noch mit IPersitStorage probiert, aber das ist das Gleiche. Gibt es noch einen anderen Ansatz? Liegt es vielleicht an der Delphi bzw IE Version?

Danke!

SirThornberry 20. Jan 2006 06:56

Re: TWebbrowser.document in Variable sichern
 
für was brauchst du das? willst du den Quelltext der Seite speichern?

Kidix 20. Jan 2006 07:14

Re: TWebbrowser.document in Variable sichern
 
Delphi-Quellcode:
uses
  ActiveX;

function WB_SaveHTMLCode(WebBrowser: TWebBrowser; const FileName: TFileName): Boolean;
var
  ps: IPersistStreamInit;
  fs: TFileStream;
  sa: IStream;
begin
  ps := WebBrowser.Document as IPersistStreamInit;
  fs := TFileStream.Create(FileName, fmCreate);
  try
    sa := TStreamAdapter.Create(fs, soReference) as IStream;
    Result := Succeeded(ps.Save(sa, True));
  finally
    fs.Free;
  end;
end;

function WB_GetHTMLCode(WebBrowser: TWebBrowser; ACode: TStrings): Boolean;
var
  ps: IPersistStreamInit;
  ss: TStringStream;
  sa: IStream;
  s: string;
begin
  ps := WebBrowser.Document as IPersistStreamInit;
  s := '';
  ss := TStringStream.Create(s);
  try
    sa := TStreamAdapter.Create(ss, soReference) as IStream;
    Result := Succeeded(ps.Save(sa, True));
    if Result then ACode.Add(ss.Datastring);
  finally
    ss.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  WB_SaveHTMLCode(Webbrowser1, 'c:\test.txt');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  WB_GetHTMLCode(Webbrowser1, Memo1.Lines);
end;

SirThornberry 20. Jan 2006 07:19

Re: TWebbrowser.document in Variable sichern
 
an den Quelltext kommt man ganz einfach:
Delphi-Quellcode:
(WebBrowser.Document as IHTMLDocument2).body.outerHTML

marabu 20. Jan 2006 09:16

Re: TWebbrowser.document in Variable sichern
 
Wo bin ich nur mit meinen Gedanken.

@SirThornberry: So speicherst du aber nur das Body-Tag samt Inhalt, nicht das Document. So erhältst du wenigestens den HTML-Code - dann fehlt allerdings noch DOCTYPE:

Delphi-Quellcode:
procedure SaveDocumentElement(doc: IDispatch; fn: TFileName);
var
  d3: IHTMLDocument3;
  fs: TFileStream;
  html: String;
begin
  if doc.QueryInterface(IHTMLDocument3, d3) = 0 then
  begin
    fs := TFileStream.Create(fn, fmCreate);
    html := d3.documentElement.outerHTML;
    fs.Write(html[1], Length(html));
    fs.Free;
  end;
end;
Zitat:

Zitat von ozz
Ich habe es mal ausprobiert, leider ist der Rückgabewert von QueryInterface immer ungleich 0.Diese Zugriff wird also nicht unterstützt. Ich habe es dann noch mit IPersitStorage probiert, aber das ist das Gleiche. Gibt es noch einen anderen Ansatz?

Ja klar, guckst du hier oder im Beitrag von Kidix oder suche im Forum nach den Schnittstellen-Bezeichnern.

Zitat:

Zitat von ozz
Liegt es vielleicht an der Delphi bzw IE Version?

Da muss ich erst nochmal nachsehen, warum das bei mir funktionierte - denn im Moment funktioniert mein eigener Code auch in meiner Testanwendung nicht.

marabu

ozz 29. Jan 2006 19:07

Re: TWebbrowser.document in Variable sichern
 
Danke nochmal für alle Eure Tipps.
Ich habe jetzt hinbekommen :mrgreen:
Ozz


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