如何编写一个控件,并为他添加新的事件

fantasylu 2003-09-06 12:09:20
第一个问题
我用ActiveX Form,我想再上面增加一个新的Events
如 OnSelectAll,
但我如何增加这个事件。
第二个问题
如果我想把ActiveX Form中的DBGrid里的onCellClick的事件放到Form上面
也就是,生成控件后,我可以再任何一个winForm中使用onCellClick这个事件
...全文
82 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuzhan820 2003-09-06
  • 打赏
  • 举报
回复
up
heasonjiao 2003-09-06
  • 打赏
  • 举报
回复
1、
写一个函数myselect,然后
OnSelectAll=myselect;
2、
自己写一个类
继承winForm
然后把onCellClick定义一下
klbt 2003-09-06
  • 打赏
  • 举报
回复
学习。
kingcaiyao 2003-09-06
  • 打赏
  • 举报
回复
1.
在ActiveForm中添加一个事件需要在类型库添加,这和一般在从VCL类派生的子类中写事件不同。在类型库添加一事件,然后此事件就会有一ID,然后再为该事写一函数,在函数中激活它,我记得是FireOnChange(不敢确定,你可以再看看书)
2.如果想在Form上添加一个OnCellClick事件,那么你需重写一Form类或者用对象库(后面说明。首先,先定DBGrid的OnCellClick,因为你是想在Form上有OnCellClick事件,所以应该这样定义:
typedef void __fastcall (__closure* TCellEvent)(TObject *Sender,TColumn *Column),这和TDBGrid中对OnCellClick事件的定义有区别,然后在Form类中添加该事件:
#definw WM_CELLCLICK WM_USER+200//定义一消息来触发Form中的OnCellClick事件
class TMyForm:public TForm
{
private:
TCellEvent FOnCellClick;
public:
protected:
virtual void __fastcall WndProc(TMessage &Message);
virtual void __fastcall DoCellClick();//此虚拟函数用来触发OnCellClick事件
__published:
__property TCellEvent OnCellClick={read=FOnCellClick,write=FOnCellClick};
};
.cpp File
..........................
.....................
void __fastcall TMyForm::DoCellClick(TColumn *Column)
{
if(FOnCellEvent){
FOnCellEvent(this,Column);
}
}

void __fastcall TMyForm::WndProc(TMessage &Message)
{
if(Message.Msg==WM_CELLCLICK){
DoCellClick((TColumn*)WParam);
}
TForm::WndProc(Message);
}
如此定义之后,在Form中如果你想触发OnCellClick事件,只需发送WM_CELLCLICK消息即可,不过WM_CELLCLICK消息有一个参数,那就是当前放在Form上DBGrid中的列。
还有一个办法,就是直接用对象库,不用新建一Form类,就是在一Form中加上上述代码,然后存成对象库(单击右键,"Add to Repository")

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