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

Чередование фона строк в TListView

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



Автор: Subfire
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> 
Да какое описание...
Вообщем можно просто copy/past сделать...
Хотя реализация не оптимальная, но общая идея - та что нужна =)))

Зависимости: нету =)
Автор:       Subfire, subfire@mail.ru, Питер
Copyright:   =) не нужно
Дата:        19 февраля 2003 г.
***************************************************** }

procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
  i: word;
begin
  if item = nil then
    EXIT;
  i := Item.Index;
  if trunc((i) / 2) < (i / 2) then
    sender.canvas.brush.Color := cl3DLight
  else
    sender.canvas.brush.Color := clwhite;
end;

Программный код на Delphi!

Процедура ListView1CustomDrawItem - это обработчик события CustomDrawItem для контрола TListView. Событие это вызывается, когда список требует нарисовать конкретный элемент.

В этом реализации автор (Subfire) пытается альтернировать фоновое цвет списка между cl3DLight и clWhite. Условие для определения цвета основано на индексе элемента (i). Если (i / 2) меньше (i div 2) (целочисленное деление), то цвет будет установлен в cl3DLight, иначе - в clWhite.

Вот некоторые наблюдения и предложения:

  1. Условие для определения фонового цвета не очень эффективно, так как оно включает операции с плавающей точкой (/) и целочисленное деление (div). Более эффективный подход будет использовать битовые операции или простые арифметические операции.
  2. Код не обрабатывает случаи, когда список имеет четное количество элементов. В таких случаях последний элемент будет иметь фоновый цвет, отличающийся от остальных.
  3. Код использует EXIT вместо явного возвращения из процедуры. Хотя это может быть приемлемо в этом конкретном контексте, обычно считается лучше практикой использовать явные возвращения.

Вот обновленная реализация, которая решает эти проблемы:

procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
  i: word;
begin
  if Item = nil then
    Exit;

  i := Item.Index;
  if (i mod 2) = 0 then
    Sender.Canvas.Brush.Color := clWhite
  else
    Sender.Canvas.Brush.Color := cl3DLight;
end;

В этом обновленном коде я использовал оператор модуля (mod) для определения, является ли индекс элемента четным или нечетным. Этот подход более эффективен и правильно обрабатывает случаи, когда список имеет четное количество элементов. Я также заменял EXIT на явное возвращение для лучшей читаемости.

В статье описывается способ изменения цвета фона строк в TListView, реализованный с помощью процедуры CustomDrawItem.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 12:40:31/0.003115177154541/0