📄 fratree.pas
字号:
unit fraTree;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DBTables, ImgList, Db, ComCtrls, ToolWin, ExtCtrls,
fraDetail,PubVar;
type
TFrameTree = class(TFrame)
Splitter1: TSplitter;
Panel1: TPanel;
Tree: TTreeView;
Panel2: TPanel;
FrameDetail1: TFrameDetail;
ImageListTree: TImageList;
procedure Splitter1CanResize(Sender: TObject; var NewSize: Integer;
var Accept: Boolean);
procedure TreeCollapsed(Sender: TObject; Node: TTreeNode);
private
public
procedure LoadTree(treeDB:TDBDataSet);//初始化树
procedure UpdateTree(curNode:TTreenode;nodeTxt:string;state:string);
function GetNodeLevel(sFormat,sCode:string):integer;
end;
implementation
{$R *.DFM}
procedure TFrameTree.Splitter1CanResize(Sender: TObject; var NewSize: Integer;
var Accept: Boolean);
begin
self.Width:=NewSize+500;
self.refresh;
end;
procedure TFrameTree.LoadTree(treeDB:TDBDataSet);//初始化树
//initial tree when main form create
var curID,nodeTxt:string;
level,chindex,cnode,num:integer;
mynode:array[0..6] of TTreenode;
begin
//ini value
Screen.Cursor:=crHourGlass;
tree.Enabled:=True;
tree.Items.Clear;
level:=0 ;
num:=1;
tree.items.clear;
mynode[level]:=tree.items.add(Tree.Topitem,cTreeRootTxt);
mynode[level].ImageIndex:=1;
with treeDB do
begin
try
if not Active then open;
first;
while not Eof do
begin
curID:=trim(FieldByName('dwbm').AsString);
nodeTxt:=curID+'-'+trim(FieldByName('dwqc').AsString);
level:=GetNodeLevel(cTreeCodeFormat,curID);
if level>0 then
begin
mynode[level]:=tree.items.addchild(mynode[level-1],nodeTxt);
if level>4 then
mynode[level].ImageIndex:=3
else
mynode[level].ImageIndex:=1;
// mynode[level].tag:=curID;
end;
next;
end;
finally;
close;
End;
mynode[0].expand(False);
Screen.Cursor:=crDefault;
end;
end;
function TFrameTree.GetNodeLevel(sFormat,sCode:string):integer;
var i,level,iLen:integer;
begin
level:=-1 ;
iLen:=0;
if (sFormat<>'') and (sCode<>'') then
for i:=1 to Length(sFormat) do
begin
iLen:=iLen+StrToInt(sFormat[i]);
if Length(sCode)=iLen then
begin
level:=i;
break;
end;
end;
result:=level;
end;
procedure TFrameTree.UpdateTree(curNode:TTreenode;nodeTxt:string;state:string);//
Begin
if state='add' then
begin
curNode:=tree.items.addchild(curNode,nodeTxt);
curNode.ImageIndex:=2;
end;
if state='del' then curNode.delete;
if state='edi' then curNode.Text:=nodeTxt;
end;
procedure TFrameTree.TreeCollapsed(Sender: TObject; Node: TTreeNode);
begin
with Node do
begin
if HasChildren then
begin
if Expanded then ImageIndex:=2
else ImageIndex:=1
end
else ImageIndex:=3 ;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -