关于用树型视图treeview显示操作员权限的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 zzs3842
  • 开始时间 开始时间
Z

zzs3842

Unregistered / Unconfirmed
GUEST, unregistred user!
公司要做一个软件,其中系统管理模块有一个界面操作员界面,其中有一个关键地方是:该软件的功能模块和某些界面(例如增加一个查询界面或增加一个卡表管理模块)以后可能动态更新。想用treeview动态显示权限,并且在每项权限前可以复选(即在动态显示的权限树上,用户可以选择权限,最后可以把用户选择的权限保存),具体该怎么做?
 
去下个带复选的TREEVIEW
 
搞两幅图片模拟复选框的选中和未选中
然后根据node的imageindex可以判断出来

不想根据图片判断,可以在node的data里赋一个具有选中未选中标志的结构指针,然后
根据点击改变那个值你就知道那个结点是不是被选中了
 
用TreeView好象不是很方便
我们的做法是用 2张表 1张表保存操作员 1张保存操作员的权限明细
软件中的每个界面都对应一个权限值
这样做动态更新很方便,增加新界面时相应增加权限值就可以
至于显示某个操作员的权限是用的个DBGrid
 
来自:52free, 时间:2007-3-7 17:15:00, ID:3677949
搞两幅图片模拟复选框的选中和未选中
然后根据node的imageindex可以判断出来

这位朋友的提法 我试了下 不太好用 我的做法是设定image index=1为选中的图标,image index=3 为未选中的图标
然后在

procedure TForm1.TreeView1Click(Sender: TObject);
begin
if treeview1.Selected.ImageIndex <> 3 then
begin
treeview1.Selected.ImageIndex := 3;
end
else
begin
treeview1.Selected.ImageIndex := 0;
end;
end;

有兴趣的话可以试试 有问题的
 
ImageIndex := 3;为选中的图标
ImageIndex := 0;为未选中的 图标
 
选中不选中图标不能这样写的! 我的权限管理完全是使用TTreeView.我觉得非常好用直观.
不过就是代码量大一点
 
用RzTreeView
 
通过数据库控制不同人员有不同的权限
 
来自:kk2000, 时间:2007-3-9 10:31:30, ID:3678784
选中不选中图标不能这样写的! 我的权限管理完全是使用TTreeView.我觉得非常好用直观.
不过就是代码量大一点

老兄 能不能给一个实例,多谢!!QQ:39021982
 
procedure TForm1.TreeView1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
hits: THitTests;
Node: TTreeNode;
begin
hits := TreeView1.GetHitTestInfoAt(x, y);
if htOnStateIcon in hits then
begin
Node := TreeView1.GetNodeAt(x, y);
//{下面自己发挥了}
end;
end;
 
为了美观和开发效率,treeview,几乎被我淘汰了,一般用treelist,有好,关键是快,
节省时间。
如用treeview,可以画,先准备好三个bitmap文件,两个是不选中的,另一个是选中的
(注意是三个图片,两个不行,不知是不是treeview的bug)
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
HitInfo: THitTests;
node: TTreeNode;
Pos: TPoint;
begin
GetCursorPos(Pos);
Pos := self.TreeView1.ScreenToClient(Pos);
with Pos do
begin
HitInfo := self.TreeView1.GetHitTestInfoAt(X, Y);
node := self.TreeView1.GetNodeAt(X, Y);
end;
if (node <> nil) and (HtOnStateIcon in HitInfo) then
begin
if node.StateIndex = 1 then
node.StateIndex := 2
else if node.StateIndex = 2 then
node.StateIndex := 1;
end;
end;
 
我有例子。QQ 375080649
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
825
DelphiTeacher的专栏
D
后退
顶部