Inputbox:Delphi InputBox zur Passworteingabe?
answer:=Inputbox('a','b','c');
funktioniert gut, aber ich bin für einen maskierten einen Blick, wie ein Passwort Feld, in dem nur wenig Sterne anstatt die eingegebenen Zeichen sehen.
Inputbox:Delphi InputBox zur Passworteingabe?
answer:=Inputbox('a','b','c');
funktioniert gut, aber ich bin für einen maskierten einen Blick, wie ein Passwort Feld, in dem nur wenig Sterne anstatt die eingegebenen Zeichen sehen.
Sie können eine Windows-Nachricht an das Bearbeitungssteuerelement senden, das von InputBox
erstellt wurde und das das Bearbeitungssteuerelement für die Kennworteingabe kennzeichnet. Code unten aus http://www.swissdelphicenter.ch/en/showcode.php?id=1208 genommen:
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;
Ich denke nicht, dass Delphi so etwas aus der Box enthält. Vielleicht finden Sie einen unter http://www.torry.net/ oder anderswo im Netz. Ansonsten schreibe einfach einen selbst - sollte nicht so schwer sein. :-) Sie können sogar den Quellcode einsehen, wenn Sie eine "groß genug" Delphi-Version haben.
Uli.
InputBox ruft die InputQuery-Funktion in Dialogen auf, die das Formular dynamisch erstellt. Sie könnten immer eine Kopie dieser Funktion erstellen und die PasswordChar-Eigenschaft von TEdit ändern.
In XE2, InputBox()
und InputQuery()
nativ aktualisiert wurden zur Unterstützung der TEdit
Eingang Maskierung, obwohl diese Funktion wurde bisher noch nicht dokumentiert. Wenn das erste Zeichen des APrompt
Parameter auf einen beliebigen Wert gesetzt wird < #32
dann wird der TEdit.PasswordChar
-*
eingestellt werden, zB:
answer := InputBox('a', #31'b', 'c');
Jetzt ist das intuitiv! –
Sie haben sich die Mühe gemacht, 'InputQuery()' (was 'InputBox()' intern verwendet) mit neuen Parametern für Multi-Eingabeaufforderungen und einem 'OnCloseQuery'-Callback zu erweitern, aber sie konnten nicht daran interessiert sein, einen neuen Parameter zu erstellen Passwort-Maskierung festlegen? Die Mehrfacheingabeaufforderungen unterstützen die Maskierung pro Eingabeaufforderung, aber sie hätten diese Schnittstelle intuitiver machen können. Anstatt ein Array von Strings mit speziellen Lead-Zeichen zu verwenden, sollten sie ein Array von Datensätzen mit String/Mask-Paaren verwendet haben. Dies hätte sogar zukünftige Felder hinzugefügt werden können, um die "TEdit" -Steuerungen feiner zu kontrollieren. Aber nein. –
Wow! elegante Art, die Ausführung zu verzögern :-) –