Hallo,
ich habe die Anforderung in einer ListView für jede Zeile in einer Spalte zwei Farben anzeigen zu müssen. Es ist kein Problem jedem Item ein Label via TListView.Data zuzuordnen, doch wie funktioniert das bei zwei oder mehr Elementen.
Hier sieht mein Code für das Anzeigen eines Labels in einer Spalte für jedes Item in einer ListView aus:
Delphi-Quellcode:
procedure TfmLohnartB.lvDataAdvancedCustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
Stage: TCustomDrawStage; var DefaultDraw: Boolean);
const
pbColumnIndex = 1;
pbMax = 100;
var
pb : TLabel;
pbRect : TRect;
la : TLohnart;
i: Integer;
b : integer;
begin
inherited;
if (sender.Column[SubItem].Caption = 'Plan') then begin
la := TLohnart(lvData.mkScroll.records[Item.Index]);
pb := TLabel(Item.Data);
if not Assigned(pb) then begin
pb := TLabel.Create(self);
pb.Parent := Sender;
Item.Data := pb;
end;
{
if Assigned(Item.Data) then begin
pb := TLabel(Item.Data);
pb.visible := false;
end; }
//pb := TLabel.Create(self);
pb.Transparent := false;
pb.Color := TColor(la.PlanFarbe);
//Item.Data := pb;//
pbRect := Item.DisplayRect(drBounds);
pbRect.Left := pbRect.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) + 15;
pbRect.Right := pbRect.Left + ListView_GetColumnWidth(lvData.Handle, 7)-30;
pbRect.Top := pbRect.Top + 1;
pbRect.Bottom := pbRect.Bottom - 2;
pb.BoundsRect := pbRect;
// pb.Free;
end;
..funktioniert soweit wunderbar, doch ich habe das Problem, dass ich kein zweites Label dem ListItem zuordnen kann?!?! und so nicht weiß, wie ich das zweite Label anzeigen soll.
Wäre für Tips sehr dankbar!
lg, Thorsten