Schriftfarbe mit einen Farbendialog im CRichEditView ändern ...?



  • Hallo,

    Wie kann ich eine Schriftfarbe mit einen Farbendialog im CRichEditView ändern ?
    Der Quellcode für den Farbendialog ist der unten, aber wie kann ich nun von einem "markierten Text" die Schriftfarbe ändern ?

    CColorDialog* colorDlg = new CColorDialog();
    	if (colorDlg->DoModal() == IDOK)
    	{
    
    	}
    	delete colorDlg;
    

    Er soll aber nur markierten Text ändern !!

    Danke
    :: NoName ::



  • Hallo,

    da gibt es doch die Member-Funktion SetCharFormat, du mußt nur die CHARFORMAT-Struktur richtig füllen (crTextColor-Komponente, und richtiges dwMask-Flag setzen)

    MfG



  • Ich weis...du meinst bedtimmt das hier :

    CHARFORMAT cf; 
    cf.crTextColor = RGB(0,0,255); 
    cf.cbSize = sizeof( CHARFORMAT ); 
    cf.dwMask = CFM_COLOR | CFM_BOLD; 
    cf.dwEffects = CFE_BOLD; 
    GetRichEditCtrl().SetSelectionCharFormat(cf);
    

    Aber mit diesen code kann man nur eine Schriftfarbe festelegen, ...Ich möchte ja das man sie aus diesen Farbendialog bestimmen soll !!!



  • Ach das ist dein Problem...aber das ist eigentlich kein Problem, denn nach dem IDOK festgestellt wurde, kannst du doch mit GetColor den im Dialog gewählten Farbwert abholen:

    if (colorDlg->DoModal() == IDOK)
        {
    
             COLORREF crColor = colorDlg->GetColor();
             // und jetzt crColor in CHARFORMAT für cf.crTextColor verwenden
        }
    

    MfG



  • Meinst du etwa so ...? :

    CColorDialog* colorDlg = new CColorDialog(); 
    
    	if (colorDlg->DoModal() == IDOK) 
        { 
    
             COLORREF crColor = colorDlg->GetColor(); 
             // und jetzt crColor in CHARFORMAT für cf.crTextColor verwenden 
    		 CHARFORMAT cf; 
    		 cf.crTextColor = colorDlg->GetColor(); 
    		 GetRichEditCtrl().SetSelectionCharFormat(cf); 
        }
    

    ???

    Ich verstehe das nicht so ganz...Aber es entstehen dann 3 Fehler ...

    C:\Programme\Microsoft Visual Studio\MyProjects\testttt\testtttView.cpp(125) : error C2065: 'colorDlg' : undeclared identifier
    C:\Programme\Microsoft Visual Studio\MyProjects\testttt\testtttView.cpp(125) : error C2227: left of '->DoModal' must point to class/struct/union
    C:\Programme\Microsoft Visual Studio\MyProjects\testttt\testtttView.cpp(128) : error C2227: left of '->GetColor' must point to class/struct/union
    

    Vielen Dank
    :: NoName ::



  • wenn diese Zeile:

    CColorDialog* colorDlg = new CColorDialog();
    

    nicht im selben Gültigkeitsbereich liegt wie die if-Abfrage, dann kann es natürlich nicht gehen, da hilft auch ein new nichts. Du solltest den Color-Dialog wohl besser sowieso auf dem Stack erstellen:

    CColorDialog colorDlg; 
    
        if (colorDlg.DoModal() == IDOK) 
        { 
    
             COLORREF crColor = colorDlg.GetColor(); 
             // und jetzt crColor in CHARFORMAT für cf.crTextColor verwenden 
             CHARFORMAT& cf = GetCharFormatSelection();
             cf.crTextColor = crColor;
             cf.dwEffects &= ~CFE_AUTOCOLOR; 
             cf.dwMask = CFM_COLOR; 
             SetCharFormat(cf);
        }
    

    MfG



  • Danke, hab verstanden !!! Danke


Anmelden zum Antworten