![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранение TWebBrowser [D7, WinXP]
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;