摘要载入中…    请稍等…












内容载入中…    请稍等…

如长时间看不到内容,请关闭浏览器,重新打开此页!

芯友首页 应用软件 编程开发 网络硬件 资源下载 动漫音乐 精美图库 芯友论坛 视频教程 电脑技术QQ群:72845454
 ★★photoshop学友-史上最强播放器★★
 位置:编程开发>Deiphi>Deiphi控件编程
◎→ 本类最新
在Delphi中使用自定义光标
在Delphi中定义自己图标的消息框
在Delphi应用程序中拖动控件
状态条插入可视控件
增强Delphi的TStatusBar控件
在TNotebook组件的所有页面上显示
在TButton中显示多行Caption
◎→相关资源
C语言入门视频教程
C#编程WinForm入门视频
Asp.net入门视频教程下载
VC++编程视频教程下载
VB窗体文章
HTML入门教程
Deiphi实例教程
Deiphi窗体文章
Deiphi数据库编程
Deiphi网络编程
Deiphi图形图象文章
Deiphi系统文件
◎→ 热门资源
Delphi制作带图标的弹出式选单
Delphi趣味编程实例三则
Delphi如何实现文件关联
Delphi实现网页表单数据的自动提
DELPHI实现文本文件显示和声音同
Delphi使程序具有记忆功能
Delphi使用技巧ABC

Delphi中ActionList组件在菜单编制中的应用


日期:2008-10-20 22:04:22    来源:
   
 ·IIS配置与组件 ·Flash渐变风格的导航菜单
 ·用Delphi编制趣味动画鼠标
Delphi中ActionList组件在菜单编制中的应用


路艳明 刘建民

Delphi的VCL提供有MainNenu、PopupMenu、Button、BitBtn、SpeedButton等组件来帮助我们设计菜单功能。这些组件的使用方式非常简单,因而使得菜单的设计也变的很简单。
MainMenu组件是主要的下拉式菜单,大部份的窗口程序菜单都是使用这个对象来完成的。它的优点是设计方式简单,符合标准,不占画面空间。缺点是必须一层一层地进入子功能选项,无法一次看到所有功能选项,而且在尚无选择任何功能之前,窗口内空无一物,不甚美观。
Delphi还提供了PopupMenu组件来制作鼠标右键菜单,使用鼠标指向任一对象,再按下鼠标右键时,会看到一个下拉式的功能菜单,可以直接选择这些功能,而不用进入一层又一层的主功能菜单,使用非常方便。
利用Delphi提供的Button、BitBtn、SpeedButton三个按钮组件,可以制作按钮菜单。它的优点是可以加入漂亮的图标,一次可以看到许多选项。缺点是占程序及画面空间,而且不符合窗口应用程序标准规范。
至于使用何种方式来构造自己的功能菜单,必须根据自己的需要而定,如果你想编写一个符合窗口标准的应用程序,下拉式菜单是唯一的选择,如果你编写的应用程序功能选项并不多,可以考虑采用按钮菜单的设计方式。那么是不是在编制菜单程序时,只能选择下拉式菜单或按钮菜单中的一种呢?答案当然不是。你完全可以将下拉式菜单、按钮菜单、鼠标右键菜单联合使用,制作成具有Windows风格的窗口菜单。
但是当你采用上述三种菜单方式来制作具有Windows风格的窗口菜单时,常常会发生一些困扰,你必须在MenuItem的OnClick事件过程内编写程序代码,如果SpeedButton或PopupMenu执行的是同样的功能,那么为了不让程序重复,必须把SpeedButton或PopupMenu的OnClick事件指向MenuItem的OnClick事件,如此一来,当应用程序的规模越来越大时,你将越不容易维护程序,因为程序与功能项目间的关系会变得很复杂,如果MenuItem中的名称起的不规范,就更不容易维护。用Delphi提供的ActionList组件,就可以解决上述扰人的问题,程序的写法是把所有的功能项目都声明在ActionList组件内,然后再把控制组件的Action属性或激活事件(像OnClick、OnDblClick等)指向ActionList组件内的ActionItem,这时就可以在ActionList组件内统一管理所有的程序了。下面结合一个具体的应用程序说明它的制作方法:
首先,在组件模板Standard页面上找到ActionList组件,把它拉到Form上,然后在它上面用鼠标双击打开ActionList编辑器,用NewAction按钮或在左半边Categories按鼠标右键来建立一个ActionItem,然后根据不同的功能定义给与ActionItem具有特定意义的名称,最后再把程序代码写在ActionItem的OnExecute事件过程内。

