Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TWebBrowser.ExecWB(OLECMDID_SAVEAS, 0) не работает 
:(
    Опции темы
Delphist
  Дата 3.10.2007, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: нет
Всего: 3



У меня в БД (Firebird 2.0) в blob-поле хранятся html-страницы, а картинки на диске. В компонент WebBrowser: TWebBrowser, загружаются данные из БД через Document.write, для того чтобы сохранить страничку со всем её содержимым я использую метод 
WebBrowser.ExecWB(OLECMDID_SAVEAS, 0), но почему-то сохраняется пустая страница. Как быть?


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
December
Дата 3.10.2007, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 12
Всего: 57



Эта команда сохраняет только код старницы, на которую ты отнавигировался, а не результат деятельности яваскрипта и его аналогов.
Ты можешь брать HTML у DOM'a, тока он будет покорёженный до неузнаваемости. Можешь также просто хранить исходник рядом и не трогать встроенный в ТВебБроузер функции. Как ни странно, это самый "правильный" вариант.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Delphist
Дата 3.10.2007, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: нет
Всего: 3



Цитата(December @  3.10.2007,  17:47 Найти цитируемый пост)
Ты можешь брать HTML у DOM'a, тока он будет покорёженный до неузнаваемости. Можешь также просто хранить исходник рядом и не трогать встроенный в ТВебБроузер функции. Как ни странно, это самый "правильный" вариант. 

Ты, наверное, немножко не понял. У меня есть БД, хранящая html-код, так вот конечный пользователь в моей программе, просматривает эти html-ки, а потом он захотел сохранить эту страницу со всеми картинками себе на диск в виде html-файла, как мне это сделать, применение WebBrowser.ExecWB(OLECMDID_SAVEAS, 0) сохраняет пустой html


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
December
Дата 3.10.2007, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 12
Всего: 57



Таки я понял правильно smile И мой предыдущий пост остаётся в силе. Поясню ещё раз. Если ты навигируешься на about:blank, то исходник является пустым. И метод document.write() ситуацию не меняет.

Могу ещё предложить сначала формировать страницу со всеми файлами и сохранять всё это на диск во временную локацию. В таком случае Save As будет работать... Но правильнее будет просто скопировать всю сгенерённую папку.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
2fank
Дата 22.10.2007, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 28.6.2007

Репутация: нет
Всего: нет



А почему бы не использовать свой диалог сохранения?

например так:

Код

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;

procedure TForm1.Button1Click(Sender: TObject);
begin
if SaveDialog1.Execute then
if SaveDialog1.FileName <> '' then
  WB_SaveHTMLCode(Webbrowser1, SaveDialog1.FileName);
end;


Это сообщение отредактировал(а) 2fank - 22.10.2007, 19:10
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0464 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.