Na kolorowaniu listviewa się nie znam, ale za to znalazłem inny sposób, żeby wyświetlić to co chcesz...
Idea:
Na początku wrzucasz sobie scrollboxa, który będzie służył jako pasek przewijania... Potem do tego scrollboxa możesz sobie dynamicznie dodawać panele na których możesz dynamicznie stawiać komponenty
Rozwiązanie:
Wrzuć na forme(form1) scrollboxa, buttona i zamień kod na:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
ScrollBox1: TScrollBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure klik(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
tab: array of record
panel:Tpanel;
nazwa:Tlabel;
obrazek:Timage;
podpis:Tlabel;
end;
liczba:integer;
implementation
{$R *.dfm}
procedure Tform1.klik(Sender: TObject);
var
i:integer;
begin
for i:=0 to liczba-1 do
tab[i].panel.Color:=clSkyBlue;
tab[(Sender as TControl).Tag].panel.Color:=clred;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Setlength(tab,liczba+1);
tab[liczba].panel:=Tpanel.Create( Self );
tab[liczba].panel.Parent:=scrollbox1;
tab[liczba].panel.Height:=40;
tab[liczba].panel.Align:=alTop;
tab[liczba].panel.Top:=high(integer); //po to by nowy komponent był dodawany do końca listy
tab[liczba].panel.BevelOuter:=bvnone;
tab[liczba].panel.Color:=clSkyBlue;
tab[liczba].panel.Tag:=liczba;
tab[liczba].nazwa:=Tlabel.Create(Self);
tab[liczba].nazwa.Parent:=tab[liczba].panel;
tab[liczba].nazwa.Caption:='Jakas tam nazwa '+inttostr(liczba+1);
tab[liczba].nazwa.Font.Size:=12;
tab[liczba].nazwa.Top:=0;
tab[liczba].nazwa.Left:=15;
tab[liczba].nazwa.Tag:=liczba;
tab[liczba].podpis:=Tlabel.Create(Self);
tab[liczba].podpis.Parent:=tab[liczba].panel;
tab[liczba].podpis.Caption:='Jakis tam opis '+inttostr(liczba+1);
tab[liczba].podpis.Font.Size:=8;
tab[liczba].podpis.Top:=20;
tab[liczba].podpis.Left:=15;
tab[liczba].podpis.Tag:=liczba;
tab[liczba].obrazek:=Timage.Create(Self);
tab[liczba].obrazek.Parent:=tab[liczba].panel;
tab[liczba].obrazek.Top:=10;
tab[liczba].obrazek.Left:=0;
tab[liczba].obrazek.Width:=15;
tab[liczba].obrazek.height:=15;
tab[liczba].obrazek.Canvas.Brush.Color:=clyellow;
tab[liczba].obrazek.Canvas.Pen.Color:=clred;
tab[liczba].obrazek.Canvas.Ellipse(0,0,15,15);
tab[liczba].obrazek.Tag:=liczba;
//dopisanie zdarzeń
tab[liczba].panel.OnClick:=klik;
tab[liczba].obrazek.OnClick:=klik;
tab[liczba].podpis.OnClick:=klik;
tab[liczba].nazwa.OnClick:=klik;
inc(liczba);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
liczba:=0;
end;
end.
Podepnij zdarzenie Button1Click i FormCreate do odpowiednich zdarzeń i uruchom program...
Testowane na Delphi7, ale na twoim też powinno chodzić
Mam nadzieję że rozumiesz o co chodzi ;) Zamiast bawić się listview'em można sobie zrealizować takie rzeczy za pomocą dynamicznych paneli... Teraz możesz nawet dodawać sobie inne rzeczy, których byś nie mógł dodać za pomocą zwykłego listviewa... Trochę więcej pracy, a korzyści dużo więcej ;-P