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 الدالة المدخنة في مربعات الحوار، مما يخلق النموذج ديناميكيا. يمكنك دائما إنشاء نسخة من هذه الوظيفة وتغيير خاصية Tedit's PasswordChar.
لا أعتقد أن دلفي يشمل مثل هذا الشيء خارج الصندوق. ربما يمكنك أن تجد واحدة في http://www.torry.net/ أو في أي مكان آخر في الشبكة. خلاف ذلك فقط اكتب واحدة نفسك - لا ينبغي أن يكون ذلك صعبا. :-) يمكنك أن تنظر إلى التعليمات البرمجية المصدر إذا كان لديك إصدار دلفي "كبير بما يكفي".
uli.
يمكنك استخدام المدخل بدلا من صندوق Inputox. عند تعيين الوسيطة الحقيقية، سيتم ملثمين حقل كلمة المرور.
InputQuery('Authenticate', 'Password:',TRUE, value);
بعض الموارد هنا؛ http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/inputquery.html.