Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
1

Код после обновления браузера

30.11.2013, 14:19. Показов 1053. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня стоит такой код на кнопке:

Delphi
1
2
WebBrowser1.Refresh; //îáíîâèòü
Memo1.Lines.Add(WebBrowser1.OleObject.Document.documentElement.innerText);
И вот в чем проблема, страница в браузере обновляется нормально, но код что поступает в мемо не обновляется, видимо потому что веб-страница еще не успела обновиться а уже срабатывает код Memo1.Lines.Add

Код сработает если по кнопке нажать 2 раза подряд.

Как решить можно проблему одним кликом?

Добавлено через 1 час 22 минуты
И еще в обычном браузере есть просто кнопка "Вход" при нажатии клавишу Enter Она срабатывает так как буд-то я нажал на кнопку "Вход" -а в WebBrowser- е так неполучается...

Может этот компонет вобще не поддеживает фокус в страницах?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.11.2013, 14:19
Ответы с готовыми решениями:

Прога для обновления браузера
Как можно написать прогу чтобы выбирая время, она сама нажимала в браузере обновить?! Какие для...

После обновления скайпа сбились настройки браузера и открывается сайт с рекламой
Доброго времени суток. После обновления скайпа появились след. проблемы: При включении ПК...

Подскажите, почему галочка с предидущего чекбокса, убирается только после обновления браузера?
Ребят, откройте мне глаза пжалст. Есть код: <li> ...

Перестал работать код JS (возможно после обновления Битрикс)
В марте делал подстановку картинки (MORE PHOTO) вместо DETAIL_PICTURE (по клику). Сейчас обнаружил,...

11
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
30.11.2013, 14:27 2
Добавляй данные в Мемо по завершению загрузки страницы.
0
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
30.11.2013, 17:22  [ТС] 3
То есть от рефреша полностью отказаться и использовать заместо него принудительную загрузку этой же страницы?
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
30.11.2013, 19:30 4
Как вариант, по кнопке делай Refresh, а в Мемо добавляй в обработчике конца загрузки.
Но там флаг какой-нибудь надо будет предусмотреть, чтобы только по нажатию на кнопку данные добавлялись.
0
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
30.11.2013, 21:18  [ТС] 5
Я так понял на этом OnDocumentComplete событии нужно флаг делать?
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
30.11.2013, 22:41 6
Ожидание окончания загрузки страницы можно реализовать так:
Delphi
1
2
3
    //Ожидаем окончания загрузки страницы.
    while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do
      Application.ProcessMessages;
0
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
01.12.2013, 12:32  [ТС] 7
Не в моем случае с рефрешом это неработает. Делал так:
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.Button1Click(Sender: TObject);
begin
  WebBrowser1.Refresh; //обновляет нормально сразу
  while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do
  begin
    Application.ProcessMessages;
    Memo2.Clear; //очистим и вывести обновленную страницу! (выводит старую страницу)
    Memo2.Lines.Add(WebBrowser1.OleObject.Document.documentElement.innerText);
  end;
end;
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
01.12.2013, 12:47 8
Цитата Сообщение от NIKOLAYY Посмотреть сообщение
Не в моем случае с рефрешом это неработает.
Тот код, который я привёл - это и есть сам код задержки. Т. е., вот так надо написать:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.Button1Click(Sender: TObject);
begin
  WebBrowser1.Refresh;
 
  //Ждём.
  while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do
    Application.ProcessMessages;
 
  //Теперь загрузка в WebBrowser1 завершена. И можно выполнять следующие действия.
  Memo2.Clear; //очистим и вывести обновленную страницу! (выводит старую страницу)
  Memo2.Lines.Add(WebBrowser1.OleObject.Document.documentElement.innerText);
end;
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
01.12.2013, 12:48 9
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var
  Form1: TForm1;
  isLoad: Boolean;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  WebBrowser1.Refresh;
  isLoad := True;
end;
 
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  if (isLoad = True) and (pDisp = (Sender as TWebBrowser).DefaultInterface) then
  begin
    Memo1.Lines.Text := WebBrowser1.OleObject.Document.documentElement.innerText;
    isLoad := False;
  end;
end;
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
01.12.2013, 12:53 10
Ещё, чтобы во время выполнения на кнопку не нажали повторно, можно сделать так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm1.Button1Click(Sender: TObject);
var
  Btn : TButton;
begin
  Btn := Sender as TButton;
  Btn.Enabled := False
 
  try
    WebBrowser1.Refresh;
 
    //Ждём.
    while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do
      Application.ProcessMessages;
 
    //Теперь загрузка в WebBrowser1 завершена. И можно выполнять следующие действия.
    Memo2.Clear;
    Memo2.Lines.Add(WebBrowser1.OleObject.Document.documentElement.innerText);
  finally
    Btn.Enabled := True;
  end;
end;
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
01.12.2013, 12:55 11
Mawrat, а если страница не грузится или просто нет связи с Инетом - все просто зависнет.
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
01.12.2013, 13:01 12
В код задержки можно добавить проверку дополнительных условий. Например, поставить ограничение по времени. Если соединение с сетью пропадёт, то скорее всего в браузере возникнет исключение и состояние браузера вновь перейдёт в READYSTATE_COMPLETE. Но это проверить, конечно надо.
0
01.12.2013, 13:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.12.2013, 13:01
Помогаю со студенческими работами здесь

Распаковка архива в потоке (перестал работать проверенный код, возможно после обновления винды)
В данном коде два варианта распаковки архива, в текущем потоке и в отдельном потоке. Imports...

Видеокарта nVidia gt540m на ноутбуке после обновления до Windows 10 (x64) выдает ошибку (код 43)
Доброго времени суток. Возникла такая проблема: на моем ноутбуке стоит карта gt540m, стояла win7...

После обновления выдает bsod с0000145 (код ошибки 6.1.7600.16385 при попытке восстановления)
Здравствуйте! После обновления Windows 7 64bit Ultimate комп выдает синий экран при загрузке с...

После перезагрузки, затребованной Центром обновления для начала установки обновления, установка не начинается
Центр обновления Windows все время требует перезагрузки для установки обновления. Перезагружаюсь,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru