|

楼主 |
发表于 2008-6-23 11:34:25
|
显示全部楼层
8) 在我的主界面上,放一个TreeView,Name为tvFuncTree,作为功能树来显示到主界面上
这里我做的主界面是显示当前登陆者的每一个岗位,在岗位下显示这个岗位下分配的功能
每一个岗位下得到分配的功能,然后用TUserBizTreeView来表现这些功能,然后把TUserBizTreeView的所有节点都复制到tvFuncTree的岗位节点下面。
以下是显示功能树的代码
// 获取岗位的显示名称
function GetPositionStr(Value: TOperatorPosition): String;
begin
Result := StringUtils.Copy(Bizsys.ObjectInfo(Value.PersonMember.BizURL).DisplayNamePath, 11, 100);
Exit;
Result := SysUtils.Format('部门:%s(%s)', [
Org.OrgSys.OrgSystem.FindUnit(Value.DeptID, '', '').DisplayName,
OrgSys.OrgSystem.GetMemberDisplayName(Value.PersonMember)] );
end;
// BizTreeView缺省是不展开的,在点击节点时候再动态加载展开的
// 此处需要复制节点到功能树,因此需要代码展开BizTreeView
procedure ExpandBizTree(ATreeView: TBizTreeView);
var
lNode: TTreeNode;
begin
lNode := ATreeView.Items.GetFirstNode;
while lNode<>nil do
begin
lNode.Expand(True);
lNode := lNode.getNextSibling
end;
end;
procedure TMyMainForm.ShowFuncTree;
var
i: Integer;
lNode: TTreeNode;
lFuncURLs: TStringList;
tv: TUserBizTreeView;
begin
tvFuncTree.Items.Clear;
for i:=0 to TSystemCore.Operator.PositionCount-1 do
begin
lNode := tvFuncTree.Items.AddChildObject(nil, GetPositionStr(TSystemCore.Operator.Positions), TSystemCore.Operator.Positions);
if TSystemCore.Operator.DefaultPosition=TSystemCore.Operator.Positions then
lNode.Text := '缺省岗位:'+lNode.Text;
if TOrgUtils.IsDeputized(TSystemCore.Operator.Positions) then
lNode.Text := '代理岗位:'+lNode.Text;
lFuncURLs := TStringList.Create;
// 得到岗位的功能权限列表
TContextUtils.GetAllocatedFuncs(TSystemCore.Operator.Positions.Context, lFuncURLs);
tv := TUserBizTreeView.Create(nil);
try
tv.ShowOptions := [TBizObjectKind.boBizServer, TBizObjectKind.boSpace,
TBizObjectKind.boFolder, TBizObjectKind.boBizFuncSpace, TBizObjectKind.boFunc];
tv.Parent := Self;
tv.ReloadTree;
tv.IncludeFiles.Clear;
// 把功能权限列表的URL转换成FileName的形式
TSystemUtils.URLs2Files(lFuncURLs, tv.IncludeFiles);
tv.UseIncludeFiles := True;
ExpandBizTree(tv);
CopyTreeToNode(TTreeView(tv), lNode);
tvFuncTree.Images := tv.Images;
finally
tv.Free;
end;
lFuncURLs.Free;
end;
end;
procedure TMyMainForm.CopyTreeToNode(srcTree: TTreeView; dstNode: TTreeNode);
var
lNode: TTreeNode;
begin
lNode := srcTree.Items.GetFirstNode;
while lNode<>nil do
begin
CopyNodeToNode(lNode, dstNode);
lNode := lNode.getNextSibling;
end;
end;
procedure TMyMainForm.CopyNodeToNode(srcNode, dstNode: TTreeNode);
var
lDstNode: TTreeNode;
lSrcNode: TTreeNode;
begin
lSrcNode := srcNode;
lDstNode := TTreeView(dstNode.TreeView).Items.AddChildObject(DstNode, lSrcNode.Text, lSrcNode.Data);
lDstNode.Assign(lSrcNode);
lSrcNode := SrcNode.getFirstChild;
while lSrcNode<>nil do
begin
CopyNodeToNode(lSrcNode, lDstNode);
lSrcNode := SrcNode.GetNextChild(lSrcNode);
end;
end;
|
|