Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Passwort-Fenster vor einem Programm
oneP - Di 18.08.09 00:52
Titel: Passwort-Fenster vor einem Programm
Hallo!
ich möchte, wie der Titel schon sagt, dass vor dem Start meines Programms ein kleines kennwortfenster erscheint.
Ich habe mir das so vorgestellt (ein ganz einfaches Beispiel:)
Es gibt zwei units (Hauptfenster und Passwortfenster)
Beim Start des Programms soll das Passwortfenster vom Hauptf. aufgerufen werden:
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:
| unit Hauptfenster;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;
type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private public end;
var Form1: TForm1;
implementation
uses Passwortfenster;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin Form2.showmodal; end;
end. |
wenn man diesen Aufruf-Befehl unter FormCreate eingibt, wie ich das hier gemacht hab, dann erscheint nach dem Start des Programms aber ein fehler. ('Fehler in Adresse....')
Was ist Falsch daran?
außerdem will ich das so machen dass am Anfang nur das Kennwortfenster erscheint, und erst nach der Eingabe des Kennworts das 'Hauptfenster' also das eigentliche Programm gestartet wird.
Wie stell ich das an?
Kann mir da jemand helfen?
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Di 18.08.2009 um 00:59
elundril - Di 18.08.09 01:15
warum nimmst du nicht das passwort-Form als hauptform, das dann einfach dein eigentliches Programm aufruft wenn das Passwort richtig eingegeben wurde?
lg elundril
oneP - Di 18.08.09 01:30
dann hab ich aber wieder das Problem dass ich, nachdem das Hauptfenster geöffnet wurde, das Kennwortfenster nicht schließen kann (zB durch Form1.close) weil dann das ganze Programm geschlossen wird.
Oder geht das irgendwie?
Delete - Di 18.08.09 03:51
- Nachträglich durch die Entwickler-Ecke gelöscht -
delphijanka - Di 18.08.09 14:53
Kreiert man eine Passwort-Form bei der OnShow der MainForm (Öffnen mit ShowModal!), so wird die MainForm erst nicht angezeigt, jedoch die Password-Form. Aus der Password-Form kann man jedoch in die MainForm zugreifen, um die Benutzereingaben (Username, Password) auf Richtigkeit zu prüfen. Mit Schliessen des Passwort-Fensters einfach Close; schreiben, mit Schliessen der gesamten Anwendung MainForm.Close;
thepaine91 - Di 18.08.09 16:50
Der Vorschlag mit Hide ist alleine deswegen schlecht da das Formular dann unsichtbar und ungenutzt in der gegend rumfliegt ^^.
Der ansatz von delphijanka hört sich schon viel besser an. Je nach erzeugung des Formulars auch wieder auf die Freigabe achten...
Delete - Di 18.08.09 20:07
- Nachträglich durch die Entwickler-Ecke gelöscht -
thepaine91 - Di 18.08.09 22:06
Frühlingsrolle er gibt aber nicht an wie lange die Anwendung läuft. Und es ist einfach unsauber und wenn man das öfter in einer größeren Anwendung macht dann wird die Problematik noch offensichtlicher. ;)
Narses - Di 18.08.09 22:50
Moin!
thepaine91 hat folgendes geschrieben : |
Frühlingsrolle er gibt aber nicht an wie lange die Anwendung läuft. Und es ist einfach unsauber und wenn man das öfter in einer größeren Anwendung macht dann wird die Problematik noch offensichtlicher. ;) |
Ich schmeiße mal das Wort "Verhältnismäßigkeit" in die Diskussion. Was schätzt du denn, wieviele verschiedene, gleichzeitig geöffnete aber versteckte Passwort-Dialoge er so in dieser Anwendung verwenden wird? :zwinker:
cu
Narses
Delete - Di 18.08.09 23:19
- Nachträglich durch die Entwickler-Ecke gelöscht -
oneP - Mi 19.08.09 01:08
Der tipp von delphijanka war eigentlich das wonach ich gesucht hab. Das OnShow Ereignis öffnet das Passwort fenster als 'Nebenfenster', genauso wie ich das gewollt hab. Nur leider hab ich das OnShow Ereignis vorher nicht entdeckt... :D
und zum Thema Passwort möcht ich noch fragen ob es eine sichere Möglichkeit gibt als es in einer ini Datei zu speichern? Vielleicht so dass man es gar nicht in einer datei speichern muss??
und wie lass ich das Passwort bei der Eingabe nur als Punkte erscheinen?
Delete - Mi 19.08.09 02:01
- Nachträglich durch die Entwickler-Ecke gelöscht -
thepaine91 - Mi 19.08.09 08:54
Narses da hast du schon recht nur wenn man so denkt ist immer die Frage wo die grenze ist. OT: Wenn man ein Loli klaut bleibt es auch Diebstahl.
Ich finde man sollte das von Anfang an einhalten. Aber nur meine meinung daher beuge ich mich jetzt. :P
Onep: du könntest es in der registry speichern u.a. und dazu 100* md5 verschlüsseln. ;)
delphijanka - Mi 19.08.09 09:27
@OneP
Bitte beachten: dein Anmelde-Fenster darf nicht einfach so mit Alt-F4 oder ähnlichem geschlossen und damit der Anmeldevorgang umgegangen werden. Zur Lösung des problems einfach eine boolean-Variable in der Anmelde-Unit deklarieren, die, je nach Status, entweder nur Anmeldefenster schleisst, oder das gesamte Programm. Erfolgreicher Anmeldevorgang würde bedeuten, den Wert dieser Variable zu ändern.
delphijanka - Mi 19.08.09 09:37
@OneP schreibt:
"und zum Thema Passwort möcht ich noch fragen ob es eine sichere Möglichkeit gibt als es in einer ini Datei zu speichern? Vielleicht so dass man es gar nicht in einer datei speichern muss??"
Normalerweise werden die pw's encodiert und "irgendwo" abgelegt. Das Encode- sowie Decodeverfahren sind direkt in das Programm integriert.
oneP - Mi 19.08.09 11:30
Frühlingsrolle danke für den Tipp hab ich gleich gemacht. Mit Punkt meinte ich den da: ••••
thepaine91 hat folgendes geschrieben : |
Onep: du könntest es in der registry speichern u.a. und dazu 100* md5 verschlüsseln. ;) |
??? Kapier ich nicht.... :D also dieses Verschlüsseln
delphijanka hat folgendes geschrieben : |
@OneP
Bitte beachten: dein Anmelde-Fenster darf nicht einfach so mit Alt-F4 oder ähnlichem geschlossen und damit der Anmeldevorgang umgegangen werden. Zur Lösung des problems einfach eine boolean-Variable in der Anmelde-Unit deklarieren, die, je nach Status, entweder nur Anmeldefenster schleisst, oder das gesamte Programm. Erfolgreicher Anmeldevorgang würde bedeuten, den Wert dieser Variable zu ändern. |
danke auch. habs jetzt auch so gemacht :D
delphijanka hat folgendes geschrieben : |
@OneP schreibt:
Normalerweise werden die pw's encodiert und "irgendwo" abgelegt. Das Encode- sowie Decodeverfahren sind direkt in das Programm integriert. |
Hmm.. das is mir aber zu umständlich :D. Ich mache das Programm nur so als Übung...
ALSO DANKE NOCHMAL AN ALLE
Gewuerzgurke - Di 25.08.09 15:52
Wobei anzumerken ist, dass man nicht das Passwort verschlüsseln sollte sondern dieses selber als Schlüssel für einen zufällig erzeugten Ausdruck verwenden sollte. Denn so kennt das Programm das Passwort garnicht, sondern kann nur prüfen, ob der zufällig erzeugte Ausdruck korrekt entschlüsselt wurde.
Ich suche schon seit Tagen nach vernünftigen Tutorials und Quellcode für solche Verschlüsselungen wie z.B. AES. Hat jemand ein Paar Tipps?
elundril - Di 25.08.09 16:27
Das DEC von Hagen (username: negaH) aus der Delphi-Praxis wäre zum beispiel so ein Quellcode. Da sind unter anderem AES, MD5 und weitere dabei. Jedoch sind diese Units nicht kommerziell nutzbar, da von der lizenz her verboten.
lg elundril
thepaine91 - Di 25.08.09 17:00
Ich muss mich korrigieren.
md5 ist lediglich ein Hashwert nicht zu verwechseln mit einer Verschlüsselung.
Wenn du natürlich intern im Programm den Hashwert errechnest und den in eine Ini speicherst ist das nicht weiter kompliziert.
Für den Normalen nutzer wird das reichen für jemanden mit genügend Fachkenntnissen nicht.
ffgorcky - Sa 29.08.09 11:06
Das geht doch auch schon so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.FormCreate(Sender: TObject); begin if InputBox('Passwortabfrage','Bitte zum Start das erforderliche Passwort eingeben:','')='Hallo' then Form1.Show else Application.Terminate; end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!