我在具有Dark VCL样式的VCL应用程序中使用Delphi 10.3(例如,默认的Windows10 Dark)。
我在TListview中的VCL样式有两个问题
在TListview中编辑项目时,不会设置列表视图的编辑样式:它具有白色背景和黑色文本。尽管不是VCL控件,是否可以将VCL样式应用于该编辑?
此外,在HideSelection = False且listview没有焦点的情况下,所选项目的背景颜色是默认的浅灰色,而不是更暗的颜色(更适合VCL样式)。除了自定义工程图之外,还有其他方法可以修改吗?
我用几种深色的VCL样式对此进行了检查,它们都在TListView(和TTreeview)上都存在这些问题。
答案 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;