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

Как восстановить функцию подсветки строк при наведении в `ListView` с `OwnerDraw=true` в Delphi

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

Восстановление функции подсветки строк при наведении в ListView с OwnerDraw=true в Delphi

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

Использование события OnCustomDrawItem

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

Пример кода для OnCustomDrawItem:

procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
const
  BgColors: array[Boolean] of TColor = (clWhite, clSilver);
  FgColors: array[Boolean] of TColor = (clBlack, clBlack);
begin
  Sender.Canvas.Brush.Color := BgColors[Odd(Item.Index)];
  Sender.Canvas.Font.Color := FgColors[Odd(Item.Index)];
end;

Полное кастомное рисование с OwnerDraw = True

Если вам нужно более детальное управление внешним видом элементов ListView, можно использовать полное кастомное рисование, установив OwnerDraw в True. В этом случае можно определить процедуру OnDrawItem, которая будет вызываться для каждого элемента.

Пример кода для OnDrawItem:

procedure TForm1.ListView1DrawItem(Sender: TCustomListView; Item: TListItem;
  Rect: TRect; State: TOwnerDrawState);
const
  BgColors: array[Boolean] of TColor = (clWhite, clSilver);
  FgColors: array[Boolean] of TColor = (clBlack, clBlack);
  Alignments: array[TAlignment] of TTextFormats = (tfLeft, tfRight, tfCenter);
var
  LV: TListView;
  i, x1, x2: Integer;
  R: TRect;
  S: string;
begin
  // ... код для рисования элементов ...
  if odSelected in State then
  begin
    // Код для рисования выделенной строки
  end
  else if odHotLight in State then
  begin
    // Код для рисования строки при наведении курсора
  end
  else
  begin
    // Код для рисования обычной строки
  end;
end;

Восстановление эффекта подсветки при наведении

Для восстановления эффекта подсветки при наведении курсора на строку, можно использовать дополнительные обработчики событий OnMouseMove и OnMouseLeave, а также установить тег элемента ListView для отслеживания индекса выделенной строки.

Пример кода для OnMouseMove:

procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  LI: TListItem;
  Idx: Integer;
begin
  LI := ListView1.GetItemAt(X, Y);
  if Assigned(LI) then
    Idx := LI.Index
  else
    Idx := -1;
  if Idx <> ListView1.Tag then
  begin
    ListView1.Tag := Idx;
    ListView1.Invalidate;
  end;
end;

Пример кода для OnMouseLeave:

procedure TForm1.ListView1MouseLeave(Sender: TObject);
begin
  if ListView1.Tag <> -1 then
  begin
    ListView1.Tag := -1;
    ListView1.Invalidate;
  end;
end;

И не забудьте обновить процедуру OnDrawItem, чтобы использовать новый тег для определения цвета фона при наведении.

Заключение

Использование событий OnCustomDrawItem или полное кастомное рисование с OwnerDraw = True позволяют вам контролировать внешний вид элементов ListView. Однако, для восстановления стандартных эффектов подсветки и выбора, может потребоваться дополнительная логика и обработка событий мыши. Следуя приведенным выше примерам, вы сможете восстановить функцию подсветки строк при наведении в ListView с OwnerDraw=true.

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

Описание контекста: Вопрос связан с восстановлением функции подсветки строк при наведении курсора в компоненте `ListView` с использованием свойства `OwnerDraw` в среде разработки Delphi, что требует настройки кастомного рисования элементов.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2024-12-26 15:25:58/0.011530876159668/0