Entwickler-Ecke

Sonstiges (Delphi) - Inputbox mit ***


netscanner - Do 16.02.06 20:55
Titel: Inputbox mit ***
Hi ich habe eine kleine Frage:

Um mein Programm zu öffnen muss man am Anfang ein Passwort in eine InputBox eingeben.
Das was ich reinschreibe wird logischerweise als normale Buchstaben dargestellt...
Wie kann ich das nun so programmieren, dass anstatt der Buchstaben *** angezeigt wird?



Gruß Martin


uwewo - Do 16.02.06 21:04

Hi Martin,

ist ganz einfach, markiere Dein Edit Feld und gebe im Objektinspektor
bei PasswordChar einen * ein.

Das wars

Uwe


Tobias1 - Do 16.02.06 21:07

Aber wie ist es bei einer InputBox?
Würde mich auch interssieren


netscanner - Do 16.02.06 21:08
Titel: wäre schön
wäre schön wenn's so einfach ginge...es ist aber kein edit feld sondern eine InputBox (Funktion in Delphi ^^)...
Leider hat das Ding keinen Object Inspector


Marco D. - Do 16.02.06 21:22

In der Unit 'Dialogs' musst du folgendes einfügen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
function InputQuery(const ACaption, APrompt: string;
  var Value: string): Boolean;
var
  Form: TForm;
  Prompt: TLabel;
  Edit: TEdit;
  DialogUnits: TPoint;
  ButtonTop, ButtonWidth, ButtonHeight: Integer;
begin
  Result := False;
  Form := TForm.Create(Application);
  with Form do
    try
      Canvas.Font := Font;
      DialogUnits := GetAveCharSize(Canvas);
      BorderStyle := bsDialog;
      Caption := ACaption;
      ClientWidth := MulDiv(180, DialogUnits.X, 4);
      Position := poScreenCenter;
      Prompt := TLabel.Create(Form);
      with Prompt do
      begin
        Parent := Form;
        Caption := APrompt;
        Left := MulDiv(8, DialogUnits.X, 4);
        Top := MulDiv(8, DialogUnits.Y, 8);
        Constraints.MaxWidth := MulDiv(164, DialogUnits.X, 4);
        WordWrap := True;
      end;
      Edit := TEdit.Create(Form);
      with Edit do
      begin
        Parent := Form;
        passwordchar:='*';
        Left := Prompt.Left;
        Top := Prompt.Top + Prompt.Height + 5;
        Width := MulDiv(164, DialogUnits.X, 4);
        MaxLength := 255;
        Text := Value;
        SelectAll;
              end;
      ButtonTop := Edit.Top + Edit.Height + 15;
      ButtonWidth := MulDiv(50, DialogUnits.X, 4);
      ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
      with TButton.Create(Form) do
      begin
        Parent := Form;
        Caption := SMsgDlgOK;
        ModalResult := mrOk;
        Default := True;
        SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth,
          ButtonHeight);
      end;
      with TButton.Create(Form) do
      begin
        Parent := Form;
        Caption := SMsgDlgCancel;
        ModalResult := mrCancel;
        Cancel := True;
        SetBounds(MulDiv(92, DialogUnits.X, 4), Edit.Top + Edit.Height + 15,
          ButtonWidth, ButtonHeight);
        Form.ClientHeight := Top + Height + 13;
      end;
      if ShowModal = mrOk then
      begin
        Value := Edit.Text;
        Result := True;
      end;
    finally
      Form.Free;
    end;
end;

Allerdings muss man jetzt die VCL neu kompilieren, frag mich net wie das geht :gruebel:


uwewo - Do 16.02.06 21:23

Sorry,

habe ich überlesen.

Warum verwendest Du überhaupt eine Inputbox???
Es gibt doch Extra das Form Password Dialog.

Uwe


Danniolo - Do 16.02.06 21:25

Warum willst du dafür unbedingt eine InputBox nehmen?
Nimm doch einfach eine Form + Edit(Passwordchar:='*') + 2 Buttons - fertig..
Die VCL neu zu kompilieren is meiner Meinung nach ein bisschen übertriben :D


uwewo - Do 16.02.06 22:01

Habe mal ein bißchen gegoogelt, es gibt bestimmt 10 verschiedene
Möglichkeiten das Problem mit einer InputBox zu lösen.

Allerdings geht es schneller mit Password Dialog oder wie Danniolo schon sagte,
"eine Form + Edit(Passwordchar:='*') + 2 Buttons - fertig.."


netscanner - Do 16.02.06 22:19

@ Danniolo: Wie komm ich dann von dieser Form in die "geschützte Form"?
@ uwewo: wo finde ich den pw dialog?


uwewo - Do 16.02.06 22:31

Datei -> Neu
Registerkarte Dialoge


Danniolo - Fr 17.02.06 00:09

Wenn du mit "Form in die geschützte Form bringen" meinst, dass man das fenster weder schließen, noch maximieren, noch minimieren kann, dann solltest du die Form auf BorderStyle "byDialog" stellen und einen Punkt darüber bei "BorderIcons" "biStystemMenu" deaktivieren. Dann kann die Form nicht "verändert" werden. Ich hoffe, dass dein Problem damit gelöst ist :wink: .


UGrohne - Fr 17.02.06 01:21

user profile iconKoller hat folgendes geschrieben:
In der Unit 'Dialogs' musst du folgendes einfügen:
[...]
Allerdings muss man jetzt die VCL neu kompilieren, frag mich net wie das geht :gruebel:

Niemals nie nicht würde ich an den VCL-Dateien rumpfuschen, wenn es nicht unbedingt notwendig ist und es keinen anderen Ausweg gibt. Und nur um sich den Umweg über eine neue Unit zu machen, die man dann trotzdem überall einbinden kann zu ersparen würde ich das gleich drei mal nicht machen! :mahn:


Delete - Fr 17.02.06 01:29

@Koller: Mal abgesehen davon dass dein Delphi damit inkompatible zu anderen Delphis wird, macht man das so, indem man eine neue Klasse ableitet und diese um die gewünschten Eigenschaften erweitert.