procedure TCheckTreeNode.SetChecked(const Value: Boolean);
function TreeNodeSetChecked(mTreeNode: TCheckTreeNode; mChecked: Boolean): Boolean;
var
vTVItem: TTVItem;
begin
Result := False;
if not Assigned(mTreeNode) then Exit;
FillChar(vTVItem, SizeOf(vTVItem), 0);
with vTVItem do
begin
hItem := mTreeNode.ItemId;
mask := TVIF_STATE;
StateMask := TVIS_STATEIMAGEMASK;
State := IndexToStateImageMask(Succ(Ord(mChecked)));
Result := TreeView_SetItem(mTreeNode.Handle, vTVItem);
end;
end;
procedure pSelect(mTreeNode: TCheckTreeNode; mChecked: Boolean);
var
I: Integer;
begin
for I := 0 to mTreeNode.Count - 1 do
TCheckTreeNode(mTreeNode[I]).Checked := mChecked;
end;
procedure pSelectYes(mTreeNode: TCheckTreeNode);
begin
if Assigned(mTreeNode.Parent) then
if not TCheckTreeNode(mTreeNode.Parent).Checked then
begin
TreeNodeSetChecked(TCheckTreeNode(mTreeNode.Parent), True);
TCheckTreeNode(mTreeNode.Parent).FChecked := True;
end;
end;
procedure pSelectNo(mTreeNode: TCheckTreeNode);
var
I: Integer;
begin
if Assigned(mTreeNode.Parent) and TCheckTreeNode(mTreeNode.Parent).Checked then
begin
for I := 0 to mTreeNode.Parent.Count - 1 do
if TCheckTreeNode(mTreeNode.Parent[I]).Checked then Exit;
TCheckTreeNode(mTreeNode.Parent).Checked := False;
end;
end;
begin
FChecked := Value;
TreeNodeSetChecked(Self, Value);
pSelect(Self, Value);
if Value
then pSelectYes(Self)
else pSelectNo(Self);
end;
procedure TCheckTreeView.CreateCheckNodeClass(Sender: TCustomTreeView;
var NodeClass: TTreeNodeClass);
begin
NodeClass := TCheckTreeNode;
end;