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

Решение проблемы с жирным шрифтом в столбцах ListView при кастомном рисовании

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

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

Описание проблемы

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

Контекст

Разработчик настроил компонент ListView так, чтобы использовать кастомное рисование, установив свойства ViewStyle в vsReport и OwnerDraw в True. Были добавлены три столбца и три элемента, а обработчик события OnCustomDrawItem был настроен для рисования элементов с использованием различных стилей шрифтов и цветов фона для каждого столбца.

procedure TForm1.lv1CustomDrawItem(Sender: TCustomListView; Item: TListItem;
  State: TCustomDrawState; var DefaultDraw: Boolean);
var
  lvCanvas: TCanvas;
  R: TRect;
  S: string;
begin
  DefaultDraw := False;

  lvCanvas := Sender.Canvas;

  // ... код для рисования столбцов ...
end;

Попытки использовать TextOut вместо TextRect и изменение шрифтов после рисования фона не дали результата. Также было отмечено, что цвет фона текста в всех столбцах всегда соответствует первому столбцу.

Подтвержденный ответ

Проблема заключалась в использовании стандартного контекста рисования Sender.Canvas. Для решения проблемы был предложен подход, при котором используется собственный контекст рисования, созданный с помощью TControlCanvas. Это позволяет корректно применить заданные стили шрифтов и цвета фона для каждого столбца.

var
  lvCanvas: TCanvas;
  R: TRect;
  S: string;
begin
  DefaultDraw := False;

  lvCanvas := TControlCanvas.Create;

  try
    TControlCanvas(lvCanvas).Control := lv1;

    // ... код для рисования столбцов ...
  finally
    lvCanvas.Free;
  end;
end;

Альтернативный ответ

Также было отмечено, что использование lvCanvas.Refresh после изменения стилей шрифтов в стандартном контексте рисования Sender.Canvas также может решить проблему.

Заключение

При кастомном рисовании элементов ListView важно правильно управлять контекстом рисования, чтобы корректно применить заданные стили и цвета. Использование TControlCanvas или обновление контекста с помощью Refresh позволяет достичь желаемого результата.

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

Проблема связана с некорректным отображением стилей шрифтов и цветов фона в столбцах компонента ListView при использовании кастомного рисования в Delphi, когда текст в столбцах отображается жирным шрифтом и с красным фоном, несмотря на установку других с


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

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




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


:: Главная :: TListView ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-13 19:30:06/0.0050530433654785/1