自定义的一类中使用了TEmbeddedWB,这个类中定义了OnNavigateError和OnDocumentComplete,但是TEmbeddedWB无法响应这两个事件,不知道为啥,请大家的指点。 

解决方案 »

  1.   

    从来没有用过TEmbeddedWB,因为据说要卸载现有的webbrowser
    我觉得就是D带的webbrowser就可以了,尽量不用第三方的东东
      

  2.   

    设置EmbeddedWB.OnNavigateError := OnNavigateError;
    了吗?
      

  3.   

    EmbeddedWB.OnNavigateError := OnNavigateError; EmbeddedWB.OnDocumentComplete := OnDocumentComplete;都已经设了,不知道为什么两个事件就是不执行。
      

  4.   

    使用TEmbeddedWB,好像不用卸载现有的webbrowser 的呀,再说TEmbeddedWB只是对现有webbrower的扩展,并没有改写。
      

  5.   

    如果不是TEmbeddedWB有问题,就是你的类代码有问题.
    一般而言,你的代码有问题的可能性比较大,因为TEmbeddedWB的事件代码在明处,肯定经过了无数次测试.
      

  6.   

    类定义部分{类定义部分}
    TServices = class(TObject)
      private
        FBrowser: TEmbeddedWB;
        FDomain: string;
        FErrorState: Boolean;
        FProfile: TReadProfile;
        FState: string;
        procedure OnDocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant); virtual;
        procedure OnNavigateError(ASender: TObject; const pDisp: IDispatch; var URL, Frame, StatusCode: OleVariant; var Cancel:
                WordBool);
      public
        constructor Create;
        destructor Destroy; override;
        procedure Login; virtual;
        procedure Logout; virtual;
        procedure Payment; virtual;
        procedure Query; virtual;
      end;  TChinaMobileService = class(TServices)
      private
        procedure OnDocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant); override;
      public
        constructor Create;
        procedure Login; override;
        procedure Logout; override;
        procedure Payment; override;
        procedure Query; override;
      end;
    {
    ********************************************************** TServices ***********************************************************
    }
    constructor TServices.Create;
    begin
      FBrowser := TEmbeddedWB.Create(nil);
      FBrowser.OnNavigateError := OnNavigateError;
      FBrowser.OnDocumentComplete := OnDocumentComplete;
      FState := EmptyStr;
      FErrorState := False;
    end;destructor TServices.Destroy;
    begin
      FreeAndNil(FBrowser);
      FreeAndNil(FProfile);
      inherited;
    end;procedure TServices.Login;
    begin
      FState := sState_Login;
    end;procedure TServices.Logout;
    begin
      FState := sState_Logout;
    end;procedure TServices.OnDocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
    begin
      if FErrorState then
      begin
        ErrorDlg(sNavigateError);
        FErrorState := False;
        Exit;
      end;
    end;{
    ***************************************************** TChinaMobileService ******************************************************
    }
    constructor TChinaMobileService.Create;
    begin
      inherited Create;
      FProfile := TChinaMobileProfile.Create;
      FDomain := Format(sDomain, [FProfile.IP, FProfile.Port]);
      Login;
    end;procedure TChinaMobileService.Login;
    begin
      FBrowser.Navigate(FDomain + FProfile.LoginUrl);
      inherited Login;
    end;procedure TChinaMobileService.Logout;
    begin
      inherited Logout;
    end;procedure TChinaMobileService.OnDocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
    var
      Doc: IHTMLDocument2;
      FUserName, FPassword: IHTMLInputElement;
      FSubmit: OLEVariant;
    begin
      inherited OnDocumentComplete(ASender, pDisp, URL);
      if FState = sState_Login then
      begin
        Doc := FBrowser.Doc2;
        FUserName := Doc.all.item('username', 0) as IHTMLInputElement;
        FPassword := Doc.all.item('userpwd', 0) as IHTMLInputElement;
        FSubmit := Doc.all.item('submit_button', 0);    FUserName.value := '';
        FPassword.value := '';
        FSubmit.click;
      end;
    end;procedure TChinaMobileService.Payment;
    begin
      inherited Payment;
    end;procedure TChinaMobileService.Query;
    begin
      inherited Query;
    end;
      

  7.   

    TEmbeddedWB的那两个事件响应了吗
    跟到TEmbeddedWB里,在它里面把所有响应那个事件的地方打上断点,看是不是得到执行了
    继承自TObject,没有界面,不知道会不会产生问题
      

  8.   

    OnDocumentComplete这个我也遇见不能响应的情况,后来程序中加了一个皮肤控件,代码没有任何修改,居然就可以响应了。
    问题是解决了,可是一直很纳闷,不知道为什么!
      

  9.   

    两个事件都没有响应,我试着新建工程,在Form中的Create事件中像上面的代码一样建立TEmbeddedWB,但两个事件依然没有响应,不知道为啥?
      

  10.   

    把TEmbeddedWB放到Form中,两个事件放在类里,倒是可以响应两个事件的,唉,不知道为啥。请高手指点,不知道会不会是继承自TObject的原因?
      

  11.   

    发现一个很奇怪的问题,如果Form中的TEmbeddedWB的visible为false时,就无法响应这两个事件。请高手同志指点一二。
      

  12.   

    和我类似,不是false的问题,就算true也未必能响应,如果在一个page控件上放TEmbeddedWB,如果这个PAGE不是当前能看见的page也不会响应,而且更神奇的是只要这个page曾经被放到最前面看见过1次,随后就算不可见也OK,一样可以响应了,就是需要激活一下,我想这个可能是控件本身的BUG吧
      

  13.   

    该控件不可见时可能是不会响应DocumentComplete事件
      

  14.   

    可视化控件Create时,不给他一个父控件,则不会工作。比如TEmbeddedWB.Create(nil)将不会执行navigate函数,自然不会触发OnDocumentComplete事件。
      

  15.   

    to:HiLoveS   我也试过TEmbeddedWB.Create(frmMain),frmMain是主窗口,但依然不响应事件。