unigui菜单【3】
1.unidbgrid的rowedit=true2.unigui的demo-\Demos\Desktop\DBAppDemo\SimpleDemo.dproj【11】3.unigui的session【1】
4.unigui菜单【3】
5.unigui的ini文件读写【6】6.unigui导出TMS.Flexcel【5】7.unigui+fastreport 打印【4】8.unigui显示uniTreeVview使用TUniTreeNode内存泄漏的问题【14】9.unigui显示websocket服务端向客户端发送信息【15】10.学习unigui【17】-数据集和JSON互相转换-DataSetConverter4D 开源项目11.学习unigui【18】unidbgrid的GridsGroupingSorting12.学习unigui【19】unidbgrid的Group By This Field汉化13.学习unigui【20】unistringGrid14.学习unigui【21】unistringGrid的标题栏动态增加15.学习unigui【22】unistringGrid的标题栏双击事件16.学习unigui【23】uniDBGrid的使用摘要17.学习unigui【25】关于图标18.学习unigui【24】Echart的使用:多个坐标系19.学习unigui【26】关于Unigui控件的个性化CSS框架20.学习unigui【27】像pg的jsonb一样编辑json。21.unigui的菜单树补习【2】treeview22.unigui的程序编译后自动运行傻傻的手动【7】23.unigui的ServerModule的重要属性【8】24.unigui的错误delphi clientHeight:property clientheight does not exist【10】25.学习unigui【28】UniGUI接收POST/GETunigui菜单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 := 0 to MenuTree.Items.Count-1 do begin mynode := MenuTree.Items[i]; if mynode.HasChildren then begin mynode.ImageIndex := 0; mynode.SelectedIndex := 0; end else begin mynode.ImageIndex := 2; mynode.SelectedIndex := 3; 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 := 0 to page.PageCount - 1 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]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
2016-08-03 firebird的递归查询