Delphi InputBox per l'immissione della password?
Domanda
Inputbox:
answer:=Inputbox('a','b','c');
funziona bene, ma sto cercando uno mascherato, come una scatola password dove si vede solo piccole stelle invece dei caratteri digitati.
Soluzione
È possibile inviare un messaggio di Windows per il controllo di modifica creato da InputBox
, quella bandiera volontà controllo di modifica per l'immissione della password. Codice qui sotto tratto da http://www.swissdelphicenter.ch/en/showcode.php ? id = 1208 :
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;
Altri suggerimenti
In XE2, InputBox()
e InputQuery()
sono stati aggiornati per supportare nativamente mascherare l'ingresso TEdit
, anche se tale caratteristica non è ancora stato documentato. Se il primo carattere del parametro APrompt
è impostato su qualsiasi valore <#32
allora la TEdit.PasswordChar
sarà impostato su *
, ad esempio:
answer := InputBox('a', #31'b', 'c');
InputBox chiama la funzione InputQuery nelle finestre di dialogo, che crea la forma in modo dinamico. Si può sempre fare una copia di questa funzione e modificare proprietà PasswordChar del TEdit.
Non credo che Delphi include una cosa del genere, fuori dalla scatola. Forse si può trovare uno a http://www.torry.net/ o altrove nella rete. In caso contrario, basta scrivere uno voi stessi - non dovrebbe essere così difficile. :-) Si può anche guardare il codice sorgente, se si dispone di un "abbastanza grande" versione di Delphi.
Uli.
È possibile utilizzare InputQuery invece di InputBox. Quando l'argomento TRUE è impostato, il campo password sarà mascherato.
InputQuery('Authenticate', 'Password:',TRUE, value);
Alcuni risorsa qui; http://lazarus-ccr.sourceforge.net/docs/lcl/ finestre di dialogo / inputquery.html