Ich habe hier ein ListView-Komponente die zur Laufzeit erstellt wird und auch mit Daten gefüllt wird. Das funktioniert soweit auch sehr gut.
Als Erweiterung wollte ich jetzt, das jede zweite Zeile andersfarbig dargestellt wird und habe dazu eine CustomDrawItem Procedure eingefügt.
Leider wird die aber überhaupt nicht angesprungen. Sieht jemand was ich hier falsch mache?
Gruß
Michael
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
ComCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
{ TMyListView }
TMyListView=class(TListView)
procedure LVCustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
end;
var
Form1: TForm1;
LV : TMyListView;
implementation
{ TForm1 }
{ TMyListView }
procedure TMyListView.LVCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
const
cStripe = $CCFFCC;
begin
showmessage('LVCustomDrawItem');
if Odd(Item.Index) then LV.Canvas.Brush.Color := cStripe // Grün
else LV.Canvas.Brush.Color := clWindow; //Weiss
end;
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
LV := TMyListView.Create(form1);
LV.Top :=30;
LV.Left :=20;
LV.Width :=200;
LV.Height :=150;
LV.Visible :=true;
LV.ViewStyle:=vsReport;
LV.GridLines:=true;
LV.Columns.Add;
LV.Column[0].Caption:='Status';
LV.Columns.Items[0].Width:=80;
LV.Columns.Items[0].AutoSize:=true;
LV.RowSelect:=true;
LV.Parent :=Form1;
//schreibe was ins ListView
for i:=1 to 20 do begin
LV.Items.Add;
LV.Items.Item[i-1].Caption:='blabla';
end;
end;
initialization
{$I unit1.lrs}
end.