//虚拟树研究-CheckBox初步判断只能在第一列 procedure TWindowsXPForm.XPTreeInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates); var Data: PEntry; begin if ParentNode = nil then //若为父节点 就位CheckBox样式 begin Include(InitialStates, ivsHasChildren); Data := Sender.GetNodeData(Node); Data^ := TreeEntries[Node.Index mod 18]; Data.Size := Random(100000); Node.CheckType := ctTriStateCheckBox; //ctButton;//ctCheckBox; //默认为第一列 end else Node.CheckType := ctRadioButton; //不是父节点时就 是radio的样式 end; procedure TGeneralForm.VST2InitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates); const LevelToCheckType: array[0..5] of TCheckType = ( ctButton, ctRadioButton, ctTriStateCheckBox, ctTriStateCheckBox, ctCheckBox, ctNone ); var Data: PNodeData2; begin Node.CheckType := LevelToCheckType[Data.Level]; Sender.CheckState[Node] := csCheckedNormal;