本帖最后由 u010632220 于 2013-05-09 15:08:59 编辑

解决方案 »

  1.   

    比如这个网页
    http://www.discuz.net/forum.php?mod=post&action=newthread&fid=22&referer=http%3A//www.discuz.net/forum-22-1.html
      

  2.   

    这个网页的下拉框,用delphi代码没法控制它选哪一项。读取好像行,但是修改它不行。比较奇怪。
      

  3.   

    我说,这个“选择分类主题”下就两项,一个option“选择新主题”,一个“新建议”。
    就2项,index就0和1两个,哪来的2嘛
      

  4.   


    // 下拉列表选择0和1都问题嘛,你说选2会出问题?压根没有2个这index嘛
    procedure TForm1.wb1DocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    var
      doc: IHTMLDocument2;
      select: IHTMLSelectElement;
    begin
      doc := wb1.Document as IHTMLDocument2;
      select := doc.all.item('typeid', 0) as IHTMLSelectElement;
      select.selectedIndex := 1;
    end;
      

  5.   

    兄弟,你的代码好像放到按钮里面就不起作用了。这个是什么原因呢?
    比如procedure TfrmMain.btnLoadClick(Sender: TObject);
    放在这里面就没选中下拉框第二项。你的代码放在wb1DocumentComplete事件里面,确实起作用。不过即使这样,也基本能解决我现在的问题了。
      

  6.   

    DocumentComplete事件是当网页内容(包含js)都下载完毕到本地后做的事情。
    如果网页没下载完成,你就btnLoadClick干别的事就可能无效,例如网页的某个标签没下砸完成,某段JS脚本没下载完成,而很多DOM事件需要JS去控制,这时就无效。你也可以这样
    var
      flg:boolean;procedure TForm1.wb1DocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    begin
      flg := true;
    end;// 然后
    procedure TfrmMain.btnLoadClick(Sender: TObject);
    begin
       if flg then  // 页面加载完毕后
        .....   // 前提都是必须网页加载完毕
    end;