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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top