Button in Dialog aktivieren/deaktivieren



  • Hi,
    Ich habe es so gemacht aber der OK-Button ist immer noch aktiv und wenn ich was eingebe passiert auch nichts.



  • wie hast's denn jetzt gemacht? (und bitte code-tags verwenden 🙂 )



  • Leute, warum könnt ihr nicht einfach vernünftig und simpel darstellen? Dann gibts auch viel schneller Hilfe.



  • BOOL FAR PASCAL EDlg(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
        static HWND EDlghwnd;
        EDlghwnd = GetDlgItem(EDlg, IDOK);
        static int EDlg1, EDlg2, EDlg3;
        static char puffer[40];
    
        switch(msg)
        {
        case WM_INITDIALOG :
            EnableWindow(EDlghwnd, FALSE);
            sprintf( puffer, "%s", Name );
            SetDlgItemText( hwnd, IDC_NAME, puffer );
            sprintf( puffer, "%s", Pass );
            SetDlgItemText( hwnd, IDC_PASS, puffer );
            sprintf( puffer, "%lu", ID );
            SetDlgItemText( hwnd, IDC_ID, puffer );
            return TRUE;
        case WM_COMMAND :
            switch( wParam )
            {
            case IDC_NAME :
                EDlg1=1;
                if(EDlg1 == 1 && EDlg2 == 1 && EDlg3 == 1)
                 EnableWindow(EDlghwnd, TRUE);
                break;
            case IDC_PASS :
                EDlg2=1;
                if(EDlg1 == 1 && EDlg2 == 1 && EDlg3 == 1)
                 EnableWindow(EDlghwnd, TRUE);
                break;
            case IDC_ID :
                EDlg3=1;
                if(EDlg1 == 1 && EDlg2 == 1 && EDlg3 == 1)
                 EnableWindow(EDlghwnd, TRUE);
                break;
            case IDOK :
                GetDlgItemText( hwnd, IDC_NAME, puffer, 40 );
                sscanf( puffer, "%s", Name );
                GetDlgItemText( hwnd, IDC_PASS, puffer, 40 );
                sscanf( puffer, "%s", Pass );
                GetDlgItemText( hwnd, IDC_ID, puffer, 40 );
                sscanf( puffer, "%lu", & ID );
                EndDialog( hwnd, 0 );
                return TRUE;
            case IDCANCEL :
                EndDialog( hwnd, 1 );
                return TRUE;
            }
        }
        return FALSE;
    }
    

    Und wenn ich vor dem int mit EDlg1...3ein

    static
    

    setze geibt es fehler!



  • Das EDlghwnd = GetDlgItem(EDlg, IDOK); muss in WM_INITDIALOG!



  • Was soll eigentlich das ganze mit EDlg3=1;? Falls du so checken willst, ob alle Felder ausgefüllt sind klappt das nich so ganz! Denn EN_CHANGE wird z.B. soviel ich weiß auch gesendet, wenn man Zeichen wieder rauslöscht!



  • Der Dialog ist ja nur am Anfang verfügbar sobald einmal auf OK geklickt ist das Menuitem GRAYED!
    Es geht immer noch nicht!



  • Das hab ich jetzt net so ganz verstanden 😕
    Aber: wie genau sieht denn der Fehler bzw. das nicht gehen aus? 🙄



  • ich öffne den Dialog und der OK Button ist ganznormal so das man ihn anklicken kann!
    Er soll sich aber erst anklicken lassen wenn überall was drin ist!



  • Dann musst du ihn einfach in WM_INITDIALOG disablen und dann in case IDC_NAME usw. die drei Texte auslesen und wenn überall was drinsteht machst du enablest du ihn sonst disables du ihn. Verstanden? 🙄



  • Wenn du mir auch noch sagst wie ich das mache (Code) bin ich das glücklichste Programmierweibchen der Welt!



  • LRESULT CALLBACK DlgProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    
        switch( message )           
        {
            case WM_INITDIALOG: 
                {               
    
                    EnableWindow(GetDlgItem(hWnd,IDOK),false);
    
                    return TRUE;
    
                }
    
            case WM_COMMAND:
                {
    
                    if(ID_Textbox == LOWORD(wParam) && EN_CHANGE == HIWORD(wParam)) {
                    EnableWindow(GetDlgItem(hWnd,IDOK),true);
                }
    

    bitte wenn du noch probs hab meld per icq 83480010



  • EN_CHANGE bekommst wenn sich was ändert wenn du was hinzufügst oder löscht......

    mfg Wolfman


Anmelden zum Antworten