📄 u_managertree.pas
字号:
unit U_ManagerTree;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Menus,
Dialogs, Buttons, StdCtrls, Mask, ExtCtrls,ADODB, QControls,ComCtrls,IniFiles,CheckLst,
ShellAPI,DateUtils,ComObj,Math,U_RecordStruct;
Const
MaxNodeAmount=1000;
Type
TManagerTree=Class
//过程声明
Private
{Private declarations}
Public
ADOConnection:TADOConnection;
ConnectionCount,CurrNodeIndex:Integer;
//Curr:Array[1..MaxNodeAmount] Of CurrentNode;
CurrNode:Array [1..MaxNodeAmount] Of TTreeNode;
StopSearch:Boolean;
OperatorOption:Integer;//为0是无操作为1是添加节点为2是修改节点为3是添加子节点
NodeValueBeforUpdate:String;
//树管理对象初始化
Constructor Create(ComputerName,DataBaseName,UserName,UserPassWord:String);
//树的搜索及遍历(Option为1是设置属性、为2是添加模块)
Function SearchTree(TreeItem:TTreeNode;UserCode:String;Send:TObject):TTreeNode;OverLoad;
Function SearchTree(TreeItem:TTreeNode;UserCode,UserName:String;Send:TObject):TTreeNode;OverLoad;
//判断节点是否存在
Function NodeIsExist(UserCode,ParentNodeValue,ChildNodeValue:String;Enable:Integer;Send:TObject):Boolean;
//从数据表中取出树的值
Procedure GetTreeValue(Var TreeView:TTreeView;UserCode,ParentNodeValue:String;Send:TObject);
//往树添加一个节点
Procedure InsertNode(Var TreeView:TTreeView);
//往树添加一个子节点
Procedure InsertChildNode(Var TreeView:TTreeView);
//删除当前节点
Procedure DeleteNode(Var TreeView:TTreeView);
//修改当前节点的值
Procedure UpdateNode(Var TreeView:TTreeView);
//获取当前节点的路径
Function GetNodeParentValues(Var TreeView:TTreeView):String;OverLoad;
//获取当前树节点的路径
Function GetNodeParentValues(TreeNode:TTreeNode):String;OverLoad;
//获取节点数目
Function GetNodeAmount:Integer;
//修改节点的属性
Procedure UpdateModuleValue(TreeNode:TTreeNode;UserCode:String;Enable:Integer);Overload;
//修改节点的属性
Procedure UpdateModuleValue(NewUserCode,NewUserName,OldUserCode:String);Overload;
//添加用户模块信息
Procedure InsertUserModuleMsg(UserCode,UserName:String);
{Public declarations}
//树管理对象析构函数
DesTructor Destroy;
End;
//Var
//变量声明
Implementation
Uses U_OtherPublicPack,U_DBPublicPack;
//树管理对象初始化
Constructor TManagerTree.Create(ComputerName,DataBaseName,UserName,UserPassWord:String);
Begin
OperatorOption:=0;
ADOConnection:=TADOConnection.Create(nil);
ConnectDataBase(ADOConnection,ComputerName,DataBaseName,UserName,UserPassWord);
End;
//添加用户模块信息
Procedure TManagerTree.InsertUserModuleMsg(UserCode,UserName:String);
Var
ADOQuery:TADOQuery;
SqlStr:String;
Begin
ADOQuery:=TADOQuery.Create(nil);
ADOQuery.Connection:=ADOConnection;
ADOQuery.Close;
ADOQuery.SQL.Clear;
SqlStr:='Insert Into OperatorModuleMsg(UserCode,UserName,ParentNodeValue,ChildNodeValue,Enable)';
SqlStr:=SqlStr+' Select :UserCode,:UserName,ParentNodeValue,ChildNodeValue,Enable From OperatorModuleDefaultMsg';
ADOQuery.SQL.Add(SqlStr);
ADOQuery.Parameters.ParamByName('UserCode').Value:=UserCode;
ADOQuery.Parameters.ParamByName('UserName').Value:=UserName;
Try
ADOQuery.ExecSQL;
Except
End;
ADOQuery.Free;
End;
//判断节点是否存在
Function TManagerTree.NodeIsExist(UserCode,ParentNodeValue,ChildNodeValue:String;Enable:Integer;Send:TObject):Boolean;
Var
ADOQuery:TADOQuery;
SqlStr:String;
Begin
ADOQuery:=TADOQuery.Create(nil);
ADOQuery.Connection:=ADOConnection;
ADOQuery.Close;
ADOQuery.SQL.Clear;
SqlStr:='Select * From OperatorModuleMsg Where ParentNodeValue=:ParentNodeValue';
SqlStr:=SqlStr+' And ChildNodeValue=:ChildNodeValue';
If UserCode<>'' Then
SqlStr:=SqlStr+' And UserCode='+''''+UserCode+'''';
If Enable>=0 Then
SqlStr:=SqlStr+' And Enable='+IntToStr(Enable);
ADOQuery.SQL.Add(SqlStr);
ADOQuery.Parameters.ParamByName('ParentNodeValue').Value:=ParentNodeValue;
ADOQuery.Parameters.ParamByName('ChildNodeValue').Value:=ChildNodeValue;
Try
ADOQuery.Open;
Except
End;
If ADOQuery.Eof Then
Result:=False
Else
Result:=True;
ADOQuery.Free;
End;
//修改节点的属性
Procedure TManagerTree.UpdateModuleValue(TreeNode:TTreeNode;UserCode:String;Enable:Integer);
Var
ADOQuery:TADOQuery;
SqlStr:String;
Begin
If TreeNode=nil Then
Exit;
ADOQuery:=TADOQuery.Create(nil);
ADOQuery.Connection:=ADOConnection;
ADOQuery.Close;
ADOQuery.SQL.Clear;
SqlStr:='Update OperatorModuleMsg Set Enable=:Enable Where ParentNodeValue=:ParentNodeValue';
SqlStr:=SqlStr+' And ChildNodeValue=:ChildNodeValue';
If UserCode<>'' Then
SqlStr:=SqlStr+' And UserCode='+''''+UserCode+'''';
ADOQuery.SQL.Add(SqlStr);
ADOQuery.Parameters.ParamByName('ParentNodeValue').Value:=GetNodeParentValues(TreeNode);
ADOQuery.Parameters.ParamByName('ChildNodeValue').Value:=TreeNode.Text;
If Enable=-1 Then
ADOQuery.Parameters.ParamByName('Enable').Value:=TreeNode.ImageIndex
Else
ADOQuery.Parameters.ParamByName('Enable').Value:=Enable;
Try
ADOQuery.ExecSQL;
Except
End;
ADOQuery.Free;
End;
//修改节点的属性
Procedure TManagerTree.UpdateModuleValue(NewUserCode,NewUserName,OldUserCode:String);
Var
ADOQuery:TADOQuery;
SqlStr:String;
Begin
ADOQuery:=TADOQuery.Create(nil);
ADOQuery.Connection:=ADOConnection;
ADOQuery.Close;
ADOQuery.SQL.Clear;
SqlStr:='Update OperatorModuleMsg Set UserCode=:NewUserCode,UserName=:NewUserName Where UserCode='+''''+OldUserCode+'''';
ADOQuery.SQL.Add(SqlStr);
ADOQuery.Parameters.ParamByName('NewUserCode').Value:=NewUserCode;
ADOQuery.Parameters.ParamByName('NewUserName').Value:=NewUserName;
Try
ADOQuery.ExecSQL;
Except
End;
ADOQuery.Free;
End;
//树的搜索及遍历
Function TManagerTree.SearchTree(TreeItem:TTreeNode;UserCode:String;Send:TObject):TTreeNode;
Var
CurrentIndex,Count,Enable:Integer;
CurrentItem:TTreeNode;
ParentNodeValue,ChildNodeValue:String;
begin
Count:=TreeItem.Count;
If Count=0 Then
Begin
Exit;
End
Else
Begin
For CurrentIndex:=0 To Count-1 Do
Begin
If StopSearch=True Then
Exit;
Application.ProcessMessages;
CurrentItem:=TreeItem.Item[CurrentIndex];
ChildNodeValue:=CurrentItem.Text;
ParentNodeValue:=GetNodeParentValues(CurrentItem);
If NodeIsExist(UserCode,ParentNodeValue,ChildNodeValue,1,nil) Then
CurrentItem.ImageIndex:=1
Else
CurrentItem.ImageIndex:=0;
{
**********************
*****函数处理过程*****
**********************
}
If (Send Is TMemo) Then
Begin
(Send As TMemo).Lines.Add(TreeItem.Item[CurrentIndex].Text);
(Send As TMemo).Lines.Add(IntToStr(TreeItem.Item[CurrentIndex].Index));
End;
SearchTree(CurrentItem,UserCode,Send);
End;
End;
End;
//树的搜索
Function TManagerTree.SearchTree(TreeItem:TTreeNode;UserCode,UserName:String;Send:TObject):TTreeNode;
Var
CurrentIndex,Count,Enable:Integer;
CurrentItem:TTreeNode;
ParentNodeValue,ChildNodeValue:String;
begin
Count:=TreeItem.Count;
If Count=0 Then
Begin
Exit;
End
Else
Begin
For CurrentIndex:=0 To Count-1 Do
Begin
If StopSearch=True Then
Exit;
Application.ProcessMessages;
CurrentItem:=TreeItem.Item[CurrentIndex];
ChildNodeValue:=CurrentItem.Text;
ParentNodeValue:=GetNodeParentValues(CurrentItem);
//AddOperatorModuleMsg(UserCode,UserName,ParentNodeValue,ChildNodeValue,CurrentItem.ImageIndex);
{
**********************
*****函数处理过程*****
**********************
}
If (Send Is TMemo) Then
Begin
(Send As TMemo).Lines.Add(TreeItem.Item[CurrentIndex].Text);
(Send As TMemo).Lines.Add(IntToStr(TreeItem.Item[CurrentIndex].Index));
End;
SearchTree(CurrentItem,UserCode,UserName,Send);
End;
End;
End;
//从数据表中取出树的值
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -