Autor |
Beitrag |
snoop
Hält's aus hier
Beiträge: 15
|
Verfasst: 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
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 19.09.05 17:53
Moin!
snoop 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...
cu
Narses
|
|
snoop 
Hält's aus hier
Beiträge: 15
|
Verfasst: 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
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 19.09.05 18:00
Moin!
snoop 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...
cu
Narses
|
|
snoop 
Hält's aus hier
Beiträge: 15
|
Verfasst: 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
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 19.09.05 18:44
Moin!
Mag sein, du hast nicht wirklich verstanden, wovon ich rede... ?
cu
Narses
|
|
snoop 
Hält's aus hier
Beiträge: 15
|
Verfasst: 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
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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.  Wozu da was mit Variablen tun... ?
cu
Narses
|
|
snoop 
Hält's aus hier
Beiträge: 15
|
Verfasst: 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
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mo 19.09.05 20:20
Versuch doch auch folgendes: Schreib dir eine Funktion, die etwa so aussieht:
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 
Hält's aus hier
Beiträge: 15
|
Verfasst: 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
      
Beiträge: 48
|
Verfasst: Di 20.09.05 11:50
Du kannst das ganze auch per Botschaft erzwingen
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 <> 0) then 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, InputBoxMessage, 0, 0); InputString := InputBox('Input Box', 'Please Enter a Password', ''); end; |
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 20.09.05 13:25
Moin!
arcardia 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:
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; private public 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 <> 0) then 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, 0, 0); Application.ProcessMessages; InputString := InputBox('Authentifikation', 'Kennwort: ', ''); end;
end. |
Fazit: Ich rate davon ab, das so zu versuchen.
cu
Narses
|
|