更改展开和折叠图像?
是否有可能使用标准TTreeView来更改展开和折叠图像?
我不是指节点图像,而是指有孩子的节点旁边的小箭头,如下所示:
理想情况下,我希望箭头显示为+和 - 符号,就像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');
Items.AddChild(Node, 'Item');
end;
end;
end.
结果:
Vista后Windows中的树视图有两个可选主题。 您想要避免的主题被称为资源管理器主题。 你想使用标准主题。 控件必须选择加入以获取资源管理器主题。 它通过SetWindowTheme
API来完成。 VCL树视图控件调用它来选择加入。 它在CreateWnd
方法的末尾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, nil);
end;
此代码是为XE2编写的。 如果你有一个更早的Delphi,那么我认为你需要这样的:
if ThemeServices.Enabled and CheckWin32Version(6, 0) then
SetWindowTheme(Handle, nil, nil);
我除了戴维斯的回答。 将下面的代码放在一些额外的单位中,并将其添加到ComCtrls单位之后的用途中。 这样,您可以使用标准的TTreeView并随时更改主题。 或者如果你喜欢,可以在你自己的包里注册。
type
TTreeView = class(ComCtrls.TTreeView)
private
procedure SetExplorerTheme(const Value: Boolean);
public
property ExplorerTheme: Boolean write SetExplorerTheme;
end;
procedure TTreeView.SetExplorerTheme(const Value: Boolean);
begin
if ThemeServices.ThemesEnabled and CheckWin32Version(6, 0) then
if Value then
SetWindowTheme(Handle, 'Explorer', nil)
else
SetWindowTheme(Handle, nil, nil);
end;
在没有Delphi版本的情况下,您也可以使用类助手来避免额外的继承。
链接地址: http://www.djcxy.com/p/34985.html