OnDocumentComplete不会触发组件

时间:2013-07-03 09:16:25

标签: delphi

如果我在表单WebBrowser1: TMyWebBrowser;上使用以下组件,并且如果我在表单上添加OnDocumentComplete = WebBrowser1DocumentComplete,即使TMyWebBrowser.DocumentComplete程序为WebBrowser1DocumentCompleteTMyWebBrowser.DocumentComplete也不会触发空。

我可以触发OnDocumentComplete = nil的唯一方法是type TMyWebBrowser = class(TWebBrowser) private { Private declarations } protected { Protected declarations } procedure DocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant); public { Public declarations } Completed: Boolean; constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure NavigateUntilCompleted(URL: String); published { Published declarations } End; procedure Register; implementation procedure Register; begin RegisterComponents('Sam', [TMyWebBrowser]); end; constructor TMyWebBrowser.Create(AOwner: TComponent); begin inherited; onDocumentComplete := DocumentComplete; end; procedure TMyWebBrowser.DocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant); begin // check that the event is raised for the top-level browser (not frames or iframes) if pDisp = TMyWebBrowser(ASender).ControlInterface then begin Completed := TRUE; end; inherited; end;

任何人都可以解释为什么? 谢谢 萨姆

{{1}}

1 个答案:

答案 0 :(得分:0)

您不能为一个事件分配多个方法,但是您尝试分配2并覆盖第一个方法。

班级定义

constructor TMyWebBrowser.Create(AOwner: TComponent);
begin
  inherited;
  // set OnDocumentComplete event
  onDocumentComplete := DocumentComplete;
end;

并在您的代码中

var
  LMyWebBrowser : TMyWebBrowser;
begin
  LMyWebBrowser := TMyWebBrowser.Create( nil );
  // now overwriting the value set by constructor 
  LMyWebBrowser.onDocumentComplete := WebBrowser1Complete;
end;

您可以自行检查

var
  LMyWebBrowser : TMyWebBrowser;
begin
  LMyWebBrowser := TMyWebBrowser.Create( nil );
  // check
  if Assigned( LMyWebBrowser.OnDocumentComplete ) then
    ShowMessage( 'OnDocumentComplete is already set!' );
end;