找回密码
 立即注册
搜索
查看: 1338|回复: 9

求助 DELPHI7中动态生成菜单的问题

[复制链接]

516

主题

5143

回帖

5670

积分

荣誉版主

海浩联防大队队员

积分
5670
发表于 2008-7-16 22:22:03 | 显示全部楼层 |阅读模式
1.初始 只有登陆一个菜单
2.登录后,从数据库menu表中依次选择字段做菜单
3.2级菜单也是从该表中生成的


最好有源码提供,或者讲讲详细做法也好,谢谢。

30

主题

1275

回帖

1732

积分

金牌会员

积分
1732
发表于 2008-7-17 00:33:43 | 显示全部楼层
做好全部菜单,将全部的visible设为false,每一菜单项的tag设一唯一值,
数据库里设定每一操作员的权限对应的tag值,即可以进入哪个菜单,启动时根据权限
设定菜单visible=true。
以下是相关的代码供参考:
var
  i,j:integer;
  mi,mi1:TMenuItem;
begin
  sql:='SELECT u.id,u.parent_id, s.system_name, s.script FROM user_menus u, system_names s ';
  sql:=sql+'where (u.id = s.id) AND u.user_name =:user_name';
  _main_Data.q1.Close;
  _main_Data.q1.SQL.Clear;
  _main_Data.q1.SQL.Add(sql);
  _main_Data.q1.Parameters.ParamByName('user_name').Value:=_main_Data.user_name;
  _main_Data.q1.Open;
  for i:=0 to MainMenu1.Items.Count-1 do
  begin
    mi:=MainMenu1.Items;
    if not _main_Data.q1.Locate('id',mi.Tag,[]) then
       mi.Visible:=false
    else
       mi.Visible:=true;
    if mi.Count > 0 then
    begin
      for j:=0 to mi.Count-1 do
      begin
        mi1:=mi.Items[j];
        if not _main_Data.q1.Locate('id',mi1.Tag,[]) then
           mi1.Visible:=false
        else
           mi1.Visible:=true;
      end;
    end;
  end;
  _main_Data.q1.Close;

评分

参与人数 1金钱 +10 收起 理由
leibin + 10 谢谢老兄

查看全部评分

回复

使用道具 举报

30

主题

1275

回帖

1732

积分

金牌会员

积分
1732
发表于 2008-7-17 00:35:31 | 显示全部楼层
这里只有两级,再多你自己解决吧。
回复

使用道具 举报

516

主题

5143

回帖

5670

积分

荣誉版主

海浩联防大队队员

积分
5670
 楼主| 发表于 2008-7-17 06:56:00 | 显示全部楼层
多谢兄弟。
回复

使用道具 举报

75

主题

3917

回帖

5276

积分

网站编辑

积分
5276
发表于 2008-7-17 09:25:04 | 显示全部楼层
原帖由 lsj 于 2008-7-17 00:33 发表
做好全部菜单,将全部的visible设为false,每一菜单项的tag设一唯一值,
数据库里设定每一操作员的权限对应的tag值,即可以进入哪个菜单,启动时根据权限
设定菜单visible=true。
以下是相关的代码供参考:
var
...


兄弟高手啊!
事能知足心长惬,人到无求品自高!
回复

使用道具 举报

516

主题

5143

回帖

5670

积分

荣誉版主

海浩联防大队队员

积分
5670
 楼主| 发表于 2008-7-17 22:01:56 | 显示全部楼层
启动时候先进入登陆界面,验证成功后显示所有菜单(visible:=true)。
验证失败,退出系统。

现在是所有菜单都在数据库中读出,例如:

菜单项:file         子菜单:登陆;菜单编辑;退出;
菜单项:edit       子菜单:复制;粘贴;剪切;
菜单项:options 子菜单:选项1;选项2;选项3;

数据库如何设计?

相应的代码该如何改?

麻烦LSJ兄弟了,多谢。
回复

使用道具 举报

516

主题

5143

回帖

5670

积分

荣誉版主

海浩联防大队队员

积分
5670
 楼主| 发表于 2008-7-17 22:13:38 | 显示全部楼层
设置Menu_info表内容如下:
根据M_id如何设置读取菜单才能更改表内容后,菜单项也更改?

[ 本帖最后由 萨姆 于 2008-7-17 22:16 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

30

主题

1275

回帖

1732

积分

金牌会员

积分
1732
发表于 2008-7-18 00:49:31 | 显示全部楼层
显然你要有一个表记录下每个操作员可以进入的菜单项的ID
起码要有这两个字段:(比如表名叫user_menu)
操作员:user_name
菜单ID:m_id
作一个权限设置的功能,选中某个操作员后显示memu_info的所有内容,然后给什么
权限就勾哪一个,最后把勾中的写入上面的user_menu表中。
启动时先验证操作员名字和密码,通过后根据user_name从user_menu表中取出所有记录,然后
就可以用上面的代码,看有没有这个ID,有就显示对应的菜单就可以了。

[ 本帖最后由 lsj 于 2008-7-18 00:52 编辑 ]
回复

使用道具 举报

30

主题

1275

回帖

1732

积分

金牌会员

积分
1732
发表于 2008-7-18 01:00:10 | 显示全部楼层
想简单点的话可以在menu_info里增加一个bit字段,选择一个操作员后
把这个bit字段全部设为0,用个ehlib等可以录入bit字段的dbgrid直接勾上,再把选中的想办法写到user_menu里就可以了。
当然也可以做得更好的,大家交流交流。
回复

使用道具 举报

403

主题

3329

回帖

5022

积分

网站编辑

积分
5022
发表于 2008-7-20 19:36:46 | 显示全部楼层
原来萨姆老兄也是同道中人啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|海浩社区

GMT+8, 2025-9-15 01:35 , Processed in 0.097558 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表