Форум: "Начинающим";
Текущий архив: 2009.08.23;
Скачать: [xml.tar.bz2];
ВнизОтрисовка ProgressBar в ListView Найти похожие ветки
← →
Uno-84 (2009-06-24 14:15) [0]Добрый День! Подскажите пожайлуста, мне нужно отрисовать ProgressBar в ListView, не создавая динамически сам ProgressBar, а по наподобие как CheckBox в Gride. T.e через Canvas.
Если у кого есть примеры кода, очень буду рад помощи.
Заранее спасибо!
← →
clickmaker © (2009-06-24 14:27) [1]OnCustomDrawItem, OnCustomDrawSubItem
← →
uno-84 (2009-06-24 14:38) [2]Пробовал вот код:
procedure TWorkCalendarForm.WorkLVCustomDrawSubItem(
Sender: TCustomListView; Item: TListItem; SubItem: Integer;
State: TCustomDrawState; var DefaultDraw: Boolean);
const
pbColumnIndex = 1;
pbMax = 100;
var
pb: TQProgressBar;
pbRect: TRect;
begin
pb := TQProgressBar.Create(Self);
pb.Parent := WorkLV;
pbRect := Item.DisplayRect(drBounds);
pbRect.Left := pbRect.Left + WorkLV.Columns[-1 + pbColumnIndex].Width;
pbRect.Right := pbRect.Left + WorkLV.Columns[pbColumnIndex].Width;
pb.BoundsRect := pbRect;
pb.Cursor := crHandPoint;
pb.barKind := bkCylinder;
pb.barLook := blGlass;
pb.barColor := clLime;
pb.finalColor := clYellow;
pb.captionAlign := taCenter;
pb.position := 56;
end;
проблема в том, что если у много записей в ListView при движении мышки ListView мигает. Кроме того записи обновляются и сортируются по дате в соседней с ProgressBar колонке. Выходит как-то на вид неприятно.
А вот при прорисовке на канве от этого "мигания" можно избавиться. Толко как вот прорисовать?
← →
clickmaker © (2009-06-24 14:46) [3]> Толко как вот прорисовать?
в OnDrawItem (или SubItem) заливать цветом прямоугольник соответственно прогрессу.
Чтобы не перерисовывать все при изменении прогресса, используй метод UpdateItems
← →
Mono-85 (2009-06-24 15:00) [4]Тебе одновременно один прогресс нужно отображать или несколько ?
← →
uno-84 (2009-06-24 15:12) [5]Я пишу программу, которая является какбы оргонайзером по выполнению служебных задании. Каждая строка в ListView это задание и оно имеет свой процент выполнения. Поэтому прогресс разный в каждой строчке.
← →
uno-84 (2009-06-24 15:13) [6]В коде которых я привел выше процент просто для примера поставлен, он для каждой строки свой и изменяется по мере выполнения задания
← →
Cobalt © (2009-06-24 16:10) [7]> uno-84 (24.06.09 14:38) [2]
Свят-свят-свят...
А кто будет удалять эти прогресс-бары?
Вот мой кодprocedure TMyForm.lvLogCustomDrawSubItem(Sender: TCustomListView; Item: TListItem; SubItem: Integer;
State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if Item.SubItems.Count < 1 then
Exit;
with Sender.Canvas do
If ( <wrong> )
then //раскрашивать только второй столбец
Font.Color := clRed //цвет символов
else //все остальные столбцы
Font.Color := clWindowText; //цвет символов
end;
← →
uno-84 (2009-06-24 16:13) [8]А если процен равен 40 или 20 или 50 он мне закраси пол ячейки или четверть?
← →
uno-84 (2009-06-24 16:14) [9]В зависимости от процента?
← →
MBo © (2009-06-24 16:15) [10]>А если процен равен 40 или 20 или 50 он мне закраси пол ячейки или четверть?
Для этого нужно написать код, закрашивающий нужную долю ячейки
← →
clickmaker © (2009-06-24 16:19) [11]> [9] uno-84 (24.06.09 16:14)
подсказка: у Item есть свойство DisplayRect
если нужно рисовать не в первой колонке, то учесть ширину тех, что до неё
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.08.23;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c