Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi listview selected farbe ändern (https://www.delphipraxis.net/112360-listview-selected-farbe-aendern.html)

made in Germany 19. Apr 2008 17:45


listview selected farbe ändern
 
hallo

ich will eine andere farbe für selektierte einträge haben, als das standard-blau.

Delphi-Quellcode:
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;
damit markier ich zwar die selektierten einträge, aber die standardmarkierung ist nochmal über meiner eigenen markierung.

kann ich die standardmarkierung irgendwie abschalten?

Fussball-Robby 19. Apr 2008 18:26

Re: listview selected farbe ändern
 
So sollte es gehen:
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;
    FillRect(Rect);
    TextOut(Rect.Left, Rect.Top, Item.Caption);
  end;
end;
Mfg

made in Germany 19. Apr 2008 18:42

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;

Fussball-Robby 19. Apr 2008 18:59

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;

toms 20. Apr 2008 07:17

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.

Bernhard Geyer 20. Apr 2008 09:38

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

made in Germany 20. Apr 2008 17:46

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);

made in Germany 21. Apr 2008 12:26

Re: listview selected farbe ändern
 
kann man mit TDE VirtualListView irgendwie verwenden?
Zitat:

Vielleicht lässt sich die Farbe auch anders setzen.

via CN_NOTIFY, CDDS_ITEMPREPAINT etc.
funktioniert das? :roll:

toms 5. Mai 2008 22:11

Re: listview selected farbe ändern
 
Zitat:

Zitat von made in Germany
kann man mit TDE VirtualListView irgendwie verwenden?
Zitat:

Vielleicht lässt sich die Farbe auch anders setzen.

via CN_NOTIFY, CDDS_ITEMPREPAINT etc.
funktioniert das? :roll:

Habe leider noch nicht herausfinden können, wie das funktioniert.
Vielleicht hat ja jemand eine Lösung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz