Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ожидание загрузки страницы 
:(
    Опции темы
JanMihail
Дата 31.5.2007, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Уважаемые мастера! Помогите справится с такой задачей. Мне нужно организовать задержку программы до тех пор, пока не загрузится страница в компоненте TWebBrowser. Делаю так:

Код

procedure Start;
label Nachalo;
begin
Nachalo:
 //тут много кода
 ........................
 while WebBrowser1.ReadyState <> 4 do
   Application.ProcessMessages;

 WebBrowser1.Navigate('новая страница');
 goto Nachalo;
end;


Но такой цикл очень сильно грузит процессор. Но проблема еще в том что после первого прохода процедуры все нормально. Параметр ReadyState становится равным 4, дальше я назначаю WebBrowserу новую страницу. Иду в начало, а цикл не выполняется, т.к. параметр ReadyState еще не успел поменять свое значение с 4 на 1, а цикл уже прошел и ожижать загрузки он не стал.
Не подскажете, как вообще это реализовать рационально?. Заранее спасибо!!!
PM MAIL WWW ICQ   Вверх
sw04
Дата 31.5.2007, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



JanMihail, зачем метку используешь?
не лучше саму процедуру вызывать?

Как вариант можно использовать потоки.


--------------------
<удалено администрацией>
PM   Вверх
JanMihail
Дата 31.5.2007, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Зачем метку используешь

но мне не нужно каждый раз процедуру сначала выполнять. А именно с этой метки. Перед меткой еще код есть!
Код

procedure Start;
label Nachalo;
begin
//тут много кода
 ........................
Nachalo:
 //тут много кода
 ........................
 while WebBrowser1.ReadyState <> 4 do
   Application.ProcessMessages;

 WebBrowser1.Navigate('новая страница');
 goto Nachalo;
end;


Это сообщение отредактировал(а) JanMihail - 31.5.2007, 21:38
PM MAIL WWW ICQ   Вверх
sw04
Дата 31.5.2007, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

type
...
TSnifferThread = class(TThread)
  private
  protected
      procedure Execute; override;
      procedure Init; virtual;
  public
  end;

TfrmMain = class(TForm)
...
  private
  FSnifferThread: TSnifferThread;
...

procedure TSnifferThread.Init;
begin
if FSnifferThread <> nil then
  begin
     FSnifferThread.Terminate;
    FSnifferThread := nil;
  end
else
  begin
     FSnifferThread := TSnifferThread.Create(True);
     FSnifferThread.FreeOnTerminate := True;
     FSnifferThread.Resume;
  end;
end;

procedure TSnifferThread.Execute;
begin
  while not Terminate do
    if WebBrowser1.ReadyState = 4 then
      begin
      //делаем что надо при окончательной загрузке страницы
      FSnifferThread.Suspend;
     end;

end;


так вот, когда тебе надо проверить ReadyState, необходимо вызвать процедуру  FSnifferThread.Init. Код работает, но коряво скорее всего. Надо учитывать запуск и остановку потока.

Это сообщение отредактировал(а) sw04 - 31.5.2007, 22:27


--------------------
<удалено администрацией>
PM   Вверх
MetalFan
Дата 31.5.2007, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



ойй... гото то зачем???



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
aktuba
Дата 1.6.2007, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


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

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



Цитата

ойй... гото то зачем???


В память о прежних временах  smile 


JanMihail, раз у тебя такая проблема - это говорит только об одном - неверный подход к структуре программы. Правильнее было бы использование менеджера, который будет распоряжаться переходами по линкам и, возможно, отдельный поток. Ну и конечно (!!!) - надо отказаться от Goto!!!


--------------------
user posted image
PM MAIL WWW Skype   Вверх
JanMihail
Дата 1.6.2007, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Дата 31.5.2007, 22:18 

Ну такой цикл же грузит процессор! Мне надо чтоб ожидание не в цикле как-то было
PM MAIL WWW ICQ   Вверх
sw04
Дата 1.6.2007, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(JanMihail @ 1.6.2007,  10:33)
Цитата

Дата 31.5.2007, 22:18 

Ну такой цикл же грузит процессор! Мне надо чтоб ожидание не в цикле как-то было

не, зачем.
если на потоках, то всё нормально будет.
советую ознакомиться с закрепленной статьей в разделе win api - сабклассинг и суперклассинг.


--------------------
<удалено администрацией>
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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