⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fratree.pas

📁 关于利用DELPHI来进行企业级方案解决的著作的附书源码
💻 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 + -