Edit Control - disabled = true - farbe ändern?



  • hi, nun funktioniert es auch;-)

    if (pWnd->GetDlgCtrlID() == IDC_EditControl_Receive) 
    	{ 
    		HBRUSH hBGEdit = CreateSolidBrush(RGB(255, 255, 255)); 
    		return hBGEdit; 
    	}
    

    ich schreib ja sowas in die edit control rein:
    <Sabine> Hallo <--- in dieser zeile den Text rot
    <torti> hi <--- in dieser zeile den Text blau
    <torti> wie gehts? <--- in dieser zeile den Text blau
    usw...

    kann ich also zeilenweise die Textfarbe festlegen? stell ich mir problematisch vor, wenn es schon 10 zeilen gibt...

    danke noch mal;-) 👍
    ciao
    cu



  • Ich glaube, dafür brauchst du dann ein RichEdit.
    Oder eine Listbox (wenn du nichts editieren willst).



  • es geht schon auch mit nem normalen Edit, aber halt nur in so fern, dass nur der HIntergrund des Textes dann geändert wird. nicht aber die ganze Zeile! 😉



  • Das kannste problemlos machen. Immer wenn Text an das Eingabefeld geschickt wird, zählst du die Zeilen im Eingabefeld. Dann guckste ob du eine gerade Zahl an Zeilen im Eingabefeld hast oder eine ungerade. Bei einer geraden Zahl von Zeilen gibst du dem Eingabefeld andere Farben wie bei einer ungeraden Zahl. Die Funktion für das Eingabefeld könnte so aussehen:

    int nLineCount;
    
    // Code zum schreiben in dein Eingabefeld
    
    // Auf gerade oder ungerade Zeilen prüfen
    nLineCount = m_edit.GetLineCount();
    if(nLineCount % 2 == 0)
    {
       bMerker = 1;
      // Eingabefeld neu zeichnen
      RedrawWindow();
    }
    else
    {
       bMerker = 0;
       RedrawWindow();
    }
    

    bMerker (BOOL bMerker) hab ich für die Dialogklasse definiert und in der Funktion OnInitDialog mit 0 initialisiert. Mit dem RedrawWindow() wird die Funktion OnCtlColor aufgerufen, also müssen wir den Code darin jetzt auch noch ändern, z.B so:

    if (pWnd->GetDlgCtrlID()== IDC_EditControl_Receive) 
    { 
       if(bMerker==1)
       {
    	pDC->SetBkMode(TRANSPARENT); 
    	pDC->SetBkColor(RGB(0,255,255)); //Hintergrundfarbe 
    	pDC->SetTextColor(RGB(255,133,33)); 
    	return hBGEdit; 
       }
       else
       {
    	pDC->SetBkMode(TRANSPARENT); 
    	pDC->SetBkColor(RGB(0,255,0)); //Hintergrundfarbe 
    	pDC->SetTextColor(RGB(0,133,33)); 
       }
    }
    


  • Genau und zu beachten ist halt was Polofreak geschrieben hat. Das hatte ich vergessen.



  • @Panschev: Das mit den verschiedenen Zeilennummern versteh ich nicht! Was soll das bringen? So wie ich das sehe will er quasi nen Chat machen und wenn dem so sei, dann will er ja nicht nur 2 verschiedene Farben, sondern für jeden User ne Farbe, oder zumindest mal einige zur auswahl und so. Dann sollte er eher auf den Username abfragen und wenn er Farbe mit Radiobuttons oder so vergibt die dann noch. Was das mit den geraden und ungeraden soll versteh ich ehrlich gesagt nicht, aber vielleicht steh ich auch aufm Schlauch! 😉



  • @Polofreak: du hast da vollkommen recht! Ist noch bissi früh am morgen 😮 Nachdem ich das jetzt mal ausprobiert habe, ist es mir auch aufgefallen. Ist wohl nicht so wirklich das was er sucht, aber ich denke auch mal das für die Ansprüche ein Eingabefeld nicht so das richtige ist. Also vergesst mein geposteten Code einfach 🙄



  • ja wie Estartu schon geschrieben hat ist ein Listcontrol oder ein Richedit vielleicht eher das richtige für seine Ansprüche. Das kann er aber nur selbst entscheiden! Gehen tut es auf jeden Fall auch mit nem Editfeld. Nun soll er selbst entscheiden was er nehmen will 😉



  • danke für die vielen antworten;-) jetzt muss ich nur mehr wissen wie ich eine Combo Box Read Only mache....im Ressourcen Editor habe ich unter Daten 4 Einträge gemacht: 0676;0664;0650;0699;

    der user soll nur diese auswählen und keinen neuen eintrag in die combo machen...
    ich hab da ne methode ->ModifyStyle gefunden...führt die event. zum ziel?;-)
    danke,cu



  • Da musste als Typ: Dropdown-Listenfeld einstellen. Dann kann der User nur aus den vorgegebenen Einträgen wählen.



  • hab ich gemacht....jedoch kann der user noch etwas in die combo box schreiben;-( wie gesagt unter Data hab ich die Items rein geschrieben...

    n8



  • Rechte Maustaste auf die Combobox -> Eigenschaften.
    Tab "Formate" und dann in der Cbx "Dropdown-Listenfeld" auswählen. Dann kann man nichts mehr eintippen.
    Es sei denn, du verbiegst es dann per Quellcode wieder. 😃


Anmelden zum Antworten