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) 包含网址的 二维码生成 是大家平时最常接触 ...
随机推荐
- UVa 10954 (Huffman 优先队列) Add All
直接用一个优先队列去模拟Huffman树的建立过程. 每次取优先队列前两个数,然后累加其和,把这个和在放入到优先队列中去. #include <cstdio> #include <q ...
- 浅谈网络爬虫爬js动态加载网页(二)
没错,最后我还是使用了Selenium,去实现上一篇我所说的问题,别的没有试,只试了一下firefox的引擎,总体效果对我来说还是可以接受的. 继续昨天的话题,既然要实现上篇所说的问题,那么就需要一个 ...
- kafka_2.9.2-0.8.1.1分布式集群搭建代码开发实例
准备3台虚拟机, 系统是RHEL64服务版. 1) 每台机器配置如下:$ cat /etc/hosts # zookeeper hostnames: 192.168.8.182 ...
- HDU 1051 Wooden Sticks【LIS】
题意:给出n个木头的重量wi,长度li,如果满足w[i+1]>=w[i]且l[i+1]>=l[i],则不用耗费另外的加工时间,问至少需要多长时间加工完这些木头. 第一次做这一题目也没有做出 ...
- Windows Store APP- C# to get IP Address
using Windows.Networking.Connectivity; public String GetIPString() { String ipString = String.Empty; ...
- Java Web 乱码
1.mySql编码 2.jdbc编码 http://www.blogjava.net/NicholasEcho/archive/2008/11/03/238310.html ----- 1.HttpG ...
- pcap文件的文件头的link type
http://www.tcpdump.org/linktypes.html Link-layer header type values LINKTYPE_ name LINKTYPE_ value C ...
- pdf Factory的设置
将文件自动保存到其它位置的设置方法(以Excel文件打印为例):
- java jxl 向Excel中追加数据而不覆盖原来数据的例子
向先原来就有数据的Excel写数据是不会覆盖原有的数据,只是在追加数据. public class Excel { public Excel() { } public void ...
- ASCII和16进制
所谓的ASCII和16进制都只是概念上的东西,在计算机中通通是二进制 转换应该是输出的转换,同样是一个数,在计算机内存中表示是一样的,只是输出不一样ASCII是针对字符的编码,几乎是键盘上的字符的编码 ...