InputBox:Hộp nhập liệu Delphi để nhập mật khẩu?
answer:=Inputbox('a','b','c');
làm việc tốt, nhưng tôi đang tìm một ai đeo mặt nạ, giống như một hộp mật khẩu mà bạn chỉ nhìn thấy những ngôi sao nhỏ thay vì các ký tự gõ.
InputBox:Hộp nhập liệu Delphi để nhập mật khẩu?
answer:=Inputbox('a','b','c');
làm việc tốt, nhưng tôi đang tìm một ai đeo mặt nạ, giống như một hộp mật khẩu mà bạn chỉ nhìn thấy những ngôi sao nhỏ thay vì các ký tự gõ.
Bạn có thể gửi tin nhắn Windows cho điều khiển chỉnh sửa được tạo bởi InputBox
, sẽ gắn cờ điều khiển chỉnh sửa để nhập mật khẩu. Mã dưới đây lấy từ 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;
Tôi không nghĩ rằng Delphi bao gồm một thứ như vậy ra khỏi hộp. Có lẽ bạn có thể tìm thấy một tại http://www.torry.net/ hoặc ở nơi khác trong mạng. Nếu không, chỉ cần viết một bản thân - không nên quá khó. :-) Bạn thậm chí có thể xem mã nguồn nếu bạn có phiên bản Delphi "đủ lớn".
Uli.
InputBox gọi hàm InputQuery trong Hộp thoại, tạo biểu mẫu động. Bạn luôn có thể tạo một bản sao của hàm này và thay đổi thuộc tính PasswordChar của TEdit.
Trong XE2, InputBox()
và InputQuery()
đã được cập nhật để hỗ trợ natively che TEdit
đầu vào, mặc dù tính năng này đã không được ghi nhận nêu ra. Nếu ký tự đầu tiên của tham số APrompt
được thiết lập để bất kỳ giá trị < #32
thì TEdit.PasswordChar
sẽ được thiết lập để *
, ví dụ:
answer := InputBox('a', #31'b', 'c');
Bây giờ là trực quan! –
Họ gặp rắc rối khi mở rộng 'InputQuery()' (mà 'InputBox()' sử dụng nội bộ) với các tham số mới cho nhiều lời nhắc và lời gọi lại 'OnCloseQuery', nhưng chúng không thể bị làm phiền khi tạo tham số mới cho xác định mặt nạ mật khẩu? Multi-prompt sẽ hỗ trợ chế độ che dấu nhắc nhở, nhưng họ có thể làm cho giao diện đó trực quan hơn. Thay vì sử dụng một chuỗi các chuỗi có các ký tự dẫn đầu đặc biệt, chúng nên sử dụng một mảng các bản ghi chứa các cặp chuỗi/mặt nạ. Điều đó thậm chí còn cho phép các trường trong tương lai được thêm vào để kiểm soát tốt hơn các điều khiển 'TEdit'. Nhưng không. –
Wow! cách thanh lịch để trì hoãn việc thực hiện :-) –