سؤال

صندوق الإدخال:

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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top