哈哈,老千真好
偶有一段程序,别人的例子,不只能否看懂
界面如下
用户管理
超级用户
普通用户1
普通用户2
……代码:
procedure Tf_szkl.qx_newClick(Sender: TObject);
var newName : string;
index : integer; //权限树索引
namecount,succ : integer; //姓名树、姓名不重复标志
begin //新建操作员
//展开权限树
qxtree.Items[0].Expand(False);
qxtree.Items[1].Expand(False); //打开权限内容数据库
ds_data.Qu_qxcount.Close;
ds_data.Qu_qxcount.Open; //操作员总数+1
pcount:=pcount+1; //新建操作员的权限和管理员一样
qxx:=f_gbv.pass_qxx.Caption; //姓名初始化判断
namecount:=1;
succ:=0;
while (succ=0) do
begin
//姓名初始化
newName:='新建操作员'+IntToStr(namecount);
succ:=1; //判断操作员姓名是否重复
for i:=0 to pcount-1 do
begin //判断管理员和每一个操作员
if i=0 then
index:=1//管理员索引
else
index:=(i-1)*(qxcount+3)+3;//操作员索引
if newName=qxtree.Items[index].Text then
succ:=0; //姓名重复
end;
if succ=0 then namecount:=namecount+1;
end; //添加操作员姓名
newNode:=qxtree.Items.AddChild(qxtree.Items[1],newName);
newNode.StateIndex:=5;
//添加操作员口令
qxNode1:=qxtree.Items.AddChild(newNode,'设置口令');
qxNode1.StateIndex:=4;
qxtree.Items.AddChild(qxNode1,'jfos'); //添加操作员权限
for j:=1 to qxcount do
begin //添加操作员权限
qxNode1:=qxtree.Items.AddChild(newNode,ds_data.Qu_qxcount.FieldByName('name').AsString);
ds_data.Qu_qxcount.Next; //下一个权限内容
//更新权限
if qxx[j]='1' then
qxNode1.StateIndex:=1
else
qxNode1.StateIndex:=3;
end; //关闭权限内容数据库
ds_data.Qu_qxcount.Close; //手动修改姓名
newNode.Selected:=True;
newNode.EditText;
end;
其中,这一段偶不明白, //判断操作员姓名是否重复
for i:=0 to pcount-1 do
begin //判断管理员和每一个操作员
if i=0 then
index:=1//管理员索引
else
index:=(i-1)*(qxcount+3)+3;//操作员索引##################### 1
if newName=qxtree.Items[index].Text then
succ:=0; //姓名重复
end;
if succ=0 then namecount:=namecount+1;
end;尤其 1 处,拜托告知
偶有一段程序,别人的例子,不只能否看懂
界面如下
用户管理
超级用户
普通用户1
普通用户2
……代码:
procedure Tf_szkl.qx_newClick(Sender: TObject);
var newName : string;
index : integer; //权限树索引
namecount,succ : integer; //姓名树、姓名不重复标志
begin //新建操作员
//展开权限树
qxtree.Items[0].Expand(False);
qxtree.Items[1].Expand(False); //打开权限内容数据库
ds_data.Qu_qxcount.Close;
ds_data.Qu_qxcount.Open; //操作员总数+1
pcount:=pcount+1; //新建操作员的权限和管理员一样
qxx:=f_gbv.pass_qxx.Caption; //姓名初始化判断
namecount:=1;
succ:=0;
while (succ=0) do
begin
//姓名初始化
newName:='新建操作员'+IntToStr(namecount);
succ:=1; //判断操作员姓名是否重复
for i:=0 to pcount-1 do
begin //判断管理员和每一个操作员
if i=0 then
index:=1//管理员索引
else
index:=(i-1)*(qxcount+3)+3;//操作员索引
if newName=qxtree.Items[index].Text then
succ:=0; //姓名重复
end;
if succ=0 then namecount:=namecount+1;
end; //添加操作员姓名
newNode:=qxtree.Items.AddChild(qxtree.Items[1],newName);
newNode.StateIndex:=5;
//添加操作员口令
qxNode1:=qxtree.Items.AddChild(newNode,'设置口令');
qxNode1.StateIndex:=4;
qxtree.Items.AddChild(qxNode1,'jfos'); //添加操作员权限
for j:=1 to qxcount do
begin //添加操作员权限
qxNode1:=qxtree.Items.AddChild(newNode,ds_data.Qu_qxcount.FieldByName('name').AsString);
ds_data.Qu_qxcount.Next; //下一个权限内容
//更新权限
if qxx[j]='1' then
qxNode1.StateIndex:=1
else
qxNode1.StateIndex:=3;
end; //关闭权限内容数据库
ds_data.Qu_qxcount.Close; //手动修改姓名
newNode.Selected:=True;
newNode.EditText;
end;
其中,这一段偶不明白, //判断操作员姓名是否重复
for i:=0 to pcount-1 do
begin //判断管理员和每一个操作员
if i=0 then
index:=1//管理员索引
else
index:=(i-1)*(qxcount+3)+3;//操作员索引##################### 1
if newName=qxtree.Items[index].Text then
succ:=0; //姓名重复
end;
if succ=0 then namecount:=namecount+1;
end;尤其 1 处,拜托告知
对了qxcount是哪里来的?
chechy师父,你猜对了,好厉害,
qxcount是query出来的,query的是程序模块
每个子node代表一个模块,
双击子节点,就可选择该模块是否可用
这段程序实现了,偶上午所说的,
即可用 新用户1,2,3……
又可自行更改 新用户
而且每次 新建 都是自动续上次的 新用户X
老鱼也帮偶看看
即:index:=(i-1)*(qxcount+3)+3;//操作员索引##################### 1
另外,偶对index的用法也不太明了
它的query是select * from table
qxcount+3大概是因为,每个普通用户下有qxcount+3个节点。
i-1是因为i从1开始。
因此,这个公式将算出每个普通用户在整个TreeView.Items重的Index。
再不懂,我要晕了。
普通用户前确有2个节点
但普通用户下 节点=qxcount
因此+3 偶不明白
师父真高,偶什么时候才能出师呢?
拜谢,3拜,
师父刚才说locate是什么呢?是否比此简单呢?
望赐教
thenode.selected:=true;
//thenode 为你所要选的节点
//打开权限内容数据库
ds_data.Qu_qxcount.Close;
ds_data.Qu_qxcount.Open;
Qu_qxcount.sql=select from table
table里面是模块,即普通用户下的子节点
读的,
下面是treeview的int过程
procedure Tf_szkl.InitQxtree();
begin //初始化权限树
//删除旧管理员
qxtree.Items.Delete(qxtree.Items[1]); //新建、修改管理员类型和姓名
if qx='0' then
qxtree.Items[0].Text:='用户管理员'
else
qxtree.Items[0].Text:='设备管理员';
qxNode:=qxtree.Items.AddChild(qxtree.Items[0],f_gbv.pass_name.Caption);
qxNode.StateIndex:=6; //得到权限总数
with ds_data.Qu_qxcount do
begin
Close;
Open;
qxcount:=RecordCount;
end; //打开权限数据库
with ds_data.Qu_chqx do
begin
//参数设置
Close;
ParamByName('qx').value:=IntToStr(StrToInt(qx)+1);
Open;
pcount:=RecordCount; //得到操作员总数 //添加操作员
for i:=1 to pcount do
begin
ds_data.Qu_qxcount.First;
qxx:=FieldByName('qxx').AsString; //得到权限内容 //添加操作员姓名
qxNode:=qxtree.Items.AddChild(qxtree.Items[1],FieldByName('name').AsString);
qxNode.StateIndex:=5;
//添加操作员口令
qxNode1:=qxtree.Items.AddChild(qxNode,'设置口令');
qxNode1.StateIndex:=4;
qxtree.Items.AddChild(qxNode1,FieldByName('passwd').AsString); //添加操作员权限
for j:=1 to qxcount do
begin //添加操作员权限
qxNode1:=qxtree.Items.AddChild(qxNode,ds_data.Qu_qxcount.FieldByName('name').AsString);
ds_data.Qu_qxcount.Next; //下一个权限内容
//更新权限
if qxx[j]='1' then
qxNode1.StateIndex:=1
else
if qxg[j]='1' then
qxNode1.StateIndex:=2
else
qxNode1.StateIndex:=3;
end;
Next; //下一个操作员
end;
Close; //关闭权限数据库
end;
ds_data.Qu_qxcount.Close; //关闭权限内容数据库 //展开权限树
qxtree.Items[0].Expand(False);
qxtree.Items[1].Expand(False);
end;
看了你的代码,我觉得,刚才那个检索,可以用下列代码代替Qu_chqx.Locate('name', newname, []);
一时还不明白,偶先把treeview的节点设置好了
TO:chechy(chechy) ~~他是chris2019(牛虻---牛角挂书版) ~~呵呵~~