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

📄 unit_treepublic.pas

📁 工廠採購管理系統
💻 PAS
字号:
{*******************************************************}
{                                                       }
{       三方代码 --- Treeview                           }
{                                                       }
{       版权所有 (C) 2002, 2003 天涯工作室              }
{                                                       }
{*******************************************************}


unit Unit_treepublic;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, ComCtrls, DB, ADODB,graphics,dialogs,uconst;

{-------------------------------------------------------------------------------
  过程名:    MakeTree
  说明:     创建树
  作者:      Along
  日期:      2004.12.07
  参数:      Query: TADOQuery; TableName: string; TreeView: TTreeView
  参数说明: Query:相关联的数据库; TableName: 对应的表名; TreeView: 所使用的树
  返回值:    无
-------------------------------------------------------------------------------}
procedure MakeTree(Query: TADOQuery; TableName: string; TreeView: TTreeView;title:string);

{-------------------------------------------------------------------------------
  过程名:    AddNode
  说明:     增加树的节点
  作者:      Along
  日期:      2004.12.07
  参数:      Query: TADOQuery; TreeView: TTreeView
  参数说明: Query:相关联的数据库;TreeView: 所使用的树
  返回值:    无
-------------------------------------------------------------------------------}
{procedure AddNode(Query: TADOQuery; TreeView: TTreeView);}

{-------------------------------------------------------------------------------
  过程名:    AddChildNode
  说明:     增加树的子节点
  作者:      Along
  日期:      2004.12.07
  参数:      Query: TADOQuery; TreeView: TTreeView
  参数说明: Query:相关联的数据库;TreeView: 所使用的树
  返回值:    无
-------------------------------------------------------------------------------}
procedure MakeTreesearch(Query: TADOQuery;TreeView: TTreeView);
procedure AddChildNode(Query: TADOQuery; TreeView: TTreeView);

{-------------------------------------------------------------------------------
  过程名:    AddTreeNode
  说明:     增加节点(内部使用的过程)
  作者:      Along
  日期:      2004.12.07
  参数:      Query: TADOQuery; TreeView: TTreeView; bj: boolean = false
  参数说明: Query:相关联的数据库;TreeView: 所使用的树;bj:是否将焦点移到当前选择的节点
  返回值:    无
-------------------------------------------------------------------------------}
procedure AddTreeNode(Query: TADOQuery; TreeView: TTreeView; bj: boolean = false);

{-------------------------------------------------------------------------------
  过程名:    DelTree
  说明:     删除节点(包括删除本节点下的所有子节点)
  作者:      Along
  日期:      2004.12.07
  参数:      query: TAdoQuery; TreeView: TTreeView
  参数说明: Query:相关联的数据库;TreeView: 所使用的树
  返回值:    无
-------------------------------------------------------------------------------}
procedure DelTree(query: TAdoQuery; TreeView: TTreeView);

{-------------------------------------------------------------------------------
  过程名:    Treechange
  说明:     在树中选择了一个节点,将数据库的游标移动到所选择的节点所对应记录
  作者:      Along
  日期:      2004.12.07
  参数:      query: TADOQuery; node: TTreenode
  参数说明: Query:相关联的数据库;TreeView: 所使用的树
  返回值:    无
-------------------------------------------------------------------------------}

procedure Treechange(query: TADOQuery; node: TTreenode);

{-------------------------------------------------------------------------------
  过程名:    Treeedit
  说明:     树中的节点内容已经作了修改,将所修改的内容更新回数据库
  作者:      Along
  日期:      2004.12.07
  参数:      query: TADOQuery; text: string
  参数说明: Query:相关联的数据库;TreeView: 所使用的树
  返回值:    无
-------------------------------------------------------------------------------}
procedure treeedit(treeview:ttreeview; classname: string;newclass:string);

{-------------------------------------------------------------------------------
  过程名:    treeselect
  说明:     数据库中的游标已经移动,将焦点移到树中对应的节点
  作者:      Along
  日期:      2004.12.07
  参数:      query: Tadoquery; TreeView: TTreeView
  参数说明: Query:相关联的数据库;TreeView: 所使用的树
  返回值:    无
-------------------------------------------------------------------------------}
procedure TreeSelect(StrList:string; TreeView: TTreeView);

