Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.23;
Скачать: 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 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.008 c
1-1212564995
Trei
2008-06-04 11:36
2009.08.23
Ссылка


4-1215102058
NIZAM
2008-07-03 20:20
2009.08.23
ОТКРЫРЬ ПАПКУ С ЗАДАННЫМ ФАЙЛОМ


2-1245834432
Worldmen
2009-06-24 13:07
2009.08.23
Редактирование отчета FastReport в программе


2-1245739392
Polkin
2009-06-23 10:43
2009.08.23
Вставить готовый текст в RichEdit


1-1212323400
Rust
2008-06-01 16:30
2009.08.23
Динамическое создание меню по XML-файлу