您的位置:首页 > 其它

TNotifyEvent自定义消息

2015-03-19 10:48 155 查看
两种不同的事件调用方式:
class myTest :public TObject
{
	private:
	  TNotifyEvent Ftime;//事件指针1
	protected:
	  void __declspec(dynamic) DoTime();//关联事件
        public:
          myTest(){}
          void __fastcall ( __closure * ptest)(TObject * Sender);//事件指针2
	__published:
          __property TNotifyEvent OnTime={read=Ftime,write=Ftime};//声明成属性器,方便管理调用
};
void  myTest::DoTime()//通过函数过渡一下
{
    if(Ftime)
    {
	Ftime(this);
    }
}
调用方法如下:

myTest * p;
p = new myTest;
p->OnTime = Button4Click;//事件绑定动作(调用方式之一)
p->ptest  = Form1->Button4Click;//函数绑定指针(调用方式之二)

void __fastcall TForm1::Button4Click(TObject *Sender)//事件的真正动作
{
       ShowMessage("ok");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)//通过另外一个事件来调用我们定义的事件
{
    p->OnTime(Sender);//定义的事件
    p->ptest(Sender); //定义的指针2,相同的效果
}

TNotifyEvent的本质是定义一个函数指针,相当于用一个类的成员函数指针调用另一个类的成员函数。关键是使用__closure关键字,否则不能绑定。
编译通不过。TNotifyEvent的定义如下:
typedef void __fastcall (__closure *TNotifyEvent)(System::TObject* Sender);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: