问题很简单.用DELPHI,拖放一个EDIT,只要改下passwordchar为*号就可以实现输入框为****的东东.
现在要做的就是我自己写一个控件比如TMYEDIT,也是要跟密码框一样用*符隐藏起来.怎么写代码实现跟TEDIT一样实现输入密码字符的效果.
搞什么passwordchar属性为*的同志不要回答我.
我只要代码实现像passwordchar这样的功能.OK.

解决方案 »

  1.   

    passwordchar其实一点都不安全的
    自己写用Key相关事件处理就行的具体自己做,呵呵
      

  2.   

    在keypress事件中用*替换即可,而把真正的数据放在text属性中
      

  3.   

    不知高手,进来学习不过有思路一、可以看看 ES_PASSWORD 和 EM_SETPASSWORDCHAR二、捕捉 WM_CHAR,WM_KEYDOWN,WM_KEYUP 和 、
                  WM_SYSCHAR, WM_SYSKEYDOWN, WM_SYSKEYUP就可以了吧。
      

  4.   

    有没有实际代码,不要控制台的.6楼的思路可以考虑下,是不是要用HOOK进行监控
      

  5.   

    不是高手,进来灌水的你可能是想做一个自已认为比TPassWordEdit要安全的控件吧.你可以做的个和Edit一样的控件,多了一个属性RealText,用来存真实的Text,但是显示的内容是与真实内容一样长度的 *这样别人想通过那些*得到真密码就行不通了.达到安全的效果.
      

  6.   

    当年刚用delphi,不知道passwordchar,我是这样搞的unit Unit1;interfaceuses
      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里面处理,不过那样麻烦许多,因为还要判断上下左右的光标移动.截获键盘消息也是一样的方法.
      

  7.   

    楼主你的TMYEDIT继承自Tedit,然后上面的代码改改放进去应该可以的吧