在10.2 Update 3中更改了TListView OnCustomDrawItem行为

时间:2018-06-08 20:45:07

标签: delphi delphi-10.2-tokyo tlistview

我有一个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(“东京”)更新2 但使用Update 3 无效。更具体地说,字体颜色仍然有效。但字体样式没有。

我可以在VCL源代码中看到Vcl.ComCtrls.pas已从TCustomListView.CNNotify中的Update 2更改为Update 3,并且在Update 3中删除了SaveDC / RestoreDC调用。我想它是相关的但是我还没有设法理解代码。

正如您所看到的,我没有尝试在处理程序中实际绘制文本。我只是改变了画布的属性。

问题是:在Update 2中运行代码真的很幸运吗?我是否必须自己绘制文本,或者是否足以修改画布并让VCL继续绘图文本?如果是这样,为什么它不能在Update 3中运行?

0 个答案:

没有答案