|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.01.2008, 13:21 | #1 |
Пользователь
Регистрация: 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 и остальные записи проганяются в холостую, не загружая новых данных... Где я делаю неправильно... |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |