Autor Beitrag
Holgerwa
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 325

WIN XP Pro, Vista Business
Delphi 7 Pro, BDS 2006 Pro
BeitragVerfasst: Sa 26.03.05 12:30 
Hallo,

nochmal eine Frage zum Speichern des Inhalts eines TWebBrowsers als MHT-Datei:
Diese Funktion speichert den aktuellen Inhalt eines TWebBrowsers als MHT-Datei. Das scheint die einzige Möglichkeit zu sein, so eine MHT-Datei zu erhalten (Google konnte mir sonst nicht weiterhelfen).
Das funktioniert auch super, aber ich brauche den MHT-Inhalt in einem TStream, und möchte ihn nicht zuerst in einer Datei abspeichern, um ihn dann gleich wieder einzulesen.
Das Ding, das da den Inhalt enthält, ist ein _Stream, definiert in ADODB_TBL, hat nur eine SaveToFile Funktion, und ist wohl nicht kompatibel zu einem normalen Stream :(
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure Save_MHT (WB: TWebBrowser; FileName: TFileName);
var
  Msg: IMessage;
  Conf: IConfiguration;
  Stream: _Stream;
  URL : widestring;
begin
  URL := WB.LocationURL;
  Msg := CoMessage.Create;
  Conf := CoConfiguration.Create;
  try
    Msg.Configuration := Conf;
    Msg.CreateMHTMLBody (URL, cdoSuppressAll, '', '');
    Stream := Msg.GetStream;
    Stream.SaveToFile (FileName, adSaveCreateOverWrite);
  finally
    Msg := nil;
    Conf := nil;
    Stream := nil;
  end;
end;

Weiß jemand, wie man aus so einem _Stream die Daten herausholen kann, ohne sie in eine Datei zu speichern?

Vielen Dank!
Holger
Elite
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 26.03.05 13:19 
Hab jetzt zwar keine Erfahrung mit dem Webbrowser, aber vielleicht nimmt du deinen zweiten Stream und siehst dir mal TStream.CopyFrom() an.
Holgerwa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 325

WIN XP Pro, Vista Business
Delphi 7 Pro, BDS 2006 Pro
BeitragVerfasst: Sa 26.03.05 13:29 
Hallo,

ein normales z.B. TMemoryStream.CopyFrom (DieserMerkwürdigeStream, Size) geht nicht, da die Typen TStream und _Stream nicht kompatibel sind. Da ich ja experimentierfreudig bin, habe ich auch schon ein "TStream (_Stream)" versucht, was aber in einem Stream-Lesefehler endet. War ja irgendwie auch klar, weil _Stream ja etwas anderes ist als ein TStream.

Holger
huhn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 272
Erhaltene Danke: 1

WIN XP
D7Pers
BeitragVerfasst: Sa 26.03.05 13:41 
vielleicht klappt des mit nem buffer,ich meine du kannst ja _stream in nen buffer 'zwischenlagern' und dann lädts du den buffer in dein normales Tstream, mit dem du dann weiterarbeiten kannst(hoffe ich habe dein fragerichtig interpretiert).
mfg huhn
Holgerwa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 325

WIN XP Pro, Vista Business
Delphi 7 Pro, BDS 2006 Pro
BeitragVerfasst: Sa 26.03.05 17:02 
Na also, jetzt klappts :)

Man kann mit _Stream.ReadText() den Inhalt in einen WideString auslesen, und den dann z.B. mit einem StringStream weiterverwenden.
Das mit dem Buffer war also die Lösung.

Holger