Вниз
Скачать: CL | DM;

Отрисовка 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.008 c
15-1245757422
KiLLiR
2009-06-23 15:43
2009.08.23
Отличие фильтрации от поиска


1-1211977078
TForumHelp
2008-05-28 16:17
2009.08.23
Создание компонента


2-1245840591
Sly_Laban
2009-06-24 14:49
2009.08.23
*.doc-файл из RichEdit a


15-1245961803
Юрий
2009-06-26 00:30
2009.08.23
С днем рождения ! 26 июня 2009 пятница


2-1245780860
Tigros
2009-06-23 22:14
2009.08.23
Динамический SQL запрос




   Наверх