Форум: "Основная";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.038 c