unigui菜单【3】
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】的更多相关文章
- unigui web app之菜单
unigui web app之菜单 拖放TUnimMenu控件到窗体上. side:=msleft 表示将在左边显示菜单. 菜单项属性 UnimMenu1.Visible := True;显示菜单 U ...
- uniGUI之UniPopupMenu和右键菜单(27)
0]MainModule的BrowserOptions.boDisableMouseRightClick设置为Trure; 1]控件的OnCellContextClick的事件 procedure T ...
- unigui如何把webApp的子功能映射到微信公众号菜单
只需要用UniApplication.Parameters.Values[‘xxx’]读取url的参数然后调用就可以 例如:要打开公众号菜单的取样送检指南查询模块,在自定义菜单设定:http://ww ...
- unigui不是单个网页相应的链接,而是整体Web Application,如何把webApp的子功能映射到微信公众号菜单?
只需要用UniApplication.Parameters.Values[‘xxx’]读取url的参数然后调用就可以 例如:要打开公众号菜单的取样送检指南查询模块,在自定义菜单设定:http://ww ...
- unigui的菜单树补习【2】treeview
Treeview用于显示按照树形结构进行组织的数据. Treeview控件中一个树形图由节点(TreeNode)和连接线组成.TtreeNode是TTreeview的基本组成单元. ...
- uniGUI试用笔记(十一)
最近研究了一下UniGUI的TuniDBGrid,记录一下免得忘记了. TuniDBGrid的重要属性包括: 1.列—TUniDBGridColumns和TUniDBGridColumn 每个列对象( ...
- uniGUI试用笔记(五)
uniGUI的主窗体可以采用多页面方式进行管理,参考网上的资料,都是用TUniFrame + TUniPageControl 来实现,尝试了一下,效果还不错,如下图: 用TUniFrame 能够使用继 ...
- UNIGUI集成HTML导航
UNIGUI集成HTML导航 先来一个效果图: ajaxRequest(MainForm.window,'openform',[]); procedure TMainForm.UniFormAjaxE ...
- uniGUI for C++ builder之杂七杂八小知识
uniGUI for C++ builder之杂七杂八小知识 2018年09月30日 22:16:05 中国银行之路在脚下 阅读数:41 标签: uniguibuilder 更多 个人分类: C++ ...
随机推荐
- 【POJ 3714】 Raid
[题目链接] http://poj.org/problem?id=3714 [算法] 分治求平面最近点对 [代码] #include <algorithm> #include <bi ...
- webrtc学习资源
http://www.imaotao.cn/project/webrtc-201604
- El Dorado(dp)
http://acm.hdu.edu.cn/showproblem.php?pid=2372 题意:给出n个数,求长度为m的递增子序列的数目. 思路:状态转移方程 dp[i][j] = sum(dp[ ...
- input的type等于mage标签引发的页面提交!
主要原因是使用了<input type="image",而且放在了<form中. <input type="image"标签类似<inp ...
- robotframework - 介绍&应用
一.参考简书链接 :https://www.jianshu.com/p/c3a9d20db4e5 二.介绍 Robot Framework是一个基于Python的,可扩展的关键字驱动的测试自动化框架, ...
- AJAX json集合传入Controller后台
HTML代码 <html> <head> <meta http-equiv="Content-Type" content="text/htm ...
- iOS 中OpenGL ES 优化 笔记 1
1,避免同步和Flushing操作 OpenGL ES的命令执行通常是在command buffer中积累一定量的命令后,再做批处理执行,这样效率会更高:但是一些OpenGL ES命令必须flush ...
- Boost.Build特点(译)
Boost.Build Boost.Build makes it easy to build C++ projects, everywhere. Boost.Build让构建C++项目在任何地方都很容 ...
- 【洛谷4396/BZOJ3236】[AHOI2013]作业(莫队+分块/树状数组/线段树)
题目: 洛谷4396 BZOJ3236(权限) 这题似乎BZOJ上数据强一些? 分析: 这题真的是--一言难尽 发现题面里没说权值的范围,怕出锅就写了离散化.后来经过面向数据编程(以及膜神犇代码)知道 ...
- [Luogu 1312] noip11 Mayan游戏
[Luogu 1312] noip11 Mayan游戏 Problem: Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即 ...