在写一个组件时,如果父类中有一个OnChange事件,在其它程序使用该组件时,如何达到以下效果:
1、在OnChange事件中,先执行自己在组件中写入的代码,再执行父类的代码;
2、在OnChange事件中,先执行父类的代码,再执行自己在组件中写入的代码;
为实现以上目的,在组件中应该如何写?

解决方案 »

  1.   

    是不是这样?
    procedure DoChange(Sender: TObject);procedure TMyComponent.DoChange(Sender: TObject);
    begin
      // 自己的代码
      inherited OnChange(Sender);
      // 自己的代码
    end;
      

  2.   

    是不是这样?
    procedure DoChange(Sender: TObject);
    constructor Create(AOwner: TComponent);constructor TMyComponent.Create(AOwner: TComponent);
    begin
      OnChange:= DoChange;
    end;procedure TMyComponent.DoChange(Sender: TObject);
    begin
      // 自己的代码
      inherited OnChange(Sender);
      // 自己的代码
    end;
      

  3.   

    以下是我做的一个组件你看看他的Click事件,就知道了
    unit Button1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TButton1 = class(TButton)
      private
        FEdit:TEdit;
        { Private declarations }
      protected
        { Protected declarations }
      public
        constructor Create(AOwner:TComponent);Override;
        destructor Destroy; override;
        procedure Click; override;
        { Public declarations }
      published
        property Edit: TEdit read FEdit write FEdit;
        { Published declarations }
      end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('Standard', [TButton1]);
    end;constructor TButton1.Create(AOwner:TComponent);
    begin
       inherited Create(AOwner);
    end;destructor TButton1.Destroy;
    begin
       inherited Destroy;
    end;procedure TButton1.Click;
    begin
       FEdit.Text:='test111';
       inherited Click;
    end;end.
      

  4.   

    是不是所有继承的事件,其它继承的过程名称符合这两个规则?
    1、去掉事件名称前的On;
    2、去掉事件参数中的Sender。
    如果没有这样的规则,怎么知道继承的事件过程的名称?
      

  5.   

    我试过了TTreeView.OnChange,TEdit.OnChange及TEdit.OnKeyDown,都符合以上规则。没找到反证之前就默认它是对的了,呵呵。
    谢谢两位的帮助!