function TForm1.GetListBox: WORD; var i:Integer ; begin Result:=0; for I:=0 to CheckListBox1.Items.Count-1 do if CheckListBox1.Checked[i] = True then Result:=Result or (1 Shl i);end;
没有必要使用 word类型,用string就可以了, 很直观, Result:=''; for i:=0 to CheckListBox1.Items.Count-1 do if CheckListBox1.Checked[i] then Result:='1'+Result else Result:='0'+Result;
我上面不是留了方法吗ResultStr:=''; for i:=0 to CheckListBox1.Items.Count-1 do if CheckListBox1.Checked[i] then ResultStr:='1'+ResultStr else ResultStr:='0'+ResultStr;
偶眼花缭乱了,居然把这么重要的给漏了,该打 另外,偶想知道: 在for语句中,比如 for i:=0 to CheckListBox1.Items.Count-1 do 这个count-1是什么意思呢?
看看Delphi的例子~~很容易的~~procedure TForm1.FormCreate(Sender: TObject);var MyList: TStringList; Index: Integer; begin MyList := TStringList.Create; try MyList.Add('Animals'); MyList.Add('Flowers'); MyList.Add('Cars'); MyList.Sort; { Find will only work on sorted lists! } if MyList.Find('Flowers', Index) then begin ListBox1.Items.AddStrings(MyList); Label1.Caption := 'Flowers has an index value of ' + IntToStr(Index); end; finally MyList.Free; end; end;
偶又遇到2个困难, 1, 偶的数据库 pass 如下 name passwd qx alias issuper 其中,issuper用什么判别? 偶用 if treeview.item[i].imageindex=0 then 感觉不对,因为只需判别新建的用户,求教 2 保存时,会用到两个sql,insert和update 产生3个处理方式,即新建、修改、新建和修改, 用什么逻辑方式判别、处理他们
1.issuper是一个boolean吧 直接用if 判别就行 你要判别新的什么用户(是不是spuer or 普通?) 2.看不懂你要作什么?
老鱼,issuper 偶用的是 y,n 偶在paradox没有找到boolean 偶的2是说,在保存时,究竟是inser还是update,或者都有, 这些逻辑怎么判断? if 用户只修了checklistbix then if 用户newnode.add('') then …… 偶现在毫无头绪
救命,偶用如下的语句修改数据库,屡次不得通过: data.qu_yhglqx.close; data.qu_yhglqx.execsql; data.qu_yhglqx.parambyname('name').asstring:=edit1.text; data.qu_yhglqx.parambyname('passwd').asstring:=edit2.text; data.qu_yhglqx.parambyname('alias').asstring:='newnode.text'; data.qu_yhglqx.parambyname('qx').asstring:='qxs';其中,qu_yhglqx update pass set name=:name or passwd=:passwd or alias=:alias or qx=:qxs where name=:name光标挺在 data.qu_yhglqx.parambyname('name').asstring:=edit1.text;
偶把代码抄错了: data.qu_yhglqx.close; data.qu_yhglqx.parambyname('passwd').asstring:=edit2.text; data.qu_yhglqx.parambyname('alias').asstring:=newnode.text; data.qu_yhglqx.parambyname('qxs').asstring:=qxs; qxs:=''; for i:=0 to CheckListBox1.Items.Count-1 do if CheckListBox1.Checked[i] then qxs:='1'+qxs else qxs:='0'+qxs; data.qu_yhglqx.parambyname('name').asstring:=edit1.text; data.qu_yhglqx.execsql;sql语句没错, 各位师父: 偶是不是把问题处理得太麻烦了,我自觉超出我能驾驭的范围 该放弃了吗?或作重大修改,我拿不定主意,想听师父的意见, 如把这个通讯录作简单处理,偶想再写一个文档管理系统, 请各位师父帮偶分析一下,偶吃这方面的亏太多了,从头学起
checked[i],师父赐教
同意chechy的
不过我觉得chris的设计思想实在不对劲
不知你究竟想作什么呢
其实应该多看看名家的手笔
看看别人的软件的设计
还有一点
我想提一点建议对chris
请你改一改你的网名
你的网名实在是莫名其妙
太卡通了吧
我也觉得chris的设计思想实在有点不对劲另建议不用字符串表示权限,用一个WORD或Byte按位操作,具体看权限的个数决定。
按字符串应该不大好,用WORD更易于移植,更易于判断,尤其在C中。
不知几位师父是否有好的例子,徒弟讨要一个
偶现在做的是用户管理这一部分,真如师父所说,偶几乎全凭想象来做,
偶心里很没谱,界面大致如下:
treeview checklistbox
超级用户 checked[0]
新用户 checked[1]
name checked[2]
passwd ……
新用户 (表示权限)
……
普通用户
新用户
name
passwd
新用户
……
点击新用户时,chechklist出现该用户相应权限,除了‘超级用户'与'普通用户'外,其他节点均可编辑--------不知道这样是否恰当,请师父斧正
还有,小隐师父说用word表示权限,偶相知其祥,赐教
改名去了……
用DBCheck...
很简单的
你只要设一个窗口
上设新用户名
中设新用户密码
最下面设一行选项
分别是普通用户和超级用户(可用Radiogroup)
然后数据表中存放相应的itemindex就行
到时判断就用这个
其实不用这样
超级用户应该只有一个
再说我听你说你是想设计一个用户通讯录
这应该不是网络版的
用得着吗?
你应该使用 TreeView 的 item 的 data功能,
把每个客户的信息记录在里面,
在 TreeView的onchange事件里记录,
界面建议变成
: name
password
treeview checklistbox
超级用户 checked[0]
新用户1 checked[1]
checked[2]
……
新用户2 (表示权限)
……
普通用户
新用户1
新用户2
……这样程序结构会更清晰,就是一个用户的所有信息全部记录在一个节点内,
var
i:Integer ;
begin
Result:=0;
for I:=0 to CheckListBox1.Items.Count-1 do
if CheckListBox1.Checked[i] = True then
Result:=Result or (1 Shl i);end;
很直观,
Result:='';
for i:=0 to CheckListBox1.Items.Count-1 do
if CheckListBox1.Checked[i] then
Result:='1'+Result
else
Result:='0'+Result;
多谢各位师父,偶正在调试中
小昂,name和passwd用什么控件呢?
其中 passwd的edit的passwordchar改成 *,
我感觉最不方便的就是跟踪的时候 word的不直观,
对于初学者,最好用string,操作容易,
如果使用 word,有时候除了毛病都不知道出在哪里,
其实word的最大好处就是在不同的语言里用法是一样的,
而这个对于初学者来说,并不重要
你以后会碰上更难写的,
最好把你的程序改一下,
练习使用 TreeView的item的data功能,
这个功能很强大,能解决不少问题,
而且,对你认识程序的本质有好处,
当然,代码会增加很多,而且掌握这个技术的前提是领悟多态。
偶已经把界面改了,相应功能也实现了
现在被难住在
如何吧checklistbox的checked状态回写入数据库
即用户修改完权限保存
chechy师父昨天教偶循环生成字符串来实现
偶没能写出来,
不知道生成字符串的方法
请教
for i:=0 to CheckListBox1.Items.Count-1 do
if CheckListBox1.Checked[i] then
ResultStr:='1'+ResultStr
else
ResultStr:='0'+ResultStr;
另外,偶想知道:
在for语句中,比如
for i:=0 to CheckListBox1.Items.Count-1 do
这个count-1是什么意思呢?
是从0开始计数的
实际总数应该从0至count-1才对
如果你用count会溢出
treeview name: edit1
超级用户 password: edit2
新用户1 --------------
新用户2 checklistbox
…… checked[0]
普通用户 checked[1]
新用户 checked[2]
…… ……
(表示权限)
注:新建用户时,name与passwd 以name1和passwd1数字递增的形势,赋予新建用户
默认的name和passwd问题: 当软件使用者连续建立多个用户,或修改数个用户的权限时,这时候的passwd、name
和checklistbox都在不停的更换状态中,也就是新建新用户2后,新用户1的passwd(passwd1)和
name(name1)被新用户2的passwd(passwd2)和name(name2)覆盖掉,
而偶写入数据库的代码只在 保存 按钮下,
只有按 保存 新建用户才存入数据库,怎么能让使用者全部新建或修改完,再全部存储呢?
偶的意思是请示各位师父:如果一次性存储太麻烦的话,是否可以让使用者新建1个或修改1个之后,就马上存储一次
MyList: TStringList;
Index: Integer;
begin
MyList := TStringList.Create;
try
MyList.Add('Animals');
MyList.Add('Flowers'); MyList.Add('Cars'); MyList.Sort; { Find will only work on sorted lists! }
if MyList.Find('Flowers', Index) then
begin
ListBox1.Items.AddStrings(MyList);
Label1.Caption := 'Flowers has an index value of ' + IntToStr(Index);
end;
finally
MyList.Free;
end;
end;
和checklistbox都在不停的更换状态中,也就是新建新用户2后,新用户1的passwd(passwd1)和
name(name1)被新用户2的passwd(passwd2)和name(name2)覆盖掉,
就是写在那里面~~如果新增或者是更改了~~
http://www.csdn.net/expert/TopicView.asp?id=304156
另外,checklistbox的临时存储代码写在哪里呢?偶没有找到适合的事件
1,
偶的数据库 pass 如下
name passwd qx alias issuper
其中,issuper用什么判别?
偶用 if treeview.item[i].imageindex=0 then
感觉不对,因为只需判别新建的用户,求教
2
保存时,会用到两个sql,insert和update
产生3个处理方式,即新建、修改、新建和修改,
用什么逻辑方式判别、处理他们
直接用if 判别就行
你要判别新的什么用户(是不是spuer or 普通?)
2.看不懂你要作什么?
偶的2是说,在保存时,究竟是inser还是update,或者都有,
这些逻辑怎么判断?
if 用户只修了checklistbix then
if 用户newnode.add('') then
……
偶现在毫无头绪
boolean是logical
如果只是修改Update 或edit & post
增加就可以用insert 或 append 或 appendreacord
具体看一下帮助
data.qu_yhglqx.execsql;
data.qu_yhglqx.parambyname('name').asstring:=edit1.text;
data.qu_yhglqx.parambyname('passwd').asstring:=edit2.text;
data.qu_yhglqx.parambyname('alias').asstring:='newnode.text';
data.qu_yhglqx.parambyname('qx').asstring:='qxs';其中,qu_yhglqx
update pass
set name=:name or passwd=:passwd or alias=:alias or qx=:qxs
where name=:name光标挺在
data.qu_yhglqx.parambyname('name').asstring:=edit1.text;
data.qu_yhglqx.close;
data.qu_yhglqx.parambyname('passwd').asstring:=edit2.text;
data.qu_yhglqx.parambyname('alias').asstring:=newnode.text;
data.qu_yhglqx.parambyname('qxs').asstring:=qxs;
qxs:='';
for i:=0 to CheckListBox1.Items.Count-1 do
if CheckListBox1.Checked[i] then
qxs:='1'+qxs
else
qxs:='0'+qxs;
data.qu_yhglqx.parambyname('name').asstring:=edit1.text;
data.qu_yhglqx.execsql;sql语句没错,
各位师父:
偶是不是把问题处理得太麻烦了,我自觉超出我能驾驭的范围
该放弃了吗?或作重大修改,我拿不定主意,想听师父的意见,
如把这个通讯录作简单处理,偶想再写一个文档管理系统,
请各位师父帮偶分析一下,偶吃这方面的亏太多了,从头学起