带 checkBox 多选框的 Treeview 控件

{ *********************************************************************** }
{                                                                                                                        }
{ Description: Delphi / Control Class                                                        }
{              Treeview  with checkbox                                                              }
{ Authour:     蓝马                                                                                           }
{ QQ:          13575437[蓝马]                                                                         }
{ Modified:    Dingrj                                                                                        }
{ Create Date: 2006-03-06                                                                          }
{ QQ:          6457428                                                                                      }
{ Version:     V 1.1                                                                                          }
{ Copyright (c) 2005-2006 Macro Softwrare Corporation                      }
{                                                                                                                        }
{ *********************************************************************** }
unit UnitCheckTreeview;

interface

uses
  Windows,Messages,SysUtils,Classes,Controls,Commctrl,ComCtrls;

const
  TVIS_CHECKED=$2000;
type
  TCheckTreeview=class(TTreeView)
  private
    {Privatedeclarations}
  protected
    {Protecteddeclarations}
    procedure CreateParams(var Params: TCreateParams); override;
  public
  {Publicdeclarations}
    function IsChecked(Node: TTreeNode): Boolean;
    procedure SetChecked(Node: TTreeNode; Checked: Boolean);

    procedure SetAllChecked(Checked: Boolean);  //added by Dingrj 2006-03-08
    //procedure SetAllUnChecked(Node: TTreeNode; Checked: Boolean);
  published
    {Publisheddeclarations}
  end;

  procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Standard',[TCheckTreeview]);
end;

{TCheckTreeview}

procedure TCheckTreeview.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.Style := Params.Style or TVS_CHECKBOXES;
end;

function TCheckTreeview.IsChecked(Node: TTreeNode):Boolean;
var
  TvItem: TTVItem;
begin
  TvItem.Mask := TVIF_STATE;
  TvItem.hItem := Node.ItemId;
  TreeView_GetItem(Node.TreeView.Handle,TvItem);
  Result := (TvItem.State and TVIS_CHECKED) = TVIS_CHECKED;
end;

procedure TCheckTreeview.SetAllChecked( Checked: Boolean);
var
  i:Integer;
begin
  for i:=0 to Self.Items.Count -1 do
    SetChecked(Self.Items[i],Checked);

end;


procedure TCheckTreeview.SetChecked(Node: TTreeNode; Checked: Boolean);
var
  TvItem: TTVItem;
begin
  FillChar(TvItem,SizeOf(TvItem),0);
  with TvItem do
  begin
    hItem := Node.ItemId;
    Mask := TVIF_STATE;
    StateMask := TVIS_STATEIMAGEMASK;
  if Checked then
    TvItem.State := TVIS_CHECKED
  else
    TvItem.State := TVIS_CHECKED shr 1;
    TreeView_SetItem(Node.TreeView.Handle,TvItem);
  end;
end;

end.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值