根据数据表中的内容,动态创建主菜单

//我们在写C/S管理系统时经常是根据用户的权限来相应禁止一些菜单
//在实践时,我发现使用动态方法创建菜单有可能对软件被破解起到一点小的作用
//因为实现起来,不是很难,所以写出来分享一下
//我们在菜单的事件中,利用菜单项的TAG值来判定是点了那一项
//首先,用一张数据表来存所有用户的菜单内容,格式如下
//ID    int
//image    int    //-1是指ImageIndex的值,即无图标
//caption  varchar    20
//layer    smallint  //菜单的层次-1是第一层
//tag    int    //菜单的TAG值,用于得知点击事件
//所有的菜单项将使用一个公共事件处理,在里面自己判断并写相应代码好了
//parent  smallint
//userid  varchar    5  //用户ID
//name    varchar    15  //菜单的Name值
//为计算字段,内容为'M'+ltrim(str(layer))+ltrim(str(tag))
//hotkey  int    //ShutCut的值,用HotKey控件来取好了
//以上字段不要有空值,像Image可以默认为-1,HotKey默认为0


procedure TForm1.Button1Click(Sender: TObject);
var newMenu:TMenuItem;
iParent:Integer;
begin
qryMenu.SQL.Text:='SELECT * FROM TMenu WHERE userid=''0000'' order by tag';
qryMenu.Open;
  if qryMenu.IsEmpty then
  begin
    qryMenu.Close;
    exit;
  end;//判断菜单表是否为空
mainmenu1.Items.clear;//清空主菜单
qryMenu.First;//这句在使用建菜单只一次的情况下可不要
  while not qryMenu.Eof do
  begin
    newMenu:=TMenuItem.Create(self);//创建新的菜单项,以下是给它决定的值
    newMenu.Caption:=qryMenu.fieldbyname('caption').AsString;//标题
    newMenu.Name:=qryMenu.fieldbyname('name').AsString;//名字
    newMenu.Tag:=qryMenu.fieldbyname('tag').Tag;
    newMenu.ImageIndex:=qryMenu.fieldbyname('Image').AsInteger;//图标值,前提是菜单连到一个ImageList
    if qryMenu.fieldbyname('hotkey').AsInteger<>0 then
    newMenu.ShortCut:=TShortCut(qryMenu.fieldbyname('hotkey').AsInteger);
    iParent:=qryMenu.fieldbyname('parent').AsInteger;
    //根据其父编号来确定,新建的菜单项是否有事件
    if iParent>-1 then newMenu.OnClick:=MyMenuClick;
    if iParent<0 then
    MainMenu1.Items.Add(newMenu)
    else
    MainMenu1.Items.Items[iParent].Add(newMenu);
    qryMenu.Next;
  end;
end;

//若此表的内容需要通过服务程序传回,那么防破解的重点可以转换到服务程序上
//客户端的主要精力就不至于浪费到防破上了
//可以想象到,破解后的软件连个菜单都没有,怎么使用呢,^@^

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、简介 通过这个课程带大家从零开发一款功能全面的后台管理系统,包括项目搭建、功能实现到最后的Linux系统部署全过程。本课程使用SpringMVC + Spring + Mybatis作为体框架,使用AdminLTE作为前端框架,使用流关系型数据库Mysql作为存储数据库,使用非关系型数据库Redis作为缓存数据库,并集成SpringSecuriy安全框架做权限的动态管理,集成Swagger2自动生成接口文档,集成Druid连接池进行SQL性能监控,集成ActiveMQ消息间件进行异步解耦,提高性能。最后使用linux系统进行服务部署,并搭建nginx反向代理服务器提高网站性能。 二、学习目标 通过本课程的学习带大家掌握SSM框架的开发流程,并熟练使用SpringSecurity做为安全框架进行权限管理,整合相关优秀的开源框架进行功能开发。还在项目带大家学习前端相关的Jquery、Bootstrap等知识。课程结束之后希望大家能做到独立进行开发项目的目的,增强解决问题的能力,具备功能落地实现的能力。 三、课程涉及知识点 SpringMVC源码分析Mybatis源码分析通用MapperMysql数据库Redis缓存实现ActiveMQ消息间件SpringSecurity鉴权Swagger2接口文档生成自定义注解AOP切面编程自定义过滤器Logback日志整合Druid性能监控Linux系统Nginx反向代理Ajax异步请求技术Jquery基本使用AdminLTE前端框架Chart图表-线状图和饼状图百度地图定位城市BootStrap前端框架BootStrap-Table插件BootStrap-Treeview插件Markdown编辑器403、404、500错误页面配置数据库事务消息提示插件toastr.js图片上传插件bootstrap fileinput数字滚动效果pv/uv流量统计...四、课程部分内容截图如下 1、首页 2、菜单管理 3、图床管理 4、图标管理 5、留言反馈管理 6、druid监控 7、登录日志

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值