我们经常使用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 ;