Текущий архив: 2005.09.25;
Скачать: CL | DM;
Вниз
ListView с разноцветными строками Найти похожие ветки
← →
kyn66 © (2005-09-01 15:57) [0]Мастера, как можно манипулировать, чтобы сделать сабж? Т.е. как сделать красный жирный шрифт в 3-м столбце на некоторой строчке, когда как в 1 и 2 черный
← →
begin...end © (2005-09-01 16:00) [1]См. в справке: TCustomListView.OnCustomDrawItem, TCustomListView.OnAdvancedCustomDrawItem.
← →
kyn66 © (2005-09-01 16:05) [2]А можно встречный вопрос: Чем отличаются эти две строки:
OnCustomDrawItem
OnAdvancedCustomDrawItem
← →
begin...end © (2005-09-01 16:09) [3]> kyn66 © (01.09.05 16:05) [2]
OnAdvancedCustomDrawItem предоставляет информацию о том, когда возникло события (параметр Stage). Если этот парамметр не нужен, используйте OnCustomDrawItem.
← →
begin...end © (2005-09-01 16:12) [4]> kyn66
Я немного ошибся: поскольку в Вашем случае нужно анализировать номер столбца, то следует использовать событие OnCustomDrawSubItem или OnAdvancedCustomDrawSubItem.
← →
kyn66 © (2005-09-01 16:46) [5]Совсем запутался с вложенностью объектов 8-(((. Но понимаю, что есть два пути:
1) прямо в лоб присваивать цвет Subitems, пока не знаю как. В этой строке только название проходит, дальше свойства кончаются:ListView1.Items[i].SubItems[1] := "Лидер !";
что-то типа этого нужноListView1.Items[i].SubItems[1].Font.Color := clRed
2)Как-то подгружать ключевые значения в Objects и потом на событиях их анализировать, тоже не знаю как 8-(.
← →
begin...end © (2005-09-01 17:22) [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 17:37) [7]Это хорошо, однако Color := clRed должен быть не всегда, а при появлении некого условия. Это как-бы информационная доска. При прохождении ряда цифр и попадании на какое-то нужное цвет становится красным и жирным, в противном случае черный. Тут наверное нужно как-то [5]-2) делать.
← →
begin...end © (2005-09-01 17:44) [8]> kyn66 © (01.09.05 17:37) [7]
> Это хорошо, однако Color := clRed должен быть не всегда,
> а при появлении некого условия.
Значит, нужно добавить в коде [6] к условию SubItem = 2 ещё и нужное дополнительное условие.
← →
kyn66 © (2005-09-01 17:51) [9]А вот ешшо что получилось. Сперва я сделал мой 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 18:26) [10]> 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-02 11:25) [11]Я действительно так и сделал(продублировал) и все пошло Окейно! 8-)
Страницы: 1 вся ветка
Текущий архив: 2005.09.25;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.03 c