【发布时间】:2013-07-08 20:05:03
【问题描述】:
我正在尝试为我的应用程序模拟 Outlook 2013 左窗格树视图菜单。我使用 CustomDraw 是因为我只想更改一些简单的字体和背景属性。
这就是我想要的:
但是,对于选定节点和热跟踪节点,我总是得到默认选定的图形。我没有 Windows 7 或 XP,无法查看这是正常行为还是与我的操作系统(Windows 8)有关。
这是我得到的:
这是我的代码:
procedure TMainForm.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if Node.Level = 1 then
Sender.Canvas.Font.Size := Sender.Canvas.Font.Size + 2;
if cdsHot in State then
Sender.Canvas.Brush.Color := $00F7E6CD
else if (cdsSelected in State) or (cdsFocused in State) or
(cdsChecked in State) then
Sender.Canvas.Brush.Color := $00F2F2F2
else
Sender.Canvas.Brush.Color := $00DEDEDE;
DefaultDraw := true;
end;
我怎样才能为选定和热门项目绘制不同颜色的背景?
【问题讨论】:
-
我相信你必须取消主题控制才能使它工作。禁用应用程序的运行时主题,或者至少在树视图上使用空字符串调用
SetWindowTheme。 -
也许你可以从 VirtualStringTree 开始?
-
其实我觉得我说的不对。文档特别提到您必须通过调用 SetWindowTheme 来禁用视觉样式的工具栏,但没有提及任何其他控件。 Link.
-
@SertacAkyuz,您应该发布答案,因为您基本上在 cmets 中解决了它,甚至没有看到它,删除了我的答案。
-
@Peter - 没问题,我可以不发布答案,请恢复您的答案。实际上,如果有人没有提出解释,我稍后会投票给你。如果 MS 的文件不完整或类似情况,我不会感到惊讶。
标签: delphi windows-8 treeview delphi-xe