Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 1 завершилось ли удачно загрузка странички на IE, 1 завершилось ли удачно загрузка странич 
:(
    Опции темы
mr_tg
Дата 12.8.2012, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте уважаемые мастера своего дела!
Спасибо что обратили внимание на мой вопрос.
Button3 - Нажатие кнопки заполняет текстовые поля с данными из базы данных AdoTable, загруженной странички. (нужные поля)
Button4 - Нажатие кнопки выполняет запуск первой кнопки на страничке.
(Страничка должна обновится)
Button21 – после окончании обновления странички, Нажатие кнопки выполняет запуск второй кнопки на страничке.

Когда я нажимаю по одному последовательно на эти кнопки программа работает.
В форумах нашел очень много данных где показано это сделать в цикле.

Код

procedure TForm1.Button8Click(Sender: TObject);
VAR I:Integer;
begin
Flag:=False;
if ADOT.RecordCount>0 then
  begin
    for i:=0 to ADOT.RecordCount do
      begin
        Application.ProcessMessages;      
        if Flag then Break;
        Button3.Click;
        if ADOT.RecordCount=0 then Break;
        Sleep(1000);
        Button4.Click;
        Sleep(1000);
        Button21.Click;
        Sleep(1000);
        Form1.Refresh;
        Application.ProcessMessages;
        if Flag then Break;
      end;
  end;
end;

1 работает но теряю время. Sleep(1000);
2 цикл не реагирует завершена ли загрузка до конца чтобы нажать следующую кнопку.
3 начинает барахлить если интернет завис и страничка 
Мне нужно чтобы 
Прога реагировала 
1 завершилось ли удачно загрузка странички на IE чтобы нажать на следующую кнопку.
Если нет, зависла страничка, прога  выдавала сообщение с обратным отсчетом
Скажем 10 секунд после окончании этого времени программа повторит заново.
Хочу попробовать WB.ReadyState<> 4  не получатся...

Код

procedure TForm1.Button8Click(Sender: TObject);
VAR I:Integer;
begin
Flag:=False;
if ADOT.RecordCount>0 then
  begin
    for i:=0 to ADOT.RecordCount do
      begin
        Application.ProcessMessages;      
        if Flag then Break;
        Button3.Click;
        //ShowMessage(IntToStr(WB.ReadyState));
        while WB.ReadyState<> 4 do begin Application.ProcessMessages; end;
        if ADOT.RecordCount=0 then Break;
       // Sleep(400);
        Button4.Click;
        while WB.ReadyState<> 4 do begin Application.ProcessMessages; end;
//        Sleep(400);
        Button21.Click;
        while WB.ReadyState<> 4 do begin  Application.ProcessMessages; end;
  //      Sleep(400);
        Form1.Refresh;
        Application.ProcessMessages;
        if Flag then Break;
      end;
  end;
end;


заранее СПС за ваше советы и примеры.
PS на страничке есть текстовое поле которое при каждом обновлении выдаёт текст который не повторяется (если это как то поможет)

PM MAIL   Вверх
XperT
Дата 13.8.2012, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Проверка загрузилась ли страница:
Код

type
  TForm1 = class(TForm)
    ...
  private
    CurDispatch : IDispatch;
    ...
end;

...

procedure TForm1.EmbeddedWB1DocumentComplete(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  if (pDisp = CurDispatch) then
  begin
    CurDispatch := nil; {clear the global variable }
    dc := true; // <-- Страница загрузилась
  end;
end;

procedure TForm1.EmbeddedWB1NavigateComplete2(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  if CurDispatch = nil then
  begin
    CurDispatch := pDisp;
    dc := false;
  end;
end;


Работает в 95% случаев

Это сообщение отредактировал(а) XperT - 13.8.2012, 02:09
PM MAIL   Вверх
mr_tg
Дата 13.8.2012, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



XperT 
за собет СПС

Код

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
Ld:=True;
stop:=True;
 if (pDisp = CurDispatch) then
  begin
    CurDispatch := nil; {clear the global variable }
    dc := true;
    Button14.Caption:=(Inttostr(WebBrowser1.readyState)+' dc=true');
  end;
end;

Button14.Caption приобретает значение до полного зовершения загрузки странички!
:(
маленкий вопрос в добавок
вставить из буфера в WebBrowser1  можно а скопирнуть из WebBrowser1 в буфер можно,

Это сообщение отредактировал(а) mr_tg - 13.8.2012, 18:44
PM MAIL   Вверх
XperT
Дата 13.8.2012, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Тестовый проект можно получить?
PM MAIL   Вверх
mr_tg
Дата 14.8.2012, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



XperT  СПС за интерес помочь
(для меня это новое и трудное)
если вы имеете в веду сам код то вот кусок
Код

procedure TForm1.Button3Click(Sender: TObject);
var
   ShellWindow: IShellWindows;
//   WB: IWebbrowser2;
   spDisp: IDispatch;
   IDoc1: IHTMLDocument2;
   Document: Variant;
   k, m: Integer;
   ovElements: OleVariant;
   i: Integer;
   buttonSelected : Integer;
begin

  ShellWindow := CoShellWindows.Create;
  // get the running instance of Internet Explorer
  for k := 0 to ShellWindow.Count do
  begin
    spDisp := ShellWindow.Item(k);
    if spDisp = nil then Continue;
    // QueryInterface determines if an interface can be used with an object
    spDisp.QueryInterface(iWebBrowser2, WB);
    if WB <> nil then
    begin
      WB.Document.QueryInterface(IHTMLDocument2, iDoc1);
      if iDoc1 <> nil then
      begin
        WB := ShellWindow.Item(k) as IWebbrowser2;
//        ShowMessage(IntToStr(WB.ReadyState));
        begin
          Document := WB.Document;
          for m := 0 to Document.forms.Length - 1 do
          begin

            ovElements := Document.forms.Item(m).elements;
       //     i_inte:=(StrToInt()));
              for i := 0 to ovElements.Length - 1 do
               begin         
                try
                 if (CompareText(ovElements.item(i).tagName, 'input') = 0) and
                    (CompareText(ovElements.item(i).type, 'text') = 0) then
                  begin
                    if i=1 then ovElements.item(i).Value := ADOT.AsString;
                    if i=22 then ovElements.item(i).Value :='123456';
                    end;
                  end
             Sleep(900);
          end;
    end;
  end; 
end;

procedure TForm1.Button4Click(Sender: TObject);

var ShellWindow: IShellWindows;
    WB: IWebbrowser2;
    spDisp: IDispatch;
    IDoc1: IHTMLDocument2;
    Document: Variant;
   i, k, m: Integer;
    ovElements: OleVariant;

begin
  ShellWindow := CoShellWindows.Create;
  for k := 0 to ShellWindow.Count do
  begin
    spDisp := ShellWindow.Item(k);
    if spDisp = nil then Continue;
    spDisp.QueryInterface(iWebBrowser2, WB);
    if WB <> nil then
     begin
      WB.Document.QueryInterface(IHTMLDocument2, iDoc1);
      if iDoc1 <> nil then
       begin
        WB := ShellWindow.Item(k) as IWebbrowser2;
        Document := WB.Document;
        for m := 0 to Document.forms.Length - 1 do
         begin
          ovElements := Document.forms.Item(m).elements;
          ovElements.item(10).Click;
         end;
       end;
     end;
  end;




цикл вы видели.
а компонентой веббраузер вобшем не получаетса (разницы нет главное чтобы чикле программа подаждала и проверила загрузилось ли IE доконца)
код может незапуститса (кусок вырезал ...)
в ответат плс имейти в виду что адресат beginner smile

Это сообщение отредактировал(а) mr_tg - 14.8.2012, 20:22
PM MAIL   Вверх
XperT
Дата 14.8.2012, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Не всегда решение проблемы можно увидеть посмотрев на исходники, чаще всего нужно погонять программу под деббагером. Этим я и хотел заняться, но честно говоря нету особого желание из указанных вами исходников делать проект (это не интересная и не оправданная трата времени). Потому я попросил у вас ваш проект, чтобы можно было скачать и запустить у себя.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

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

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


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

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

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


 




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


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

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