delphi – TTreeView – 更改展开和折叠图像?
发布时间:2020-12-15 04:28:34 所属栏目:大数据 来源:网络整理
导读:是否可以使用标准TTreeView更改展开和折叠图像? 我不是指Node图像,我的意思是带有子节点的节点旁边的小箭头,如下所示: 理想情况下,我希望箭头显示为和 – 符号,如Delphi组件结构树: 如果可以改变这个,我该怎么做呢? 基于David的答案的工作演示 unit Unit
是否可以使用标准TTreeView更改展开和折叠图像?
我不是指Node图像,我的意思是带有子节点的节点旁边的小箭头,如下所示: 理想情况下,我希望箭头显示为和 – 符号,如Delphi组件结构树: 如果可以改变这个,我该怎么做呢? 基于David的答案的工作演示 unit Unit1; interface uses Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,ComCtrls,Themes,uxTheme; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; type TMyTreeView = class(TTreeView) protected procedure CreateWnd; override; end; var Form1: TForm1; implementation {$R *.dfm} { TMyTreeView } procedure TMyTreeView.CreateWnd; begin inherited; if ThemeServices.Enabled and CheckWin32Version(6,0) then SetWindowTheme(Handle,nil,nil); end; procedure TForm1.FormCreate(Sender: TObject); var MyTree: TMyTreeView; Node: TTreeNode; begin MyTree := TMyTreeView.Create(nil); with MyTree do begin Parent := Self; Height := 100; Width := 100; Left := 30; Top := 30; Node := Items.Add(nil,'Item'); Items.AddChild(Node,'Item'); Node := Items.AddChild(Node,'Item'); end; end; end. 结果: 解决方法
后Vista中的树视图有两个不同的主题.您想要避免的主题称为资源管理器主题.您想使用标准主题.控件必须选择加入以获取资源管理器主题.它通过
SetWindowTheme API实现. VCL树视图控件将其调用为opt-in.它在CreateWnd方法的末尾执行此操作.
您可以通过撤消这样的更改来恢复到标准主题: type TMyTreeView = class(TTreeView) protected procedure CreateWnd; override; end; procedure TMyTreeView.CreateWnd; begin inherited; if StyleServices.Enabled and TOSVersion.Check(6) and StyleServices.IsSystemStyle then SetWindowTheme(Handle,nil); end; 此代码是为XE2编写的.如果你有一个早期的Delphi,那么我认为你想要这样: if ThemeServices.Enabled and CheckWin32Version(6,nil); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |