C++ Builder 使用动作

2016-02-19 17:59 27 1 收藏

下面图老师小编要跟大家分享C++ Builder 使用动作,简单的过程中其实暗藏玄机,还是要细心学习,喜欢还请记得收藏哦!

【 tulaoshi.com - 编程语言 】


  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事件处理程序在应用程序空闲时执行。若事件处理程序需要太多时间,会影响整个应用程序的执行。
  

来源:http://www.tulaoshi.com/n/20160219/1616549.html

延伸阅读
13.对话框组件 96)问:怎样编写文件打开、保存等对话框? 答:C++Builder为我们提供了许多常用的对话框组件,这些对话框组件都放在组件模板的Dialogs选项卡中,例如Font,Color,Open和Print对话框。其中OpenDialog对话框组件最具有代表性,只要掌握了它的用法,那么你也就会使用其他的对话框组件了。 97)问:对话框组件...
53)问:能介绍一下TTreeNodes与TTreeNode? 答:在BCB中,树状视图的节点是通过TTreeNodes对象来管理的,通过这个对象可以对树状视图进行动态的增加、删除、插入、移动节点等操作。而每一个节点都是一个TTreeNode对象。 TTreeNode的主要属性和函数: Count:这个属性用来返回某个节点所拥有的子节点的数目。它不包括其子节...
  38)问:事件OnChange和OnScorll都可以描述滚动条的滚动事件,他们有什么区别吗?  答:事件OnChange和OnScorll是有区别的。只要属性Position的值发生改变,那么无论这个值是用户操作滚动条引起的还是通过程序修改的,都会产生OnChange事件。而OnScorll事件只有在用户操作滚动条时才发生。当用户操作滚动条时,首先发生OnScorll事件...
一直以来都想写一点为BCB初学者快速入门的东西,前不久写了几篇《闲谈BCB》想把自己学习BCB中如何来解决难点的方法说给大家,没想到被骂得不成样子。本想不写了,但觉得这些东西留下来能做什么呢?还是用另一种方法来重新演译我的思维吧,最近有些忙,那几篇没有写完的文章,我也会尽快写完的,至于《深入QR》,我想我一定会用另一种手法来...
4.列表类组件 31)问:当我需要使用多个选项的时候,使用单选按钮或复选框来进行选择不是很恰当,因为在窗体上放置大量的按钮既不利于布局的美观,又会消耗大量的系统资源,C++Builder有什么解决办法吗? 答:可以使用列表框(ListBox、CheckListBox)或组合框(ComboBox)这两类最常用的列表组件。 32)问:列表框有那些主要属...

经验教程

591

收藏

63
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部