Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сохранение TWebBrowser [D7, WinXP]


Страницы:   1 2

vakir77 ©   (2004-08-05 15:14:00) 

Здравствуйте,
подскажите в чем проблема, сохраняю содержимое TWebBrowser следующим способом:
 HTMLDocument := WebBrowser1.Document as IHTMLDocument;
 PersistFile  := HTMLDocument as IPersistFile;
 PersistFile.Save(StringToOleStr('c:\HTMLFile.html'), System.True);

все работает хорошо.

пытаюсь сохранить через переменную:
htmllink:='C:\Save\SavedFile.html';
HTMLDocument := WebBrowser1.Document as IHTMLDocument;
PersistFile  := HTMLDocument as IPersistFile;
PersistFile.Save(StringToOleStr(htmllink), System.True);

страница не сохраняется.


nikkie   (2004-08-09 13:20:00) [21]

>но так же с отрицательным результатом
я попросил бы... у меня все работает, так что не надо обобщать.

понятно теперь, почему у тебя вылетал Invalid Syntax.
конечно - используешь поздное связывание и вызываешь CreateMHTMLBody с неправильным количеством параметров. при компиляции все нормально, а в run-time получаешь ошибку.


ИМХО   (2004-08-09 08:27:00) [22]

Я пользовался CDO немного иначе, но так же с отрицательным результатом:

function SaveToMHT(const AUrl, AFileName: string;
 AShowErrorMessage: boolean = false): boolean;
var oMSG, oConfig: OleVariant;
 sFileName: string;
 Retvar: boolean;
begin
 sFileName := ChangeFileExt(AFileName, '.mht');
 DeleteFile(sFileName);

 try
   oConfig := CreateOleObject('CDO.Configuration');
   oMSG := CreateOleObject('CDO.Message');
   oMSG.Configuration := oConfig;
   oMSG.CreateMHTMLBody(WideString(AUrl));
   oMSG.GetStream.SaveToFile(sFileName);
   Retvar := true;
 except
   on E: Exception do begin
     if AShowErrorMessage then MessageDlg(E.Message, mtError, [mbOk], 0);
     Retvar := false;
   end;
 end;

 oMSG := VarNull;
 oConfig := VarNull;

 Result := Retvar;
end;


nikkie   (2004-08-09 01:50:00) [23]

тогда ветка не получила продолжения и вариант с CDO не был обсужден. честно говоря, мне непонятно, кто CDO может ставить и какие его версии существуют в природе. у меня на win2k кроме "Microsoft CDO for Windows 2000 Library (Version 1.0)" есть еще "Microsoft CDO for NTS 1.2 Library (Version 1.2)" - но она совсем не та... может быть, разница в версиях и приводит к ошибке Invalid syntax.

собственно, я этот пример тогда даже не пробовал. сейчас вот попробовал - уменя работает, но результат совсем не тот, который ожидался. картинки он не сохраняет в mht...

uses
 ADODB_TLB, CDO_TLB;

procedure TForm1.Button1Click(Sender: TObject);
var
 Msg: IMessage;
 Stream: _Stream;
begin
 Msg := CreateComObject(CLASS_Message) as IMessage;
 Msg.CreateMHTMLBody(' http://www.ya.ru', cdoSuppressAll, '', '');
 Stream := Msg.GetStream;
 Stream.SaveToFile('d:\test.mht', adSaveCreateOverWrite);
end;


поэтому мораль - с CDO не получится. надо либо сохранять с помощью OLECMDID_SAVEAS и давить диалог, например, посылкой нажатий клавиш, либо написать свой собственный генератор mht.


ИМХО   (2004-08-08 19:52:00) [24]

Этот способ через CDO я знаю. Только на моей машине он не работает (программа в run-time дает "Ошибку синтаксиса" на CreateMHTMLBody)

Может, причина в том, что у меня не установлен MS Exchange?


nikkie   (2004-08-08 13:48:00) [25]

старая тема:

SaveHTMLSourceToFile
syte_ser78 ©   (05.02.04 15:03)
Сохраняет загруженную в twebbrowser страницу в HTM
Можно ли както сохранить в MHT ?



