Поскольку до чекбокса добраться стандартными средствами не удалось, придётся немного извратиться в рантайме и для начала, при инициализации компонента нужно добавить строчку
Код:
...
CustomTreeView.OnMouseDown:= CTVMouseDown;
...
ну и сама процедура жима мышки
Код:
procedure TMainForm.CTVMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
ctv: TCustomTreeView absolute Sender;
Node: TTreeNode;
flg: boolean;
begin
if ctv.AutoCheck then
begin
Node:= ctv.GetNodeAt(X, Y);
if (Node <> nil) and
(Node.Parent = nil) and // Если Parent = nil то это корневой элемент
(ctv.GetHitTestInfoAt(X, Y) = [htOnItem, htOnStateIcon]) then
begin
flg:= ctv.GetChecked(Node);
Node:= Node.getFirstChild;
while Assigned(Node) do
begin
ctv.SetChecked(Node, flg);
Node:= Node.GetNextChild(Node);
end;
end;
end;
end;
конечно, работает немного не так как должно быть (повторюсь, не удалось достучаться до галки), но очень похоже
З.Ы. Достучался всё же до птисы, с помощью
GetHitTestInfoAt, теперь точно похоже
Вложенность идёт на два уровня, если нужно "глубже" то тогда крутите цикл
while ещё дополнительно, или вынесите его в рекурсивную внешнюю функцию