再问:自定义组件的事件触发?

有哥 2002-08-14 10:47:25
我搜了一下以前的帖子,照做了还是不行。
我从TWinControl派生的组件,想在一定条件下触发一个自定义的事件OnChanged。于是我在private 声明部分声明
TNotifyEvent *FOnChanged;
然后在public 部分声明:
__property TNotifyEvent OnChanged={read=FOnChanged,write=FOnChanged};
组件初始化时赋初值:
FOnChanged=0;
需要触发时:
if (FOnChanged)
FOnChanged(this);
结果出错,为何??怎解??
...全文
69 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
有哥 2002-08-18
  • 打赏
  • 举报
回复
有人再说一点吗?
有哥 2002-08-16
  • 打赏
  • 举报
回复
我从TWinControl派生了名为HGrid的类,其中有一个TStringGrid,程序通过AnsiString HTML 属性传递给它一个HTML标识,即在TStringGrid中显示出所有的HTML参数。根据不同的参数类型,使用了不同的编辑控件来编辑不同的HTML参数值,编辑后修改HTML属性,此时需要触发一个事件(名称叫什么无所谓),以通知主程序HTML值已经修改。需要在多个地方放置触发的语句。就这样。
greendesert 2002-08-15
  • 打赏
  • 举报
回复
kingcaiyao(AKing) ( ) 说的很清楚了
你再瞅瞅吧,这个也算是BCB的核心内容了
书生 2002-08-15
  • 打赏
  • 举报
回复
@_@Mark
kingcaiyao 2002-08-15
  • 打赏
  • 举报
回复
glyc:
你的理解不对,VCL的事件和WINDOWS消息当然是有联系的,不论是可视化组件还非可视化组件,你不要误人子弟。你没有仔细看TWinControl是一父类,它根本就没有输入焦点,何来的OnChange事件?
glyc 2002-08-15
  • 打赏
  • 举报
回复
VCL的事件和Windows的消息没有必然联系。

应这样定义:
private:
TNotifyEvent FOnChanged;
__publish:
__property TNotifyEvent OnChanged={read=FOnChanged,write=FOnChanged};

你只要调用FOnChanged(this),并且FOnChanged不是NULL(否则出错),OnChanged事件就会触发。
问题是你用这个事件来干什么?

kingcaiyao 2002-08-15
  • 打赏
  • 举报
回复
这个问题并不复杂,上面我所说的是这是VCL的事件机制。
仅仅是改事件的名称,这无济于事,关键是事件的触发机制,直接从TWinControl继承是没有输入焦点的,又怎么会有OnChange消息发送呢?关键是你要实现什么,你的要求是什么?
有哥 2002-08-15
  • 打赏
  • 举报
回复
我不一定要是OnChanged,OnMyPop之类的自定义名称也行,那要怎么办?没那么复杂吧。
gk0205 2002-08-15
  • 打赏
  • 举报
回复
@_@....
kingcaiyao 2002-08-14
  • 打赏
  • 举报
回复
我找了一下TWinControl中无OnChange事件,这就需要看你具体用OnChange事件做什么.
sjd163 2002-08-14
  • 打赏
  • 举报
回复
关注
kingcaiyao 2002-08-14
  • 打赏
  • 举报
回复
OnChange事件不是自定义事件,它是通知类型事件(即是说它是对WINDOW消息的封装),如果你要重载OnChange事件,你应该重载点燃这个事件的虚拟函数,如DoChange.
在你的代码中有几处明显的有错误,一并跟你指出:
1.TNotifyEvent本身就是一指针,你无需用TNotifyEvent*,因为TNoityEvent的定义是:
typedef void __fastcall (__closure *TNotifyEvent)(TObject *Sender);
2.如果你想在Object Inspector中见到你定义的事件,你应该将它在__published域中发表。
3.通常自定义事件是虚拟函数触发的。因此,你的if(FOnChanged)这样的语句应该放在虚拟函数中。
需要反复强调的是OnChange事件不是自定义事件,你不可以这样重载,要重载必须重载点燃它的虚拟函数。

13,825

社区成员

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

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