unigui菜单TuniTreeView

根据数据库表中的内容,显示菜单的处理:

function TMainForm.CreateMenu: Integer;
var
myMenuPoint : PMyMenuRec;
i :Integer;
menu_id ,menu_name, menu_url: string;
mynodes : TUniTreeNodes;
mynode,tmp_node : TUniTreeNode;
begin //建立菜单树
MenuTree.Items.Clear;
mynodes := MenuTree.Items;
MenuTree.BeginUpdate;
with UniMainModule do
begin //取表中菜单
fdqryBase.Open('select* from sm_menu order by menu_id');
fdqryBase.First;
while not fdqryBase.Eof do
begin
menu_id := fdqryBase.FieldByName('menu_id').AsString;
menu_name := fdqryBase.FieldByName('menu_name').AsString;
if fdqryBase.FieldByName('menu_url').AsString = '' then
begin //确认是否根菜单
mynode := mynodes.Add(nil,fdqryBase.FieldByName('menu_name').AsString);
end else
begin tmp_node := mynodes.add(mynode,menu_name);
New(myMenuPoint);
myMenuPoint^.menu_id := menu_id;
myMenuPoint^.menu_name := menu_name;
myMenuPoint^.menu_url := fdqryBase.FieldByName('menu_url').AsString;
tmp_node.Data := myMenuPoint; end;
fdqryBase.Next;
end;
end;
MenuTree.EndUpdate; for i := to MenuTree.Items.Count- do
begin
mynode := MenuTree.Items[i];
if mynode.HasChildren then begin
mynode.ImageIndex := ;
mynode.SelectedIndex := ;
end else begin
mynode.ImageIndex := ;
mynode.SelectedIndex := ;
end;
end;
MenuTree.FullCollapse;
end;

其中item的node有二个属性caption和data。把指针data用起来,在点击时自动调用显示form。

type
PMyMenuRec = ^TMyMenuRec;
TMyMenuRec = Record
menu_id:string;
menu_name:string;
menu_url:string;
end;

点击菜单项的处理

procedure TMainForm.MenuTreeClick(Sender: TObject);
begin
if Assigned(MenuTree.Selected.data) then
begin
if PMyMenuRec(MenuTree.Selected.data).menu_url<>'' then
ShowFrame(PMyMenuRec(MenuTree.Selected.data).menu_name,PMyMenuRec(MenuTree.Selected.data).menu_url);
end;
end;
function TMainForm.ShowFrame(Caption, FormClassName: string): Integer;
var
i: integer;
sheet: TUniTabSheet;
begin
for i := to page.PageCount - do
begin
if page.Pages[i].Caption = Caption then
begin
page.ActivePageIndex := i;
exit;
end;
end;
sheet := TUniTabSheet.Create(Self);
sheet.Closable := True;
sheet.Caption := Caption;
sheet.PageControl := page; FCurrentFrame := TUniFrameClass(FindClass(FormClassName)).Create(Self);
FCurrentFrame.Align := alClient;
FCurrentFrame.Parent := sheet;
page.ActivePage := sheet; end;

表菜单记录。

10    登记客户信息    NULL
1001 新客户 TUniFrmeWebEmbedBase
1002 修改客户 222
20 客户查询 NULL
2001 按地区 43
2002 按行业 3452
30 客户信息统计 NULL
40 客户新机报表 NULL

表结构

CREATE TABLE [dbo].[SM_menu](
[menu_id] [nvarchar](32) NOT NULL,
[menu_name] [nvarchar](30) NULL,
[menu_url] [nvarchar](50) NULL,
CONSTRAINT [PK153] PRIMARY KEY CLUSTERED
(
[menu_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

最新文章

  1. 听桶哥讲session和cookie
  2. ajax实例详解
  3. NSNotificationCenter 的详细说明
  4. linux生成随机密码
  5. springmvc4+hibernate4分页查询功能
  6. SerialPort
  7. ajax提交表单 验证
  8. phantomjs初次认识
  9. python scrapy 爬取西刺代理ip(一基础篇)(ubuntu环境下) -赖大大
  10. 批量移动AD用户到指定OU
  11. 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案
  12. HTop依赖包
  13. Python print 中间换行 直接加‘\n’
  14. 面向对象中的property装饰器讲解
  15. C# WPF 用MediaElement控件实现视频循环播放
  16. 2018,学会python 在新公司扎根
  17. 扔几道sb题
  18. 通过Fegin远程调用 ,返回JPA Page 对象报错
  19. iframe弹出框js ie6下存在bug
  20. 【树形dp】hdu6035 Colorful Tree

热门文章

  1. Tiny4412 开发板 编译环境搭建【转】
  2. JSP-Runoob:Cookie 处理
  3. MSP430:管脚的第二功能选择
  4. 46. Ext中namespace的作用(转)
  5. 如何通过XInput技术针对游戏方向盘或者手柄编程
  6. 在LNMP或Nginx上配置NameCheap免费SSL证书
  7. Java 日期时间 Date类型,long类型,String类型表现形式的转换 (转)
  8. tinymce 出现 Uncaught (in promise) TypeError: ae(...).createObjectURL is not a function
  9. js的45个技巧
  10. Gym - 101208C 2013 ACM-ICPC World Finals C.Surely You Congest 最大流+最短路