AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TWebbrowser.document in Variable sichern
Thema durchsuchen
Ansicht
Themen-Optionen

TWebbrowser.document in Variable sichern

Ein Thema von ozz · begonnen am 19. Jan 2006 · letzter Beitrag vom 29. Jan 2006
Antwort Antwort
ozz

Registriert seit: 26. Jun 2005
131 Beiträge
 
#1

TWebbrowser.document in Variable sichern

  Alt 19. Jan 2006, 20:26
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!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: TWebbrowser.document in Variable sichern

  Alt 19. Jan 2006, 21:11
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
  Mit Zitat antworten Zitat
ozz

Registriert seit: 26. Jun 2005
131 Beiträge
 
#3

Re: TWebbrowser.document in Variable sichern

  Alt 20. Jan 2006, 06:26
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!
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: TWebbrowser.document in Variable sichern

  Alt 20. Jan 2006, 06:56
für was brauchst du das? willst du den Quelltext der Seite speichern?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Kidix

Registriert seit: 14. Jan 2005
315 Beiträge
 
Delphi 4 Standard
 
#5

Re: TWebbrowser.document in Variable sichern

  Alt 20. Jan 2006, 07:14
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;
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: TWebbrowser.document in Variable sichern

  Alt 20. Jan 2006, 07:19
an den Quelltext kommt man ganz einfach:
(WebBrowser.Document as IHTMLDocument2).body.outerHTML
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: TWebbrowser.document in Variable sichern

  Alt 20. Jan 2006, 09:16
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 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 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
  Mit Zitat antworten Zitat
ozz

Registriert seit: 26. Jun 2005
131 Beiträge
 
#8

Re: TWebbrowser.document in Variable sichern

  Alt 29. Jan 2006, 19:07
Danke nochmal für alle Eure Tipps.
Ich habe jetzt hinbekommen
Ozz
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:17 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