Ich brauche einen Login-Fenster(Dialog)



  • Hallo,

    ich habe eine FormView-Anwendung geschrieben. Jetzt wollte ich bevor die
    anwendung startet einen Login-Dialog einbauen wo man den Usernamen und Passwort eingeben kann um die Anwendung zu benutzen.

    Wo muss ich den Dialog aufrufen in der View oder Doc und wo genau.
    Ich möchte dass wenn der User falsches kennwort oder usernamen eingibt, meine anwendung nicht startet.

    Bedanke mich im Voraus!
    🙂



  • Was denken sich eigentlich manche? Dass es alles schon vorgebastelt gibt mit 378 Einstellungsmöglichkeiten und man es nur einsetzen kann?

    Hast du den Passworteingabe-Dialog schon gemacht? Nein? Dann mach ihn.
    Hast du schon ne Klasse dazu erstellt? Nein? Dann mach sie.
    Weisst du überhaupt wie man Dialoge und Klassen macht? Nein? Dann lern es.
    Hast du schon eine Abfrage ob das Passwort mit dem gewünschten User übereinstimmt? Nein? Dann mach sie.
    Weisst du was eine if-Abfrage ist? Nein? Tja, Pech...
    Hast du schon rausgefunden wie man ein Fenster schliesst wenn die Eingabe korrekt war? Nein? Dann finde es raus.
    Hast du jetzt den ungefähren Ablauf des Geschehens mitbekommen? Nein? Dann fang nochmal an zu lesen.

    Und jetzt nochmal in der Kurzfassung: Du brauchst einen Dialog der nach dem drücken eines Buttons abfragt ob die Sachen die man in den Feldern eingegeben hat korrekt sind. Wenn sie korrekt sind, schliesst sich das Fenster und man gelangt zum Programm. Wenn sie falsch sind tut sich genau nichts und man muss erneut eingeben...



  • Hi Pulse,

    wenn du nicht helfen willst oder kannst dann lass es. 😡
    Erspar dir ,mir und den anderen Forumteilnehmern in Zukunft solche Bemerkungen.
    👎
    Wenn dur genau gelesen hättest, hättest du auch gesehen, dass ich eine Anwendung erstellt habe. Also kann ich alle deine Fragen mit "Ja" beantworten.

    Mein Frage war nur wo ich den Dialog aufrufe bevor meine Anwendung startet, also nicht wie ich die Tabellen, Editfelder, Dialoge abfrage, wie die If anweisung funktioniert dürfte auch klar sein, ich habe nicht gestern angefangen zu programmieren.

    Ich stand ein wenig auf dem Schlauch also habe ich gepostet. Mittlereweile weiss ich wo ich den Dialog aufrufe.

    Du brauchst einen Dialog der nach dem drücken eines Buttons abfragt ob die Sachen die man in den Feldern eingegeben hat korrekt sind. Wenn sie korrekt sind, schliesst sich das Fenster und man gelangt zum Programm. Wenn sie falsch sind tut sich genau nichts und man muss erneut eingeben...

    Ach neee, echt? :p

    Erst lesen dann Antworten! 😃



  • Machs in InitInstance.

    Wenn du dort FALSE zurückgibst, dann wird das Programm gar nicht richtig gestartet.

    PS: Ich hatte deine Frage auch falsch verstanden...



  • Danke estartu_de,

    PS: Ich hatte deine Frage auch falsch verstanden...

    Werde es versuchen in Zukunft besser zu beschreiben !

    Danke Nochmal! 🙂



  • Tut mir Leid aber ich habs durchgelesen und so verstanden dass du eine fertige Klasse suchst die du einfach einsetzen kannst und da ich gerade davor eine Wo-gibt-es-was-fertiges-frage gelesen hab, hab ich mich gefragt ob es auch Leute gibt die selber denken wollen. Sorry.

    Deine Frage wurde ja schon beantwortet. Grundsätzlich würd ich alle Funktionen und Methoden die was mit dem Programmstart zu tun haben in das OnInitDialog packen...



  • @Pulse

    ins OnInitDialog??? ich würds ins InitInstance geben !!!



  • Spielt das ne grosse Rolle ob er den Logindialog beim Initalisieren der Instanz aufruft oder beim initialisieren des eigentlichen Dialogs? Die Anwendung (das sichtbare) startet ja sowieso erst nach dem Abarbeiten der beiden...



  • mir ist das egal wie du das dann machst, es war ja nur ein vorschlag.
    hast du nun noch irgendwelche schwierigkeiten, diesen dialog zu erstellen ??

    ein vorschlag:

    für die passwort eingabe nimm bitte kein textfeld mit der option "passwort", weil über ein cwnd-attach drauf kann man diese option relativ einfach deaktivieren und das passwort ist daraufhin sichtbar !!



  • nonamebody schrieb:

    ein vorschlag:

    für die passwort eingabe nimm bitte kein textfeld mit der option "passwort", weil über ein cwnd-attach drauf kann man diese option relativ einfach deaktivieren und das passwort ist daraufhin sichtbar !!

    Wie macht man es besser? 😕

    InitInstance gilt übrigens für ALLE Anwendungen, OnInitDialog nur für dialogbasierende.
    Außerdem handelt es sich ja sowieso um eine FormView Anwendung (also SDI oder MDI).

    Wieso wird hier immer von Dialogen ausgegangen? 😕



  • Ich hoffe mal das du weißt wie man nen Dialog aufruft. Hier der Code:
    1.

    if (m_dDEINEDIALOGKLASSE.DoModal () == IDOK)
    {
        StayOnTop();
    
        // Dialogfeld aktualisieren
        UpdateData(FALSE);
    }
    

    2. Deine Dialog Klasse includieren.

    3. Dann bei deiner Hauptklasse im Header unter Private:

    private:
    DEINEDIALOGKLASSE m_dDEINEDIALOGKLASSE;
    

    Damit sollte der deinen Passwortabfrage Dialog aufrufen und dann wenn das ganze mit einem Richtigen Passwort dann geschloßen wird den Hauptdialog aufrufen. 🙂

    Das müsste sein was du suchst. Nur das der Halt wartet bis dein Passwortabfrage Dialog beendet wurde und nicht bis das richitge Passwort eingegeben ist.



  • Danke Leute

    füt Eure Mühe!
    🙂
    Schönen Abend noch! 🙂



  • estartu_zu_hause schrieb:

    nonamebody schrieb:

    ein vorschlag:

    für die passwort eingabe nimm bitte kein textfeld mit der option "passwort", weil über ein cwnd-attach drauf kann man diese option relativ einfach deaktivieren und das passwort ist daraufhin sichtbar !!

    Wie macht man es besser? 😕

    Das gewöhnliche MFC-Passwortfeld ist nur ein gewöhnliches "verstecken der Buchstaben". Wenn du nun mit einem externen Programm ein Handle auf dieses Editfeld holst, kannst du ganz einfach sein Password-Flag bei den Eigenschaften entfernen da du vollen Zugriff darauf hast. Wenn das weg ist ist natürlich sofort das eigentliche Passwort sichtbar.

    Beim modifizierten hingegen wird es etwas anders gehandhabt: Dass es eine von CEdit abgeleite Klasse benötigt sollte wohl klar sein da man Modifikationen dran vornehmen muss. Der eigentliche "Trick" dabei ist, die Anzeige (das was man auf dem Control sieht) und das eigentliche Passwort zu trennen, sozusagen 2 getrennte Variablen zu erstellen. Das drücken einer Taste wird in der EN_UPDATE-Klasse abgefangen und beide werden auf den neusten Stand gebracht. Mit einem Unterschied: Das angezeigte ist nur eine Anreihung von Zeichen wie '*' oder 'x' mit der korrekten Länge die man eingegeben hat. Hier muss man also immer nur darauf reagieren ob der User ein Zeichen hinzugefügt hat oder gelöscht oder gar das ganze Control geleert etc. Beim zweiten fängt man dann die genaue Eingabe ab und editiert die Variable dementsprechend. So nützt es nichts wenn du dir ein Handle auf das CEdit holst, du siehst wieder nur lauter Sternchen...



  • Ahhhh, coole Idee. 👍

    Merk ich mir, danke! 🙂



  • korrekt !



  • Falst de das noch nicht gelöst hast, http://www.functionx.com/visualc/applications/login.htm Glaube aber das de das schon fertig hast 😉



  • Wenn du nun mit einem externen Programm ein Handle auf dieses Editfeld holst, kannst du ganz einfach sein Password-Flag bei den Eigenschaften entfernen da du vollen Zugriff darauf hast. Wenn das weg ist ist natürlich sofort das eigentliche Passwort sichtbar.

    Wie kann man man ein Handle auf ein externes Programm machen? Habe dazu kein Lösungsansatz! jemand hat hier zwar auch schon eine solche Frage gestellt, doch die wurde leider nicht beantwortet



  • Hier kannst du dir den Quelltext runterladen und anschauen wie man ein Handle holt...



  • Pulse schrieb:

    Hier kannst du dir den Quelltext runterladen und anschauen wie man ein Handle holt...

    exactly what I need - thanks a million

    aja, hier hab ich vollständigkeithalber auch noch ein codeschnipsel:

    void CGetExternalHandleDlg::OnButtonProccess(){
     CString sProgNameToClose = "MyProgram":
     CWnd* pWnd = NULL;
     pWnd = CWnd::FindWindow(NULL, sProgNameToClose);
    
     if(pWnd!=NULL){
      pWnd->PostMessage(WM_CLOSE, NULL, NULL);
     }
    
     else{
      AfxMessageBox("Program not found"); 
     }
    }
    

    Bei der Ausführung der Methode wird eine Applikation mit dem Fensternamen sProgNameToClose gesucht unf falls vorhanden dann geschlossen.



  • MAcht alles nur Sinn wenn man das Passwort speichern kann und bei Programmstart dann wieder in das Edit schreibt.(Vorstellbar bei eingabe des Nutzernamens so wie bei den Browsern. Sollte man aber nie machen) Bei einer Eingabe ist das alles nicht notwendig. Der Nutzer weiß ja was er eingibt. MS hat es so gedacht wie bei allen maskierten Eingaben. Ein anderer der über die Schulter sieht kann nicht sehen was eingegeben wurde.


Anmelden zum Antworten