- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Action高级编程
Action高级编程
Action高级开发
Action开发篇
在讨论Action的开发前,我想先讨论一下为什么要使用TActionList及TAction。从Delphi 4开始Borland提供了TActionList控件,ActionList提供了一种全新的设计用户界面交互模式的方法。传统的事件模式无法解决命令状态更新的问题,因为任何情况下命令都是有效的。Delphi 4通过使用ActionList及Action提供了新的方法来处理命令的实现,即命令的有效性问题。ActionList是一个非可视的控件里面包含了一组TAction对象。两者的关系有点像菜单项同菜单的关系。
图3.18
一个TAction对象提供一个命令,比如删除一个目标的选项(例如删除列表框的一个列表项),当Action控制的控件相应某些用户的输入会激发相应的Action命令,通常是鼠标键盘点击等动作。Action通常用来控制按钮和菜单项这类控件,通过设定这类控件的Action属性可以把两者关联起来。
图3.18显示了一个关联Action和控件的例子,EditCut1 Action被指定给SpeedButton1的Action属性。当关联完成后,Speedbutton的属性会根据对应的EditCut1的属性作出相应的变化,比如按钮的Caption会自动变成“Cut.”,当用户点击Cut按钮时,由EditCut1 Action实现的相应命令就会被调用。当Memo1中有文本被选中的时候,Cut按钮才是有效的,这是因为Delphi内置的EditCut Action实现了Action的OnUpdate事件,在那里对相关联的Memo1进行了判断,只有当Memo1中有文本被选择了,Action对应剪切操作才有效。
参看前面在OTA部分实现的Winamp专家中,大量使用TAction对系统进行了管理,可以发现只需要在Action的OnUpdate事件中写很少的代码甚至不写代码(对系统内置的Action而言),就可以对一些基本界面操作的有效性进行判断,同时使用ActionList容器类使得命令更容易维护。另外,除了以上功能,还可以利用Action的OnHint事件对关联控件的飞跃提示的显示进行控制。
虽然Action的使用是非常方便的,但如果想得到最佳的性能和表现,我们还是需要更深入地了解Action的工作原理。比如注意到TActionList和TAction都定义了OnExecute和OnUpdate事件。两者有什么区别呢?在Borland的文档中并没有很清楚的说明,所以还是需要研究一下Action工作的内部机制。
当在程序中使用了ActionList和Action后,Delphi 中的Application对象会在系统空闲的时候产生OnUpdate事件。对于每一个ActionList,TActionList.OnUpdate事件会最先生成,然后系统传递给事件两个参数。Action参数代表正在更新状态的Action,Handled参数用来控制相应的Action的OnUpdate事件是否被调用。如果不想相应的Action的Update事件被调用,需要设定Handled参数为真。
TActionList.OnUpdate事件对每一个列表中的Action相关联的每一个控件都要产生一遍。换句话,假设ActionList1包含Action1和Action2。现在假定Button1和SpeedButton1的 Action 属性设定为Action1,同时SpeedButton2的Action属性设定为Action2。在这种情况下,每个循环下来,ActionList1.OnUpdate事件将会产生1+2=3次。
什么时候用Action.OnUpdate事件,什么时候用ActionList.OnUpdate事件没有什么绝对的准则。但一般来说,TActionList.OnUpdate事件更容易控制,因为把全部的状态控制代码写在一个地方更清楚,而且写起来更简洁,当然这只是我的看法。
另外,大家可能会注意到可以在一个窗体上放多个ActionList。比如Delphi带的RichEdit的演示程序中就使用了两个ActionList,为什么使用两个ActionList呢?其实这是出于运行效率的考虑,因为按照ActionList更新状态的方式,如果你有一组Action并不需要进行有效性校验。这时就应该把它们放到单独的ActionLis中去,这样就不需要生成OnUpdate事件了。这是因为不管Action是否生成了OnUpdate事件,只要ActionList中有一个Action定义了
您可能关注的文档
最近下载
- 新人音版二年级音乐下册优秀教学设计《共产儿童团歌》教案.doc VIP
- 肝硬化诊治指南2025年.docx
- 初中数学新人教版八年级上册13综合与实践 确定匀质薄板的重心位置教学课件2025秋.pptx VIP
- 08【人教版英语字帖】八年级上册单词表衡水体字帖(新目标含音标).pdf VIP
- 2023年10月自考06089劳动关系与劳动法押题及答案.pdf VIP
- 新教科版小学科学实验目录五年级上册.docx VIP
- 合理用药用药班会PPT课件.pptx VIP
- 结构设计弯矩二次分配法计算(表格自带公式).xls VIP
- 规范言行从我做起主题班会.pptx
- PanelView Plus 7 Performance 终端用户手册.pdf VIP
文档评论(0)