休息一下.随便说说. Delphi的ONXXXXX事件是不是害了不少人?

CACACACACA 2009-04-18 03:18:29
加精
刚开始用DELPHI的时候, 是不是大多数人都在ONXXXXX事件中写代码? (我也是)

一直想说说这个问题. 感觉是从一开始就进入了"误区". 这种习惯感觉很不好!

有些非可视的组件,尤其像TDataSet的子孙们根本就不应该在属性编辑器中有OnXXXX事件. public出来就OK了.

或者TDataSet的子孙根本不应该能直接拖到TForm 或 TDataModule 上.

还有像TButton.Click. 应该能像C#这样 Click += XXXX.Click会更好.

以上只是本人的一点看法.

希望大家说说一些认为值得"推敲"的东西.









...全文
2424 218 打赏 收藏 转发到动态 举报
写回复
用AI写文章
218 条回复
切换为时间正序
请发表友善的回复…
发表回复
-失魂落魄- 2009-11-26
  • 打赏
  • 举报
回复
新人 学习了```
wangxinqn 2009-11-23
  • 打赏
  • 举报
回复
明明可视化编程你非要自己代码实现,不知道说你什么好?你怎么不去用汇编写程序
qiuqiuye 2009-11-16
  • 打赏
  • 举报
回复
讨论的很热烈啊
sandok 2009-10-23
  • 打赏
  • 举报
回复
受教了
RAISEEXCEPTION 2009-07-20
  • 打赏
  • 举报
回复
晕,结了的贴子怎么还在?!
kwer 2009-07-20
  • 打赏
  • 举报
回复
不知道好还是不好,做不到的地方可以变通绕过去
正如204楼所说,只有经验丰富的人才不被问题所困。
CACACACACA 2009-07-18
  • 打赏
  • 举报
回复
FORM作为一个中介者的角色,有着中介者模式的本身的短处, 知道的,处理的很多, 所以复杂性也高.

所以把相应的XXX事件归类或适当的包装 或许会更好一些.
CACACACACA 2009-07-18
  • 打赏
  • 举报
回复
贴子有段时间了.现在回过头再看看,感觉还是有不少收获.

对于 click += xxx , 我最初只是考虑在语法上,并没有从设计的角度来想.

但最终还是和设计的问题联系到一起了. 很多人都提出了自己的看法. 对于我来说获益不少.

唯一感觉失望的是没有关于数据集的XXX事件的问题.


关语言上的一些差异,是无法避免的, 最终还是靠人来怎么运用. C++没有接口, 没有代理等. 一样能写出结构清晰的代码.


newfang 2009-07-17
  • 打赏
  • 举报
回复
坐在井底看星星……
newzhq1984 2009-07-17
  • 打赏
  • 举报
回复
TNotifyEvent = procedure(Sender: TObject) of object; 定义了一个类函数
以OnClick举例:定义了一个属性 property OnClick: TNotifyEvent read FOnClick write FOnClick stored IsOnClickStored;
FOnClick:TNotifyEvent 类函数
监听消息:procedure WMLButtonUp(var Message: TWMLButtonUp); message WM_LBUTTONUP;
当响应这个消息的时候执行 procedure Click; dynamic;
当执行Click事件的时候,会改变set进去属性FOnClick 而FOnClick 是一个类函数,FOnClick := 你定义的类函数(例如button1click)
这样就执行你的写在button1click内的代码。 而sender 为什么是发送者 也是在Click中FOnClick(Self)传进去Self的 传什么都行 你可以定义自己的类函数来处理事件
一个简单的OnClick不是简单的过程 也不是不简单的过程 Delphi的优势就是快速上手 从外到内看你怎么学 看你怎么玩
飞狼兄 2009-07-14
  • 打赏
  • 举报
回复
[Quote=引用 210 楼 zjny520 的回复:]
mark
[/Quote]
!!!
tfner123 2009-07-13
  • 打赏
  • 举报
回复
Sender是在做什么用的啊??Lz!
tfner123 2009-07-13
  • 打赏
  • 举报
回复
Sender是在做什么用的啊??Lz!
zjny520 2009-07-13
  • 打赏
  • 举报
回复
mark
林石公 2009-07-13
  • 打赏
  • 举报
回复
以某种语言的特点来判断另一种语言,总是会发现许多不,嗯,咋说,不好?不尽如人意(已意?)的地方。或许,这个地方正是它的优势,只是因为不习惯而认为这是劣势呢??
milunhailili 2009-07-11
  • 打赏
  • 举报
回复
这帖要顶一下留任纪念.
Delphi是一个易学难精的东西,所以导致虽然很多人说自己会Delphi,可是真正算得上精通的,也没多少.
xinguilee 2009-05-13
  • 打赏
  • 举报
回复
添磚加瓦。我也來蓋一樓
niniu 2009-05-12
  • 打赏
  • 举报
回复
为什么不用 ActionList,delphi 提供了这么好的解决方案不去用。
CACACACACA 2009-05-11
  • 打赏
  • 举报
回复
[Quote=引用 198 楼 sz_haitao 的回复:]
Delphi组件的事件机制 相当于 有限制的面向方面
这个限制就在于插入(注入)的位置是组件设计者根据他的经验而设好的,
其他人使用时只能在这些预设的插入点里选,不能超过它们而自定一些新的插入点
[/Quote]

赞同! 就个人来说, 不得不写些helper类. (同是也说明VCL设计的非常棒! 大多数通过WINDOWPROC可以
改变/拦截TControl子类的一些行为. 而不用去派生一个子类)


to:
"这是可以扩充的,通过组件的派生类或者Class Helper来扩充。 "

对于非界面控件来说是可以. 但对于像TButton, TEdit等界面控件来说, 派生出新类反而是件麻烦的事.
IBetter 2009-05-11
  • 打赏
  • 举报
回复
有意思啊!这只是习惯问题,Delphi的口号就是:RAD;
如果你不习惯,你也有其它方式可以实现.没必要说的这么厉害吧?
害谁了呢?
加载更多回复(198)
源码直接下载地址: https://pan.quark.cn/s/a4b39357ea24 ### 信号与系统(郑君里 第三版)课后习题解析 #### 1. 信号与系统中δ函数的尺度变换特性 在《信号与系统》(郑君里 第三版)这一著作中,作者阐述了δ函数的尺度变换特性,并借助一个特定的习题进行了详尽的阐释。该习题的任务在于验证以下等式: \[ \delta(at) = \frac{1}{|a|}\delta(t) \] **论证:** 为了验证此等式,我们首先需要掌握δ函数的基本属性以及它如何响应自变量的变动。依据题目的指示,我们知道当自变量为\( t \)时,脉冲的底部长度为\( \tau \),而当自变量转变为\( at \)时,底部长度调整为\( |a|\tau \)。 我们能够借助图形化的手段来获得直观的认识。设想一个用三角形来逼近的δ函数图像,其底边长度为\( \tau \),高度为\( h \),那么三角形的面积计算为\( A = \frac{1}{2} \tau h \)。当自变量变为\( at \)时,为了维持三角形的高度恒定,底边长度必须更新为\( |a|\tau \),此时三角形的面积变为\( A = \frac{1}{2} |a|\tau h = |a|A \)。 由于δ函数的积分特性被定义为单位面积,即在任何区间\( [-\infty, +\infty] \)内的积分结果均为1,因此无论底部长度如何变化,积分值均保持恒定。这表明,当自变量转变为\( at \)时,为了确保积分值维持在1,δ函数的幅度必须相应地调整为原值的\( \frac{1}{|a|} \)倍。由此,我们得以证明该等式: \[ \int_{-\infty}^{+\infty}...

830

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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