带 checkBox 多选框的 Treeview 控件

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-23 11:44   32   0

{ *********************************************************************** }
{ }
{ 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.

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP