![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ListView с разноцветными строками [D7, WinXP]
kyn66 © (2005-09-01 15:57:00)Мастера, как можно манипулировать, чтобы сделать сабж? Т.е. как сделать красный жирный шрифт в 3-м столбце на некоторой строчке, когда как в 1 и 2 черный
kyn66 (2005-09-02 11:25:00) [1]Я действительно так и сделал(продублировал) и все пошло Окейно! 8-)
begin...end (2005-09-01 18:26:00) [2]> kyn66 © (01.09.05 17:51) [9]
Первое, что приходит в голову -- продублировать код On...DrawItem в On...DrawubItem:
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
const
BackColors: array [Boolean] of TColor = (clWhite, cl3DLight);
begin
with (Sender as TListView).Canvas do
Brush.Color := BackColors[Odd(Item.Index)]
end;
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
const
BackColors: array [Boolean] of TColor = (clWhite, cl3DLight);
FontColors: array [Boolean] of TColor = (clRed, clBlack);
begin
with (Sender as TListView).Canvas do
begin
Brush.Color := BackColors[Odd(Item.Index)];
Font.Color := FontColors[SubItem = 2];
end
end;
kyn66 (2005-09-01 17:51:00) [3]А вот ешшо что получилось. Сперва я сделал мой ListView полосатым
procedure TMainFrm.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if Item = nil then
Exit;
with ListView1.Canvas.Brush do
if (Item.Index mod 2 <> 0) then
Color := cl3DLight
else
Color := clwhite;
end;
Затем подставил новшество
procedure TMainFrm.ListView1CustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
begin
with (Sender as TListView).Canvas.Font do
if SubItem = 2 then
begin
Color := clRed;
Style := [fsBold];
end
else
begin
Color := clBlack;
Style := [];
end;
end;
Хе, так вот после него, у моего ListView полосатость осталась только в первом столбце.
begin...end (2005-09-01 17:44:00) [4]> kyn66 © (01.09.05 17:37) [7]
> Это хорошо, однако Color := clRed должен быть не всегда,
> а при появлении некого условия.
Значит, нужно добавить в коде [6] к условию SubItem = 2 ещё и нужное дополнительное условие.
kyn66 (2005-09-01 17:37:00) [5]Это хорошо, однако Color := clRed должен быть не всегда, а при появлении некого условия. Это как-бы информационная доска. При прохождении ряда цифр и попадании на какое-то нужное цвет становится красным и жирным, в противном случае черный. Тут наверное нужно как-то [5]-2) делать.
begin...end (2005-09-01 17:22:00) [6]> kyn66 © (01.09.05 16:46) [5]
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
begin
with (Sender as TListView).Canvas.Font do
if SubItem = 2 then
Color := clRed
else
Color := clBlack
end
kyn66 (2005-09-01 16:46:00) [7]Совсем запутался с вложенностью объектов 8-(((. Но понимаю, что есть два пути:
1) прямо в лоб присваивать цвет Subitems, пока не знаю как. В этой строке только название проходит, дальше свойства кончаются:
ListView1.Items[i].SubItems[1] := 'Лидер !';
что-то типа этого нужно
ListView1.Items[i].SubItems[1] .Font.Color := clRed
2)Как-то подгружать ключевые значения в Objects и потом на событиях их анализировать, тоже не знаю как 8-(.
begin...end (2005-09-01 16:12:00) [8]> kyn66
Я немного ошибся: поскольку в Вашем случае нужно анализировать номер столбца, то следует использовать событие OnCustomDraw SubItem или OnAdvancedCustomDraw SubItem.
begin...end (2005-09-01 16:09:00) [9]> kyn66 © (01.09.05 16:05) [2]
OnAdvancedCustomDrawItem предоставляет информацию о том, когда возникло события (параметр Stage). Если этот парамметр не нужен, используйте OnCustomDrawItem.
kyn66 (2005-09-01 16:05:00) [10]А можно встречный вопрос: Чем отличаются эти две строки:
OnCustomDrawItem
OnAdvancedCustomDrawItem
begin...end (2005-09-01 16:00:00) [11]См. в справке: TCustomListView.OnCustomDrawItem, TCustomListView.OnAdvancedCustomDrawItem.