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]

unigui菜单【3】的更多相关文章

  1. unigui web app之菜单

    unigui web app之菜单 拖放TUnimMenu控件到窗体上. side:=msleft 表示将在左边显示菜单. 菜单项属性 UnimMenu1.Visible := True;显示菜单 U ...

  2. uniGUI之UniPopupMenu和右键菜单(27)

    0]MainModule的BrowserOptions.boDisableMouseRightClick设置为Trure; 1]控件的OnCellContextClick的事件 procedure T ...

  3. unigui如何把webApp的子功能映射到微信公众号菜单

    只需要用UniApplication.Parameters.Values[‘xxx’]读取url的参数然后调用就可以 例如:要打开公众号菜单的取样送检指南查询模块,在自定义菜单设定:http://ww ...

  4. unigui不是单个网页相应的链接,而是整体Web Application,如何把webApp的子功能映射到微信公众号菜单?

    只需要用UniApplication.Parameters.Values[‘xxx’]读取url的参数然后调用就可以 例如:要打开公众号菜单的取样送检指南查询模块,在自定义菜单设定:http://ww ...

  5. unigui的菜单树补习【2】treeview

    Treeview用于显示按照树形结构进行组织的数据.           Treeview控件中一个树形图由节点(TreeNode)和连接线组成.TtreeNode是TTreeview的基本组成单元. ...

  6. uniGUI试用笔记(十一)

    最近研究了一下UniGUI的TuniDBGrid,记录一下免得忘记了. TuniDBGrid的重要属性包括: 1.列—TUniDBGridColumns和TUniDBGridColumn 每个列对象( ...

  7. uniGUI试用笔记(五)

    uniGUI的主窗体可以采用多页面方式进行管理,参考网上的资料,都是用TUniFrame + TUniPageControl 来实现,尝试了一下,效果还不错,如下图: 用TUniFrame 能够使用继 ...

  8. UNIGUI集成HTML导航

    UNIGUI集成HTML导航 先来一个效果图: ajaxRequest(MainForm.window,'openform',[]); procedure TMainForm.UniFormAjaxE ...

  9. uniGUI for C++ builder之杂七杂八小知识

    uniGUI for C++ builder之杂七杂八小知识 2018年09月30日 22:16:05 中国银行之路在脚下 阅读数:41 标签: uniguibuilder 更多 个人分类: C++ ...

随机推荐

  1. Android 布局属性大全

    常用属性汇总: android:hint          设置EditText为空时输入的提示信息 android:gravity        对该view内容的限定:靠上 下 左 右 andro ...

  2. CodeForces - 556D

    D. Case of Fugitive time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  3. P3258 [JLOI2014]松鼠的新家 树链剖分

    这个题就是一道树剖板子题,就是每走一步就把所有的经过点加一就行了.还有,我的树剖板子没问题!!!谁知道为什么板子T3个点!我不管了!反正这道题正常写A了. 题干: 题目描述 松鼠的新家是一棵树,前几天 ...

  4. 创建APP检查更新页

    本文来源及参考:Create a check for updates page for your app. 这篇文章解释了如何创建一个简单的检查更新页,检查该用户已安装的应用程序的最新版本. 简介 这 ...

  5. Rails 拉数据初始数据库

    rails c   [1] pry(main)> Scraping.exec

  6. VUE使用QRcode或者vue-qr生成二维码

    这里介绍两种vue生成二维码的方法 QRcode vue-qr vue-qr比QRcode功能多在可以在中间加logo 下面先介绍QRcode vue里安装qrcodejs的npm包 npm inst ...

  7. 关于华为手机Log.d打印不出来log的问题

    http://blog.csdn.net/picasso_l/article/details/52489560     拨号,进入后台设置,进行操作.

  8. jsp 中包含 一个路径为变量的文件

    <head> <base href="<%=basePath%>"> <% String fileroot="MyJsp.jsp ...

  9. 学习随笔-Java WebService

    webService 可以将应用程序转换成网络应用程序.是简单的可共同操作的消息收发框架. 基本的webService平台是 XML 和 HTTP. HTTP 是最常用的互联网协议: XML 是 we ...

  10. 【译】x86程序员手册01

    Intel 80386 Reference Programmer's Manual 80386程序员参考手册 Chapter 1 -- Introduction to the 80386 第1章 - ...