Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.23;
Скачать: CL | DM;

Вниз

ListView.Canvas   Найти похожие ветки 

 
Yegorchic ©   (2006-07-04 20:47) [0]

Здравствуйте! Объясните пожалуйста, почему когда я что-то рисую на ListView"е, то у меня выделяются жирным Item"ы разные и по-разному. Вот например:

http://www.harmony-school.fatal.ru/images/form1.gif (7.9kb)

Так же, хотелось бы узнать, как правильно использовать ListView.Canvas.Brush.Color, т.к. когда я хочу просто нрисовать прямоугольник закрышенный, то у меня закрашевается весь Item (на картинке тоже показано). Почему?
На время рисования этого прямоугольника я ставлю ListView.Canvas.Brush.Color:=clRed, а сразу после clWhite. Но почему у меня весь Item закрашевается?

Рисую я во время выполнения event"а CustomDrawSubItem, сообственно, на нужном Item"е.

P.S: На картике изображена попытка реализовать свой ProgressBar на Item"е ListView. Всё получилось, кроме закрашевания области нужной...


 
Жуков Олег   (2006-07-04 21:48) [1]

Помогает после ListView.Canvas.Brush.Color:= ... сделать ListView.Canvas.Refresh.
(А так же после изменения других свойств Canvas.Brush...., Canvas.Pen..., Canvas.Font...). Почему - не знаю, такое поведение наблюдал только у TreeView и ListView. Надо бы исходники посмотреть, чтобы понять что там происходит, но сейчас нет их под рукой.


 
Yegorchic ©   (2006-07-04 23:17) [2]


> Помогает после ListView.Canvas.Brush.Color:= ... сделать
> ListView.Canvas.Refresh.


А это опасно :-) Просто тогда будет опять происходить событие CustomDrawSubItem, которое повлечёт за собой ListView.Canvas.Refresh и так далее... т.е. будет ежемилесекундное обновление  ListView. Я так уже пробовал. Т.е. не получается так...


 
Жуков Олег   (2006-07-04 23:42) [3]


> Просто тогда будет опять происходить событие CustomDrawSubItem,
> которое повлечёт за собой ListView.Canvas.Refresh и так далее...


- не будет.


> а время рисования этого прямоугольника я ставлю ListView.
> Canvas.Brush.Color:=clRed, а сразу после clWhite. Но почему
> у меня весь Item закрашевается?


Попробовал. Ошибка не воспроизводится:

 ListView_GetSubItemRect(ListView1.Handle, Item.Indent, SubItem, LVIR_BOUNDS, @Rect);
 ListView1.Canvas.Brush.Color := clRed;
 ListView1.Canvas.FillRect(Rect);
 ListView1.Canvas.Brush.Color := clGreen;
 Rect.Right := (Rect.Right + Rect.Left) div 2;
 ListView1.Canvas.FillRect(Rect);
 ListView1.Canvas.Brush.Color := ListView1.Color;

Этот код рисует на SubItem красный прямоугольник, потом половину его закрашивает зелёным, и потом восстанавливает Canvas-у нормальный цвет.
Если убрать последнюю строчку, то получается примерно как у тебя.


 
Yegorchic ©   (2006-07-05 00:14) [4]

Всё! Я разобрался с Вашей помощью! Спасибо!
Всё работает!

И на Refresh в самом деле всё нормально реагирует. Это я, значит, с ListView.Repaint перепутал!

Спасибо ещё раз!

Только у меня вопрос: а что это за процедура
       ListView_GetSubItemRect(ListView1.Handle, Item.Indent, SubItem, LVIR_BOUNDS, @Rect); ?


 
Yegorchic ©   (2006-07-05 00:27) [5]

Ай, всё-таки ещё вопрос есть:

http://www.harmony-school.fatal.ru/images/form1_.gif (7.8kb)

Почему некоторые Item"ы выделяются жирным?


 
Жуков Олег   (2006-07-05 11:05) [6]

Сорри, опечатка вкралась.
Вместо ListView_GetSubItemRect(ListView1.Handle, Item.Indent>, SubItem, LVIR_BOUNDS, @Rect) читать ListView_GetSubItemRect(ListView1.Handle, Item.Indeх, SubItem, LVIR_BOUNDS, @Rect)


 
Yegorchic ©   (2006-07-05 13:02) [7]


> ListView_GetSubItemRect


А что это такое вообще?

И как быть с
> Yegorchic ©   (05.07.06 00:27) [5]



Страницы: 1 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.028 c
2-1151843884
S-Slim
2006-07-02 16:38
2006.07.23
надо копировать DB файл!


2-1151951452
Ivolg
2006-07-03 22:30
2006.07.23
Handle


1-1149781802
pound
2006-06-08 19:50
2006.07.23
Как копировать в буфер обмена из Edit


15-1150450044
MBo
2006-06-16 13:27
2006.07.23
Пятничные задачки для brain разминки ;)


15-1151159758
TUser
2006-06-24 18:35
2006.07.23
Земля, Солнце и астрономия