{-------------------------------------------------------------------------------
  函数名:    TreeFind
  说明:     找出给定的内容,并移动数据库中的游标,同时将焦点移到树中对应的节点
  作者:      Along
  日期:      2004.12.07
  参数:      TreeView: TTreeView; text: string
  参数说明: TreeView: 所使用的树 text: 要查找的内容
  返回值:    True:找到  False:找不到
-------------------------------------------------------------------------------}
function TreeFind(TreeView: TTreeView; text: string): boolean;

procedure TreeSearchDraw(ADOquery:TADOQuery;TreeView:TTreeView;StrSearch:string;Node:TTreenode);  {TreeView符合查询条件的记录变色}



var fjid,bh,mc:string;
  Node1: TTreeNode;
implementation

var
  List: TStringList; //用于记录各个dq_dqbh及其在树中所对应的节点,从而实现快速查找

procedure MakeTree(Query: TADOQuery; TableName: string; TreeView: TTreeView;title:string);

begin
  TreeView.Items.BeginUpdate;
  list.Clear;
  TreeView.items.clear;
  if query.Active then query.Close;
  Query.SQL.Text := 'SELECT * FROM ' +TableName+' ORDER BY child desc,classname desc';
  Query.Open;
  query.DisableControls;
  TreeView.Items.Clear;
  list.Clear;
  List.Sorted := True;
  query.First;
       node1:= treeview.Items.AddFirst(nil,title);
while not Query.Eof do
  begin
    addtreenode(Query, TreeView); //依次增加所有的节点
    if not query.Eof then
    Query.Next;
  end;
  TreeView.Items.EndUpdate;
  query.EnableControls;
  if treeview.Items.Count < 1 then exit;
  treeview.Select(treeview.Items.Item[0]);
//  treeview.SetFocus;
end;
procedure MakeTreesearch(Query: TADOQuery;TreeView: TTreeView);
begin
  TreeView.Items.BeginUpdate;
  list.Clear;
  TreeView.items.clear;
  List.Sorted := True;
  query.DisableControls;
  query.First;
  while not Query.Eof do
  begin
    addtreenode(Query, TreeView); //依次增加所有的节点
    if not query.Eof then
    Query.Next;
  end;
  TreeView.Items.EndUpdate;
  query.EnableControls;
  if treeview.Items.Count < 1 then exit;
  treeview.Select(treeview.Items.Item[0]);
//  treeview.SetFocus;
end;
procedure addtreenode(Query: TADOQuery; TreeView: TTreeView; bj: boolean = false);
var
  index: integer;
  Node: TTreeNode;
begin
  if Query.FieldByName('child').AsString= 'root' then { ParentID=0,顶层节点 }
  begin

    Index := List.IndexOf('root');
    Node := TreeView.Items.AddChild(node1, Query.FieldByName('classname').AsString)
//增加节点,并将本节点所对应的记录标签数据放到节点所提供的附加数据中
end
  else
  begin
    Index := List.IndexOf(Query.FieldByName('child').AsString);
    Node := TreeView.Items.AddChildObjectFirst(TTreeNode(List.Objects[Index]),
      Query.FieldByName('classname').AsString, query.GetBookmark);
//增加子节点,并将本节点所对应的记录标签数据放到节点所提供的附加数据中
  end;
//增加当前节点的信息到列表中,以实现在列表中快速查找节点的功能。
  List.AddObject(Query.FieldByName('id').Asstring, Node);
  if bj then
  begin
    treeview.Select(node);
  end;
end;

procedure deltree(query: TAdoQuery; TreeView: TTreeView);
var
  node: TTreenode;
