问题很简单.用DELPHI,拖放一个EDIT,只要改下passwordchar为*号就可以实现输入框为****的东东.
现在要做的就是我自己写一个控件比如TMYEDIT,也是要跟密码框一样用*符隐藏起来.怎么写代码实现跟TEDIT一样实现输入密码字符的效果.
搞什么passwordchar属性为*的同志不要回答我.
我只要代码实现像passwordchar这样的功能.OK.
现在要做的就是我自己写一个控件比如TMYEDIT,也是要跟密码框一样用*符隐藏起来.怎么写代码实现跟TEDIT一样实现输入密码字符的效果.
搞什么passwordchar属性为*的同志不要回答我.
我只要代码实现像passwordchar这样的功能.OK.
解决方案 »
- 关于串口通信参数设置的问题.
- delphi模式singleton,提问!
- 关于第三方控件dev express cxGrid 的问题?轻松20分!
- 求RoseDelphiLink的注册号?
- delphi6如何创建一个WebService?
- 高手啊,快来啊,弄里几天的问题散分了!
- tOleContainer怎样到如数据流?
- 关于UDP传输的结构体中string长度
- 送分:Ado+Access2000用Jet.OLEDB.4.0连接时出错误信息:Could not open table 'MSysAccounts'
- 关于操作日志的!急!!!!!
- 数组问题
- 征集delphi的QQ群号,以后相互交流!!!
自己写用Key相关事件处理就行的具体自己做,呵呵
WM_SYSCHAR, WM_SYSKEYDOWN, WM_SYSKEYUP就可以了吧。
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
pwdstr:string = '';implementation{$R *.dfm}
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
pos:integer; //当前edit光标位置
str:string;
i:integer;
seloffset:integer; //字符输入后的光标偏移
begin
pos:=edit1.SelStart;if (ord(key)>31) and (ord(key)<127) then //可见字符
begin
insert(key,pwdstr,pos+1);
seloffset:=1;
end;case ord(key) of
27: //ESC
exit;
8: //BS
begin
Delete(pwdstr,pos+1-1,1);
seloffset:=-1;
end;
{
127: //DEL onKeyPress不相应del,在onkeydown里处理
Delete(pwdstr,pos+1+1,1);
}
end;key:=#0;label1.caption:=pwdstr;
str:='';
for i:=1 to length(pwdstr) do
str:=str+'*';edit1.Text:=str;
edit1.SelStart:=pos+seloffset;
end;
最后全局变量pwdstr中存的就是密码啦或者直接在onkeydown里面处理,不过那样麻烦许多,因为还要判断上下左右的光标移动.截获键盘消息也是一样的方法.