Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.11.2012, 16:38
Аватар для borockov
borockov borockov вне форума
Начинающий
 
Регистрация: 18.08.2012
Сообщения: 125
Репутация: 10
По умолчанию Webbrowser, как сохранить frame?

Привет всем! Народ, такой интересный вопрос, в webbrowser отображается как нибудь html страница в которой есть FRAME, как сохранить именно Frame а не всю страницу?
Ответить с цитированием
  #2  
Старый 23.11.2012, 17:19
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от borockov
Привет всем! Народ, такой интересный вопрос, в webbrowser отображается как нибудь html страница в которой есть FRAME, как сохранить именно Frame а не всю страницу?
Как работать со всеми фреймами, отображёнными в данный момент в WebBrowser
Как добраться до конкретного фрейма
Получить все URLs фреймов в TWebBrowser
Сохранить исходный код всех фреймов TWebBrowser
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
borockov (23.11.2012)
  #3  
Старый 23.11.2012, 17:38
Аватар для borockov
borockov borockov вне форума
Начинающий
 
Регистрация: 18.08.2012
Сообщения: 125
Репутация: 10
По умолчанию

Оо спасибо=))))
Ответить с цитированием
  #4  
Старый 23.11.2012, 18:14
Аватар для borockov
borockov borockov вне форума
Начинающий
 
Регистрация: 18.08.2012
Сообщения: 125
Репутация: 10
По умолчанию

С первым вопросом вроде бы разобрался. Но теперь возник ещё 1 вопрос, у меня стоит компонент webbrowser в качестве вкладок прицелен pagecontrol, такой вопрос, если у меня к примеру открыто 10 вкладок, как сохранить все текущие страницы при нажатий одной кнопки?
Ответить с цитированием
  #5  
Старый 23.11.2012, 18:17
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от borockov
Но теперь возник ещё 1 вопрос, у меня стоит компонент webbrowser в качестве вкладок прицелен pagecontrol, такой вопрос, если у меня к примеру открыто 10 вкладок, как сохранить все текущие страницы при нажатий одной кнопки?
Так же как и одну, только в цикле для каждой.
Ответить с цитированием
  #6  
Старый 23.11.2012, 18:23
Аватар для borockov
borockov borockov вне форума
Начинающий
 
Регистрация: 18.08.2012
Сообщения: 125
Репутация: 10
По умолчанию =)

Одну страницу я сохраняю с использованием Savedialog, и получается если я сделаю сохранение в цикле каждый раз будет выскакивать диалоговое окно?

Код:
procedure TForm1.SaveHTMLSourceToFile(const FileName: string;
WB: TWebBrowser);
var
PersistStream: IPersistStreamInit;
FileStream: TFileStream;
Stream: IStream;
SaveResult: HRESULT; 
begin
PersistStream := WB.Document as IPersistStreamInit;
FileStream := TFileStream.Create(FileName, fmCreate);
try
Stream := TStreamAdapter.Create(FileStream, soReference) as IStream;
SaveResult := PersistStream.Save(Stream, True);
if FAILED(SaveResult) then
MessageBox(Handle, 'Fail to save HTML source', 'Error', 0);
finally 
FileStream.Free;
end; 
end;

и онклик для кнопки
Код:
if SaveDialog1.Execute then
SaveHTMLSourceToFile(SaveDialog1.FileName, WebBrowser1);
Код брал где в инете не помню
Ответить с цитированием
  #7  
Старый 24.11.2012, 14:10
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от borockov
Одну страницу я сохраняю с использованием Savedialog, и получается если я сделаю сохранение в цикле каждый раз будет выскакивать диалоговое окно?
Очевидно что если нужно, чтобы пользователь имел возможность выбрать куда и под каким именем сохранить каждую страницу, то вызывай для каждой из них Savedialog, если же программа сама знает куда и под какими именами сохранять, то и вызывать диалог не нужно.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
borockov (24.11.2012)
  #8  
Старый 24.11.2012, 15:45
Аватар для borockov
borockov borockov вне форума
Начинающий
 
