Edit Control - disabled = true - farbe ändern?
-
Hi, vielleicht hilfts was wenn du noch eine Zeile in deine Funktion einfügst, also so:
if (pWnd->GetDlgCtrlID()== IDC_EditControl_Receive) { pDC->SetBkMode(TRANSPARENT); pDC->SetBkColor(RGB(0,255,255)); //Hintergrundfarbe }
-
im mom schaut es so aus, so gehts aber auch nicht;-(
vielleicht muss man das ja anders machen?
hab was interessantes gefunden:
http://www.codeproject.com/editctrl/CReadOnlyEdit.asp
hm aber die leiten ein eigenes CReadOnlyEdit ab...geht das nicht einfacher?HBRUSH Client_MessageDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: Change any attributes of the DC here if (pWnd->GetDlgCtrlID()== IDC_EditControl_Receive) { pDC->SetBkMode(TRANSPARENT); pDC->SetBkColor(RGB(255,255,255)); //Hintergrundfarbe } // TODO: Return a different brush if the default is not desired return hbr; }
-
Ahso, ich bin jetzt von einem Disbaled Edit ausgegangen. Für ein schreibgeschütztes Eingabefeld hat dir estartu_de ja schon die Lösung gepostet.
Erstelle einen Brush und gib ihn in der OnCtlColor Funktion für das Eingabefeld zurück und schon ist dein Hintergrund farbig.
-
Panschev schrieb:
Ahso, ich bin jetzt von einem Disbaled Edit ausgegangen. Für ein schreibgeschütztes Eingabefeld hat dir estartu_de ja schon die Lösung gepostet.
Erstelle einen Brush und gib ihn in der OnCtlColor Funktion für das Eingabefeld zurück und schon ist dein Hintergrund farbig.
also wenn du diese lösung meinst:
HBRUSH B = CreateSolidBrush(::GetSysColor(COLOR_3DFACE)); //Hintergrundfarbe return (HBRUSH) B;
dann funktioniert die aber nicht wirklich (dh.: am anfang hat nur die erste zeile einen weissen hintergrund, wir kommt eine neue textzeile hinzu dann ändert sich erst die hintergrundfarbe mit)...probiers mal selber aus, dann siehst es auch...
cu
-
// Brush für den Hintergrund des Eingabefeld festlegen HBRUSH hBGEdit = CreateSolidBrush(RGB(0, 0, 0)); // TODO: Attribute des Gerätekontexts hier ändern if (pWnd->GetDlgCtrlID()== IDC_EDIT1) { //pDC->SetBkMode(TRANSPARENT); pDC->SetBkColor(RGB(0,255,255)); //Hintergrundfarbe pDC->SetTextColor(RGB(255,133,33)); return hBGEdit; }
Das funktioniert bei mir wunderbar und Code von estartu_de ist das gleiche, du musst halt nur die Farbe anpassen, z.B.:
HBRUSH B = CreateSolidBrush(::GetSysColor(RGB(0,255,255))); //Hintergrundfarbe return (HBRUSH) B;
-
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.