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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2008, 15:08   #1
Николай 24
 
Регистрация: 06.02.2008
Сообщений: 3
По умолчанию TWebBrowser.Navigate2() Помогите новичку

Использую Navigate2() для посылки данных в цикле по количеству строк в таблице SG , но что то ничего не получается( подскажите пож где я делаю не так.

// когда навигация закончена FlagComplete:=True;

procedure TGForm.WebBNavigateComplete2(Sender : TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
FlagComplete:=True;
end;
//********************
// выполнение навигации
procedure SendData(TargetData:integer);
begin
....
в которой навигация осуществляется :
GForm.WebB.Navigate2(URLN, Flags, TargetFrameName, PostData, Headers);
ShowMessage('Данные отправлены');
end;
//***************
procedure TGForm.Timer1Timer(Sender: TObject);
var
i:integer;
begin
For i:=1 to SG.RowCount do
begin
if (FlagComplete) then
begin
GForm.SendData(SG.Cell[1,i]);
end else
begin
sleep(1000*5);
end;
end;
end;
//**************

происходит выполнение только первого перехода (

видимо цикл проходит раньше чем webBrowser справляется с командой...
пробовал в цикл ставить задержку sleep(1000*10); не помогло(
помогите пож - кто знает.
Николай 24 вне форума Ответить с цитированием
Старый 06.02.2008, 22:04   #2
Vladimir K.
Пользователь
 
Регистрация: 25.12.2006
Сообщений: 64
По умолчанию

Я делаю так:

Код:
//---------------------------------
// Загрузка страницы - завершена
//---------------------------------
procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
 if CurDispatch = nil then
  begin
   CurDispatch := pDisp; { save for comparison }
  end;
end;


{NavigateComplete2 возникает, когда приходит первая порция данных с сервера.
pDisp хранит ссылку на интрерфейс главной страницы...т.е. той, в которую могут быть
вложены фреймы. DocumentComplete срабатывает каждый раз при окончании загрузки
документа(фрейма).
Мы просто проверяем в каждом DocumentComplete, какой документ окончил загрузку,
и, если это документ который был первым-главным, то все ОК!!! страница  загружена полностью.}


procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
  if (pDisp = CurDispatch) then
  begin
    Beep; {the document is loaded, not just a frame }
    CurDispatch := nil; {clear the global variable }
{ВОТ СЮДА НАДО ВСТАВЛЯТЬ КОД, КОТОРЫЙ ВЫПОЛНЯЕТСЯ ПО ОКОНЧАНИИ ЗАГРУЗКИ СТРАНИЦЫ}
  end;
end;
Vladimir K. вне форума Ответить с цитированием
Старый 06.02.2008, 22:57   #3
Николай 24
 
Регистрация: 06.02.2008
Сообщений: 3
По умолчанию

попробую описать подоступнее
попробую описать ещё раз
при переходе на траничку http://MySite.ru/myPage.php
//--------
возникает формочка - с вопросом
"Столица Берлина?"
и в текстовое поле предлагается ввести (переменная AText)
и кнопочка 'ОК'
//--------
после того как вы ввели туда некий текст и нажали кнопку 'ок'
вы видите
формочку 'Вы действительно считаетет (AText) столицей Берлина? '
и кнопочка 'ОК'
//--------
после нажатия кнопки Вы видите окно - с вопросом
"Столица Германии?"
если на один вопрос получается ответить програмно используя WebBrowser.Navigate2();
то на несколько вопросов подряд - программно отчетить не получается.
(предложенные вами варианты с использованием indy не срабатывают даже на первый переход)
А в цикл

For i:=1 to SG.RowCount do
Begin
SendData(SG.Cells[1,i]);
end;


какую то задержку кроме sleep и проверять отправились ли данные/загрузилась ли страничка и если отправились/загрузилась - то только после этого переходить к следующему обходу в цикле.
вот пока у меня это работает таким кодом

if (FlagComplete)and(FlagBoosy) then
begin
//Timer1.Enabled:=False;
FlagBusy:=False;
Inc(myNumberData);
case myNumberData of
//
01:SendData(SG.Cells[1,1]);
//
02:SendData(SG.Cells[1,2]);
... и т.д.


но тут для каждого вопроса я должен править код программы
так как вопросов может быть любое количество.
Николай 24 вне форума Ответить с цитированием
Старый 06.02.2008, 22:57   #4
Николай 24
 
Регистрация: 06.02.2008
Сообщений: 3
По умолчанию

т.е. адрес интернете:

'url:=www. .... MyPage.php';

'ждёт' пременную AText.
с помощью кода

WebBrowser.Navigate('www. .... MyPage.php?AText:=Hallo World');


ничего не произошло, а с помощью перегруженной, переменная заполнилась (Спасибо ресурсам интернета!)

WebBrowser.Navigate2(URLN, Flags, TargetFrameName, PostData, Headers);

задача состояла в том чтобы отправлять несколько раз - каждый раз разные значения переменной


For i:=1 to SG.RowCount do
begin
AText:=SG.Cells[1,i];
end;



вот не пойму как в цикле подобное выразить..

сейчас приходится пользоваться :

case myNumberData of
//
01:SendData(SG.Cells[1,1]);
//
02:SendData(SG.Cells[1,2]);
... и т.д.


хоть и работает, но тут есть ограничение на количество строк таблицы...

неужели так нельзя сделать?:

For i:=1 to SG.RowCount do
begin
SendData(SG.Cell[1,i]);
end;


вот в в этом собственно вопрос. -( у меня пока не получилось((
Николай 24 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите новичку... Манжосов Денис :) Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 11 28.08.2008 10:00
Помогите с TWebbrowser-ом Dr.XxX Общие вопросы Delphi 4 12.05.2008 12:43
Помогите новичку vorron Свободное общение 8 15.03.2008 08:56
Помогите новичку HIP Общие вопросы Delphi 1 19.12.2006 14:55
помогите новичку fox_root Общие вопросы Delphi 1 15.12.2006 19:10