Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.09.25;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.034 c
14-1124344469
Kerk
2005-08-18 09:54
2005.09.25
Новый ресурс о делфи. Рекомендую всем.


1-1125334748
Sergey2005
2005-08-29 20:59
2005.09.25
Tag в Delphi 8


6-1117675691
Lex_!
2005-06-02 05:28
2005.09.25
Работа с Explorerом (программный выбор елементов)


1-1125659877
Som
2005-09-02 15:17
2005.09.25
Как дождаться окончание работы вызываемого приложения ?


4-1122898897
MegaVolt
2005-08-01 16:21
2005.09.25
Ручное стирание ListView





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