Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.13;
Скачать: CL | DM;

Вниз

ProgressBar в ListView   Найти похожие ветки 

 
faost ©   (2005-01-31 19:09) [0]

У меня есть следующий код:

procedure TForm1.Button1Click(Sender: TObject);
var
 r: TRect;
 pb: TProgressBar;
begin

 Listview1.ViewStyle         := vsReport;
 Listview1.Items.Add.Caption := "Text";

 r := Listview1.Items[i].DisplayRect(drBounds);
 r.Left  := r.Left + Listview1.columns[0].Width;
 r.Right := r.Left + Listview1.columns[1].Width;

 pb := TProgressBar.Create(Self);
 pb.Parent := Listview1;
 pb.BoundsRect := r;
 pb.Position := 30;
 Listview1.Items[i].Data := pb;

 Inc(i);
end;

Проблема в том, что при скроллинге ListView ProgressBar не перемещается вместе с другими столбцами ListView!


 
Defunct ©   (2005-01-31 19:13) [1]

А с чего вдруг ему перемещаться?


 
faost ©   (2005-01-31 19:28) [2]

Нужно, чтоб в ListView был целый столбец ProgressBar-ов, который, естественно, должен будет перемещаться вместе и с другими столбцами.


 
Defunct ©   (2005-01-31 19:37) [3]

Включаем OwnerDraw := True
и отрисовываем каждый элемент вручную по событию OnDrawItem


 
faost ©   (2005-01-31 19:43) [4]

А как реагировать на событие, когда происходит скроллинг ListView?


 
Defunct ©   (2005-01-31 19:51) [5]

ну уж поэкперементируйте. видимо придется ProgressBar отрисовывать вручную (во всяком случае тормозить будет меньше).


 
faost ©   (2005-01-31 19:55) [6]

А как именно? Помоги ссылкой или примером кода


 
Defunct ©   (2005-01-31 20:10) [7]

примерчик.
добавьте в ListView одну колонку.
ширину колонки поставьте ~200.
стиль vsReport.
OwnerDraw - true.

procedure TForm1.ListView1DrawItem(Sender: TCustomListView;
 Item: TListItem; Rect: TRect; State: TOwnerDrawState);
begin
 with TListView(Sender).Canvas do
 begin
   Font.Color := clBlack;
   Brush.Color := clWhite;
   TextRect(Rect, Rect.Left, Rect.Top, Item.Caption);
   Rect.Left := Rect.Left + TextWidth("col permanent size");
   if Rect.Left > Rect.Right then
      Rect.Left := Rect.Right -1;
   Brush.Color := clBlue;
   Rectangle( Rect.Left, Rect.Top+1, Rect.Left + Integer(Item.Data), Rect.Bottom-1);

 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 i : integer;
begin
 for i := 0 to 100 do
 with ListView1.Items.Add do
 begin
   Caption := "Text "+IntToStr(i);
   Data := Pointer( Random(50) );
 end;
end;


 
faost ©   (2005-01-31 20:39) [8]

Спасибо!



Страницы: 1 вся ветка

Текущий архив: 2005.02.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.083 c
1-1107259732
Alex_1
2005-02-01 15:08
2005.02.13
кодировка в поле ввода Edit


14-1106491743
jack128
2005-01-23 17:49
2005.02.13
Задачка про визирей


1-1106812418
bon
2005-01-27 10:53
2005.02.13
компонент Outlook bar для Делфи7


1-1106765498
vers
2005-01-26 21:51
2005.02.13
Внешний вид TScrollBar


4-1104140322
Olga_b
2004-12-27 12:38
2005.02.13
Работа с Gameport