//删除当前选择的节点下的所有节点(不删除当前选择的节点)
  procedure delnode(node: TTreenode);
  var
    i: integer;
    childnode: TTreenode;
  begin
    for i := 0 to node.Count - 1 do
    begin
      childnode := node.Item[i]; //取当前节点下的所有节点
      query.GotoBookmark(childnode.Data); //移到节点所对应的记录
      list.Delete(list.IndexOf(query.FieldByName('id').AsString)); //删除列表中的数据
      query.Delete; //删除对应的记录
      if node.HasChildren then delnode(childnode); //有子节点则递归直到所有的数据删除完毕
    end;
  end;
{另一方法:
用一个递归:
procedure doSearch(tn: TTreeNode);
var i: ingeger;  
begin
 if tn.HasChildren then
 begin
  for i := tn.Count -1 downto 0 do doSearch(tn[i]); 
 end
 else
 begin
   //这里是你对每个节电要做的事情
 end;
end;}

begin
  node := treeview.Selected;
  if node = nil then exit;
//删除当前选择的节点下的所有节点(不删除当前选择的节点)
  delnode(node);
//删除当前选择的节点
  query.GotoBookmark(node.Data);
  list.Delete(list.IndexOf(query.FieldByName('id').AsString));
  query.Delete;
  node.Delete;
  TreeView.SetFocus;
end;

procedure AddChildNode(Query: TADOQuery; TreeView: TTreeView);
var
  dq_dqbh:string;
begin
  dq_dqbh := query.FieldByName('id').asstring; //记下当前的节点编号
  query.Append;
  query.FieldByName('classname').AsString := '新建子节点';
  query.FieldByName('child').asstring := dq_dqbh; //新增加的子节点的父节点编号即为dq_dqbh

  //query.FieldByName('dq_bz').AsString:='af';
  query.post;
  addtreenode(query, treeview, true);
end;

{procedure AddNode(Query: TADOQuery; TreeView: TTreeView);
var
  dq_dqbh: integer;
begin
  dq_dqbh := query.FieldByName(fjid).AsInteger; //记下当前节点的父节点编号
  query.Append;
  query.FieldByName(mc).AsString := '新建节点';
  query.FieldByName(fjid).AsInteger := dq_dqbh; //新增加的子节点的父节点编号即为dq_fjdq_dqbh

  //query.FieldByName('dq_bz).AsString:='af';
  query.post;
  addtreenode(query, treeview, true);
end;}

procedure Treechange(query: TADOQuery; node: TTreenode);
begin
  query.GotoBookmark(node.Data);
end;

procedure treeedit(treeview:ttreeview; classname: string;newclass:string);
var
i:integer;
begin
  for i:=0  to treeview.Items.Count do
  begin
  if trim(treeview.items[i].text)=classname then
  treeview.Items[i].Text:=newclass;
  end;
end;

procedure treeselect(StrList:string; TreeView: TTreeView);
var
  index: integer;
  Node: TTreeNode;
begin
  Index := List.IndexOf(StrList);
  Node := TTreeNode(List.Objects[Index]);
  treeview.Selected := Node;
  treeview.SetFocus;

//查看 List 值
{  for index:= 0 to list.Count -1 do
  begin
    ShowMessage(list.Strings[index]);
  end;  }

end;

function TreeFind(TreeView: TTreeView; text: string): boolean;
var
  i: integer;
begin
  Result := false;
  for i := 0 to treeview.Items.Count - 1 do
  begin
    if treeview.Items.Item[i].Text = text then
    begin
      treeview.Select(treeview.Items.Item[i]);
      treeview.SetFocus;
      Result := true;
      exit;
    end;
  end;
end;


procedure TreeSearchDraw(ADOquery:TADOQuery;TreeView:TTreeView;StrSearch:string;Node:TTreenode);  {TreeView符合查询条件的记录变色}
var Index:integer;
begin
  if ADOquery.Active = false then
  exit;

  ADOQuery.First;
  while not ADOQuery.Eof do
  begin
    Index:=list.IndexOf(inttostr(ADOQuery.fieldbyname(StrSearch).AsInteger));
    if node = ttreenode(list.Objects[Index]) then
      TreeView.Canvas.Font.Color := clBlue;
    ADOQuery.Next;
  end;

end;



initialization
  List := TStringList.Create;

finalization
  list.Free;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -