Показать сообщение отдельно
  #2  
Старый 09.04.2014, 02:03
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Поскольку до чекбокса добраться стандартными средствами не удалось, придётся немного извратиться в рантайме и для начала, при инициализации компонента нужно добавить строчку
Код:
...
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 ещё дополнительно, или вынесите его в рекурсивную внешнюю функцию
Ответить с цитированием