4.9 使用动作列表
动作列表可为那些响应用户命令的对象如菜单和按钮等集中处理对用户命令的响应(动作)。本节概述动作及动作列表,描述如何使用它们及它们如何与其客户和目标相互作用。
4.9.1 动作对象
动作指的是作用于目标对象的用户命令。在应用程序中表现为对用户输入的响应,一般一个动作对应于用户界面的一个或多个元素,如菜单命令或工具栏按钮。通过使用动作对象集中处理动作,可将应用程序的执行函数与用户界面分离。这可以让动作共享代码(例如,当菜单项和工具栏按钮对应的操作相同),同时提供了一种单一的、集中化的方法来根据应用程序的状态答应或禁用动作。
可在动作列表编辑器中创建动作。这些动作稍后将通过动作链接连接到客户控件。以下描述了动作/
动作列表机制中的各类组件:
· 动作列表(TAtionList)是包含动作(TAction)列表的组件。动作列表提供设计时处理动作的用户界面。
· 动作(TAction)就是一个操作的实现,例如复制选中的文本到目标(如编辑控件等)中。一般情况下目标是具有焦点的控件。动作由其相关客户触发以便响应用户命令(例如单击鼠标)。StdActns单元包含了TAction派生的一些类,它们实现了大多数Windows应用程序中常见的基本Edit和Window菜单命令(动作)。
· 客户通常为功能菜单或按钮(TToolButton、TSpeedButton、TMenuItem、TButton、TCheckBox、TRadioButton等等)。当客户接收到用户命令时(如单击鼠标),它初始化其关联的动作。一般客户的Click事件所关联的是动作的Execute事件。
· 动作链接(TActionLink)维护动作与客户的连接。动作链接决定了动作(若存在)当前是否可供指定的客户使用。
· 典型的动作的客户通常是一个功能菜单项或按钮(TToolButton、TSpeedButton、TMenuItem、
TButton、TCheckBox、TRadioButton等等),动作由客户中的相应命令初始化。一般来说,客户的Click对应动作Execute。动作目标通常是一个控件,例如richedit、备注或数据控件。例如DBActns单元包含了实现数据集(dataset)控件动作的类。组件设计者可以根据其所设计与使用的控件创建自己的动作,然后封装这些单元以创建模块化的应用程序。例如标准的帮助动作就忽略目标,
只由帮助系统启动。
图4-10显示了这些对象的关系。此图中,Cut1是动作,ActionList1是包含Cut1的动作列表,SpeedButton1是Cut1的客户,而Memo1则是目标。
与动作、动作列表、动作客户和动作目标不同,动作链接并非组件。客户控件包含了一个内部的动作链接(通过保护的ActionLink属性),它代表了当设置客户的Action属性时建立的连接。因为动作链接不是可放入窗体的组件,所以图中的动作链接由白色矩形表示。动作链接会将用户SpeedButton1链接到动作列表ActionList1所包含的Cutl动作。VCL提供了TAction、TActionList和TActionLink类用以处理动作列表。它们分属以下单元:
· ActnList:TAction、TActonLink、TActionList、TContainedAction、TCustomAction及TCustomActionList。
· Classes:TBasicAction、TBasicActionLink。
· Controls:TControlActionLink、TWinControlActionLink。
· ComCtrls:TToolButtonActionLink。
· Menus:TMenuActionLink。
· StdCtrls:TButtonActionLink。
StdActns和DBActns包含了一些辅助的类,可实现特定的、经常使用的标准Windows和数据集动作。这将在4.9.3节中介绍。很多VCL控件都包含了属性(例如Action)和方法(例如ExecuteAction),可让它们作为动作客户和目标使用。