Textfarbe in Editfeld



  • Hmm ich habe wohl nicht verständlich machen können um was es mir geht.
    Das Edit Control ist nicht read-only und ich empfange auch ein WM_CTLCOLOREDIT.
    Ebenfalls wird der Text auch schon eingefärbt. Das geht auch schon.

    Ein Beispiel: Wenn der zu überprüfende Text "Hallo" sein sollte, sind die eingegebenen Buchstaben bis "Hall" rot, ist ja auch richtig. Wenn man dann das "o" eintippt, ist dieses grün, prinzipiell auch richtig, aber jetzt sollte "Hallo" komplett grün werden! Das bekomme ich nicht hin...



  • das geht so. ich habs doch vorhin aus langeweile selber ausprobiert.


  • Mod

    yogle schrieb:

    Ein Beispiel: Wenn der zu überprüfende Text "Hallo" sein sollte, sind die eingegebenen Buchstaben bis "Hall" rot, ist ja auch richtig. Wenn man dann das "o" eintippt, ist dieses grün, prinzipiell auch richtig, aber jetzt sollte "Hallo" komplett grün werden! Das bekomme ich nicht hin...

    Dann muss Du ein InvalidateRect auf das ganze Control loslassen. Das Edit Control zeichnet bei der Eingabenur die Änderungen neu. Nicht den gesamten Text.
    In Deinem Fall wird also das o eingegeben aber auch nur dieses Zeichen neu in grün gezeichnet. "Hall" bleibt unverändert.



  • Ne stimmt ja nicht MArtin. Ich habs doch selbst ausprobiert.



  • Doch mit InvalidateRect funktionierts nun. Danke Martin!



  • yogle schrieb:

    Doch mit InvalidateRect funktionierts nun. Danke Martin!

    funktioniert auch ohne, es ist unnötig.



  • Na dann zeig doch mal deinen kompletten funktionierenden Code!
    Also in meinem Fall ging es ohne InvalidateRect absolut nicht!


  • Mod

    Es ist wie ich geschrieben habe: Das Edit Control zeigt nicht bei jeder Tastatureingabe das komplette Feld neu an! Wenn die gesamte Färbung sich ändert durch die Eingabe eines Buchstabens, muss man ein InvalidateRect durchführen.



  • nein das stimmt ned, ich habs doch ausprobiert



  • BOOL CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) {
    	static BOOL bColorRed = TRUE;
    
    	switch(uMsg) {
    		case WM_CTLCOLOREDIT:
    			if(GetDlgCtrlID((HWND)lParam) == IDC_EDIT1) {
    				if(bColorRed)
    					SetTextColor((HDC)wParam, RGB(255,0,0));
    				else
    					SetTextColor((HDC)wParam, RGB(0,255,0));
    				return (BOOL)GetStockObject(WHITE_BRUSH);
    			}
    			return FALSE;
    
    		case WM_COMMAND:
    			switch(LOWORD(wParam)) {
    				case IDCANCEL:
    					EndDialog(hDlg, HIWORD(wParam));
    					return TRUE;
    
    				case IDC_EDIT1:
    					if(HIWORD(wParam) == EN_UPDATE) {
    						TCHAR szBuf[128];
    						GetWindowText(GetDlgItem(hDlg, IDC_EDIT1), szBuf, sizeof(szBuf));
    						if(_tcsstr(szBuf, _T("test"))) {
    							bColorRed = FALSE;
    						}	
    					}
    					return TRUE;
    			}
    			break;
    	}
    	return FALSE;
    }
    

Anmelden zum Antworten