Dodaję gotowy przykład (po drobnych modyfikacjach) - znaleziony na stronie:
http://www.delphipages.com/threads/thread.cfm?ID=71867&G=71794
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Db, DBCtrls, DBTables, ExtCtrls, Mask, ComCtrls, ImgList;
type
TForm1 = class(TForm)
Button1: TButton;
ListView1: TListView;
ProgressBar0: TProgressBar;
ProgressBar2: TProgressBar;
ProgressBar1: TProgressBar;
procedure ListView1DrawItem(Sender: TCustomListView; Item: TListItem; Rect: TRect; State: TOwnerDrawState);
procedure FormCreate(Sender: TObject);
private
FColumns: array of integer;
procedure ApplicationIdle(Sender: TObject; var Done: Boolean);
public
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.ListView1DrawItem(Sender: TCustomListView; Item: TListItem; Rect: TRect; State: TOwnerDrawState);
begin
if not item.Selected then
begin
ListView1.Canvas.Font.Color := clNavy;
ListView1.Canvas.Brush.Color := clWhite;
ListView1.Canvas.FillRect(Rect);
ListView1.Canvas.TextOut(Rect.Left + 10, Rect.Top, Item.Caption);
ListView1.Canvas.TextOut(Rect.Left + ListView1.Columns.Items[0].Width, Rect.Top, ' ' + Item.SubItems[0]);
ListView1.Canvas.TextOut(Rect.Left + ListView1.Columns.Items[0].Width + ListView1.Columns.Items[1].Width, Rect.Top, ' ' + Item.SubItems[1]);
ListView1.Canvas.TextOut(Rect.Left + ListView1.Columns.Items[0].Width + ListView1.Columns.Items[1].Width + ListView1.Columns.Items[2].Width, Rect.Top, ' ' + Item.SubItems[2]);
end;
if item.Selected then
begin
ListView1.Canvas.Font.Color := clYellow;
ListView1.Canvas.Brush.Color := clGreen;
ListView1.Canvas.FillRect(Rect);
ListView1.Canvas.TextOut(Rect.Left + 10, Rect.Top, Item.Caption);
ListView1.Canvas.TextOut(Rect.Left + ListView1.Columns.Items[0].Width, Rect.Top, ' ' + Item.SubItems[0]);
ListView1.Canvas.TextOut(Rect.Left + ListView1.Columns.Items[0].Width + ListView1.Columns.Items[1].Width, Rect.Top, ' ' + Item.SubItems[1]);
ListView1.Canvas.TextOut(Rect.Left + ListView1.Columns.Items[0].Width + ListView1.Columns.Items[1].Width + ListView1.Columns.Items[2].Width, Rect.Top, ' ' + Item.SubItems[2]);
end;
end;
procedure TForm1.ApplicationIdle(Sender: TObject; var Done: Boolean);
var
reset: boolean;
i: integer;
begin
reset := false;
if length(FColumns) <> ListView1.Columns.Count then
reset := true
else begin
for i := 0 to ListView1.Columns.Count - 1 do
if FColumns[i] <> ListView1.Columns[i].Width then begin
reset := true;
break;
end;
end;
if reset then begin
ListView1.Invalidate;
SetLength(FColumns, ListView1.Columns.Count);
for i := 0 to ListView1.Columns.Count - 1 do
FColumns[i] := ListView1.Columns[i].Width;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnIdle := ApplicationIdle;
end;
end.