ListView1CustomDrawSubItem Problem
-
Hallo. Ich habe ein TListView (OwnerDraw=false) und möchte eine Spalte gelb haben, welche keinen Text anzeigen soll(welcher aber enthalten ist).
Das funktioniert so auch alles schön.Das Problem ist nun das die Spalten nach SubItem==2 alle aus unerfindlichen Gründen fett dargestellt werden und ich dies auch nicht wegbekomme. Weiss jemand warum und kann helfen? Danke!
void __fastcall TForm1::ListView1CustomDrawSubItem(TCustomListView *Sender, TListItem *Item, int SubItem, TCustomDrawState State, bool &DefaultDraw) { if (ListView1->Items->Count>0) { TRect R; if (SubItem==2) { ListView_GetSubItemRect(ListView1->Handle, Item->Index, SubItem, LVIR_BOUNDS, &R); ListView1->Canvas->Brush->Color = clYellow; ListView1->Canvas->FillRect(R); DefaultDraw = false; } else { ListView1->Canvas->Brush->Color = clWindow; //ListView1->Canvas->Font->Style = ListView1->Canvas->Font->Style >> fsBold; // Zeile bewirkt leider nichts DefaultDraw = true; } } }
-
folgendes funktioniert bei mir:
void __fastcall TForm1::ListView1CustomDrawSubItem(TCustomListView *Sender, TListItem *Item, int SubItem, TCustomDrawState State, bool &DefaultDraw) { if (ListView1->Items->Count>0) { if (SubItem == 2) { ListView1->Canvas->Brush->Color = clYellow; ListView1->Canvas->Font->Color = clYellow; } else { ListView1->Canvas->Brush->Color = clWindow; ListView1->Canvas->Font->Color = clBlack; } } DefaultDraw = true; }
-
Ja das klappt, löst aber nicht mein Problem
Original habe ich in der Spalte, welche Gelb werden soll in diesem Beispiel den Farbwert stehen. Ich möchte da aber nur die Farbe dargestellt haben, nicht den Text(Farbcode) dazu. So funktionierts bei mir auch, nur eben das dann der Text der Spalten hinter der Farbe fett wird in CBuilder5 Pro.
Deines funktioniert, aber da würde jetzt er Farbwert als Klartext über dem gelben Feld stehen.
-
Argh, das sollte Vorschau werden. So hier mehr Text, danke fürs testen Linnea!
TColor HexToColor(AnsiString Color) { Byte R, G, B; R = StrToInt("0x" + Color.SubString(1,2)); G = StrToInt("0x" + Color.SubString(3,2)); B = StrToInt("0x" + Color.SubString(5,2)); return RGB(R,G,B); } //--------------------------------------------------------------------------- AnsiString ColorToHex(TColor Color) { Byte R, G, B; Color = ColorToRGB(Color); R = GetRValue(Color); G = GetGValue(Color); B = GetBValue(Color); return IntToHex(R,2) + IntToHex(G,2) + IntToHex(B,2); } //--------------------------------------------------------------------------- void __fastcall TForm1::ListView1CustomDrawSubItem(TCustomListView *Sender, TListItem *Item, int SubItem, TCustomDrawState State, bool &DefaultDraw) { if (ListView1->Items->Count>0) { TRect R; if (SubItem==2) { ListView_GetSubItemRect(ListView1->Handle, Item->Index, SubItem, LVIR_BOUNDS, &R); ListView1->Canvas->Brush->Color = HexToColor(Item->SubItems->Strings[1]); ListView1->Canvas->FillRect(R); DefaultDraw = false; } else { ListView1->Canvas->Brush->Color = clWindow; DefaultDraw = true; } } }
-
Ja, aber wenn du den Font in der gleichen Farbe machst, sieht man den Wert/Text nicht. Außer man kann die Zeile auswählen...
-
Jap, das ist das Problem. Habs aber jetzt gelöst indem ich in DrawItem() alles selber mit DrawText ausgebe. Scheint nen Bug in BCB5 zu sein, dem man auch nicht wegbekommt. Ist der in BCB2007 auch noch? Weiss das einer?
-
ich habs mit dem BCB6 getestet und da wirds auch fett