--------------------------------------------------------------------------------
[1] Delirium ©   (05.02.04 15:24)
ShowMessage(Variant(WebBrowser1.Document).body.innerHTML);



--------------------------------------------------------------------------------
[2] syte_ser78 ©   (05.02.04 16:09)
Это конечно здорово. только какое отношение оно имеет к MHT ???



--------------------------------------------------------------------------------
[3] y-soft ©   (05.02.04 18:06)
http://www.chilkatsoft.com/ChilkatMht.asp

Только платно :)

А вообще-то спецификация тут: http://www.ietf.org/rfc/rfc2557.txt



--------------------------------------------------------------------------------
[4] nikkie ©   (05.02.04 20:51)
>Только платно :)
и на чем только люди деньги не пытаются делать... :)

можно попытаться сделать это, выполнив команду OLECMDID_SAVEAS, но будет выскакивать диалог. по идее, диалоги должны одключаться параметром
OLECMDEXECOPT_DONTPROMPTUSER и явным указанием параметров в vaIn, но не всегда это получается. умельцы предлагают послать в окошко нажатия клавиш, см. например,

http://groups.google.com/groups?hl=ru&lr=&ie=UTF-8&oe=UTF-8&threadm=3c714968%241_1%40dnews&rnum=9&prev=/groups%3Fhl%3Dru %26lr%3D%26ie%3DUTF-8%26oe%3DUTF-8%26q%3DOLECMDID_SAVEAS%2BWebBrowser%2Bmht

но как-то это коряво. если уж не получается через команды WB, то более разумным выглядит такой пример, который тоже нашелся в гугле:

CDO:
IMessage->CreateMHTMLBody(_bstr_t(" http://www.northernlight.com"),
      cdoSuppressAll,
      _bstr_t(""),
      _bstr_t(""));
IMessage->GetStream(&pStm);

Stream->SaveToFile(L"c:\\temp\\test.mht",adSaveCreateOverWrite);


VID   (2004-08-08 12:09:00) [26]

ИМХО ©   (08.08.04 00:42) [8]

А вот этого я не знаю.
Спроси nikkie или Ihor Osov'yak.


ИМХО   (2004-08-08 00:42:00) [27]

2. Если есть, то где он?


VID   (2004-08-07 16:19:00) [28]

ИМХО ©   (07.08.04 15:59) [6]
Да умеет, точно так, как это делает сам IE. Да блин ведь по сути что IE что EmbeddedWB - один чёрт, всё от одного ActiveX пашет.

А насчёт второго... ну наверняка есть метод автоматизированного сохранения, без диалогового окна.


ИМХО   (2004-08-07 15:59:00) [29]

1. EmbeddedWB умеет сохранять полностью веб-страницу?

2. А вот это нежелательно, все должно автоматизировано.


VID   (2004-08-07 13:38:00) [30]

ИМХО ©   (06.08.04 20:29) [4]
1. юзаем EmbeddedWB
2. вызываем метод SaveDialog - получаем стандартное диалоговое окно сохранения веб-страницы


ИМХО   (2004-08-06 20:29:00) [31]

Не обязательно в mht.

У MS IE есть четыре опции сохранения:
1. Web Page, complete
2. Web Archive, single file
3. Web Page, HTML only
4. Text file

Интересует первая опция.


vakir77   (2004-08-06 14:22:00) [32]

т.е в веб-архиве mht, интересный вопрос


ИМХО   (2004-08-05 23:25:00) [33]

Кстати, кто знает, как сохранить при помощи TWebBrowser ВСЮ страницу(с картинками, стилями, скриптами) на диск?


VID   (2004-08-05 20:14:00) [34]

function WB_SaveHTMLCode(WebBrowser: TWebBrowser; const FileName: TFileName): Boolean;
var
 ps: IPersistStreamInit;
 fs: TFileStream;
 sa: IStream;
begin
 Result := False;
 IF WebBrowser.Document = nil then exit;
 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;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо