分享
 
 
 

C++Builder使用动作

王朝c/c++·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

4.9.2 使用动作

可以从组件面板的Standard页将动作列表加入窗体或数据模块。双击动作列表可显示ActionList编辑器,在其中可增加、删除或重排动作。每个动作的属性(Name除外)值都将应用于其客户控件。可在对象观察器中设置每个动作的属性。Name定义动作,而其他属性与事件(Caption、Checked、Enabled、HelpContext、Hint、ImageIndex、ShortCut、Visible和Execute)则对应于客户控件的属性。它们通常(不一定全是)和客户属性同名。例如动作的Checked属性对应于TToolButton的Down属性。

1.集中处理程序代码

所有控件都包括一个公共的属性Action,它使控件可作为动作对象的客户使用。一般用做动作对象的客户的控件,如TToolButton、TSpeedButton、TMenuItem和TButton会发布Action属性以便可在设计时建立客户/动作的关系。当为动作列表的某个动作设置Action属性时,动作的对应属性值将复制到客户控件中。动作对象的所有公共属性与事件(除Name和Tag之外)都动态地链接到客户控件。例如,当需要禁用按钮和菜单项时,可将相应的程序代码集中在动作对象内,而不必去为按钮和菜单项重复编制程序代码;这样,当动作被禁用时,所有对应的按钮和菜单项都会被禁用。

注重 假如使用工具按钮或菜单项,必须用手工方式将对应的工具栏或菜单组件的Images属性设置为动作列表的Images属性。即使ImageIndex属性已动态地链接到客户,也必须如此。

2.链接属性

当设置了客户的Action属性后,建立了客户控件和动作之间的链接。这种链接由客户的动作链接治理,它可将客户的属性与动作的属性关联起来。当动作改变时,动作链接更新客户属性。

可有选择地重载客户的某一属性与相关动作对应属性的链接。在设计时设置客户的某值,只影响该属性的链接,客户的属性改变,而相关动作对应的属性值不变,客户与相关动作其他的链接也不受影响。应用程序并不需要显式处理动作链接来使用动作。动作链接自动治理客户与动作相应属性的链接。

每个独立的客户控件都使用不同的动作链接类,每个类中都有一组可用于与动作链接的属性。

注重可通过查阅VCL参考的动作链接类部分来决定要与动作链接的客户控件的属性。

3.执行动作

当客户组件或控件被按下之后,其相关动作的OnExecute事件将会发生。下列程序代码介绍的

OnExecute事件处理程序,可在动作执行时显示或隐藏工具栏:

当用户点击客户控件时,客户会为其相关动作生成OnExecute事件。若该事件存在事件处理程序,用户点击动作将直接被处理。除非需要与其他事件处理程序共享代码或编写定制的、可重用的动作,否则只需加入动作到动作列表,设置其属性,编写OnExecute事件处理程序代码,并通过设置Action属性将其与所有相关控件链接。

若要编写一个事件处理程序包含对多个动作的响应,可编写一个响应动作列表甚或应用程序层的事件处理程序。C++Builder遵循一个分发流程以搜索响应用户动作的方法。

考虑一个例子,组件显示在图4-11中。客户Speedbutton1链接Cut1动作(Speedbutton1的Action属性为Cut1)。图4-11显示当用户单击Speedbutton1后的发送(dispatching)流程。

单击Speedbutton1将启动下列的执行流程:

1) 因为Speedbutton1的Action属性为Cut1,Cut1接收到OnExecute事件,若Cut1存在OnExecute事件处理程序,进程在此终止。若Cut1不存在OnExecute事件处理程序,则进程继续。

2) 因为Cut1不存在OnExecute事件处理程序,流程顺延由其动作列表(ActionList1)处理事件。ActionList1接收到OnExecute事件(动作列表的OnExecute事件,在其中任一动作没有OnExecute事件处理程序用以处理事件时发生),动作列表的OnExecute事件处理程序有一参数Handled,其缺省返回值为false,若处理程序存在并处理了事件,返回true,且进程在此终止。

例如:

若动作列表的OnExecute事件未被处理,则进程继续。

3)全局对象application接收到OnActionExecute事件(该事件在应用程序中所有的动作列表都无法处理事件时发生),与动作列表的OnExecute事件处理程序相同,OnActionExecute事件处理程序也有一参数Handled,其缺省返回值为false。若处理程序存在并处理了事件,返回true,且进程在此终止。例如:

4)对于可用事件处理程序响应的动作,进程到此终止。但对于预定义的动作类,如Cut1,则进程并未结束。你可使用内置的动作类或自行生成知道如何确定目标的动作类(如编辑控件)。当所有层次都未发现事件处理程序时,应用程序将试图搜索动作执行的目标,当应用程序找到哪个动作知道如何定位的目标时,将激活动作。参见4.9.4节的“动作如何搜索其目标”可获得关于应用程序如何找到那些预定义的动作类的目标的更多内容。

4.更新动作

当应用程序空闲时,所有与当前正显示的控件或菜单链接的动作的OnUpdate事件发生。这给应用程序代码集中处理提供了可用与禁用或复选与否等等的时机。例如,下列代码举例说明当菜单栏可见时OnUpdate处理动作的“复选”的事件处理程序。

更新动作的分发流程与本节中讨论的“执行动作”中的分发流程相同。

警告 不要把费时的代码加到OnUpdate事件处理程序中。OnUpdate事件处理程序在应用程序空闲时执行。若事件处理程序需要太多时间,会影响整个应用程序的执行。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有