Button in Dialog aktivieren/deaktivieren
-
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