Inputbox:Delphi InputBox per l'inserimento della password?
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.
Inputbox:Delphi InputBox per l'inserimento della password?
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.
È possibile inviare un messaggio di Windows al controllo di modifica creato da InputBox
, che contrassegna il 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;
Non credo che Delphi includa una cosa del genere fuori dalla scatola. Forse puoi trovarne uno a http://www.torry.net/ o altrove nella rete. Altrimenti, scrivine uno solo - non dovrebbe essere così difficile. :-) Puoi anche guardare il codice sorgente se hai una versione Delphi "abbastanza grande".
Uli.
InputBox chiama la funzione InputQuery nelle finestre di dialogo, che crea il modulo in modo dinamico. È sempre possibile fare una copia di questa funzione e modificare la proprietà PasswordChar di TEdit.
In XE2, InputBox()
e InputQuery()
sono stati aggiornati per supportare nativamente mascherare l'ingresso TEdit
, anche se questa caratteristica non è stato ancora documentato. Se il primo carattere del parametro APrompt
è impostato su qualsiasi valore < #32
poi il TEdit.PasswordChar
verrà impostato *
, ad esempio:
answer := InputBox('a', #31'b', 'c');
Ora è intuitivo! –
Hanno avuto l'ambizione di espandere 'InputQuery()' (che 'InputBox()' utilizza internamente) con nuovi parametri per prompt multipli e un callback 'OnCloseQuery', ma non potevano essere disturbati per creare un nuovo parametro per specificando il mascheramento della password? I multi-prompt supportano il masking per-prompt, ma avrebbero potuto rendere quell'interfaccia più intuitiva. Invece di usare una serie di stringhe con caratteri speciali speciali, avrebbero dovuto usare una serie di record contenenti coppie stringa/maschera. Ciò avrebbe persino consentito l'aggiunta di campi futuri per un controllo più preciso sui controlli "TEdit". Ma no. –
Wow! modo elegante per posticipare l'esecuzione :-) –