Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Passwortabfrage ins Programm einbauen
TheNeon - Mi 01.08.07 13:00
Titel: Passwortabfrage ins Programm einbauen
Hallo zusammen,
ich habe sicherlich nach den faöschen Wörtern gesucht, daher nix gefunden .... also hier meine Problemschilderung:
Ich habe mein Programm fertig und möchte jetzt jedoch noch VOR dem eigentlichen Programmstart eine Passwort-Abfrage machen. Dazu habe ich bereits ein zweites Formular erstellt, doch schaffe ich es einfach nicht, dass beim richtigen Passwort das Formular mit der Abfrage komplett verschwindet und das Hauptprogramm gestartet wird. Ebenso wenig funktioniert das reibungslose Schließen bei falscher Eingabe.
Kann wer helfen?
Gruß
TheNeon
Chryzler - Mi 01.08.07 13:07
Zeig mal deinen Code den du bis jetzt hast.
TheNeon - Mi 01.08.07 13:22
das was ich bisher habe ist eigentlich peinlich, da ich keine Ahnung habe, wie ich das realisieren kann, was ich will:
PROJEKT
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| program Schwupp;
uses Forms, Main in 'Main.pas' , Passwortabfrage in 'Passwortabfrage.pas' ;
{$R *.res}
begin Application.Initialize; Application.Title := 'Schwupp'; Application.CreateForm(TF_Main, F_Main); Application.CreateForm(TF_Passwortabfrage, F_Passwortabfrage); Application.Run; end. |
PASSWORTABFRAGE
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:
| var F_Passwortabfrage: TF_Passwortabfrage;
implementation
uses Main;
{$R *.dfm}
procedure TF_Passwortabfrage.Button_BestaetigenClick(Sender: TObject); begin if EDIT_Passwort.Text <> 'passwort' then begin Close; end; end;
procedure TF_Passwortabfrage.Button_AbbrechenClick(Sender: TObject); begin Close; end;
procedure TF_Passwortabfrage.EDIT_PasswortKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_Return then begin Button_BestaetigenClick(nil); end; if Key = VK_ESCAPE then begin Button_AbbrechenClick(nil); end; end;
end. |
MAIN
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TF_Main.FormCreate(Sender: TObject); var i: Integer; begin F_Passwortabfrage := TF_Passwortabfrage.Create(F_Main); try F_Passwortabfrage.ShowModal; finally F_Passwortabfrage.Free; end;
[...] |
Was mir praktisch gesehen fehlt ist, dass ist von der Passwortabfrage praktisch Rückmeldungen kriege ... oder?
Bin an einem Punkt wo jegliche Versuche nix gebracht haben :( ... ist bestimmt aber nicht so schwer
chrisw - Mi 01.08.07 13:24
Du könntest im Projectcode (Project/View Source) das Programmform in Abhängigket des "Passwort-Form" "createn" !
So ähnlich:
Bsp:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| uses ....,Controls,
{$R *.res} begin Application.Initialize; Application.CreateForm(TPasswortForm, PasswortForm); case PasswortForm.ShowModal of mrOK : begin PasswortForm.Free; Application.CreateForm(TProgramForm,ProgramForm); end; mrCancel : PasswortForm.Free; end; Application.Run; end; |
TheNeon - Mi 01.08.07 13:43
Okay, soweit verstehe ich es. Was ich nur nicht hinkriege ist das Ergebnis abhängig vom Passwort zu machen, denn wenn ich nach Passworteingabe "Self.Close" mache, dann wird immer mrCancel ausgelöst
Chryzler - Mi 01.08.07 13:56
Versuch mal statt Self.Close einfach Application.Terminate zu nehmen.
TheNeon - Mi 01.08.07 14:07

klappt alles nicht, denn wenn ich es so mache, dann wird beim Abbrechen das Programm trotzdem gestartet und direkt danach terminiert.
Wenn das Passwort richtig ist, wird das Programm gestartet, doch im Vordergrund erscheint wieder die Passwortabfrage.
passiv - Mi 01.08.07 14:10
nimm self.hide und hauptform.show
JayEff - Mi 01.08.07 15:12
TheNeon hat folgendes geschrieben: |
wenn ich nach Passworteingabe "Self.Close" mache, dann wird immer mrCancel ausgelöst |
Wer ShowModal benutzt sollte mit dem ModalResult umgehen können. Einfach bei der richtigen Eingabe des Passworts nicht Close; sondern ModalResult := mrOK; benutzen, bei falscher Eingabe mrCancel.
Und dass Application.Terminate nicht die Hauptform anzeigt sondern das Programm schließt, ist irgendwie ... klar.
Vielleicht wär dieser Code in der Projektdatei besser...:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| Uses Forms, Unit1 In 'Unit1.pas' , Unit2 In 'Unit2.pas' , Controls;
Begin Application.Initialize; Application.CreateForm(TForm2, Form2); If Form2.ShowModal = mrOK Then Begin Form2.Free; Application.CreateForm(TForm1, Form1);
Form1.Show; Application.Run; End Else Application.Terminate; End. |
Bevor das hier in eine Diskusion über Sicherheit ausartet: Ich weiß, dass man so gut wie überhaupt keine Sicherheit vor Crackern erreichen kann. Man kann z.B. einfach den jump der if-Abfrage von jnz in jz oder ähnliches ändern und schwupps erhalte ich Zugriff, sobald ich das *falsche* passwort eingebe, anstatt umgekehrt. Aber darum gehts hier ja nicht ;)
TheNeon - Mi 01.08.07 16:28
Danke, so klappt es. Wusste nicht, dass man mit ModalResult was zurückgeben kann - ist ja genau das was ich suchte.
Das mit dem Terminate hast du aber falsch verstanden ;)
Bzgl. der Sicherheit reicht es mir, soll nur eine kleine Sicherheit sein :)
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!