Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.007 c
4-1215102058
NIZAM
2008-07-03 20:20
2009.08.23
ОТКРЫРЬ ПАПКУ С ЗАДАННЫМ ФАЙЛОМ


15-1245441575
Step
2009-06-19 23:59
2009.08.23
Служба клиент групповой политики


3-1226318508
Барра Кабамма
2008-11-10 15:01
2009.08.23
TADOCommand + MSSQL + SP


1-1212564995
Trei
2008-06-04 11:36
2009.08.23
Ссылка


15-1245486265
TCrash
2009-06-20 12:24
2009.08.23
Органайзер/календарь





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский