tslediter/d_examples/TreeView/e_treeviewmain.tsf

120 lines
3.2 KiB
Plaintext

type E_TreeViewmain=class(tdcreateform)
uses tslvcl;
treeview1:ttreeview;
btn1:tbtn;
btn2:tbtn;
btn3:tbtn;
btn4:tbtn;
btn5:tbtn;
btn6:tbtn;
btn7:tbtn;
btn8:tbtn;
function Create(AOwner);override; //构造
begin
inherited;
end
function btn8_clk(o;e);virtual;
begin
treeview1.HasLine := not treeview1.HasLine;
end
function e_treeviewmain1_close(o;e);virtual;
begin
{**
@explan(说明) 主窗口关闭回调 %%
@param(e)(tuievent) 消息对象 %%
@param(o)(ttimer) 当前主窗口 %%
**}
if MessageBoxA('是否关闭当前窗口','关闭',MB_YESNO,o)<>IDYES then e.skip := true;
end
function btn7_clk(o;e);virtual;
begin
Messageboxa(tostn(treeview1.RootNode.toarray()),"数据",0,self);
end
function btn6_clk(o;e);virtual; //修改文本
begin
nd := treeview1.CurrentNode;
if not nd then return;
r := nd.caption;
wd := new TInPutQuerys(self);
wd.parent := self;
d := array(("Name":"b","value":r,"caption":"标题名:"));
wd.SetData(d);
if wd.ShowDlg(r1,"输入标题") then
begin
nd.caption := r1["b"];
treeview1.InvalidateItem(nd);
end
end
function btn4_clk(o;e);virtual;//checkbox
begin
treeview1.checkbox := not treeview1.checkbox;
treeview1.InvalidateRect(nil,false);
end
function btn5_clk(o;e);virtual; //删除选择
begin
nd := treeview1.CurrentNode;
if nd then
begin
nd.Recycling();
end
end
function btn3_clk(o;e);virtual;//插入子节点
begin
nd := treeview1.CurrentNode;
if nd then
begin
nnd := treeview1.CreateTreeNode();
nnd.caption := datetimetostr(now());
nnd.parent := nd;
treeview1.SetSel(nnd);
end
end
function btn2_clk(o;e);virtual; //初始化
begin
rnd := treeview1.RootNode;
ndsz := treeview1.CreateTreeNode();
ndsz.caption := "深圳";
ndsz.parent := rnd;
ndgz := treeview1.CreateTreeNode();
ndgz.caption := "广州";
ndgz.parent := rnd;
for i,v in array("福田","罗湖","宝安","龙岗","盐田") do
begin
nd := treeview1.CreateTreeNode();
nd.caption := v;
nd.parent := ndsz;
end
for i,v in array("白云","花都","天河") do
begin
nd := treeview1.CreateTreeNode();
nd.caption := v;
nd.parent := ndgz;
end
end
function btn1_clk(o;e);virtual; //清空
begin
treeview1.RootNode.RecyclingChildren();
end
function DoControlAlign();override;//对齐子控件
begin
//当窗口大小改变时,该函数会被调用,
//可以通过 clientrect 获取客户区大小,设置子控件的位置以及大小
//如果自己处理了子控件的对齐,就可以去掉 inherited
inherited;
end
function Recycling();override; //回收变量
begin
inherited;
ci := self.classinfo(); //将成员变量赋值为nil避免循环引用
for i,v in ci["members"] do
begin
invoke(self,v["name"],nil);
end
end
end