VCL封装了大量Windows消息,一般来讲,已经可以满足我们的需要。
自定义事件可以这样定义:TMyControl = Class(TWinControl)
  private
    FOnCreate: TNotifyEvent;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property OnCreate: TNotifyEvent read FOnCreate write FOnCreate;
  end;
constructor Create(AOwner: TComponent);
begin
  inhert;
  if Assigned(FOnCreate) then
    FOnCreate(Self);
end;也就是先说定义事件的存储域和访问域,然后在恰当的时机调用即可。
可以通过捕获Windows消息来调用自定义事件。这一点在VCL这体现得很清楚。

解决方案 »

  1.   

    如果要在OnClick事件之前或之后固定执行一段代码,请继承Click方法。
      

  2.   

    请大家在帮我看看。
    关键是我怎么来写这个onclick事件。 yjs_lh(长风浪子) 说的是创建时的情况,有参数传进来的。
    constructor Create(AOwner: TComponent); override;但我点击的时候,没有参数的。还是不知道怎么写。我试了很多次了,都不成功。我是这么写的。type
      Tmymb = class(TWinControl)
      private
        FOnClick : TNotifyEvent;  public
        { Public declarations }
        Constructor Create(AOwner : TComponent); Override;  published
        Property OnClick : TNotifyEvent read FOnClick Write FOnClick;  end;implementationConstructor Tmymb.Create(AOwner : TComponent);
    begin
      Inherited Create(AOwner);  If Assigned(FOnClick) then
         FOnClick(Self);
    end;end.
    //然后主窗体里这么用的unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, OleCtrls, Chartfx3, StdCtrls;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
        Procedure  myClick(Sender : TObject);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationuses mymb;{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    var
       mb : Tmymb;
    begin
       mb := Tmymb.Create(Self);
       mb.Parent := Form1;
       mb.Visible := True;
       mb.Enabled := True;
       mb.Left := 50 ;
       mb.Top := 50;
       mb.OnClick := myclick;
    end;procedure TForm1.myClick(Sender : TObject);
    begin
        showmessage('ok');
    end;end.是不是哪里有问题。
      

  3.   

    这样是不是能表示清楚一点,假设我的Tmymb 的结构是这样的:
    Tmymb
    {
     Panel : Tpanel;
     edit  : Tedit;
    }窗体上生成了一系列的Tmymb 实例。
    我现在单击的时候只能知道是哪个Tmymb里的Panel被单击了,那我是不能知道edit的一些属性的。
    我现在想实现的就是要知道是哪个Tmymb 被单击了,那么我就能知道Panel 的属性,也能知道Edit的属性了。这样可以了么?
    请大家帮忙呀。
      

  4.   

    可能是我的想法有问题。但我觉得我的想法还是有点道理的呀。
    好比我有一个容器,里面放了一些标准控件,当我点击这个容器的时候是重定向了其中的一个标准控件panel的事件,那么这个sender是指向这个panel的。我的意思就是要自己定义一个TNotifyEvent,指向我自己的这个容器,当我点击的时候我就知道是我的哪个控件被点击了(因为同时可能生成了很多的控件实例)。