资源描述:
《actionlist组件在菜单编制中的应用》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、件在菜单编制中的应用Delphi的VCL提供有MainNenu、PopupMenu、Button、BitBtn、SpeedButton等组件来帮助我们设计菜单功能。这些组件的使用方式非常简单,因而使得菜单的设计也变的很简单。MainMenu组件是主要的下拉式菜单,大部份的窗口程序菜单都是使用这个对象来完成的。它的优点是设计方式简单,符合标准,不占画面空间。缺点是必须一层一层地进入子功能选项,无法一次看到所有功能选项,而且在尚无选择任何功能之前,窗口内空无-•物,不甚美观。Delphi还提供了PopupMerw组件来制作鼠标右键菜单,使用鼠标指任一对象,
2、再按下鼠标右键时,会看到一个下拉式的功能菜单,可以直接选择这些功能,而不用进入一层又一层的主功能菜单,使用非常便。利用Delphi提供的Button、BitBtn、SpeedButton三个按钮组件,可以制作按钮菜单《它的优点是可以加入漂亮的图标,一次可以看到许多选项。缺点是占程序及画而空间,而且不符合窗口应用程序标准规范。至于使川何种方式來构造自己的功能菜单,必须根据自己的需要而定,如果你想编写一个符合窗口标准的应用程序,下拉式菜单是唯一的选择,如果你编写的应用程序功能选项并不多,可以考虑采用按钮菜单的设计方式。那么是不是在编制菜单程序时,只能选择下
3、拉式菜单或按钮菜单中的一种呢?答案当然不是。你完全可以将下拉式菜单、按钮菜单、鼠标右键菜单联合使用,制作成具有Windows风格的窗口菜单。但是当你采用上述三种菜单方式來制作具有Windows风格的窗口菜单时,常常会发生一些W扰,你必须在Menuitem的OnClick事件过程内编写程序代码,如果SpeedButton或PopupMenu执行的是同样的功能,那么为了不让程序重S,必须把SpeedButton或PopupMenu的OnClick事件指向Menultem的OnClick事件,如此一来,当应用程序的规模越来越大吋,你将越不容易维护程序,因为程
4、序与功能项目间的关系会变得很复杂,如果MemiTtem巾的名称起的不规范,就更不容易维护。用Delphi提供的ActionList组件,就可以解决上述扰人的问题,程序的写法是把所有的功能项目都声明在ActionList组件内,然后再把控制组件的Action属性或激活事件(像OnClick、OnDblClick等)指向ActionList组件内的Actionltem,这时就可以在ActionList组件内统一管理所有的程序了。下而结合一个具体的应用程序说明它的制作方法:首先,在组件模板Standard页[fif上找到ActionList组件,把它拉到Fo
5、rm上,然后在它上面川鼠标7又出打开ActionList编辑器,用NewAction按钮或在左半边Categories按鼠标右键來建立一个Actionltem,然后根据不同的功能定义给与ActionTtem具有特定蟇义的名称,最后再把程序代码写在ActionTtem的OnRxecute事件过程内。接下来,根据应用程序的功能项H,—个一个地把Actionltem定义出来,然后编写实际的程序代码,这时候整个ActionListXl•算完成,像上面的应用程序Menu上有•一个“山库单”功能选项,SpeedButton也有“出库单”功能按钮,这两件组件都有一个
6、名为Action的属性,把此属性指向TActionList的Ckd项目,将会执行同一功能。这样一來,程序代码就很容易维护,而且程序的结构也变得更清楚。程序代码如下:(部分)unitmainuni;interfaceusesWindows,Messages,SysUtiIs,Classes,Graphics,Controls,Forms,Dialogs,ExtCtrls,Buttons,Menus,StdCtrls,Grids,jpeg,ActnList,TmgList;typeTmainfrm=class(TForm)MainMenul:TMainMe
7、nu;N1:TMenuItem;N2:TMenuTtem;N3:TMenuItem;N4:TMcnuItcm;N5:TMenuItem;N6:TMenuItem;Panel1:TPanel;SpeedButtonl:TSpeedButton;SpeedButton2:TSpeedButton;SpeedButton3:TSpeedButton;SpeedButton4:TSpeedButton;SpeedButton5:TSpeedRutton;SpeedButton6:TSpeedButton;ActionListl:TActionList;gysd
8、a:TAction;rkd:TAction;ckd:TAction;djjz:TAction;