Delphi InputBox для ввода пароля? - PullRequest
       34

Delphi InputBox для ввода пароля?

13 голосов
/ 26 февраля 2009

Inputbox:

answer:=Inputbox('a','b','c');

работает хорошо, но я ищу замаскированный, например поле для ввода пароля, где вместо напечатанных символов вы видите только маленькие звездочки.

Ответы [ 5 ]

33 голосов
/ 15 января 2014

В XE2 InputBox() и InputQuery() были обновлены для собственной поддержки маскирования ввода TEdit, хотя эта функция еще не была задокументирована. Если для первого символа параметра APrompt установлено любое значение <<code>#32, то для TEdit.PasswordChar будет установлено значение *, например:

answer := InputBox('a', #31'b', 'c');
26 голосов
/ 26 февраля 2009

Вы можете отправить сообщение Windows в элемент управления для редактирования, созданный InputBox, который помечает элемент управления для ввода пароля. Код ниже взят из 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;
9 голосов
/ 26 февраля 2009

InputBox вызывает функцию InputQuery в диалогах, которая динамически создает форму. Вы всегда можете сделать копию этой функции и изменить свойство PasswordChar TEdit.

3 голосов
/ 26 февраля 2009

Не думаю, что в Delphi есть такая штука из коробки. Может быть, вы можете найти один в http://www.torry.net/ или в другом месте в сети. В противном случае просто напишите один - не должно быть так сложно. :-) Вы можете даже взглянуть на исходный код, если у вас есть «достаточно большая» версия Delphi.

Ули.

0 голосов
/ 27 июля 2018

Вы можете использовать InputQuery вместо InputBox. Когда установлен ИСТИННЫЙ аргумент, поле пароля будет замаскировано.

InputQuery('Authenticate', 'Password:',TRUE, value);     

Какой-то ресурс здесь; http://lazarus -ccr.sourceforge.net / документы / LCL / Диалоги / inputquery.html

...