LinuxForum.Fans
Тема

Lazarus - цветной текст в ListView

Автор: Rizado 9 сообщений 787 просмотров
25.05.2022 20:23 #437721

Дано:
Форма, на ней есть ListView с данными. ViewStyle: vsReport
Нужно в зависимости от условия изменить цвет некоторых SubItems. В Delphi это делается просто, вот таким кодом:

text
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  if (Item.SubItems[SubItem - 1] = '1') then
    Sender.Canvas.Font.Color := clRed
  else
    Sender.Canvas.Font.Color := clBlack;
end;

Но в Lazarus это работать не хочет, выдаёт кучу ошибок. Как заставить текст отображаться другим цветом?

Update 1. Под виндой в Lazarus этот код работает. Проверил.

Update 2. С причиной ошибки разобрался. Там столбцы созданы заранее, а чтобы не было впечатления, что программа зависла, добавил в цикл Application.ProcessMessages, вот при попытке отрисовать ещё не добавленные SubItems и появлялась ошибка. Это решаемо. Но с цветом текста всё равно не работает.

25.05.2022 22:19 #437722
"Rizado" написал:
Но в Lazarus это работать не хочет, выдаёт кучу ошибок. Как заставить текст отображаться другим цветом?

В самом низу этой темы есть пример project1.zip. У меня в Lazarus-2.2.0 работает.

26.05.2022 09:06 #437723

alex_q_2000, благодарю за помощь, но это не совсем то, что надо.
Вот скриншот, чтобы было понятнее:

Обрати внимание, что цифры 5 выделены ярко-красным, 6 - чуть темнее. Это сделано за 5 минут в Lazarus/Windows 10. Вот это же нужно и в Linux.

26.05.2022 09:48 #437724

Попробовал как в проекте alex_q_2000
Всё работает.

text
ListView1.Canvas.Brush.Color := clRed;
ListView1.Canvas.Font.Color := clGreen;
26.05.2022 09:57 #437725

ValentinK, я тоже пробовал. Но мне надо не всю строку выделить, а именно отдельные элементы.

26.05.2022 10:23 #437726
"Rizado" написал:
Но мне надо не всю строку выделить, а именно отдельные элементы.

Так перед каждым элементом и менять цвет?
Или контрол не даёт, это его особенности?

26.05.2022 10:30 #437727
"ValentinK" написал:
Или контрол не даёт, это его особенности?

Под Linux не даёт.

26.05.2022 10:49 #437728

Может, заменить на табличку или даже TreeView?

26.05.2022 10:54 #437729

ValentinK, VirtualTreeView? Думал уже, но из-за такой мелочи не хочется. Хотя сейчас попробую.

Войдите или зарегистрируйтесь, чтобы ответить.