2009-2-21 09:06
雨中雪
关于CnOptionGroup字符为密码时,该如何隐藏字符
with Option.AddGroup('用户登录设置') do
begin
AddItem(GmConfig,'UserName','用户名');
AddItem(GmConfig,'passowrd','密码');
end;
在设置时密码以明文显示,请问该如何隐藏密码
[[i] 本帖最后由 雨中雪 于 2009-2-21 09:08 编辑 [/i]]
2009-2-21 09:10
雨中雪
function TCnOptionGroup.AddItem(AInstance: TObject; const APropName: string;
const AText: string; const AList: string; ADefaultValue, AMinValue,
AMaxValue: Variant): TCnOptionItem;
如何加入一参数标识是否是密码:APassWord:boolean
2009-2-21 11:04
Passion
组件包本身不具有这个功能,需要自行修改代码以实现它。
2009-2-22 13:16
雨中雪
我尝试着增加以下
procedure TCnOptionItem.setPasswordChar(const Value: string);
begin
FPasswordChar := Value;
end;
function TCnOptionItem.GetPasswordChar: string;
begin
if not VarIsNull(FPasswordChar) then
Result := FPasswordChar
else
Result := '#0';
end;
在TCnOptionItem = class(TCnBaseOption)的published中增加
property PassWordChar: string read GetPassWordChar write SetPassWordChar;
{* 关联对象属性密码掩码 }
不知道还要增加哪些代码,请指教!
[[i] 本帖最后由 雨中雪 于 2009-2-22 13:17 编辑 [/i]]
2009-2-25 22:05
zjy
代码已更新
请从 CVS 中更新 CnPack 最新的代码。
此次更新为 TCnAOTreeView 增加了一个 OnCreateInplaceEdit 事件,针对密码框的示例如下:
procedure TForm1.OnCreateInplaceEdit(Sender: TObject;
InplaceEdit: TControl; AOption: TCnBaseOption);
begin
if (InplaceEdit is TCustomEdit) and (AOption is TCnOptionItem) and
SameText(TCnOptionItem(AOption).PropName, 'Password') then
TEdit(InplaceEdit).PasswordChar := '*';
end;
详见 Demo 程序。
2009-2-26 10:52
雨中雪
CVS登录不上,说用户名和密码不正确
2009-2-26 11:06
Passion
请问是否参考了此贴?
[url]http://bbs.cnpack.org/viewthread.php?tid=1882&extra=page%3D1[/url]
如果是按里头做的,烦请贴出出错信息看看?
2009-2-26 11:41
雨中雪
这句能不能改成这样的:
if (InplaceEdit is TCustomEdit) and (AOption is TCnOptionItem) and
(pos('password',TCnOptionItem(AOption).PropName)>0) then
TEdit(InplaceEdit).PasswordChar := '*';
这样就不会局限于密码的属性必须为Password,只要属性中包含password就是密码输入框,就以*显示文本内容。
[[i] 本帖最后由 雨中雪 于 2009-2-26 14:02 编辑 [/i]]
2009-2-26 11:45
雨中雪
我刚才作了以下测试:发现以下问题:
图一是正常显示时,密码确以明文显示出来;
图二为在输入密码时显示是正确的;
[[i] 本帖最后由 雨中雪 于 2009-2-26 11:46 编辑 [/i]]
2009-2-26 21:18
zjy
又增加了一个新事件
procedure TForm1.OnGetItemText(Sender: TObject; AOption: TCnOptionItem;
var AText: string);
begin
if SameText(TCnOptionItem(AOption).PropName, 'Password') then
AText := '******';
end;
实际使用时事件处理代码可根据需要来调整,用 Pos 当然也是可以的,Demo 中只是一个示例。
用这个事件除了可以处理密码,还可以用来为某些属性定制特殊的显示内容,比如日期格式、浮点数格式格式等。
PS: 之所以用增加事件的方法来解决这些问题,主要是这一类的需求可能很多,事件用起来虽然比较麻烦,但可以灵活控制。
2009-2-27 21:54
雨中雪
刚才做了一下测试,发现还有问题:
在程序创建后密码还是以明文显示,编辑后或获得焦点离开后,密码才以*号显示。
2009-2-28 11:09
zjy
可能跟事件定义顺序有关
如果你是动态关联事件的话,应该先关联事件,再设置Options属性。
2009-2-28 11:38
雨中雪
还想问一下, OnCreateInplaceEdit和OnGetItemText在Events列表中怎么没有呀
2009-2-28 12:33
zjy
如果已经安装过cnpack控件包
需要重新编译安装一次才会有。
页:
[1]
Powered by Discuz! Archiver 5.0.0
© 2001-2006 Comsenz Inc.