使用TListview EditCaption和HideSelection

时间:2019-05-02 09:34:07

标签: delphi vcl-styles tlistview

我在具有Dark VCL样式的VCL应用程序中使用Delphi 10.3(例如,默认的Windows10 Dark)。

我在TListview中的VCL样式有两个问题

在TListview中编辑项目时,不会设置列表视图的编辑样式:它具有白色背景和黑色文本。尽管不是VCL控件,是否可以将VCL样式应用于该编辑?

此外,在HideSelection = False且listview没有焦点的情况下,所选项目的背景颜色是默认的浅灰色,而不是更暗的颜色(更适合VCL样式)。除了自定义工程图之外,还有其他方法可以修改吗?

我用几种深色的VCL样式对此进行了检查,它们都在TListView(和TTreeview)上都存在这些问题。

1 个答案:

答案 0 :(得分:0)

通过覆盖TListView后代(在我的情况下为TListViewEx)中的消息处理程序WM_CTLCOLOREDIT,我能够修复listview的编辑背景和文本颜色。如果检查TCustomListView.WMCtlColorEdit的VCL源,您将看到此修复程序不包含caseglassPaint大小写正确的情况-但我没有使用它。在我看来,这实际上是一个VCL错误,下面的代码应该已经包含在TCustomListView.WMCtlColorEdit中。 注意:相同类型的修复程序也适用于TTreeview(显然使用TTreeview后代)

我还没有找到解决未聚焦选择颜色的方法。

procedure TListViewEx.WMCtlColorEdit(var Message: TMessage);
var
  DC: HDC;
begin
  if StyleServices.IsSystemStyle then
    inherited
  else
  begin
    DC := Message.WParam;
    SetTextColor(DC, StyleServices.GetSystemColor(clWindowText));
    SetBkColor(DC, StyleServices.GetSystemColor(clWindow));
    Message.Result := 1;
  end;
end;