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;