Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.07.2007, 11:18   #1
rootann
Новичок
Джуниор
 
Регистрация: 12.07.2007
Сообщений: 1
Вопрос Передача страницы из webbrowser

Помогите с таким вопросом: Как передать web-страницу (её html код)из webbrowser`а в memo?
rootann вне форума Ответить с цитированием
Старый 12.07.2007, 11:33   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Код:
unit Unit13;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, SHDocVw,ActiveX;

type
  TForm13 = class(TForm)
    WebBrowser1: TWebBrowser;
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form13: TForm13;

implementation

{$R *.dfm}
 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;

procedure TForm13.Button1Click(Sender: TObject);
begin
WebBrowser1.Navigate('www.programmersforum.ru');
WB_GetHTMLCode(Webbrowser1, Memo1.Lines);
end;

end.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 19.09.2007, 23:08   #3
Soso
Пользователь
 
Регистрация: 08.08.2007
Сообщений: 12
По умолчанию

Доброго времени суток!
Квэнди, твой код у меня сохраняет html-код, если я предварительно загрузил страницу при помощи WebBrowser1.Navigate. Но если я потом перешел по ссылкам на загруженной странице, то процедура сохранения html кода не работает. Она ничего не сохраняет. Как можно в этом случае сохранить код?
Soso вне форума Ответить с цитированием
Старый 20.09.2007, 08:13   #4
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

Вызывайте функцию при загрузке страницы:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser1.Navigate('www.programmersforum.ru');
Memo1.Clear;
end;
 
procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
WB_GetHTMLCode(Webbrowser1, Memo1.Lines);
end;
Alex21 вне форума Ответить с цитированием
Старый 20.09.2007, 22:44   #5
Soso
Пользователь
 
Регистрация: 08.08.2007
Сообщений: 12
По умолчанию

Все равно работает не так, как хочется. Событие OnNavigateComplete2 вызывается еще до того, как страница полностью загрузится. В результате у меня получается не полный html код (он обрывается). Попытка использовать событие OnDocumentComplete тоже не приводит к положительному результату. В этом случае код иногда вообще не получается.
Как быть? Что подскажете?

Последний раз редактировалось Soso; 20.09.2007 в 22:47.
Soso вне форума Ответить с цитированием
Старый 21.09.2007, 13:41   #6
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Странно. NavigateComplete2 выполняется после загрузки страницы.
Во всём виноват мс-осёл ))) TWebBroeser на IEшной библиотеке
пыщь
JTG вне форума Ответить с цитированием
Старый 21.09.2007, 14:29   #7
Soso
Пользователь
 
Регистрация: 08.08.2007
Сообщений: 12
По умолчанию

Цитата:
Сообщение от JTG Посмотреть сообщение
Странно. NavigateComplete2 выполняется после загрузки страницы.
Во всём виноват мс-осёл ))) TWebBroeser на IEшной библиотеке
В описании на OnNavigateComplete2 написано, что это событие может вызываться уже раньше, когда получена достаточная информации для отображения.
Soso вне форума Ответить с цитированием
Старый 22.09.2007, 14:22   #8
Soso
Пользователь
 
Регистрация: 08.08.2007
Сообщений: 12
По умолчанию

Неужели никто больше не может предложить какую-нибудь идею? Как мне получить html-код со страницы, даже при переходе по ссылке со страницы?
Soso вне форума Ответить с цитированием
Старый 22.09.2007, 17:30   #9
Soso
Пользователь
 
Регистрация: 08.08.2007
Сообщений: 12
По умолчанию

Я все-таки решил проблему следующим образом.
Я на форму закинул таймер, выключил его предварительно, задал интервал равный 2000 мсек. В сообытии на обработку события таймера вставил функцию WB_GetHTMLCode и потом вразу же выключаю таймер. В событии OnNavigateComplete2 я включаю таймер. В итоге при появлении события OnNavigateComplete2 включается таймер, он отрабатывает 2 сек, сохраняет код и выключается. Таким образом получается, что я сохраняю код через 2 сек. после появления события OnNavigateComplete2 . Способ, как мне кажется, туповат, но зато вроде работает. Возможно этот способ зависит от скорости интернета. Если у кого-нибудь есть другие предложения, то с радостью их услышал бы.
Soso вне форума Ответить с цитированием
Старый 24.09.2007, 10:02   #10
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Сделал ты конечно ерунду полную =)
Реализовать реакцию на полную загрузку страницы невозможно ввиду современной реализации протоколов HTTP и иже с ними. Есть Ajax, JS и иже с ним, которые вообще могут подгружаться когда угодно, тем более а IE. Посему говоря простым языком, а IE и Twebbrowser это одно и тоже, Оба этих "слова" поделки =)
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка окончания загрузки страницы в WebBrowser Vladimir K. Работа с сетью в Delphi 8 31.10.2010 19:20
Сохранение страницы Патрон PHP 3 28.03.2008 00:00
Как сделать разрыв страницы печати по условию и узнать номер страницы Leanna Microsoft Office Excel 2 21.01.2008 06:59
Html страницы LineStown Работа с сетью в Delphi 3 11.04.2007 13:16
разметка страницы. Gambler Microsoft Office Word 0 29.10.2006 21:24