2

form で次のコンポーネントを使用し、 formWebBrowser1: TMyWebBrowser;を配置すると、プロシージャが空であっても が起動OnDocumentComplete = WebBrowser1DocumentCompleteTMyWebBrowser.DocumentCompleteません。WebBrowser1DocumentComplete

私が発砲できる唯一の方法TMyWebBrowser.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;
4

1 に答える 1

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;
于 2013-07-03T11:21:06.990 に答える