在C++ Builder中定义事件

在C++ BUILDER中,事件是一种委托模型,它是对消息的封装。如果你用过VC,你就知道在VC中并不存在什么事件,而只有消息处理函数,而在C++ BUILDER中则是由事件处理函数来负责响应消息。同是,事件本身也是一指针,它是一个闭包,通常在C++ BUILDER中有两种事件:通知类型事件(即TNOTIFYEVENT,对WINDOWS消息的封装)和自定义事件。除此之外,我们也知道事件是通过一个虚拟函数来点燃的,比如说ONEXIT事件是由DOEXIT虚拟函数点燃的,下面我写一个自定义事件,很明显以下我写的代码中的事件将是对WM_MYMESSAGE消息的封装。

.h File
#include <....>
.....
#define WM_MYMESSAGE WM_USER+100
typedef void __fastcall (__closure *TMyEvent)(TObject *Sender,Param1,Param2,......);
  class TMyControl:public TWinControl
{
private:
  TMyEvent FOnMyEvent;//保存指向事件的指针.
  void __fastcall DoSomething(TMessage &Message);
public:
  BEGIN_MESSAGE_MAP
   VCL_MESSAGE_HANDLER(WM_MYMESSAGE,TMessage,DoSomething);
  END_MESSAGE_MAP(TControl);
protected:
  virtual void __fastcall DoMyEvent(Param1,........);//由这个虚拟函数来触发事件
  virtual void __fastcall WndProc(TMessage &Message);
__published:
  .........
  __property TMyEvent OnMyEvent={read=FOnMyEvent,write=FOnMyEvent};
  .....
};
  .cpp File
  //Omiting constructor and deconstructor
//Virtual function,which will spring the event:TMyEvent
void __fastcall TMyControl::DoMyEvent(Param1,.....)
{
  if(FOnMyEvent)
  {
    FOnMyEvent(this,Param1,Param2,.....Paramn);
  }
}
//Message Handler
void __fastcall TMyControl::DoSomething
{
 //TODO:Add your code here....
}
void __fastcall TMyControl::WndProc(TMessage &Message)
{
  if(Message.Msg==WM_MYMESSAGE)
  {
     DoMyEvent(Message.WParam,.....);
  }
  ......
}

按照上而的代码,我们就会在OBJECT INSPECTOR中看到一个ONMYEVENT事件,和其它事件一样,用户只要将代码写到这里来就可以响应消息并根据应用的需求来给出这个事件触发时的行为,上面代码是随手写的,请各位自已加以调整。

时间: 2024-11-26 21:04:59

在C++ Builder中定义事件的相关文章

textboxdeleave事件-如何获取TEXTbox的leave事件方法中定义的摸个bool类型变量的值

问题描述 如何获取TEXTbox的leave事件方法中定义的摸个bool类型变量的值 private bool txtShapeCode_Leave(object sender, EventArgs e) { bool CheckShapeCode = true;//单输入的条码不存在时赋值为false string sql = "select + from goodInfo where gID = '"+this.txtGoodsNumber.Text+"'";

jQuery中click事件的定义和用法_jquery

本文实例讲述了jQuery中click事件的定义和用法.分享给大家供大家参考.具体分析如下: 当鼠标指针在匹配元素上方,然后按下并松开鼠标左键或者调用click()方法都会触发click事件. click()方法也可以绑定事件处理方法. 语法结构一: 触发click事件. 复制代码 代码如下: $(selector).click() 语法结构二: 为click事件绑定事件处理方法. 复制代码 代码如下: $(selector).click(data,function) 参数列表: 参数 描述 d

javascript-js定义的类中定义某控件挂事件,事件内部如何引用到定义的类

问题描述 js定义的类中定义某控件挂事件,事件内部如何引用到定义的类 function AA(obj){ this.a1="12"; this.a2="13"; obj.onclick=function(){ alert(this);//这里的this,其实是obj吧,而不是由AA定义出的对象 //要怎么引用到AA定义出的对象,如cc1()里的this } function cc1(){ alert(this);//这里的this是AA定义出的对象吧, } } 解决

在Datagridview中定义rowheadermouseclick事件

问题描述 如何在Datagridview中定义rowheadermouseclick事件要具体做法和具体代码....跪求 解决方案 解决方案二:不是可以直接在属性里面选择该事件么?你要实现什么功能解决方案三:选择后编辑没有实现鼠标点击Datagridview中的内容可以在textbox中显示出来解决方案四:privatevoiddataGridView3_RowHeaderMouseClick(objectsender,DataGridViewCellMouseEventArgse){textB

C++ Builder中如何保持控件的位置及大小

C++ Builder/Delphi是Inprise(原Borland)公司广受欢迎的可视化C++/Pascal开发工具,利用它可极大地加快应用程序的开发速度.但是,也正因为其是可视化编程工具,将控件拖放到Form后,控件的位置就固定死了.随着Form的大小或屏幕分辨率的改变,控件和Form本身的位置往往变得非常混乱.本文将介绍一些正确定位控件及Form的方法. 利用OnResize事件改变控件位置及大小 C++ Builder/Delphi中的Form控件有一个OnResize事件,Form的

C++ Builder中保持控件的位置及大小

C++ Builder/Delphi是Inprise(原Borland)公司广受欢迎的可视化C++/Pascal开发工具,利用它可极大地加快应用程序的开发速度.但是,也正因为其是可视化编程工具,将控件拖放到Form后,控件的位置就固定死了.随着Form的大小或屏幕分辨率的改变,控件和Form本身的位置往往变得非常混乱.本文将介绍一些正确定位控件及Form的方法. 利用OnResize事件改变控件位置及大小 C++ Builder/Delphi中的Form控件有一个OnResize事件,Form的

C++ Builder中消息处理过程及应用

C++ Builder作为一种RAD方式的程序开发工具,其全新的可视化编程环境.面向组件的开发模式无疑会大大地提高编程效率.它对繁杂的Windows 消息及API作了较全面的封装,编程者在大多数情况下不需理会Windows消息的细节,只要将心思放在组件的事件处理函数上即可.然而,毕竟Windows操作系统是一个以消息驱动的系统,运行其上的应用程序,自然无法脱离系统之外,因此掌握并运用消息处理,对一些问题的处理会有事半功倍的效果. 尽管C++ Builder的VCL控件封装了大多数常用的消息,C+

《iOS 6核心开发手册(第4版)》——2.3节Interface Builder中的按钮

2.3 Interface Builder中的按钮iOS 6核心开发手册(第4版)按钮默认是作为Rounded Rect Button(圆角矩形按钮)对象出现在Interface Builder库中的(参见图2-1中顶部一排的左起第二个按钮),要使用它们,可把它们拖到界面中.然后可以通过属性检查器(选择View | Utility | Show Attributes Inspector命令,快捷键是Command+Option+4),把它们更改为另一种按钮类型.按钮类型弹出式菜单出现在检查器顶部

《iOS 9 开发指南》——第6章,第6.4节 Interface Builder中的故事板——Storyboarding

6.4 Interface Builder中的故事板--StoryboardingiOS 9 开发指南图片 23 知识点讲解:光盘:视频知识点第6章Interface Builder中的故事板--Storyboarding.mp4Storyboarding(故事板)是从iOS 5开始新加入的Interface Builder(IB)的功能.其主要功能是在一个窗口中显示整个APP(应用程序)用到的所有或者部分的页面,并且可以定义各页面之间的跳转关系,大大增加了IB便利性. 6.4.1 推出的背景I