接下来,根据应用程序的功能项目,一个一个地把ActionItem定义出来,然后编写实际的程序代码,这时候整个ActionList才算完成,像上面的应用程序Menu上有一个“出库单”功能选项,SpeedButton也有“出库单”功能按钮,这两件组件都有一个名为Action的属性,把此属性指向TActionList的Ckd项目,将会执行同一功能。这样一来,程序代码就很容易维护,而且程序的结构也变得更清楚。


程序代码如下:(部分)
unit mainuni;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, Buttons, Menus, StdCtrls, Grids, jpeg, ActnList, ImgList;

type
Tmainfrm = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
Panel1: TPanel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton5: TSpeedButton;
SpeedButton6: TSpeedButton;
ActionList1: TActionList;
gysda: TAction;
rkd: TAction;
ckd: TAction;
djjz: TAction;
ymjz: TAction;
calc:TAction
PopupMenu1: TPopupMenu;
Image1: TImage;
ImageList1: TImageList;
procedure gysdaExecute(Sender: TObject);
procedure ckdExecute(Sender: TObject);
procedure djjzExecute(Sender: TObject);
procedure ymjzExecute(Sender: TObject);
procedure calcExecute(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
mainfrm: Tmainfrm;

implementation

uses ckdauni, rdkuni, gysdauni, ymjzuni, djjzuni, dateuni ;

{$R *.DFM}

procedure Tmainfrm.gysdaExecute(Sender: TObject);
begin
gysdafrm.show;
end;

procedure Tmainfrm.rkdExecute(Sender: TObject);
begin
rkdfrm.show;
end;

procedure Tmainfrm.ckdExecute(Sender: TObject);
begin
ckdfrm.show;
end;

procedure Tmainfrm.djjzExecute(Sender: TObject);
begin
djjzfrm.show;
end;

procedure Tmainfrm.ymjzExecute(Sender: TObject);
begin
ymjzfrm.show;
end;

procedure Tmainfrm.calcExecute(Sender: TObject);
var
PasString:string;
GamePath:array[0..60] of char;
ErrValue:integer;
begin
GetWindowsDirectory(Gamepath,Sizeof(gamePath));
pasString:=strPas(GamePath);
PasString:=pasString+'\Calc'; if not fileExists(pasString+'.exe') then
begin
showMessage('计算器程序没有安装!');
exit;
end;
StrPCopy(Gamepath,pasString);
ErrValue:=WinExec(Gamepath,SW_shownormal);
if ErrValue<32 then
showMessage('程序运行出错!');
end;
end.
除了可以自己定义TActionList的AcionItem之外,ActionList本身也提供了一些标准的AcionItem。主要分成三类:第一类是DataSet,这类的Action主要是执行数据表维护功能,像Next、Prior、Insert、Delete等。第二类是Edit功能,像Copy、Cut、Psete等,这些功能主要是用在文字的输入编辑。最后一类是Windows功能,像Arrange、Cascade、MinimizeAll等,可以把这些功能应用在MDI子窗口的管理。
另外,TActionList有一项非常特殊,也非常实用的特性,那就是在ActionList组件上有一个Images属性,这个属性主要的目的是用来和TImageList组件相连,可以根据每个Action的功能特性,找到对应的图标,然后把图标一个一个加到TImageList组件内,最后把TImageList丢给TActionList,再把每个Action的ImageIndex属性根据图标的顺序设置正确的编号(由零开始算起)。如此一来每个Action都会有对应的图标,更重要的是可以把TMenu、TpopupMenu指向TActionList,这项特性使得我们不用对每个控制组件的每项功能去设置对应的图标,因为它们会自动对应到TActionList设置的图标,这项特性大大减轻了程序设计工作量。
从以上所讲示例及功能可以看出,采用ActionList组件来编制菜单程序,不但可以大幅减少自行编写的程序代码,而且这些Action都集中在同一组件上,使得程序的维护及管理变得即方便又清楚。

 [1]

控制面板安装 IIS、添加或删除组件

Flash AS代码隐藏右键菜单

用Delphi 3.0编制MP3音乐点歌台

--->腾讯QQ 2006 Beta2 SP1(0728)海峰绿色版(显隐身,显IP,众多实用组件)
--->KMPlayer V2.9.1.1043 Build 316 官方简体中文语言文件+exe 优化和组件增强
--->Power Video Converter 1.5.42┊视频处理工具、含有五大组件┊汉化绿色特别版
--->DVDSubEdit V1.36┊显示修改DVD字幕、菜单按钮变高亮模式┊英文绿色特别版
--->网吧全系列菜单 V2.3 Bulid 1219
Tags:  组件 菜单 编制
{$enumber$}
芯友网版权所有 1999-2006 | 著作权与商标声明 | 法律声明 | 服务条款 | 隐私声明 | 联系我们