unigui TUniTreeView demo
unit untTree;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, uniGUITypes, uniGUIAbstractClasses,
uniGUIClasses, uniGUIFrame, uniGUIBaseClasses, uniToolBar, uniTreeView,
Data.DB, Datasnap.DBClient, untEditBase, untDll;
type
PNodeRec = ^TNodeRec;
TNodeRec = record
id: string;
name: string;
pid: string;
end;
type
TfrmTree = class(TUniFrame)
UniToolBar1: TUniToolBar;
btnQuery: TUniToolButton;
btnAppend: TUniToolButton;
btnEdit: TUniToolButton;
btnDelete: TUniToolButton;
ClientDataSet1: TClientDataSet;
UniTreeView1: TUniTreeView;
btnExpand: TUniToolButton;
btnCollapse: TUniToolButton;
procedure btnExpandClick(Sender: TObject);
procedure btnCollapseClick(Sender: TObject);
procedure UniTreeView1Click(Sender: TObject);
private
{ Private declarations }
protected
procedure append(f: TfrmEditBase);
function Del(const table: string): Boolean;
procedure edit(f: TfrmEditBase);
procedure Query(const sql: string);
public
{ Public declarations }
end;
procedure CreateTree(dataset: TClientDataSet; treeview: TUniTreeView);
procedure FreeTree(treeview: TUniTreeView);
implementation
{$R *.dfm}
{ TfrmTree }
procedure CreateTree(dataset: TClientDataSet; treeview: TUniTreeView);
// table struct example: id,name,pid
var
List: TStringList;
Node: TUniTreeNode;
Index: Integer;
PNode: PNodeRec;
begin
treeview.Items.Clear;
List := TStringList.Create;
try
List.Sorted := True;
dataset.First;
while not dataset.Eof do
begin
PNode := new(PNodeRec);
PNode^.id := dataset.Fields[0].Text;
PNode^.name := dataset.Fields[1].Text;
PNode^.pid := dataset.Fields[2].Text;
if (dataset.Fields[2].Text = '') or
(dataset.Fields[0].Text = dataset.Fields[2].Text) then
// add root node
Node := treeview.Items.AddChild(nil, dataset.Fields[1].Text)
else
begin
// add child node
Index := List.IndexOf(dataset.Fields[2].Text);
Node := treeview.Items.AddChild(TUniTreeNode(List.Objects[Index]),
dataset.Fields[1].Text);
end;
Node.Data := PNode;
List.AddObject(dataset.Fields[0].Text, Node);
dataset.Next;
end;
finally
List.Free;
end;
end;
procedure FreeTree(treeview: TUniTreeView);
var
i: Integer;
Node: TUniTreeNode;
begin
for i := treeview.Items.Count - 1 downto 0 do
begin
Node := treeview.Items[i];
Dispose(PNodeRec(Node.Data));
end;
end;
procedure TfrmTree.append(f: TfrmEditBase);
begin
ClientDataSet1.append;
if UniTreeView1.Selected <> nil then
begin
ClientDataSet1.Fields[0].Text := PNodeRec(UniTreeView1.Selected.Data)^.id;
ClientDataSet1.Fields[2].Text := PNodeRec(UniTreeView1.Selected.Data)^.id;
end;
f.FClientDataSet := ClientDataSet1;
f.ShowModal(
procedure(Res: Integer)
begin
CreateTree(ClientDataSet1, UniTreeView1);
end);
end;
procedure TfrmTree.btnCollapseClick(Sender: TObject);
begin
UniTreeView1.FullCollapse;
end;
procedure TfrmTree.btnExpandClick(Sender: TObject);
begin
UniTreeView1.FullExpand;
end;
function TfrmTree.Del(const table: string): Boolean;
begin
if ClientDataSet1.IsEmpty then
Exit;
MessageDlg('是否删除?', mtConfirmation, mbYesNo,
procedure(Res: Integer)
begin
if Res = mrYes then
begin
ClientDataSet1.Delete;
if untDll.SaveData(table, ClientDataSet1.Delta) then
begin
ClientDataSet1.MergeChangeLog;
ShowMessage('删除成功');
end
else
ShowMessage('删除失败');
end;
end);
end;
procedure TfrmTree.edit(f: TfrmEditBase);
begin
if ClientDataSet1.IsEmpty then
Exit;
ClientDataSet1.edit;
f.FClientDataSet := ClientDataSet1;
f.ShowModal(
procedure(Res: Integer)
begin
CreateTree(ClientDataSet1, UniTreeView1);
end);
end;
procedure TfrmTree.Query(const sql: string);
begin
ClientDataSet1.Data := untDll.QuerySql(sql);
if ClientDataSet1.IsEmpty then
Exit;
CreateTree(ClientDataSet1, UniTreeView1);
end;
procedure TfrmTree.UniTreeView1Click(Sender: TObject);
begin
if not ClientDataSet1.IsEmpty then
ClientDataSet1.Locate(ClientDataSet1.Fields[0].FieldName,
VarArrayOf([PNodeRec(UniTreeView1.Selected.Data)^.id]), []);
end;
end.
unigui TUniTreeView demo的更多相关文章
- uniGUI试用笔记(十四)TUniTreeView的CheckBox
TUniTreeView目前版本没有封装CheckBox功能,所以需要手工处理,幸好0.99版提供部分代码了,修改过程如下: 1.uniGUIAbstractClasses.pas单元中修改基类TUn ...
- uniGUI试用笔记(二)
前几天做的demo今天启动后,浏览器打开页面后死活不显示窗体,找了半天原因才发现是360浏览器启动了兼容模式,改成极速模式后就正常了.有点晕.... 今天简单测试了TUniGUIServerModul ...
- 用uniGUI做B/S下业务系统的产品原型体验
从10月份到重庆工作后,一直忙于工作,感兴趣的几个方面的技术都处于暂停. 一个多月来,按照公司要求在做B/S集中式基卫产品的原型,主要是画原型图,开始是用Axure,弄来弄去感觉功能还是弱了些,尤其是 ...
- UNIGUI:How to redirect and close session?
Hello, i would have 2 unigui app. the first app is a simple authentification app and second will be ...
- unigui菜单【3】
unigui菜单TuniTreeView 根据数据库表中的内容,显示菜单的处理: function TMainForm.CreateMenu: Integer; var myMenuPoint : P ...
- unigui的session【1】
目前是1394. 明白session如何使用管理,看demo Session List和SessionTimeout unit Main; interface uses Windows, Messag ...
- uniGUI之学习方法(18)
官方例子D:\Program Files\FMSoft\Framework\uniGUI\Demos\Desktop 在Design里Main上右键,View as Form看到变化的属性. 看出变化 ...
- 通过一个demo了解Redux
TodoList小demo 效果展示 项目地址 (单向)数据流 数据流是我们的行为与响应的抽象:使用数据流能帮我们明确了行为对应的响应,这和react的状态可预测的思想是不谋而合的. 常见的数据流框架 ...
- 很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天说下这些格式,明天做个demo
有些功能部分手机不能使用,网站,通讯录,wifi基本上每个手机都可以使用. 在看之前你可以扫一扫下面几个二维码先看看效果: 1.二维码生成 网址 (URL) 包含网址的 二维码生成 是大家平时最常接触 ...
随机推荐
- android studio sqlite操作代码片段
SQLiteDatabase db;Cursor cur; SimpleCursorAdapter adapter; // 打开或创建数据库db = openOrCreateDatabase(DB ...
- UVa 1225 Digit Counting
题意:给出n,将前n个整数顺次写在一起,统计各个数字出现的次数. 用的最笨的办法--直接统计-- 后来发现网上的题解有先打表来做的 #include<iostream> #include& ...
- Jave 鼠标点击画太极 PaintTaiji (整理)
package demo; /** * Jave 鼠标点击画太极 PaintTaiji (整理) * 声明: * 又是一份没有注释的代码,而且时间已经久远了,不过代码很短,解读起来应该 * 不会很麻烦 ...
- php 换行 PHP_EOL变量
一个小小的换行,其实在不同的平台有着不同的实现,为什么要这样,可以是世界是多样的. 本来在unix世界换行就用/n来代替,但是windows为了体现他的不同,就用/r/n,更有意思的是在mac中用/r ...
- 【英语】Bingo口语笔记(5) - 英式和美式英语的发音区别
- 插件五之滚动条jquery.slimscroll.js
前言 slimscroll.js用于模拟传统的浏览器滚动条(竖向),原理为原内容内置于一个仅可视区域显示层,使用2个div层用于模拟滚动条和滚动条背景轨道监听滚动条div高度变化来控制内容层位置(猜测 ...
- .net发邮件 附件文件名乱码
.net发邮件 附件文件名乱码,可以下载以下补丁安装. https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.asp ...
- Php 笔记4-----php 细节知识
从 php5开始 php.ini register_globals参数为OFF ,禁止全局变量. 以前的情况下, 全局变量是默认为On的 , 所以,浏览器的表单中控件,会自动根据name在服务 ...
- ifstream 流 判断文件是否结尾的函数eof(.xml
pre{ line-height:1; color:#800080; font-size:16px;}.sysFunc{color:#627cf6;font-style:italic;font-wei ...
- LeetCode Database: Rank Scores
Write a SQL query to rank scores. If there is a tie between two scores, both should have the same ra ...