![]() |
Bestimmte Spalten in ListView bemalen
Hallo!
bin zwar erst neu registriert, lese aber schon länger hilfreiche Themen in eurem Forum mit. Nun zu meinem Problem: Ich möchte in einer Listview eine gewisse Spalte abhängig vom Wert färben. Ich habe zware eine Lösung, nur finde ich diese nicht zufriedenstellend, anbei der Code:
Delphi-Quellcode:
geht das nicht irgendwie eleganter...so möchte ich es eigentlich nicht lassen, da es leicht flimmert usw..!
procedure TfmLohnartB.lvDataAdvancedCustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean); var posPlan : TPoint; indItem : integer; subIt : TStrings; oldColor : TColor; r : TRect; begin inherited; if (sender.Column[SubItem].Caption = 'Plan') then begin //DefaultDraw := False; r := Item.DisplayRect(drBounds); r.Left := r.Left + ListView_GetColumnWidth(lvData.Handle, 0) + ListView_GetColumnWidth(lvData.Handle, 1) + ListView_GetColumnWidth(lvData.Handle, 2) + ListView_GetColumnWidth(lvData.Handle, 3) + ListView_GetColumnWidth(lvData.Handle, 4) + ListView_GetColumnWidth(lvData.Handle, 5) + ListView_GetColumnWidth(lvData.Handle, 6); r.Right := r.Left + ListView_GetColumnWidth(lvData.Handle, 7); try oldColor := Sender.Canvas.Brush.Color; Sender.Canvas.Brush.Color := clRed; Sender.Canvas.Rectangle(r); finally Sender.Canvas.Brush.Color := oldColor; end; end; lg, thorsten |
Re: Bestimmte Spalten in ListView bemalen
Hallo,
ich kann dir zwar nicht so ganz helfen, aber für diesen Teil
Delphi-Quellcode:
könntes du auch dies hier verwenden, so erzählst du die einzelne Zelle
r := Item.DisplayRect(drBounds);
r.Left := r.Left + ListView_GetColumnWidth(lvData.Handle, 0) + ListView_GetColumnWidth(lvData.Handle, 1) + ListView_GetColumnWidth(lvData.Handle, 2) + ListView_GetColumnWidth(lvData.Handle, 3) + ListView_GetColumnWidth(lvData.Handle, 4) + ListView_GetColumnWidth(lvData.Handle, 5) + ListView_GetColumnWidth(lvData.Handle, 6); r.Right := r.Left + ListView_GetColumnWidth(lvData.Handle, 7);
Delphi-Quellcode:
Und du könntest mal
//Rect der Zelle erhalten
ListView_GetSubItemRect(Sender.Handle, Item.Index, SubItem, LVIR_BOUNDS, @Rect);
Delphi-Quellcode:
ausprobieren
lvData.DoubleBuffered := true
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz