学习 TTreeView [16] - 给 TTreeView 添加复选框 (回复 "丁永其" 的问题)

问题来源: http://www.cnblogs.com/del/archive/2008/05/15/1114450.html#1199402

本例效果图:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses CommCtrl;

//让 TreeView 带有复选框
procedure TForm1.FormCreate(Sender: TObject);
var
  H: HWND;
begin
  H := TreeView1.Handle;
  SetWindowLong(H, GWL_STYLE, GetWindowLong(H, GWL_STYLE) or TVS_CHECKBOXES);

  {下面的代码只是给 TreeView 添加内容}
  with TreeView1 do
  begin
    Align := alLeft;
    Items.Add(nil, 'AAA');
    Items.Add(nil, 'BBB');
    Items.Add(nil, 'CCC');
    Items.AddChild(Items[2], '111');
    Items.AddChild(Items[2], '222');
    Items.AddChild(Items[2], '333');
  end;
end;

//列举带有复选框的项
procedure TForm1.Button1Click(Sender: TObject);
var
  Node: TTreeNode;
  TVI: TTVItem;
begin
  for Node in TreeView1.Items do
  begin
    TVI.mask := TVIF_STATE;
    TVI.hItem := Node.ItemId;
    TreeView_GetItem(TreeView1.Handle, TVI);
    if TVI.state and $2000 = $2000 then
      ShowMessage(Node.Text);
  end;
end;

//取消所有选中(这是后来补充的, 所以效果图上没有)
procedure TForm1.Button2Click(Sender: TObject);
var
  Node: TTreeNode;
  TVI: TTVItem;
begin
  for Node in TreeView1.Items do
  begin
    TVI.mask := TVIF_STATE;
    TVI.hItem := Node.ItemId;
    TVI.stateMask := TVIS_STATEIMAGEMASK;
    TVI.state := $2000 shr 1;
    TreeView_SetItem(TreeView1.Handle, TVI);
  end;
end;

//选中所有(这是后来补充的, 所以效果图上没有)
procedure TForm1.Button3Click(Sender: TObject);
var
  Node: TTreeNode;
  TVI: TTVItem;
begin
  for Node in TreeView1.Items do
  begin
    TVI.mask := TVIF_STATE;
    TVI.hItem := Node.ItemId;
    TVI.stateMask := TVIS_STATEIMAGEMASK;
    TVI.state := $2000;
    TreeView_SetItem(TreeView1.Handle, TVI);
  end;
end;

end.

posted on   癫狂编程  阅读(259)  评论(0编辑  收藏  举报

编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2017-08-18 Delphi导出数据的多种方法
2017-08-18 Delphi+DBGrid导出Excel
2017-08-18 delphi try except语句 和 try finally语句用法以及区别

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
好的代码像粥一样,都是用时间熬出来的
点击右上角即可分享
微信分享提示