Delphi InputBox für Passworteintrag?
Frage
Eingabefeld:
answer:=Inputbox('a','b','c');
Funktioniert gut, aber ich suche eine maskierte, wie ein Passwortbox, in dem Sie nur kleine Sterne anstelle der getippten Zeichen sehen.
Lösung
Sie können eine Windows -Nachricht an das von der Bearbeitungssteuerung erstellte Bearbeitungssteuerung senden InputBox
, Dies wird die Bearbeitungssteuerung für den Passworteintrag markieren. Code unten genommen von genommen von 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;
Andere Tipps
In xe2, InputBox()
und InputQuery()
wurden aktualisiert, um die Maskierung der Maskierung nativ zu unterstützen TEdit
Eingabe, obwohl diese Funktion noch nicht dokumentiert wurde. Wenn der erste Charakter der APrompt
Der Parameter wird auf jeden Wert eingestellt #32
dann ist die TEdit.PasswordChar
wird eingestellt auf *
, z.B:
answer := InputBox('a', #31'b', 'c');
Die InputBox ruft die Eingabequeritätsfunktion in Dialogen auf, wodurch das Formular dynamisch erstellt wird. Sie können jederzeit eine Kopie dieser Funktion erstellen und die Passwort -chictary -Eigenschaft des Tedit ändern.
Ich glaube nicht, dass Delphi so etwas aus der Schachtel enthält. Vielleicht finden Sie einen bei http://www.torry.net/ oder anderswo im Netz. Ansonsten schreibe einfach selbst eine selbst - sollte nicht so schwer sein. :-) Sie können sich sogar den Quellcode ansehen, wenn Sie eine "groß genug" Delphi-Version haben.
Uli.
Sie können InputQuery anstelle von InputBox verwenden. Wenn das wahre Argument festgelegt ist, wird das Kennwortfeld maskiert.
InputQuery('Authenticate', 'Password:',TRUE, value);
Einige Ressourcen hier; http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/inputquery.html