Button in Dialog aktivieren/deaktivieren
-
Ich mach das so :
case WM_COMMAND: { if(textbox.Get_ID() == LOWORD(wParam) && EN_CHANGE == HIWORD(wParam)) { label.Caption("hjgsydxfghujikolölkjuhzgtufrdessdrftgzhujiklöjhgfd"); }
textbox.Get_ID() gibt mir die Id des Steuerelments zurück in deinen fall ist das z.B.: IDC_NAME
in der schleife kontrollier ich halt ob LOWORD(wParam) gleich der ID des steuerelments ist in deinem fall IDC_NAME dann vergleich ich noch den HIWORD(wParam) mit der message die ich verarbeiten will wenn alle beide stimmen ist bedingung erfüllt....also wenn du einen text eingibst wird sie ausgeführt......und das alles muss unter dem case zweig case WM_COMMAND passieren...
und diese variablen würde ich static definieren
static HWND EDlghwnd;
static EDlghwnd = GetDlgItem(EDlg, IDOK);
EnableWindow(EDlghwnd, FALSE);---------> das hier würde ich im case WM_INITDIALOG : aufrufen sonst wird jedes mal aufgerufenstatic int EDlg1, EDlg2, EDlg3;
static char puffer[40];hoffe konnte helfen
alle angaben ohne gewähr
[ Dieser Beitrag wurde am 15.02.2003 um 14:19 Uhr von Wolfman editiert. ]
-
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