📄 u_managertree.pas
字号:
Procedure TManagerTree.GetTreeValue(Var TreeView:TTreeView;UserCode,ParentNodeValue:String;Send:TObject);
Var
ChildNodeValue,SqlStr:String;//子节点的值,Sql语句
ParentNode,ChildNode:TTreeNode;//父节点,子节点
ADOQuery:TADOQuery;//Sql语句的ADO执行变量
begin
Inc(ConnectionCount);
If ConnectionCount>MaxNodeAmount Then
Exit;
If CurrNodeIndex>=MaxNodeAmount Then
Exit;
SqlStr:='Select Distinct UserCode,Enable,ChildNodeValue,(ParentNodeValue'+'+'+''''+'\'+''''+'+'+'ChildNodeValue) As Path From OperatorModuleMsg';
SqlStr:=SqlStr+' Where ParentNodeValue=:ParentNodeValue';
If UserCode<>'' Then
SqlStr:=SqlStr+' And UserCode='+''''+UserCode+'''';
SqlStr:=SqlStr+' Order By ChildNodeValue';
With ADOQuery Do
Begin
ADOQuery:=TADOQuery.Create(nil);
ADOQuery.Connection:=ADOConnection;
ADOQuery.Close;
ADOQuery.SQL.Clear;
ADOQuery.SQL.Add(SqlStr);
ADOQuery.Parameters.ParamByName('ParentNodeValue').Value:=ParentNodeValue;
Try
ADOQuery.Open;
Except
If (Send Is TObject) Then
(Send As TMemo).Lines.Add('获取数据库数据出错:'+ParentNodeValue+'---'+ChildNodeValue);
Exit;
End;
While Not ADOQuery.Eof Do
Begin
ChildNodeValue:=Trim(ADOQuery.FieldByName('Path').AsString);
{
************************
*****函数体处理过程*****
************************
}
If (Send Is TObject) Then
(Send As TMemo).Lines.Add(ParentNodeValue+'---'+ChildNodeValue);
CurrNode[CurrNodeIndex+1]:=TreeView.Items.AddChild(CurrNode[CurrNodeIndex],Trim(ADOQuery.FieldByName('ChildNodeValue').AsString));
If ADOQuery.FieldByName('Enable').AsInteger=1 Then
Begin
CurrNode[CurrNodeIndex+1].ImageIndex:=1;
CurrNode[CurrNodeIndex+1].SelectedIndex:=CurrNode[CurrNodeIndex+1].ImageIndex;
End
Else
Begin
CurrNode[CurrNodeIndex+1].ImageIndex:=0;
CurrNode[CurrNodeIndex+1].SelectedIndex:=CurrNode[CurrNodeIndex+1].ImageIndex;
End;
Inc(CurrNodeIndex);
Application.ProcessMessages;
GetTreeValue(TreeView,UserCode,ChildNodeValue,Send);
Application.ProcessMessages;
ADOQuery.Next;
End;
If ADOQuery.Eof Then
Begin
Dec(CurrNodeIndex);
Exit;
End;
End;
ADOQuery.Free;
End;
Function TManagerTree.GetNodeAmount:Integer;
Var
ADOQuery:TADOQuery;
SqlStr:String;
Begin
ADOQuery:=TADOQuery.Create(nil);
ADOQuery.Connection:=ADOConnection;
ADOQuery.Close;
ADOQuery.SQL.Clear;
SqlStr:='Select Max(AutoID) As MaxAutoID From TreeValue';
ADOQuery.SQL.Add(SqlStr);
ADOQuery.Open;
If Not ADOQuery.Eof Then
Result:=ADOQuery.FieldByName('MaxAutoID').AsInteger
Else
Result:=0;
ADOQuery.Free;
End;
//往树添加一个节点
Procedure TManagerTree.InsertNode(Var TreeView:TTreeView);
Var
CurrNodes:TTreeNode;
ADOQuery:TADOQuery;
SqlStr,ParentNodeValue,ChildNodeValue:String;
Begin
TreeView.SetFocus;
If TreeView.SelectionCount=0 Then
Begin
CurrNodes:=TreeView.Items.Insert(nil,'模块'+IntToStr(GetNodeAmount));
TreeView.Selected:=CurrNodes;
Exit;
End;
CurrNodes:=TreeView.Selected;
CurrNodes:=TreeView.Items.Insert(CurrNodes,'模块'+IntToStr(GetNodeAmount));
TreeView.Selected:=CurrNodes;
ParentNodeValue:=GetNodeParentValues(TreeView);
ChildNodeValue:=Trim(CurrNodes.Text);
ADOQuery:=TADOQuery.Create(nil);
ADOQuery.Connection:=ADOConnection;
ADOQuery.Close;
ADOQuery.SQL.Clear;
SqlStr:='Insert Into OperatorModuleMsg(ParentNodeValue,ChildNodeValue,Enable) Values(';
SqlStr:=SqlStr+''''+ParentNodeValue+''''+','+''''+ChildNodeValue+''''+',1)';
ADOQuery.SQL.Add(SqlStr);
Try
ADOQuery.ExecSQL;
Except
End;
TreeView.ReadOnly:=True;
UpdateNode(TreeView);
ADOQuery.Free;
End;
//往树添加一个子节点
Procedure TManagerTree.InsertChildNode(Var TreeView:TTreeView);
Var
CurrNodes:TTreeNode;
ADOQuery:TADOQuery;
SqlStr:String;
Begin
TreeView.SetFocus;
If TreeView.SelectionCount=0 Then
Begin
CurrNodes:=TreeView.Items.Insert(nil,'模块'+IntToStr(GetNodeAmount));
TreeView.Selected:=CurrNodes;
Exit;
End;
CurrNodes:=TreeView.Selected;
CurrNodes:=TreeView.Items.AddChild(CurrNodes,'模块'+IntToStr(GetNodeAmount));
TreeView.Selected:=CurrNodes;
ADOQuery:=TADOQuery.Create(nil);
ADOQuery.Connection:=ADOConnection;
ADOQuery.Close;
ADOQuery.SQL.Clear;
SqlStr:='Insert Into OperatorModuleMsg(ParentNodeValue,ChildNodeValue,Enable) Values(';
SqlStr:=SqlStr+''''+GetNodeParentValues(TreeView)+''''+','+''''+CurrNodes.Text+''''+',1)';
ADOQuery.SQL.Add(SqlStr);
Try
ADOQuery.ExecSQL;
Except
End;
TreeView.ReadOnly:=True;
UpdateNode(TreeView);
ADOQuery.Free;
End;
//删除当前节点
Procedure TManagerTree.DeleteNode(Var TreeView:TTreeView);
Var
ADOQuery:TADOQuery;
SqlText,ParentNodeValue,ChildNodeValue:String;
Begin
OperatorOption:=3;
TreeView.SetFocus;
If TreeView.SelectionCount=0 Then
Exit;
ParentNodeValue:=Trim(GetNodeParentValues(TreeView));
ChildNodeValue:=Trim(TreeView.Selected.Text);
TreeView.Selected.Delete;
SqlText:='Delete From OperatorModuleMsg Where ParentNodeValue='+''''+ParentNodeValue+'''';
SqlText:=SqlText+'And ChildNodeValue='+''''+ChildNodeValue+'''';
ADOQuery:=TADOQuery.Create(nil);
ADOQuery.Connection:=ADOConnection;
ADOQuery.Close;
ADOQuery.SQL.Clear;
ADOQuery.SQL.Add(SqlText);
Try
ADOQuery.ExecSQL;
Except
End;
SqlText:='Delete From OperatorModuleMsg Where ParentNodeValue Like '+''''+ParentNodeValue+'\'+ChildNodeValue+'%'+'''';
ADOQuery.Close;
ADOQuery.SQL.Clear;
ADOQuery.SQL.Add(SqlText);
Try
ADOQuery.ExecSQL;
Except
End;
ADOQuery.Free;
End;
//修改树节点的值
Procedure TManagerTree.UpdateNode(Var TreeView:TTreeView);
Begin
TreeView.SetFocus;
TreeView.ReadOnly:=False;
NodeValueBeforUpdate:=Trim(TreeView.Selected.Text);
TreeView.Selected.EditText;
End;
//获取当前树节点的路径
Function TManagerTree.GetNodeParentValues(Var TreeView:TTreeView):String;
Var
CurrNodes:TTreeNode;
Str:String;
Begin
If (TreeView.SelectionCount=0) Or (TreeView.Selected.Parent=nil) Then
Begin
CurrNodes:=nil;
Str:='nil';
Exit;
End;
CurrNodes:=TreeView.Selected;
Str:=Trim(CurrNodes.Parent.Text);
CurrNodes:=CurrNodes.Parent;
While CurrNodes.Parent<>nil Do
Begin
Str:=Trim(CurrNodes.Parent.Text)+'\'+Str;
CurrNodes:=CurrNodes.Parent;
End;
Result:=Str;
End;
//获取当前树节点的路径
Function TManagerTree.GetNodeParentValues(TreeNode:TTreeNode):String;
Var
CurrNodes:TTreeNode;
Str:String;
Begin
If TreeNode=nil Then
Begin
CurrNodes:=nil;
Str:='nil';
Exit;
End;
CurrNodes:=TreeNode;
Str:=Trim(CurrNodes.Parent.Text);
CurrNodes:=CurrNodes.Parent;
While CurrNodes.Parent<>nil Do
Begin
Str:=Trim(CurrNodes.Parent.Text)+'\'+Str;
CurrNodes:=CurrNodes.Parent;
End;
Result:=Str;
End;
//树管理对象析构函数
DesTructor TManagerTree.Destroy;
Begin
ADOConnection.Free;
End;
End.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -