Delphi Inputbox pour l'entrée de mot de passe?
Question
Zone de saisie:
answer:=Inputbox('a','b','c');
Fonctionne bien, mais je cherche un masqué, comme une boîte de mot de passe où vous ne voyez que de petites étoiles au lieu des personnages dactylographiés.
La solution
Vous pouvez envoyer un message Windows au contrôle d'édition créé par InputBox
, cela indiquera le contrôle d'édition pour l'entrée de mot de passe. Code ci-dessous tiré de http://www.swissdelphienter.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;
Autres conseils
Dans Xe2, InputBox()
et InputQuery()
ont été mis à jour pour soutenir nativement le masquage TEdit
Entrée, bien que cette fonctionnalité n'ait pas encore été documentée. Si le premier caractère du APrompt
Le paramètre est défini sur n'importe quelle valeur #32
puis le TEdit.PasswordChar
sera défini sur *
, par exemple:
answer := InputBox('a', #31'b', 'c');
InputBox appelle la fonction InputQuery dans les boîtes de dialogue, ce qui crée le formulaire dynamiquement. Vous pouvez toujours faire une copie de cette fonction et modifier la propriété de mot de passe du Tedit.
Je ne pense pas que Delphi inclue une telle chose hors de la boîte. Peut-être que vous pouvez en trouver un à http://www.torry.net/ ou ailleurs dans le filet. Sinon, écrivez-en vous-même - ne devrait pas être si difficile. :-) Vous pouvez même consulter le code source si vous avez une version Delphi "assez grande".
Uli.
Vous pouvez utiliser InputQuery au lieu de InputBox. Lorsque le vrai argument est défini, le champ de mot de passe sera masqué.
InputQuery('Authenticate', 'Password:',TRUE, value);
Une ressource ici; http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/inputquery.html