Форум: "Основная";
Текущий архив: 2003.01.30;
Скачать: [xml.tar.bz2];
ВнизListView и ProgressBar, как совместить? Найти похожие ветки
← →
Filat (2003-01-20 12:27) [0]Подскажите, как сделать стобы в ListView в одной из колонок был ProgressBar, типа как ReGet, когда он показывает % загрузки файлов? Мне надо для показа процента архивирования файлов, т.к. у них размер до архивации > 200Мб.
Спасибо!
← →
Filat (2003-01-20 19:55) [1]Ну неужели никто не знает? Такого же быть не может :(
← →
Mr.X (2003-01-20 20:26) [2]Способ глупый но может поможет:
progressbar1.parent:=listview1;
а дальше left и top
← →
Моджахед (2003-01-20 22:06) [3]2 Mr.X ©
Способ, наверное, не самый глупый из всех возможных, но глючить будет безбожно при прорисовке ;)
2 Filat
Два варианта, по возрастающей степени предпочтительности (имхо):
1) OwnerDraw в ListBox (довольно нелепо, поскольку придется произодить перерисовки слишком часто)
2) свой компонент.
← →
Моджахед (2003-01-20 22:08) [4]"свой компонет", разумеется, это и без всяких, листбоксов и прогрессбаров.
← →
Nick_N_A (2003-01-21 06:04) [5]bm:=TBitMap.Create;
bm.Width:=ProgressBar1.Width;
bm.Height:=ProgressBar1.Height;
ProgressBar1.Perform(wm_paint,bm.Canvas.Handle,0);
imageList1.Width:=ProgressBar1.Width;
imageList1.Height:=ProgressBar1.Height;
imageList1.Add(bm,nil);
bm.Free;
Создай массив картинок для него, и меняй их imageList1.Replace
← →
Palladin (2003-01-21 06:10) [6]2 Nick_N_A
дык уж тогда проще на canvas рисовать... чего картинки то менять...
← →
Игорь Шевченко (2003-01-21 10:16) [7]
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 begin
Gauge.Progress := Progress;
// Gauge.Refresh();
end;
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.
← →
Filat (2003-01-21 20:39) [8]Игорь Шевченко , спасибо попробую твой совет, что получится скажу.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.01.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c