delphi – TTreeView – 更改展开和折叠图像?

前端之家收集整理的这篇文章主要介绍了delphi – TTreeView – 更改展开和折叠图像?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以使用标准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);

猜你在找的Delphi相关文章