Главная страница
    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.004 c
15-1245914217
DVM
2009-06-25 11:16
2009.08.23
Good Quality Applications Built With Delphi


15-1245702601
Юрий
2009-06-23 00:30
2009.08.23
С днем рождения ! 23 июня 2009 вторник


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


15-1245307503
an-petroff
2009-06-18 10:45
2009.08.23
Веб-сервер должен писать в Interbase DB, а не хочет!


15-1245614869
Ebulfez
2009-06-22 00:07
2009.08.23
Kak shifrovat moy proqram





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский