Поведение TListView OnCustomDrawItem изменено в 10.2, обновление 3 - PullRequest
0 голосов
/ 08 июня 2018

У меня есть TListView, в котором я хочу отобразить одну конкретную строку с полужирным текстом.Для этого я создал обработчик OnCustomDrawItem следующим образом:

procedure TDataDirHandlingDlg.lvDataFoldersCustomDrawItem(
  Sender: TCustomListView;
  Item: TListItem;
  State: TCustomDrawState;
  var DefaultDraw: Boolean);
begin
  case GetItemStatus(Item.Data) of
    ddNonExistent:
      begin
        Sender.Canvas.Font.Color := clGrayText;
        Sender.Canvas.Font.Style := [];
      end;
    ddCurrent:
      begin
        Sender.Canvas.Font.Style := [fsBold];
        Sender.Canvas.Font.Color := clBlue;
      end;
  else
    begin
      Sender.Canvas.Font.Color := clWindowText;
      Sender.Canvas.Font.Style := [];
    end;
  end;
end;

(Справочная информация: это список определенных каталогов и их свойств. Точно один каталог может быть "Текущим", и это тот, который я хочучтобы подчеркнуть. GetStatusItem возвращает значение перечисления, которое имеет либо ddOK, ddNonExistent, либо ddCurrent).

Это сработало, как я и ожидал, с помощью Delphi 10.2 ("Tokyo") Update 2 , но не работает с помощью Update3 .Чтобы быть более конкретным, цвет шрифта все еще работает.Но стиль шрифта этого не делает.

В исходном коде VCL я вижу, что Vcl.ComCtrls.pas был изменен с Обновления 2 на Обновление 3 в TCustomListView.CNNotify, а вызов SaveDC / RestoreDC был удален вОбновление 3. Я думаю, что это актуально, но мне пока не удалось понять код.

Как видите, я не пытаюсь на самом деле нарисовать текст в обработчике.Я просто меняю свойства холста.

Вопрос в следующем: это просто удача, что код работал в обновлении 2? Нужно ли рисовать текст самостоятельно, или этого должно быть достаточно, чтобы изменить холст и позволить VCL продолжить?с нанесением текста?Если да, то почему он не работает в обновлении 3?

...