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.

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top