Autor Beitrag
snoop
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 19.09.05 17:39 
Ich bastle z.Z. die 4. Version meines Passwortmanagers, der so gut wie fertig ist. Ich bin am letzten Feinschliff und da ist mir aufgefallen, dass ich beim Login das Passwort abfrage, und zwar über ein inputquery. Da aber niemand, der evtl. dabeisitzt, die Eingabe sehen soll, sollen anstatt der Eingabe nur Sternchen "*" zu sehen sein. Beim Editfenster geht das, aber ich benötige das bei einer Abfrage. Will ja dafür nicht überall ein neues Formular anlegen.

Gibt es eine Möglichkeit, das über ein Inputquery o.ä. zu lösen? Muss es ja! Nur wie?

Da ich die Eingabe genauso noch an anderen Stellen verwende, bringt es nix, groß drumrumzubasteln.

Achja: Ich arbeite mit Delphi 7
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 19.09.05 17:53 
Moin!

user profile iconsnoop hat folgendes geschrieben:
Will ja dafür nicht überall ein neues Formular anlegen.
[...]
Da ich die Eingabe genauso noch an anderen Stellen verwende, bringt es nix, groß drumrumzubasteln.

Aber genau dann würde ich dafür doch ein Formular anlegen... :wink:

cu
Narses
snoop Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 19.09.05 17:55 
ja, könnte man machen!

aber angenommen, ich brauch das formular an 4 stellen, wie soll ich dann unterscheiden, was passiert, nachdem das pw eingegeben wurde? ich müsste die eingabe ja bestätigen (mit enter oder einem klick auf ok) und das geht bei nem inputquery viel einfacher, als bei einem extra formular.

und 4 neue formulare extra dafür? ist mir nicht ganz recht.

sowas muss es doch geben..
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 19.09.05 18:00 
Moin!

user profile iconsnoop hat folgendes geschrieben:
aber angenommen, ich brauch das formular an 4 stellen, wie soll ich dann unterscheiden, was passiert, nachdem das pw eingegeben wurde?
[...]
und 4 neue formulare extra dafür? ist mir nicht ganz recht.

Mach das Ding modal auf, dann haste die Kontrolle; dafür braucht man doch nicht 4 Forms... :wink:

cu
Narses
snoop Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 19.09.05 18:08 
na gut was solls .. hab die Fälle nun minimiert und dafür ne Lösung gefunden, nicht shcön, aber dafür von mir.

Falls noch jemand eine andere Lösung außer Labels kennt: immer raus damit!

Gesucht ist eine aufpoppende Eingabe..
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 19.09.05 18:44 
Moin!

Mag sein, du hast nicht wirklich verstanden, wovon ich rede... ? :wink:

cu
Narses
snoop Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 19.09.05 18:48 
k.a.!
also modal ist mir schon klar, ist always on top und zwingt den benutzer quasi zur eingabe.

und die 4 fälle könnte man sich mit ner variable verwalten.
(einmal soll nach pw-eingabe der benutzername gewechselt werden, einmal das pw gewechselt, einmal der login und einmal "erwachen" aus systemtray)
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 19.09.05 19:03 
Moin!

Also ich meinte, du programmierst quasi die InputQuery-Funktion nach, mit einer eigenen Form. Im (selbstgeschriebenen) .Execute() machste dann .ShowModal das Form auf und hast´s doch praktisch schon. :wink: Wozu da was mit Variablen tun... ?

cu
Narses
snoop Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 19.09.05 19:51 
hm, so ganz komm ich nicht mit!

ich bestätige ja dann die eingabe des passworts (das dank edit-fenster als **** angezeigt wird) mit druck auf enter oder nen ok-button.
und woher "weiß" das formular dann, was es zu tun hat?

kann dir grad nicht ganz folgen ;)
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mo 19.09.05 20:20 
Versuch doch auch folgendes: Schreib dir eine Funktion, die etwa so aussieht:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
function MyInputBox(Title,Text,Standart:String):String;
begin
with InputForm do
  begin
    Caption:=Title;
    Label1.Caption:=text;
    Edit1.Text:=Standart;
    ShowModal;
  end;
  result:=InputForm.Edit1.Text;
end;


InputForm ist natürlich deine modifizierte Form. Dabei muss natürlich ein Button mit ModalResult:=mrOK; vorhanden sein. Wenn du noch "Abbrechen" und "OK" unterscheiden willst, musst du eben vor result:=... eine abfrage machen if InputForm.ModalResult=mrOK then result:=.. else.....)

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
snoop Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 19.09.05 21:43 
so hätte man das natürlich machen können, dass man nen button aber mit ModalResult:=mrOK belegen kann, war mir neu. das hätte natürlich schonmal weitergeholfen.
ich wär nicht auf die idee gekommen, nicht mit delphi, mit java schon eher ;)

so, bis auf kleine funktionen geht erstmal alles, werd das teil dann demnächst hier veröffentlichen..
arcardia
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Di 20.09.05 11:50 
Du kannst das ganze auch per Botschaft erzwingen



ausblenden volle Höhe 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:
const
  InputBoxMessage = WM_USER + 200;

implementation

{$R *.DFM}

procedure TForm1.InputBoxSetPasswordChar(var Msg: TMessage);
var
  hInputForm, hEdit, hButton: HWND;
begin
  hInputForm := Screen.Forms[0].Handle;
  if (hInputForm <> 0then 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, 00);
  InputString := InputBox('Input Box''Please Enter a Password''');
end;


Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 20.09.05 13:25 
Moin!

user profile iconarcardia hat folgendes geschrieben:
Du kannst das ganze auch per Botschaft erzwingen

Hmm, deine Lösung hat was von einem "Hack"... :|

Abgesehen davon, dass du (für Anfänger) vergessen hast zu erwähnen, dass man auch den Messagehandler korrekt deklarieren muss, klappt´s nämlich z.B. so nicht mehr:
ausblenden volle Höhe 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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

const
  WM_SetPwdChar = WM_USER +200;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure InputBoxSetPasswordChar(var Msg: TMessage); message WM_SetPwdChar; // vergessen...
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.InputBoxSetPasswordChar(var Msg: TMessage);
  var
    hInputForm, hEdit: HWND;
begin
  hInputForm := Screen.Forms[0].Handle;
  if (hInputForm <> 0then begin
    hEdit := FindWindowEx(hInputForm, 0'TEdit'NIL);
    SendMessage(hEdit, EM_SETPASSWORDCHAR, Ord('*'), 0);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
  var
    InputString: String;
begin
  PostMessage(Handle, WM_SetPwdChar, 00);
  Application.ProcessMessages; // schon geht´s nicht mehr...
  InputString := InputBox('Authentifikation''Kennwort: ''');
end;

end.

Fazit: Ich rate davon ab, das so zu versuchen.

cu
Narses