AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Listview ganze Spalte färben

Ein Thema von Amenovis · begonnen am 19. Nov 2018 · letzter Beitrag vom 21. Nov 2018
Antwort Antwort
Amenovis

Registriert seit: 16. Nov 2011
52 Beiträge
 
#1

Listview ganze Spalte färben

  Alt 19. Nov 2018, 22:16
Ich habe gesehen das es das Öfter gibt als Fragestellung

nur bin ich mir über die Unterschiede nicht im klaren und hoffe da um Hilfe

A) Ganze Zeile färben aufgrund eines Wertes einer Zeile funktioniert tadelos

Delphi-Quellcode:
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
//if (Item=nil) then Exit;
with Sender.Canvas.Brush do
if Item.SubItems[0] = 'then Color:=clred
else Color:=cllime;
end;
Habe ich bei
Code:
Item.SubItems[0] = ''
keinen Wert zb '' färbt er die Zeile Rot
hab ich einen Wert zb 'Wert' färbt er die Zeile Grün

Wie mach ich es aber bei einer Spalte oder bei zwei Spalten ... Beispiel

Tabelle X

ID | Name | Nachname |

ID keine Farbe
Name Grün
Nachname Gelb ???

Ich Vermute das hängt mit den unterschiedlichen CustonDraw Ereignissen zusammen

OnCustomDraw
OnCustomDrawItem
OnCustomDrawSubitem

Wenn nicht was unterscheidet die Drei ?
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Listview ganze Spalte färben

  Alt 19. Nov 2018, 23:19
ID | Name | Nachname |

ID keine Farbe
Name Grün
Nachname Gelb ???

So bekommst Du Grün und Gelb hin, im OnCustomDrawSubItem Event.
Delphi-Quellcode:
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
begin
 if (Item=nil) then
   Exit;
 with Sender.Canvas do
   begin
      case SubItem of
        0: Font.Color := clGreen;
        1: Font.Color := clYellow;
      end;
   end;
end;
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Amenovis

Registriert seit: 16. Nov 2011
52 Beiträge
 
#3

AW: Listview ganze Spalte färben

  Alt 19. Nov 2018, 23:25
ehm ok aber mit Font wird denk ich die SchriftFarbe geändert oder nicht ???

Mir geht es um den Hintergrund...

Ich hab das hier probiert

Delphi-Quellcode:
procedure TForm1.ListView2CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);

 begin
  If Item.SubItems[0] = 'aathen
    Listview2.Brush.Color := clRed;
end;
oder die Zeile mit If Item.SubItems[0] = 'aa' then auch geändert in If (SubItem=0) und Subitem(0) usw usw usw mit wert aa ohne wert aa nur'' ... komischer weise färbt er immer nur die Spalten in denen keine werte stehen also die leeren unbenutzen und dort wo werte drin sind bleibt es weiss...

auch muss ich das fenster einmal klein machen und wieder gross damit die Farbe angezeigt wird ... bei den Zeilen funktioniert das sofort ?!?!?!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Listview ganze Spalte färben

  Alt 19. Nov 2018, 23:34
Dann nimm doch einfach das richtige SubItem.. wenn du mehrere hast dann sollte sich der Index auch erhöhen oder?
Du verwendest aber immer nur 0

@KodeZwerg hat es dir doch gezeigt wie es geht oder verwendet er bei jedem Item 0 ?

gruss
  Mit Zitat antworten Zitat
Amenovis

Registriert seit: 16. Nov 2011
52 Beiträge
 
#5

AW: Listview ganze Spalte färben

  Alt 20. Nov 2018, 00:19
hab ich auch gemacht mit 0 1 und 2 ... mir ging es erstmal darum das sich eine spalte färbt in dem werte stehen (hab beim ersten mal irgendwas falsch gemacht beim löschen und neu schreiben ging es)

und wofür stehen sender.... canvas.... brush....

item.subitems[0]zweite spalte in listview
item.subitems[1]dritte spalte in listview

Edit:Sender.Canvas statt Sender.Canvas.Brush war eine mega lightshow epileptiker dürfen das NICHT! testen..

Edit2:
Delphi-Quellcode:
//if (Item=nil) then Exit;
with Sender.Canvas.Brush do
if (SubItem=1) then Color:=clred
else Color:=cllime;
end;
ok (SubItem=0)macht er 2te und 3te Spalten Grün
(SubItem=1)macht er Spalte2 Rot die 3te Grün
(SubItem=2)macht er die Umkehrung Grün Rot

verstehe die Logik dahinter nicht so ganz mhh dachte er zählt bei 0.... dann hätte er doch bei (0) die 2te rot machen müssen und bei (1) die 3te spalte rot...Jetzt bin ich wieder verwirrt mhh

dachte caption ist separat dann subitem 0 ist in listview 2te spalte und 1 in listview 3te spalte

Aber ok die eigentliche Frage ist geklärt... Die syntax bleibt fast identisch abgesehen von der art des draws die man wählt...

OnCustomDraw...........färbt vermutlich Spalte 1
OnCustomDrawItem.......färbt Zeile
OnCustomDrawSubitem....färbt Spalten 2,3,4,n

Geändert von Amenovis (20. Nov 2018 um 01:14 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Listview ganze Spalte färben

  Alt 20. Nov 2018, 11:55
Hier ein komplettes Beispiel für Deine Einfärbung.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    procedure ListView1CustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    procedure ListView1CustomDrawSubItem(Sender: TCustomListView;
      Item: TListItem; SubItem: Integer; State: TCustomDrawState;
      var DefaultDraw: Boolean);
  private
    { Private declarations }
    procedure SetLVColumnColour( ListView: TCustomListView; Column: Integer );
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

// mit dieser methode ändern wir die Hintergrund-Farbe
// Als eingabe eine Listview und die Spalte angeben
procedure TForm1.SetLVColumnColour( ListView: TCustomListView; Column: Integer );
const
  cColors: array[0..2] of TColor = ( clWindow, clGreen, clYellow );
begin
  ListView.Canvas.Brush.Color := cColors[Column];
end;


// Hier wird die Hauptspalte eingefärbt
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  SetLVColumnColour( Sender, 0 );
end;

// Hier werden Sub-Spalten eingefärbt
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
begin
  if SubItem = 0 then Exit;
  SetLVColumnColour( Sender, SubItem );
end;

end.
Angehängte Grafiken
Dateityp: jpg Form1 - 20_11.jpg (6,6 KB, 17x aufgerufen)
Gruß vom KodeZwerg

Geändert von KodeZwerg (20. Nov 2018 um 12:26 Uhr) Grund: updated
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:28 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