![]() |
listview selected farbe ändern
hallo
ich will eine andere farbe für selektierte einträge haben, als das standard-blau.
Delphi-Quellcode:
damit markier ich zwar die selektierten einträge, aber die standardmarkierung ist nochmal über meiner eigenen markierung.
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); var left1, top1: Integer; begin if Item.Selected then begin //item.Focused := false; listview1.Canvas.Brush.Color := cllime; listview1.Canvas.pen.Color := clred; end else listview1.Canvas.Brush.Color := clhotlight; end; kann ich die standardmarkierung irgendwie abschalten? |
Re: listview selected farbe ändern
So sollte es gehen:
Delphi-Quellcode:
Mfg
procedure TForm1.ListView1DrawItem(Sender: TCustomListView;
Item: TListItem; Rect: TRect; State: TOwnerDrawState); begin with Sender.Canvas do begin Brush.Color := clWhite; Pen.Color := clBlack; if Item.Selected then begin Brush.Color := clLime; Font.Color := clRed; end; FillRect(Rect); TextOut(Rect.Left, Rect.Top, Item.Caption); end; end; |
Re: listview selected farbe ändern
jop, ownerdraw noch auf true setzen, funktioniert. :thumb:
wie kann ich noch ein anderes item markieren, von dem ich die position (i) weiß? hab einen ansatz, der jedoch nicht funktioniert
Delphi-Quellcode:
var
recti :TRect; if i > -1 then begin Canvas.Brush.Color := clred; Canvas.Font.Color := clblack; recti := Listview1.Items[i].DisplayRect(); // was muss da bei DisplayRect rein? Canvas.FillRect(recti); Canvas.TextOut(recti.Left, recti.Top, Listview1.i]); end; |
Re: listview selected farbe ändern
Delphi-Quellcode:
procedure TForm1.ListView1DrawItem(Sender: TCustomListView;
Item: TListItem; Rect: TRect; State: TOwnerDrawState); begin with Sender.Canvas do begin Brush.Color := clWhite; Pen.Color := clBlack; if Item.Selected then begin Brush.Color := clLime; Font.Color := clRed; end; if i = Item.Index then begin Brush.Color := clRed; Font.Color := clBlack; end; FillRect(Rect); TextOut(Rect.Left, Rect.Top, Item.Caption); end; end; |
Re: listview selected farbe ändern
Das ist nur suboptimal, da dabei Ownerdraw auf True sein muss.
Es werden so z.B Icons, Gridlines etc nicht mehr dargestellt. D.h man müsste alles selber zeichnen. Vielleicht lässt sich die Farbe auch anders setzen. via CN_NOTIFY, CDDS_ITEMPREPAINT etc. |
Re: listview selected farbe ändern
Bei TListView gilt das Entweder-Oder-Prinzip.
Willst du mehr möglichkeiten so mußt du dir andere Komponenten die VirtualListView, Grid/Tree/ListView-Komponenten von ElPack etc. anschauen und einsetzen |
Re: listview selected farbe ändern
wenn die spalte zu kurz für den string ist, wird der text einfach über die andere spalte gelegt.
ich kann auch die subitems nicht ansteuern :gruebel:
Delphi-Quellcode:
TextOut(Rect.Left, Rect.Top, Item.SubItems.Text);
|
Re: listview selected farbe ändern
kann man mit TDE VirtualListView irgendwie verwenden?
Zitat:
|
Re: listview selected farbe ändern
Zitat:
Vielleicht hat ja jemand eine Lösung. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 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