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