新手。。问个问题
程序里有两个webbrowser,分别为webbrowser1和webbrowser2
然后我想做的是先利用webbrowser1载入一个页面,然后得到webbrowser1里面的几条记录。然后通过这记录里的一个数据生成webbrowser2的页面地址,载入webbrowser2.并得到一些数据。
现在有个问题,就是我从webbrowser1里得到10条记录。我想每得到一条记录的时候生成一个网址然后让webbrowser2载入。然后判断webbrowser2得到的数据是否是需要的数据,如果是的话webbrowser1在后面几条记录操作时就不再去生成网址去操作webbrowser2了。如果生成的不是。那么下一条记录就要再生成地址去操作但是因为webbrowser2载入页面需要一定时间。。所以我把事件放到一个timer里面。然后在载入webbrowser2时打开timer,让他判断webbrowser2.busy=false来确定是否webbrowser2载入完成。然后进行操作。可是问题出现了。。webbrowser1的循环的时候根本不去等待timer的执行就全执行完了。。如果我在webbrowser1里面加一个while webbrowser2.busy do;的话。发现timer不动了。整个程序就一直在等这个while语句。。我觉得可能是方法不对。大家教下有什么好的办法

解决方案 »

  1.   

    可能没说清楚。我把代码放上来给大家看看。这些操作我是放在一个按钮来执行的。
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Doc:IHTMLDocument2;
      elements: IHTMLElementCollection;
      len:integer;
      i,j,h:integer;
      tbl:OleVariant;
      str:array of array of string;
      Url,tmp:string;
      flag:integer;
    begin
      //得到DOC和表格对像
      Doc:=webbrowser1.document as IHTMLDocument2;
      elements:=Doc.all;
      //htmlTable:=doc.getElementsByTagName('table');
      tbl:=elements.tags('table');
      //从第二个表格起开始查。也就是有查到数据的情况下再执行操作了
      tmp:='"';
      flag:=0;
      timer1.Enabled:=false;
      timer2.Enabled:=false;
      for i:=1 to tbl.length-1 do
      begin
        len:=tbl.item(i).rows.length-1;
        //动态生成数组第一维
        SetLength(str,len);
        for j:=low(str) to high(str) do
        begin
        //动态生成数组第二维
          SetLength(str[j],10);
           //从第二行开始起查找
          for h:=0 to tbl.item(i).rows.item(j+1).cells.length -1 do
          begin
            str[j,h]:= tbl.item(i).rows.item(j+1).cells.item(h).innerText;
            //showmessage(str[j,h]);
            
            if (h=2)and(flag=0) then
            begin
               Url:= tbl.item(i).rows.item(j+1).cells.item(h).innerHTML;
               //Url:=MidStr('asdf',1,3);
               Url:=MidStr(Url,pos('"',Url)+1,length(Url));
               Url:=MidStr(Url,1,pos('"',Url)-1);
               //ShowMessage(Url);
               //ShowMessage(Url);
               Webbrowser2.Navigate('file://e:/car/new0907/'+Url);
               flag:=1;
               timer1.Enabled:=true;        end;
          end;
        end;  end;
    end;
      

  2.   

    周末。。估计没人在家上网了
    我刚找了一下。用Application.ProcessMessages可以搞定。只是方法不太好。。
      

  3.   

    以我的感觉,用webbrowser不方便。
    建议用idhttp,效果好还稳定。