itemhöhe bei listview ändern
-
will in meiner listview die Höhe der zeilen ändern! wie gehen?
-
hi,
du mußt einfach die Schriftgröße ändern, dann verändert sich die Zeilengröße automatisch mit!
Grüßle
-
aber das passiert leider nicht wenn ich mit der DrawItem routine arbeite!
da muss ich das irgendwie selbst schreiben, weil sich zwar die schriftgröße dementsprechend vergrößert, aber nicht die Zeilenhöhe.mfg
-
hi,
versuch doch mal mit dem 'OnCustomDrawItem' zu arbeiten. Funktioniert wie das 'OnDrawItem', nur mußt du nicht 'OwnerDraw' auf true stellen und das mit der Schriftgrösse funktioniert auch.
Wenn du ein BSP zu 'OnCustomDrawItem' brauchst sag bescheid!Grüßle
-
muss folgendes übernehmen:
TCanvas *CaptionCanvas = ListView_Klasse->Canvas; TCanvas *ItemCanvas = ListView_Klasse->Canvas; ListView_Klasse->Canvas->Font->Height = 18; // Farbe des Eintrages CaptionCanvas->Brush->Color = clWindow; CaptionCanvas->Font->Color = clBlack; // Markierten Eintrag if (State.Contains(odSelected)) { CaptionCanvas->Brush->Color = clHighlight; CaptionCanvas->Font->Color = clHighlightText; } // Hintergrund CaptionCanvas->FillRect((TRect) Rect); // std. formatierung (einzeilig, vertikal-zentriert) int attr = DT_SINGLELINE | DT_VCENTER; // Caption (linksbündig) DrawText(CaptionCanvas->Handle, Item->Caption.c_str(), -1, &Rect, attr | DT_LEFT); int left = 0; // die einzelnen spalten (subitems) for (int col = 0; col < Item->SubItems->Count; col++) { // Markierten Eintrag if (State.Contains(odSelected)) { ItemCanvas->Brush->Color = clHighlight; ItemCanvas->Font->Color = clHighlightText; } else { // Farbe des Eintrages ItemCanvas->Brush->Color = clWindow; ItemCanvas->Font->Color = clBlack; } if (Item->SubItems->Strings[2] == "Klassenordner") ItemCanvas->Font->Color = clGreen; else if (Item->SubItems->Strings[2] == "Klassensprecher") ItemCanvas->Font->Color = clRed; else if (Item->SubItems->Strings[2] == "Klassensprecherstellvertreter") ItemCanvas->Font->Color = clMaroon; else ItemCanvas->Font->Color = clBlack; left += ListView_Klasse->Columns->Items[col]->Width; // Zeichenfläche bestimmen Rect.Left = left+2; Rect.Right = left + ListView_Klasse->Columns->Items[col+1]->Width; // Hintergrund ItemCanvas->FillRect((TRect) Rect); attr |= DT_LEFT; AnsiString myText = Item->SubItems->Strings[col]; // Subitem Zeichnen DrawText(ItemCanvas->Handle, myText.c_str(),-1, &Rect, attr); }
das kann ich nicht einfach in OnCustomDraw übernehmen...
-
ok, bei OnCustomDraw kannst du das ganze mit dem TRect weglassen.
Mal ein kleines Bsp:
void __fastcall TForm1::ListViewCustomDrawItem(TCustomListView *Sender, TListItem *Item, TCustomDrawState State, bool &DefaultDraw) { //Zuerst Grösse der Felder ListView->Font->Size = 18; TColor BgCol; TColor PenCol; PenCol = clBlack; //Bedingung nach welchen Kriterien der Hintergrund und Schriftfarbe gefärbt //werden soll. Kann auch ein oder mehrere if-Bedinungen sein. switch(Bedingung) { case 'A': { BgCol = clWhite; PenCol = clBlack; break; } case 'B': { BgCol = clWhite; PenCol = clBlack; break; } case 'C': { BgCol = clWhite; PenCol = clFuchsia; break; } case 'D': { BgCol = clYellow; PenCol = clBlack; break; } case 'E': { BgCol = clRed; PenCol = clBlack; break; } default: { DefaultDraw = true; return; } } //Ausgabe der Zeilen Sender->Canvas->Brush->Color = BgCol; Sender->Canvas->Font->Color = PenCol; }
Bei mir funktioniert das einwandfrei!
Grüßle