Регистрация: 18.08.2012
Сообщения: 125
Репутация: 10
По умолчанию Не могу понять=(

Как я уже говорил, вкладки у меня реализованы таким образом: поставил pagecontrol, создал 20 табов и на каждый ташит прицепил по компоненту webbrowser, в принципе всё работает как надо, но вопрос с сохранением всё же не могу решить=(
Таким образом я могу сохранить текущую страницу.
Код:
procedure TForm1.Button14Click(Sender: TObject);
var
  HTMLDocument: IHTMLDocument2;
  PersistFile: IPersistFile;
  j:integer;
begin

  HTMLDocument :=   Webbrowser1.Document as IHTMLDocument2;
  PersistFile  := HTMLDocument as IPersistFile;
  PersistFile.Save(StringToOleStr('D:\SavedFile.html'), System.True);
end;
end.
Пытался сохранить все страницы разом как то так
Код:
procedure TForm1.Button14Click(Sender: TObject);
var
  HTMLDocument: IHTMLDocument2;
  PersistFile: IPersistFile;
  j:integer;
begin
  HTMLDocument :=TWebbrowser(pagecontrol1.pages[j].Controls[0]).Document as IHTMLDocument2;
  PersistFile  := HTMLDocument as IPersistFile;
  PersistFile.Save(StringToOleStr('D:\'+pagecontrol1.Pages[j].Caption+'.html'), System.True);
end;
end;
end;
end.
Но естесственно ничего у меня не вышло=( выдаёт что то вроде "list index out of bounds (-куча цифр) " вотъ.
Помогите пожалуйста, сохранить в цикле.
Ответить с цитированием
  #9  
Старый 24.11.2012, 16:42
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от borockov
Пытался сохранить все страницы разом как то так
Код:
procedure TForm1.Button14Click(Sender: TObject);
var
  HTMLDocument: IHTMLDocument2;
  PersistFile: IPersistFile;
  j:integer;
begin
  HTMLDocument :=TWebbrowser(pagecontrol1.pages[j].Controls[0]).Document as IHTMLDocument2;
.....
Но естесственно ничего у меня не вышло=( выдаёт что то вроде "list index out of bounds (-куча цифр) " вотъ.
А где присвоение значения переменной j ?
Ответить с цитированием
  #10  
Старый 24.11.2012, 17:06
Аватар для borockov
borockov borockov вне форума
Начинающий
 
Регистрация: 18.08.2012
Сообщения: 125
Репутация: 10
По умолчанию =)

Цитата:
Сообщение от poli-smen
А где присвоение значения переменной j ?
Код:
for j:=0 to pagecontrol1.PageCount-1 do 
? так?
Ответить с цитированием
  #11  
Старый 24.11.2012, 17:09
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от borockov
Код:
for j:=0 to pagecontrol1.PageCount-1 do 
? так?
Очевидно, что так.
Ответить с цитированием
  #12  
Старый 24.11.2012, 17:46
Аватар для borockov
borockov borockov вне форума
Начинающий
 
Регистрация: 18.08.2012
Сообщения: 125
Репутация: 10
По умолчанию =)

Код:
procedure TForm1.Button14Click(Sender: TObject);
var
  HTMLDocument: IHTMLDocument2;
  PersistFile: IPersistFile;
  j:integer;
begin
for j:=0 to pagecontrol1.PageCount-1 do
 HTMLDocument:=TWebbrowser(pagecontrol1.pages[j].Controls[0]).Document as IHTMLDocument2;
  PersistFile  := HTMLDocument as IPersistFile;
  PersistFile.Save(StringToOleStr('D:\'+pagecontrol1.Pages[j].Caption+'.html'), System.True);
end;
end.

В таком случае выдаёт ошибку "list index out of bounds (30) ", но конкретную строку не показывает. Есть подозрения что ошибка кроется тут
Код:
PersistFile.Save(StringToOleStr('D:\'+pagecontrol1.Pages[j].Caption+'.html'), System.True); 
Ответить с цитированием
  #13  
Старый 24.11.2012, 18:24
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от borockov
Код:
.....
for j:=0 to pagecontrol1.PageCount-1 do
 HTMLDocument:=TWebbrowser(pagecontrol1.pages[j].Controls[0]).Document as IHTMLDocument2;
  PersistFile  := HTMLDocument as IPersistFile;
  PersistFile.Save(StringToOleStr('D:\'+pagecontrol1.Pages[j].Caption+'.html'), System.True);
end;
end.

В таком случае выдаёт ошибку "list index out of bounds (30) ", но конкретную строку не показывает.
Тело цикла состоящее более чем из одного оператора нужно заключать в begin..end. Сейчас у тебя в цикле выполняется только одна строка, остальные две уже после отработки цикла.
Ответить с цитированием
  #14  
Старый 24.11.2012, 18:46
Аватар для borockov
borockov borockov вне форума
Начинающий
 
Регистрация: 18.08.2012
Сообщения: 125
Репутация: 10
По умолчанию =)

Теперь выскакивает ошибка в этой строке
Код:
PersistFile.Save(StringToOleStr('D:\'+pagecontrol1.Pages[j].Caption+'.html'), System.True);

Ошибка: raise exception class eaccessviolation - и.т.д
Ответить с цитированием
  #15  
Старый 24.11.2012, 19:12
Аватар для borockov
borockov borockov вне форума
Начинающий
 
Регистрация: 18.08.2012
Сообщения: 125
Репутация: 10
По умолчанию =)

Только щас заметил что сохранять то он сохраняет, но после этого уже вылетает вышеописаная ошибка
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:54.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025