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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2008, 13:21   #1
Diogo
Пользователь
 
Аватар для Diogo
 
Регистрация: 15.08.2007
Сообщений: 17
Счастье TWebBrowser.Busy

Требуется загружать некоторые страницы в цикле, кое-что разбирать в них и помещать данные в базу.
1. При нажатии кнопки обновить, создается поток.
2. После старта загрузки страницы, крутится цикл и проверяет свойство браузера Busy на занятость.
3. Как браузер освобождается - дается задание для загрузки следующей страницы.

constructor TUpdateThread.Create(CreateSuspennd ed: Boolean;
const AGroup: string);
begin
inherited
Create(CreateSuspennded);
FGroup := AGroup;
end;

procedure TUpdateThread.Execute;
var
I: Integer;
vtTmp: TVolgaTable;
begin
vtTmp:=TVolgaTable.Create(TntApplic ation);
try
with vtTmp do
begin
LoadFromCursor(frmMain.vtOpp);
Open;
SortOptions:=[vsoDescendSort];
IndexFieldNames:='PlayerID';
if FGroup<>'' then
begin
Filter:=FGroup;
Filtered:=True;
end;
SortRecords;
First;
end;

while not vtTmp.Eof do
begin
if vtTmp.FieldByName ('PlayerID').AsInteger<>0 then
begin
frmMain.Browser.Navigate('http://требуемый сайт.ru/player.php?p='+inttostr (vtTmp.FieldByName ('PlayerID').AsInteger));
while frmMain.Browser.Busy do
Application.ProcessMessages;
vtTmp.Next;
end else vtTmp.Last;
end;
finally
vtTmp.Close;
vtTmp.Free;
end;
end;

procedure TfrmMain.LaunchThread(const AGroup: string);
begin
btnUpdateOpp.Enabled:=false;
UpdThread := TUpdateThread.Create(False, AGroup);
UpdThread.Onterminate := UpdateTreadTerminate;
UpdThread.Resume;
end;

procedure TfrmMain.UpdateTreadTerminate(Sende r: TObject);
begin
btnUpdateOpp.Enabled:=True;
end;

procedure TfrmMain.BrowserDocumentComplete(Se nder: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
k, i, j, o: integer;
ovTable: OleVariant;
CurWebrowser: IWebBrowser;
TopWebBrowser: IWebBrowser;
Document: OleVariant;
WindowName: string;
begin
CurWebrowser := pDisp as IWebBrowser;
TopWebBrowser := (Sender as TWeber).DefaultInterface;
// если произошла загрузка страницы, а не фрейма
if CurWebrowser = TopWebBrowser then
begin
// перебираем все таблицы на странице и если успешно обработается
// первая из них - прервем цикл
K:=Browser.OleObject.Document.all.t ags('TABLE').length;
for O:=0 to k-1 do
begin
TntMemo1.Lines.Clear;
ovTable := Browser.OleObject.Document.all.tags ('TABLE').item(o);
try
for i := 0 to (ovTable.Rows.Length - 1) do
begin
for j := 0 to (ovTable.Rows.Item(i).Cells.Length - 1) do
//Берем текст с таблицы
TntMemo1.Lines.Add(ovTable.Rows.Ite m(i).Cells.Item(j).InnerText);
end;
TntMemo1.SelectAll;
TntMemo1.CopyToClipboard;
// обрабатываем с клипборда полученную информацию. Если все ок - получаем True
if frmAnalyse.AnalyseWithoutShow then break;
except
end; // try
end; // for O:=0 to k-1 do
end;
end;

procedure TfrmMain.Button2Click(Sender: TObject);
begin
UpdateThread.Terminate;
end;

procedure TfrmMain.btnUpdateOppClick(Sender: TObject);
begin
//запускаем поток...
LaunchThread(vtOppGroup.AsString);
end;

Проблема получается вот здесь:
while frmMain.Browser.Busy do
Application.ProcessMessages;

Программа обрабатывает 2-3 записи, после чего браузер при получении команды на загрузку следующей страницы не меняет свойство Busy и остальные записи проганяются в холостую, не загружая новых данных...

Где я делаю неправильно...
Diogo вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TWebBrowser ak3000 Компоненты Delphi 8 08.04.2010 19:33
TWebBrowser DeDoK Общие вопросы Delphi 9 03.06.2008 18:30
TWebBrowser + IE 7.0 Diogo Общие вопросы Delphi 5 27.01.2008 12:43
TWebBrowser dima_lamo Работа с сетью в Delphi 1 19.01.2008 21:16
Проблема с twebbrowser Pedro Работа с сетью в Delphi 6 10.09.2007 20:34