Einzelnen Beitrag anzeigen

100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#21

Re: Lösung TListview eigene Farbe andere Icons für Aktive It

  Alt 5. Dez 2005, 18:39
so, ich habe jetzt auch mal ein panel unter die listview gebaut, und jetzt funktionierts mit den farben.

ich habe den code noch etwas abgeändert:
Delphi-Quellcode:
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
  aTextRect:TRect; subitem: integer; backpanel: tpanel;
begin
  if tlistview(sender).Tag <> 1 then
  begin
    backpanel := tpanel.create(self);
    backpanel.Parent := tlistview(sender).Parent;
    backpanel.Name := 'BackPanel1';
    backpanel.Left := tlistview(sender).left;
    backpanel.Top := tlistview(sender).top;
    backpanel.Width := tlistview(sender).clientwidth;
    backpanel.Height := tlistview(sender).clientheight;
    backpanel.Visible := false;
    tlistview(sender).Tag := 1;
    backpanel.Color := $00CDEFE9;
  end
  else if (findcomponent('BackPanel1') is tpanel) then
    (findcomponent('BackPanel1') as tpanel).Color := $00CDEFE9;

  if (Item.Index=TListView(Sender).ItemIndex) or (TListView(Sender).ItemFocused=Item) or (Item.selected) then
  begin
    DefaultDraw:=false;
    aTextRect:=Item.DisplayRect(drLabel);
    with Sender do
    begin
      Canvas.Pen.Color := $00CDEFE9;
      Canvas.Brush.Color := $00CDEFE9;
      Canvas.Rectangle(aTextRect);
      aTextRect.Left:=aTextRect.Left+2;
      atextrect.Right := atextrect.Right+5;
      Windows.DrawText(Canvas.Handle, @Item.Caption[1], Length(Item.Caption), aTextRect, DT_VCENTER);
      Canvas.Brush.Color:=$008FC2B3;
      Canvas.FrameRect(aTextRect);
      for SubItem:=1 to Item.SubItems.Count do
      begin
        ListView_GetSubItemRect(Sender.Handle, Item.Index, SubItem, LVIR_BOUNDS, @aTextRect);
        if TListView(Sender).ViewStyle=vsReport then
        begin
          with Sender do
          begin
            Canvas.Pen.Color := $00CDEFE9;
            Canvas.Brush.Color := $00CDEFE9;
            aTextRect.Left:=aTextRect.Left+6;
            atextrect.Right := atextrect.Right+5 ;
            Canvas.Rectangle(aTextRect);
            Windows.DrawText(Canvas.Handle, @Item.SubItems[SubItem-1][1], Length(Item.SubItems[SubItem-1]), aTextRect, DT_VCENTER);
            Canvas.Brush.Color:=$008FC2B3;
            Canvas.FrameRect(aTextRect);
          end;
        end;
      end;
    end;
  end;
end;
das panel wird also zur laufzeit erstellt.

ein kleiner schönheitsfehler gibts aber noch, siehe bild im anhang.
Miniaturansicht angehängter Grafiken
listview_142.jpg  
  Mit Zitat antworten Zitat