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