建立了一个继承自TWebBrowser的类,想覆盖其中的NewWindow2事件,于是这样写:
type
  TMyWeb = class(TWebBrowser)
     procedure NewWindow2(Sender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool); override;   end;procedure TMyWeb.OnNewWindow2(Sender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool);begin
    inherited NewWindow2;
end;但编译时说在基类中找不到方法:NewWindow2。
Method 'NewWindow2' not found in base class
[Error] Unit1.pas(78): Undeclared identifier: 'OnNewWindow2'
请问大佬们这个错在哪里?如何修改,最好有例子。

解决方案 »

  1.   

    可以这样:
    type 
        TMyWeb   =   class(TWebBrowser) 
              procedure   NewWindow2(Sender:   TObject; 
        var   ppDisp:   IDispatch;   var   Cancel:   WordBool);   override;       end; 在方法名可以为NewWindow2,也可以是其他,但一定要满足TWebBrowserDocumentComplete类型
    在TMyWeb   的构造函数设置过去:
    Self.OnNewWindow2 = NewWindow2;
      

  2.   

    这样就出更大麻烦了?如何覆盖构造函数?我写Constructor  Create(); override;是不对的,说定义跟以前的不一样。有哪位大佬有例子么?我真的是初学delphi,并且只要做个小程序。
      

  3.   

     constructor Create(AOwner: TComponent); override; 哦,忘了这个,我再看下。
      

  4.   

    还是不行的,还是说基类中找不到NewWindow2。
      

  5.   

    constructor   Create(AOwner:   TComponent);   override; Create中这样写:
    constructor   Create(AOwner:   TComponent);
    begin
      inherited TWebBrowser.Create(AOwner);
      Self.OnNewWindow2   =   NewWindow2;
    end;   
      

  6.   

      不继承了,直接拉个控件上去,生成事件后再删掉控件,
    web:=TWebBrowser.Create(Self);
    web.OnNewWindow2:=self.WebBrowser1NewWindow2;