Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как изменить цвет выделения и текста в компоненте TListBox в Delphi

Delphi , Компоненты и Классы , Списки

Вопрос, который стоит перед разработчиками, работающими с компонентом TListBox в среде Delphi, заключается в возможности изменения цвета выделения и текста для элементов списка. По умолчанию, при использовании стиля владельского рисования (owner-draw) или при отключенных темах проекта, выделение вокруг элемента рисуется синим цветом, который, как правило, определяется глобальными настройками внешнего вида системы. Однако, существует желание изменить цвет выделенных элементов на пользовательский.

Решение проблемы

Для изменения цвета выделенных элементов в TListBox можно использовать процедуру ListBox1DrawItem, которая позволяет задать цвет фона и текста для выделенных элементов. Ниже приведен пример кода на Object Pascal, который демонстрирует, как это можно сделать:

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with (Control as TListBox).Canvas do
  begin
    if odSelected in State then
      Brush.Color := $00FFD2A6; // Задаем цвет фона выделенного элемента
    FillRect(Rect);
    TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
    if odFocused in State then
      Brush.Color := TListBox1.Color; // Цвет для фокусировки, но не используется для цвета текста выделенного
    // Если хотите чтобы выделенный текст был другого цвета, установите цвет шрифта
    Font.Color := clBlack; // Задаем цвет текста для выделенного элемента
    // Если необходимо показать фокус, но не закрашивать его
    if odFocused in State then
      DrawFocusRect(Rect);
  end;
end;

Данный код следует использовать после того, как вы измените свойство Style компонента TListBox на значение lbOwnerDrawFixed для активации владельского рисования.

Альтернативное решение для устранения визуального выделения

Если задача состоит в том, чтобы убрать визуальное выделение элементов списка, можно использовать следующий код:

procedure TForm1.OnDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with (Control as TListBox).Canvas do
  begin
    if odSelected in State then // Если элемент выделен
      Brush.Color := clWhite; // Цвет фона элемента устанавливаем в белый
    Font.Color := clBlack; // Цвет текста остается черным для видимости
    FillRect(Rect);
    TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
    if odFocused in State then
      DrawFocusRect(Rect); // Сброс визуального эффекта фокуса, если так нужно
    Brush.Color := ListBox1.Color; // Цвет для фокусировки но это для фона, если использовать при рисовании границы фокуса
  end;
end;

Обратите внимание, что вам нужно будет установить обработчик события DrawItem для вашего TListBox в среде разработки, используя созданную процедуру, чтобы она вызывалась при рисовании элементов списка.

В заключение, для достижения нужного эффекта выделения элементов списка с использованием пользовательских цветов, необходимо настроить владельское рисование элементов списка и правильно использовать методы рисования, предоставляемые компонентом TCanvas.

Создано по материалам из источника по ссылке.

Вопрос касается изменения цвета выделения и текста в компоненте `TListBox` в среде разработки Delphi, используя владельское рисование элементов списка.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Списки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-09 09:29:13/0.0061109066009521/0