请大家讲下TNotifyEvent的用法,要有例子,另外帮我看下我下面的代码错在哪里
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
     procedure dosomething(Sender: TObject);
  end;
  tmyclass=class
  public
     OnChange:TNotifyEvent;
  end;
var
  Form1: TForm1;
   my:tmyclass;
implementation
{$R *.dfm}
{ TForm1 }procedure TForm1.dosomething(Sender: TObject);
begin
  edit1.Text:='xiexie';
end;procedure TForm1.Button1Click(Sender: TObject);
begin
  my.OnChange:=self.dosomething;
end;
end.

解决方案 »

  1.   


    这种事件,一般是属性,放到  published   里面。过程指针来处理的。
      

  2.   

    正如一楼所说,你没有创建tmyclass的实例对象。
    my被初始化为nil,当然你不能给它赋值了。
    你应该在使用它之前先创建它。
    my:= TMyClass.Create;
    my.OnChange:= Button1Click;  {或 dosomething}TButton的OnClick就是TNotifyEvent事件类型,你可以在代码中给TButton的OnClick事件赋值,如,
    Button1.OnClick:= Button1Click;
    只要赋值的例程原型符合 Procedure(Sender: TObject)的形式就行了。明白了么?
      

  3.   

    要修正一下,赋值的例程原型要符合 Procedure(Sender: TObject) of object 的形式。那就是说它必须在类中声明,因为他说明TNotifyEvent是指向类方法的过程类型。
      

  4.   

    一楼的已经说的很明确了,你这TForm1肯定是自动在project里创建的对象,而var my:tmyclass; 只是声明而已,却没有创建.此时为nil,也就不能引用对象方法