Probleme mit Fenstern nach Passworteingabe



  • Soweit ich das verstanden habe, soll bei Cancel im Passwortdialog alle Fenster geschlossen werden.

    Wenn nicht weiter im Programm gearbeitet werden soll (das Passwort wure ja noch nicht richtig eingegeben) ist ein beenden des Programmes sinnvoll.



  • Also das mit dem Abbrechen und Ansehen funktioniert sehr gut. Das mit dem Ok noch nicht ganz so, bin aber noch am probieren.

    Danke erstmal



  • Ich habe das nochmal probiert aber nicht hinbekommen mit dem okay-button.
    was nun?

    weis noch jemand Rat?



  • Von wo aus rufst du denn deinen Passwortdialog auf?
    Wenn du das z.Bsp. in OnShow der Hauptform machst brichst du nach drücken von Cancel ab (wie gehabte) und machst nach drücken von Ok einfach nichts und lässt das Programm laufen.



  • Davi455 schrieb:

    Ich habe das nochmal probiert aber nicht hinbekommen mit dem okay-button.

    Was hast du nicht hinbekommen?
    Versuche bitte eine klare Fehlerbeschreibung zu liefern. Je klarer die Beschreibung, desto besser die Antworten.

    versuche zB mal diese Fragen zu Beantworten:
    Was willst du Erreichen? (Nicht das ganze Projekt, nur dort wo das Problem liegt(Ok Button))
    Wie weit läuft es?
    Was hast du schon probiert?

    und eventuell noch Code-Ausschnitt des Problems anfügen.

    das ganze ist natürlich nicht böse gmeint 🙂

    mfg
    BigNeal



  • Beliah schrieb:

    1. Da das Passwortfenster wahrscheinlich nicht das Hauptfenster ist, was ich auch unsinnig finden würden, würde ich versuchen die Applikation zu terminieren

    2. Das Enable der Form zu ändern wird es mit Sicherheit nicht anzeigen.Ausserdem wird das Passwortfenster anscheinden Modal angezeigt.Wenn du nicht weist was das bedeutet würde ich mir mal die Borland Hilfe zu ShowModal anzeigen lassen.

    3. Wieso öffnest du das 'geschützte' Fenster Modal?

    [edit]
    ach mist, weil ich auf den Zurück Button gekommen bin ist mir doch jemand zuvorgekommen
    [/edit]

    zu 1. Terminieren des Programm's wäre schlecht. Wenn das passiert, fragt sich der Benutzer warum das beendet wurde? Antwortmöglichkeiten: Abgestürzt, PW oder User falsch, Programm hat ein Bug und beendet sich. usw. Solange nicht darauf hingewiesen wurde. ^^

    zu 2. Stimme ich dir zu, aber er sagte es wäre das Hauptformular, also ist es Standard mäßig Modal angezeigt.

    zu 3. Meinst du damit das PW Dialog oder das Hauptformular? 😕

    ---------------

    Nun zum Thread ersteller:

    BigNeal hat dir schonmal sehr gute Tipps gegeben, aber ein Fehler gemacht. Das Hauptformular ist das bereits aktive Formular. 🙂

    Aber wie du das löst finde ich nicht sehr gut.
    Punkte die mich auf stoßen würden:
    1. Das Programm beendet sich nach fehl eingabe von PW/Benutzername (Weiß nicht ob der Nutzer vorher informiert wird.)
    2. PW hard in den Code verbaut. 😞 😢
    3. PW Dialog auf dem Hauptformular!!! 😞

    Sei net böse drüber, sollte nur ne Info an Dich sein. ^^

    Erstmal würde ich eher dein PW Dialog in ein extra Formular ein bauen (Neues Formular erstellen).
    Darauf sollte 2 TEdit's (oder besser TLabeledEdit's. Warum? Weil da schon TLabel dabei ist und mit geknüpft ist. ^^), dann solte 2 Buttons drauf sein (OK & Abbrechen).

    Der OK Button solte bei der Eigenschaft ModalResult auf mrOk stehen haben.
    Der Abbrechen Button solte bei der Eigenschaft ModalResult auf mrCancel stehen haben.

    Erstmal Fertig mit dem PW Dialog, mehr mußt du da nicht machen.

    Dein Formular includierst (#include "PWDialog.h") in deiner Header-Hauptformular Datei.

    Und in deinem Hauptformular kannst du dann das PW-Form aus öffnen. Das tust du in einer eigenen Methode (z.B.: bool TFormMain::ZeigeLogin() )
    Darin solltest du dann ca. sowas machen:

    bool TFormMain::ZeigeLogin() {
      if(PWDialog->ShowModal() == mrOk) {
        // Eingegebenes Passwort verschlüsseln.
        // Ist sicherer (Solange du einen guten Algo nutzt) und besser.
    
        // Das gespeichertes PW sollte nicht im Quellcode fest programmiert sein.
        // Sondern in einer Datei gesichert, aber bitte das gespeicherte Passwort
        // VERSCHLÜSSELN (mit einem guten Algo).
        if(Eingebenes_und_verschlüsseltes_PW == Gespeichertes_PW) {
          ShowMessage("Sie sind angemeldet");
    
          return true;
        }
        else {
          // Bitte nie genau sagen was falsch ist.
          // Sonst kann ein Cracker herausfinden ob der Benutzername Korrekt ist.
          // Und mitder Meldung das Benutzername oder PW falsch ist, weiß man nicht was falsch ist
          // und dadurch sicherer.
          ShowMessage("Benutzername oder Passwort falsch.");
    
          return false;
        }
      }
      else {
        // \n Ist dafür da, das der Rest in der nächsten Zeile steht. ^^
        ShowMessage("Das Programm wird nun geschlossen,\nweil Sie sich nicht eingelogt haben.");
        Application->Terminate(); // Oder besser Close(); hört sich besser an als Kill. ^^
      }
    
      return false;
    }
    

    Im Konstrukor der Hauptformular kannst du die Methode aufrufen.
    So ungefähr:

    for(int iIndex = 0; iIndex < 4;iIndex++) {
      if(this->ZeigeLogin()) {
        break;
      }
    
      if(iIndex == 3) {
        ShowMessage("Sie haben 3 mal Benutzername oder Passwort falsch angegeben.\nDas Programm beendet sich nun.");
        Application->Terminate(); // Oder besser Close(); hört sich besser an als Kill. ^^
      }
    }
    

    Mann es es noch verbessern die while. ^^

    Das schöne daran ist, du hast dieses Formular ausgelagert und dein Hauptformular (MainForm) ist leer und mußt diese Komponenten ausblenden und stört dich auch nicht weiter beim Designenen deiner weiteren Objekten auf dem Formular.

    Bei Fragen melde dich.



  • [quote="DJ BlackEagle
    zu 1. Terminieren des Programm's wäre schlecht. Wenn das passiert, fragt sich der Benutzer warum das beendet wurde? Antwortmöglichkeiten: Abgestürzt, PW oder User falsch, Programm hat ein Bug und beendet sich. usw. Solange nicht darauf hingewiesen wurde. ^^

    zu 2. Stimme ich dir zu, aber er sagte es wäre das Hauptformular, also ist es Standard mäßig Modal angezeigt.

    zu 3. Meinst du damit das PW Dialog oder das Hauptformular? 😕
    [/quote]

    1. Das will er doch so?

    2. Ähm... ja

    3. Das was er als geschütztes Fenster beschrieben hat, ich nehm an das Hauptformular



  • Beliah schrieb:

    1. Das will er doch so?

    2. Ähm... ja

    3. Das was er als geschütztes Fenster beschrieben hat, ich nehm an das Hauptformular

    zu 1. Jo, aber war mir nicht sicher ob er dem Benutzer das vorher sagt. Deswegen habe ich das gesagt. Wenn ja net informiert wirst, wundert sich der User warum das Programm beendet wurde. 😉 War net böse gemeint, war nur ein gedankengan von mir, um dir es zu sagen.

    zu 3. Ja, das Hauptformular. Wenn er das nicht verwechselt mit dem Formular was immer beim rogrammstart auf Visible ist (im BCB unter Projekt eigestellt ist).



  • Kurze Erklärung:

    Ich starte das Hauptformular. Dort habe ich unter Ereignisse "OnCreate" eingegeben, dass das Passwortformular Modal aufgerufen werden soll. Das Hauptfenster ist bis dahin noch garnicht zu sehen. Das Passwortformular besteht aus 2 Editfenstern und 3 buttons. (OK,Ansehen,Abbrechen). Wenn ich auf abbrechen gehe, wird das Passwortfenster und das Hauptfenster, welches noch garnicht zu sehen ist geschlossen. Deshalb bin ich der Meinung, das der user sich nicht fragen wird, was jetzt passiert ist, wenn ich auf abbrechen gehe. Das Passwortabfrage wurde abgebrochen und somit kommt man auch nicht in das Programm.

    - PW ist fest eingebaut, weil ich momentan noch keine Idee habe wie ich es anders anpacken soll

    Nun gut ich werde mich mal weiter versuchen. Wenn ich fragen habe werd eich sie einfach stellen. Dank an alle nochmal.



  • Erweiterung:

    Bei Ansehen soll es möglich sein auf das Hauptformular zuzugreifen, aber ohne iregndwelche Veränderungen vorzunehmen. Ok Zugriff auf Hauptformular mit Veränerungen.

    so ich glaube jetzt habe ich die grobe Funktion dargestellt.



  • Davi455 schrieb:

    Kurze Erklärung:

    Ich starte das Hauptformular. Dort habe ich unter Ereignisse "OnCreate" eingegeben, dass das Passwortformular Modal aufgerufen werden soll. Das Hauptfenster ist bis dahin noch garnicht zu sehen.

    Hört sich schon irgendwie komplett anders an.
    Weil de sonst gesagt hast das es auf dem hauptform ist.

    Davi455 schrieb:

    Wenn ich auf abbrechen gehe, wird das Passwortfenster und das Hauptfenster, welches noch garnicht zu sehen ist geschlossen. Deshalb bin ich der Meinung, das der user sich nicht fragen wird, was jetzt passiert ist, wenn ich auf abbrechen gehe. Das Passwortabfrage wurde abgebrochen und somit kommt man auch nicht in das Programm.

    Doch der wird sich wundern.

    Du sagst selbst das er unter Ansehen die Daten sieht (was auch immer).Klickt aufansehen und klickt auf Abbrechen, weil er sich nicht nochmal einlogen will, sondern weiter arbeiten will wo er aufgehört hat. Und was macht das Prog? Es beendet sich. Da sage ich als User: "Danke, das ist geil. Und ich muß von vorne anfangen. 😡".
    Ich würde dann das Prog in den PGP-Shredder werfen. ^^

    Deswegen mach das anders.

    Davi455 schrieb:

    - PW ist fest eingebaut, weil ich momentan noch keine Idee habe wie ich es anders anpacken soll.

    Sagteich doch teils was zu.
    In eine Datei.

    Tips was für ne Datei nehmen kannst:
    .htaccess Like
    Ausehen würde es so z.B.:
    DJBlackEagle:eu37fg34fh3478h383h8348

    DJBlackEagle ist der Benutzername.
    Und das : ist das trennzeichen. Dannach kommt das PW (verschlüsselt).

    Oder du machstini dateien.

    Im Style so:
    [DJBlackEagle]
    pw=sdmhbvg§%§%Ä%Ööä_:>Xjsdgfsdhjs

    [Peter]
    pw=utz4578th78f45nj78f34f389d4%§$%§§fer

    Dann mußt du nur hingehen abfragen obs die INI-Sektion existiert.
    Ist die vorhanden, dann gibts schonmal username. Dann das PW vergleichen.
    zack.

    Um noch mehr sicherheit zu kriegen, kannst du die Datei extra verschlüsseln, so könnte keiner die Usernamen raus kriegen.



  • Ich glaube das ist zuviel auf einmal. Ich versteh das einfach nicht so schnell, zumal ich das auch alles zum ersten mal mache. ich wollte erstmal leicht anfangen. wenn das dann klappt, dann komplizierter. ich sehe momentan erstmal garnicht mehr durch. hmm 😕 😮



  • Die leichte version habe ich soweit ja schon fast fertig, außer das ich mit ok vom passwortfenster, wenn passwort erkannt nicht ins eigentliche Hauptfenster komme. Wenn ich das erstmal zum laufen bekommen habe, werde ich mal andere verschlüsselungstechniken probieren.


Anmelden zum Antworten