维普资讯 http://www.cqvip.com 第21卷第3期 2008年6月 常州3-学院学报 Journal of Changzhou Institute of Technology Vo1.21 No.3 Jun.2008 基于DELPHI的动态菜单的设计与应用 王 文 (常州工学院,江苏常州213002) 摘要:为了提高软件的灵活性,给出了动态菜单的分析设计思想及使用DELPHI实现动态菜单 的关键技术。使用该设计方法,可以根据不同的用户在系统运行期间进行访问权限的动态调整,同 时动态地对系统菜单进行设置和管理。 关键词:动态菜单;概念模型;组件 中图分类号:TP311.52 文献标识码:A 文章编号:1671—0436(2008)03—0050—04 在软件的设计开发中,经常需要根据不同的 用户进行访问权限的设置和管理,同时根据不同 的访问要求对系统菜单进行相应调整。系统菜单 的调整方法一般有静态调整法和动态调整法。静 对照表,可以针对不同的用户进行授权处理;④构 建菜单单击事件处理模块,利用菜单控件,在系统 初始化时进行系统菜单的装载和单击事件处理的 动态绑定。根据系统分析可以得到如图1所示的 态调整法,是在程序设计期间把所有的菜单功能 设计好,利用菜单类控件固化到程序中。动态调 整法在程序设计期间只是设计好菜单的框架,对 动态菜单管理数据流图。 于菜单的功能可以在程序运行期间进行增加、修 改和删除,也就是说可以实现菜单功能的动态调 整。静态调整法实现起来较为容易,但是系统灵 活性和扩展性较差;动态调整法实现起来较为复 杂,但是系统有较高的灵活性和扩展性,使软件的 质量有大幅度的提升。 . 图1 动态菜单设计数据流图 1动态菜单的分析和设计 1.1动态菜单的分析 其中,用户经过登录身份验证后,由系统调 用菜单装载模块,菜单装载模块检索授权信息 表后,加载该用户授权范围内的菜单项,同时, 用户还可以对菜单和权限的设置进行管理和 维护。 1.2动态菜单的数据库设计 根据系统的需求分析来看,所谓的动态菜单 是指:一方面在系统用户登录居,根据不同的用户 和权限对系统菜单进行相应的增加和设置;另一 方面在系统运行过程中,系统管理员可以对不同 的用户进行权限的修改和调整。根据分析,动态 菜单的功能 主要包括:①建立菜单列表,可以 对菜单项目进行动态调整;②建立用户列表,可以 对系统用户进行相应的管理;③建立用户和权限 收稿日期:2008—03—12 在数据库中,目前以关系数据库为主流,下面 就以关系模型为例进行动态菜单数据库的设计和 构建。要得到关系模型,首先要设计出系统的概 念模型,概念模型的表示方法很多,其中最著名的 就是P.S.Chen于1976年提出的实体一联系方 维普资讯 http://www.cqvip.com 第3期 王文:基于DELPHI的动态菜单的设计与应用 51 法(Entity—Relationship Approach),也就是通常 所说的E—R模型 J。针对用户和菜单可以构建 如图2所示的用户和菜单权限管理的基本E—R 模型,用户和菜单之间的授权关系应该是m:n (多对多联系),也就是说一个用户可以同时拥有 对多个菜单项的访问权限,同时~个菜单项的访 问权限也可以被多个用户所拥有。对于权限管理 比较复杂的系统,也可以在用户和菜单之间增加 表,对于授权联系,根据规则转换成授权表。其 中授权表中的主关键字(UI),MenulD)中的两 个字段UID和MenulD作为外键分别参阅用户 表中的主键uID和菜单表中的主键MenuID。 菜单表中的级联问题通过设置ParentlD字段来 解决,imageindex字段用来存储菜单图标的 索引。 个角色实体,通过角色来集中管理菜单,角色和 用户、角色和菜单之间都是m:n的联系,这样可 一2动态菜单的实现方法 2.1基于BDE的数据访问结构 BDE是Broland Database Engine的缩写,是 以把菜单项按角色进行分类,按角色授权后,用户 可以拥有角色相关的所有权限,这样使授权方式 更加灵活。可以对图2的E—R模型进行扩充, 得到具有角色实体的扩展动态菜单设计E—R模 型,如图3所示。 DELPHI提供的数据库访问引擎,BDE由一系列 组件构成,这其中包括TDatabase、TDataset、 TDataSource等,用于和数据库建立访问连接和数 据访问通道。这些组件一般被包装在TdataModal (数据模块)类中,数据模块通过数据库访问引擎 叵 圈 来访问数据库中数据,并最终通过TDataSource (数据源)将数据提供到uI(用户接口)。基于 BDE数据的访问如图5所示。 图2动态菜单设计E~R模型 B D E Form 图3扩展的动态菜单设计E—R模型 根据E—R模型向关系模型转换规则,可以 将图2所示的概念模型转换得到基于关系数据库 的关系模型,动态菜单的数据库设计结构和表之 间的逻辑关系 ,如图4所示。 图5基于BDE的数据库应用访问架构 2.2基于Treeview组件菜单展现算法 Treeview组件是一个分层树型结构组件,可 以用来很好地展现菜单同级和上下级之间的关 系。系统中可以采用Treeview组件来管理和展 现菜单项目,具体的做法是:首先遍历菜单表,找 出最顶层一级菜单,按序排列,然后逐一遍历该菜 单下所有子菜单项,在遍历菜单表的同时向Tree— view中添加子项,遍历过程可采用递归算法来实 现。用户授权管理 的菜单展现部分也可参照此 算法来实现,只不过要加上用户表和授权表的相 关信息,此多个表的连接可以采用内连接来实现 数据集中,同时根据菜单的状态(是否为选中), 图4动态菜单数据库实现关系图 加以区别显示。遍历菜单的流程如图6所示,实 现效果图如图7所示。 用户和菜单实体分别转换成用户表和菜单 维普资讯 http://www.cqvip.com 52 常州工学院学报 2008正 码的添加,可以预先白定义一个Myclick函数 来对应不同的菜单功能,把菜单对象作为参数传 给Myclick函数,用分支语句结构进行流程控制, 以确定不同菜单项响应不同的事件。并在加载菜 单项时与菜单项的OnClick事件进行动态的关 联,就可以实现对不同菜单事件的响应。 菜单初始化时,首先获取所有顶层菜单的II) 和名称,动态实例化菜单项类,对所有顶层菜单下 的子菜单进行遍历并生成相应的子菜单对象,子 菜单的遍历过程如上所述采用递归方法进行调 用,并通过循环进行流程控制。菜单初始化模块 参考代码如下: Procedure TfrmVar _main.GrantMenu(UID:integer); addMainItem:TMenuItem;//定义父菜单项变量 addSubItem:TMenuItem;//定义子菜单项变量 begin //获取授权表顶层菜单数据,并定位到首记录 图6遍历菜单流程图 while not eof do//如果没有到记录末尾 begin addMainItem:=TMenuItem.Create(Self);// 实例化菜单项类,派生父菜单对象 addMainItem.Name:=‘M’+FieldValues [‘MenulD’]; addMainItem. Caption : = FieldValues [‘Menuname’]; addMainItem.Imagelndex:=FieldValues [‘imageindex’]; MainMenu.Items.Add(addMainItem); //获取当前顶层菜单的所有子菜单数据,并 定位到首记录 while not eofdo begin 图7实现效果图 2.3菜单初始化模块处理方法 addSubItem:=TMenuItem.Create(Self);// 菜单初始化模块的主要功能就是加载菜单组 件、初始化菜单列表。具体做法是:根据登录标识 实例化菜单项类,派生子菜单对象 addSubItem.Name:=‘M’+FieldValues 遍历权限表,动态增加各级菜单项,同时为各级菜 单设置单击事件驱动代码。一般来讲,面向对象 程序设计的事件驱动代码设计应该在程序编辑和 调试状态下完成,也就是说需要在静态条件下进 行编写。而对于动态加载的菜单项,事件驱动代 [‘MenulD’]; addSubItem.Caption :=FieldValues [‘Menuname’]; addSubItem.Imagelndex:=FieldValues [‘imageindex’]; 维普资讯 http://www.cqvip.com 第3期 王文:基于DELPHI的动态菜单的设计与应用 53 addMainltem.SubMenulmages:=Image— PHI+SQL SERVER环境下,取得了非常好的效 果。同样本设计思想也可用于其他的开发环 Listl: addMainltem.Add(addSubltem); addSubltem.OnClick::Myclick;//动态 境,并在基于网络的环境下也具有较高的参考 价值。 关联菜单项的OnClick事件 next;//子菜单项指针下移一条记录 end; end; [参考文献] [1]张黎明,冉玉晶,昌安,等.基于VB的动态菜单的设计与应 用[J].北京工业大学学报,2005(5):452—455. [2]徐桂东,王华.基于PHP+MySQL的动态菜单的设计与实 现[J].福建电脑,2006(3):1O一11. [3 J王珊,萨师煊.数据库系统概论[MJ.北京:高等教育出版, 2006. next;//父菜单项指针下移一条记录 end; 3 结束语 在人员复杂、数据敏感的系统中,动态菜单 的作用就显得非常突出,本文所论述的动态菜 单设计思想可以应用在面向领域的应用系统和 MIS中,为系统提供更加灵活的用户和权限管理 [4]唐学忠.SQL SERVER 2000数据库教程[M].北京:电子工业 出版社,2005. [5]张祖平,王磊.基于多种模式的权限控制技术研究[J].计算 机工程,2006(1):177—179. [6]李国金,田秀华,刘艳华.Delphi语言的菜单动态生成技 术[J].五邑大学学报:自然科学版,2003(4):59—63. 方式。该动态菜单设计方法已经应用在DEL— Design and Application of Dynamic Menu Based on DELPHI ANG r(Chanzhou Institute of Technology,Chanzhou 213002) Abstract:To improve the flexibility of the software,this paper introduces analysis and design idea of dynamic menu and key technology of realizing dynamic menu based on DEL咖.Using this methodit Can .dynamically aajust,set nd aedit system menu according to different users when the application system is run. ● ang・r Key words:dynall'tic menu;conceptual model;component 责任编辑:张秀兰