我想等博客的fckeditor加载完毕后自动填写内容,现在填写内容已经搞定了,但是判断页面加载完毕不准确,所以调试时会出错,说找不到成员博客地址
http://www.blogtoowoomba.com/测试ID:onmyway
测试密码:cMKpYJJx我查到的方法是
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
if WebBrowser1.Application = pDisp then
begin
Text := '网页下载完毕!';
end;
end;但是不行

解决方案 »

  1.   

    1 定义一个全局变量  glpDisp: IDispatch;
    2、NavigateComplete2 事件 写如下代码
    procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    begin
      if glpDisp = nil then glpDisp := pDisp;
    end;3、DocumentComplete 事件写如下代码
    procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    begin
      if (glpDisp <> nil) and (glpDisp = pDisp) then
      begin
        glpDisp := nil;
        ShowMessage('完成');  end;
    end;
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, OleCtrls, SHDocVw;type
      TForm1 = class(TForm)
        WebBrowser1: TWebBrowser;
        procedure WebBrowser1NavigateComplete2(ASender: TObject;
          const pDisp: IDispatch; var URL: OleVariant);
        procedure WebBrowser1DocumentComplete(ASender: TObject;
          const pDisp: IDispatch; var URL: OleVariant);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
      glpDisp: IDispatch;
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
    WebBrowser1.Navigate('http://www.blogtoowoomba.com/');
    end;procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    begin
    begin
      if (glpDisp <> nil) and (glpDisp = pDisp) then
      begin
      glpDisp := nil;
      ShowMessage('完成');  end;
    end;
    end;procedure TForm1.WebBrowser1NavigateComplete2(ASender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    begin
    if glpDisp = nil then glpDisp := pDisp;
    end;end.
      

  3.   

    注意1、打开http://www.blogtoowoomba.com/ 完成后会提示 一次完成
    2、 Login 页面加载完成也会提示一次完成3、 登录后 页面加载完成也会有一次提示完成
      

  4.   


      while WebBrowser1.ReadyState < READYSTATE_COMPLETE do
        Application.ProcessMessages;
      

  5.   


    多谢,不过我说的是发布文章页面的加载,是其中带了fckeditor编辑器的,地址是
    http://www.blogtoowoomba.com/manager/add_entry.php
    用我给的id和密码登陆
      

  6.   

        這個要操作的網頁是包含了三层框架,上面大大的代码仅仅判断到第二层上.而你要操作的刚好是第三层上的东西,    由于第三层并沒有SRC,所以也不會產生 DocumentComplete所以上面大大的方法根本就判斷不到第三層.所以我们变通一下.第三層會產生一個BeforeNavigate2,在這里用全局變更urls取得url,然後在DownloadComplete事件中判斷這個urls是不是:javascript:void(0)就可以了  urls:string;
    implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
    WebBrowser1.Navigate('http://www.blogtoowoomba.com/login.php');
    end;procedure TForm1.WebBrowser1DownloadComplete(Sender: TObject);
    begin
      if urls='javascript:void(0)' then
         填表; //為了以后再填,應該清空urls;end;procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
      const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
      Headers: OleVariant; var Cancel: WordBool);
    begin
      if url='javascript:void(0)' then  urls:=url;
    end;