Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.057 c
1-1125333693
Ivanov
2005-08-29 20:41
2005.09.25
.rar с паролем


6-1117767155
-=S.S=-
2005-06-03 06:52
2005.09.25
Address to IP


14-1124830002
ronyn
2005-08-24 00:46
2005.09.25
Объявление в газете "Требуется программист delphi"....


5-1100244969
Суслик
2004-11-12 10:36
2005.09.25
Runtime package


14-1125419302
Иксик
2005-08-30 20:28
2005.09.25
Золотой фонд советского кино