Форум: "Основная";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];
ВнизПрогрессбар в ListView Найти похожие ветки
← →
tovSuhov (2003-12-19 23:22) [0]Мастера, подскажите, как реализовать такую вещь - есть ListView (в стиле Report). Хочу, чтобы одна из колонок представляла собой колонку прогрессбаров для соответствующих строк (для каждой строки свой прогрессбар). Т.е. банально заливалась синим цветом в зависимости от некоторого значения, определенного для каждой строки.
Имеется ввиду также, возможно ли добиться этого, используя стандартные OnCustomDraw, OnCustomDrawItem и т.п.? И если возможно, то как именно (подскажите, а то я чего-то не понимаю видимо...)
Ну и напоследок, ежели в стандартном ListView такого добиться нельзя - может кто посоветует компонент, позволяющий сделать подобное (сохраняя, естественно, остальные возможности ListView).
С уважением и предварительной благодарностью, tovSuhov.
← →
Игорь Шевченко (2003-12-20 12:51) [1]
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, Gauges, StdCtrls;
type
TThreadData = class
Thread : Integer;
Gauge : TGauge;
Progress : Integer;
end;
TfMain = class(TForm)
ListView: TListView;
Button: TButton;
procedure ListViewCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
procedure ButtonClick(Sender: TObject);
private
FNextThread : Integer;
procedure AddThread (ThreadID : Integer);
function GetSubItemRect (AListView : TListView; AListItem : TListItem; SubItemIndex : Integer) : TRect;
public
{ Public declarations }
end;
var
fMain: TfMain;
implementation
{$R *.DFM}
procedure TfMain.ListViewCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if Assigned(Item.Data) then
with TThreadData(Item.Data) do
Gauge.Progress := Progress;
DefaultDraw := true;
end;
procedure TfMain.AddThread(ThreadID: Integer);
var
LI : TListItem;
ThreadData : TThreadData;
ARect : TRect;
begin
Inc(FNextThread);
LI := ListView.Items.Add();
LI.Caption := IntToStr(FNextThread);
ARect := GetSubItemRect(ListView, LI, 1);
ThreadData := TThreadData.Create();
ThreadData.Thread := FNextThread;
ThreadData.Progress := Random(100);
ThreadData.Gauge := TGauge.Create(Self);
with ThreadData.Gauge do begin
Parent := ListView;
ParentFont := false;
Left := ARect.Left;
Top := Succ(ARect.Top);
Width := ListView.Columns[1].Width;
Height := ARect.Bottom - ARect.Top - 1;
MaxValue := 100;
ForeColor := clNavy;
Visible := true;
end;
LI.Data := ThreadData;
end;
procedure TfMain.ButtonClick(Sender: TObject);
begin
AddThread(0);
end;
function TfMain.GetSubItemRect(AListView : TListView; AListItem : TListItem;
SubItemIndex: Integer): TRect;
var
I : Integer;
begin
Result := AListItem.DisplayRect(drBounds);
for I:=0 to Pred(SubItemIndex) do
Inc(Result.Left, ALIstView.Columns[I].Width);
end;
end.
← →
tovSuhov (2003-12-20 17:42) [2]Огромное спасибо! Сейчас буду разбираться.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.011 c