Как сделать так, чтобы каждая строка в ListBox имела свой цвет
У меня есть два примера процедур OnDrawItem:
procedure TTest.ListBox1DrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
beginwith (Control as TListBox).Canvas dobegincase Index of
0:
begin
Font.Color := clBlue;
Brush.Color := clYellow;
end;
1:
begin
Font.Color := clRed;
Brush.Color := clLime;
end;
2:
begin
Font.Color := clGreen;
Brush.Color := clFuchsia;
end;
end;
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
end;
end;
Вышеприведенный код устанавливает различный цвет у фона и текста в
зависимости от номера строки, но он не работает с выделенными/выбранными
строками (кстати, не забудьте установить значение свойства ListBox1.Style равным
lbOwnerDrawFixed.)
Это можно протестировать со следующими тремя строками:
'Строка номер один' 'Вторая строка' 'Это строчка номер три'
Есть несколько вещей, достойных упоминания:
Я использую параметр Control для приведения типов ( Control as TListBox
).Items[ Index ], что убедиться в том, что я использую данные ListBox, такой
способ позволяет сделать общим данный обработчик события для нескольких
компонентов TListBox, например, если у вас имеется пара ListBox на различных
страницах TNoteBook.
OldColor и проверка параметра State позволяет быть уверенным, что выбранная
строка содержит видимый цвет шрифта (множество видеодрайверов используют белый
текст на синем фоне для выбранной строки).
Также я создаю небольшое свободное пространство вокруг текста - увеличиваю
TListBox.ItemHeight и, соответственно, область вывода текста - TempLeft :=
Rect.Left + 3 и TempTop := Rect.Top + 1.
Как сделать так, чтобы каждая строка в ListBox имела свой цвет: можно использовать процедуру OnDrawItem, которая позволяет настроить видимость каждого элемента списка.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS