首页  编辑  

如何让InputBox也能使用密码掩码?

Tags: /超级猛料/VCL/对话框/   Date Created:

我们经常使用InputBox,但是,一个缺点就是,Inputbox不能有密码掩码的功能,就是用*掩盖输入的字符,下面的代码演示了一个巧妙的方法来做到这一点:

const

 InputBoxMessage = WM_USER + 200 ;

type

 TForm1 = class ( TForm )

   Button1 : TButton ;

    procedure Button1Click ( Sender : TObject );

  private

    procedure InputBoxSetPasswordChar ( var Msg : TMessage ); message InputBoxMessage ;

  public

  end ;

var

 Form1 : TForm1 ;

implementation

{$R *.DFM}

procedure TForm1 . InputBoxSetPasswordChar ( var Msg : TMessage );

var

 hInputForm , hEdit , hButton : HWND ;

begin

 hInputForm := Screen . Forms [ 0 ]. Handle ;

  if ( hInputForm <> 0 ) then

  begin

   hEdit := FindWindowEx ( hInputForm , 0 , 'TEdit' , nil );

    {

     // Change button text:

     hButton := FindWindowEx(hInputForm, 0, 'TButton', nil);

     SendMessage(hButton, WM_SETTEXT, 0, Integer(PChar('Cancel')));

   }

   SendMessage ( hEdit , EM_SETPASSWORDCHAR , Ord ( '*' ), 0 );

  end ;

end ;

procedure TForm1 . Button1Click ( Sender : TObject );

var

 InputString : string ;

begin

 PostMessage ( Handle , InputBoxMessage , 0 , 0 );

 InputString := InputBox ( 'Input Box' , 'Please Enter a Password' , '' );

end ;