Problem mit der Aufhebung des Schreibschutzes eines RichEditControl



  • Hallo,
    ich möchte einen Textbereich in einem RichEditControl schreibschützen.
    Zum Testen benutze ich einfach nur den ersten Buchstaben im Conrol:

    void WProtect ()
    {
    	CHARFORMAT cf = {0};
    
    	cf.cbSize = sizeof ( CHARFORMAT );
    	SendMessage (hEdit, EM_SETSEL, 0, 1 );
    
    	ret = SendMessage (hEdit, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf );
    
    	cf.dwMask |= CFM_PROTECTED;
    	cf.dwEffects = CFE_PROTECTED;
    
    	ret =	SendMessage (hEdit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf );
    
    	SendMessage (hEdit, EM_SETSEL, 1, 1 );
    }
    

    Das klappt. Aber jetzt möchte ich das Ganze wieder rückgängig machen:

    void WUnProtect ()
    {
    	CHARFORMAT cf = {0};
    	int ret;
    
    	cf.cbSize = sizeof ( CHARFORMAT );
    
    	SendMessage (hEdit, EM_SETSEL, 0, 1 );
    
    	SendMessage (hEdit, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf );
    
    	cf.dwMask |= CFM_PROTECTED;
    	cf.dwEffects &= ~CFE_PROTECTED;
    
    	SendMessage (hEdit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf ); // Hier wird 0 zurückgegeben.
    	ret = GetLastError ();  // Hier auch!
    	SendMessage (hEdit, EM_SETSEL, 1, 1 );
    
    }
    

    Das Rückgängig machen klappt leider nicht. GetLastError () liefert 0. Sieht jemand den Fehler?
    Gruß,
    w.s.



  • Sorry, ich lese gerade:

    Remarks

    To turn off a formatting attribute, set the appropriate value in dwMask but do not set the corresponding value in dwEffects. For example, to turn off italics, set CFM_ITALIC but do not set CFE_ITALIC.

    Hab ich wohl genau anders rum gemacht. Also, ich probiere erst noch mal.
    🙂



  • Nö, hab ich richtig gemacht. Hab mit nem 'Set' den CFE_PROTECTED 'Ungesettet', durch den ~ Operator.



  • Das war also nicht das Problem, man muss zusätzlich noch die EN_PROTECTED Nachricht behandeln!
    Gruß,
    w.s.


Log in to reply