现有三个数据庫:user,power,Menu.
Menu:
MenuName | MenuCap | MenuCli |
A1 C1 X1
A11 C2 X2
A12 C3 X3
A121 C4 X4
A13 C5 X5
B1 C6 X6
B11 C7 X7
B12 C8 X8其中A11,A12,A13是A1的子菜单,A121是A12的子菜单user:
serNo | UserName |
AA 张三
BB 李五Power:
UserNo | MenuName
AA A121
AA B1
BB A11
BB B12要动态生成用户AA的菜单如下:
A1 B1
A12_ B11
A121 B12
任给一用户如何生成菜单?能否写段程序。我的E_mail: [email protected]
Menu:
MenuName | MenuCap | MenuCli |
A1 C1 X1
A11 C2 X2
A12 C3 X3
A121 C4 X4
A13 C5 X5
B1 C6 X6
B11 C7 X7
B12 C8 X8其中A11,A12,A13是A1的子菜单,A121是A12的子菜单user:
serNo | UserName |
AA 张三
BB 李五Power:
UserNo | MenuName
AA A121
AA B1
BB A11
BB B12要动态生成用户AA的菜单如下:
A1 B1
A12_ B11
A121 B12
任给一用户如何生成菜单?能否写段程序。我的E_mail: [email protected]
// 动态生成菜单的过程 //
//////////////////////////////////////////////////////////
//q_menu为TQueryprocedure Pro_CreateMenu;
var
MenuItem:TMenuItem;
begin
TMainMenu.Items.Clear;
q_menu.close;
q_menu.SQL.clear;
q_menu.sql.add(' select * from xt_gncd order by xmdh ');
q_menu.Open;
if not q_menu.IsEmpty then
while not q_menu.Eof do
begin
MenuItem:=TMenuItem.create(self);
MenuItem.Name:='m'+trim(q_menu.fieldbyname('xmdh').asstring);
MenuItem.Caption:=trim(q_menu.fieldbyname('xmmc').asstring);
if q_menu.FieldByName('yjdbz').value=0 then // 为叶节点
begin
MenuItem.onclick:=pro_Click; //菜单的click 事件
end; if q_menu.FieldByName('fbdh').value=0 then // 为根节点
form1.TMainMenu.Items.add(MenuItem)
else
TMenuItem(form1.FindComponent('m'+trim(q_menu.fieldbyname('fbdh').asstring))).add(MenuItem);
q_menu.next;
end;
end;附加数据库表xt_gncd(功能菜单)的结构:
create table xt_gncd(
xmdh:char //项目代号
xmmc:char //项目名称
fbdh:char //父辈代号
yjdbz:integer//叶接点标志XMDH XMMC FBDH YJDBZ
100 工资业务(&G) 0 1
101 制定工资单 100 0
103 打开 100 0
200 统计核算(&T) 0 1
201 复制 200 0
203 粘贴 200 0
800 系统设置(&S) 0 1
801 操作人员设置 800 0
803 口令修改 800 0
805 参数设置 800 0
807 人员信息设置 800 0
900 帮助(&H) 0 1
901 帮助主题 900 0
903 关于 900 0