Delphi InputBox для ввода пароля?
Вопрос
Поле ввода:
answer:=Inputbox('a','b','c');
работает хорошо, но я ищу замаскированный, например, поле для ввода пароля, где вы видите только маленькие звездочки вместо введенных символов.
Решение
Вы можете отправить сообщение 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;
Другие советы
В XE2, InputBox()
а также InputQuery()
были обновлены, чтобы поддерживать маскировку TEdit
Ввод, хотя эта функция еще не была задокументирована. Если первый персонаж APrompt
Параметр устанавливается на любое значение #32
тогда TEdit.PasswordChar
будет настроен на *
, например:
answer := InputBox('a', #31'b', 'c');
Inputbox вызывает функцию InputQuery в диалогах, которая динамически создает форму. Вы всегда можете сделать копию этой функции и изменить свойство пароля TEDIT.
Я не думаю, что Delphi включает в себя такую вещь "из коробки".Может быть, вы сможете найти его по адресу http://www.torry.net/ или где-нибудь еще в сети.В противном случае просто напишите его сами - это не должно быть так уж сложно.:-) Вы даже можете посмотреть исходный код, если у вас есть "достаточно большая" версия Delphi.
Uli.
Вы можете использовать inputQuery вместо Inputbox. Когда истинный аргумент будет установлен, поле пароля будет замаскировано.
InputQuery('Authenticate', 'Password:',TRUE, value);
Какой -то ресурс здесь; http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/inputquery.html