如何只使treeview的叶子节点显示选择框(checkbox功能),而所有的有子节点的父节点均不带选择框。
以下是我的代码,已实现了所有节点均带有选择框,怎样消除父节点的选择框呢,请大家指教。
procedure Tfrm_index.FormCreate(Sender: TObject);
var
  node,subnode:TTreeNode;
  dw: DWORD;
begin
  BuildTree(TreeView1,5);
  dw := GetWindowLong( TreeView1.Handle, GWL_STYLE);  
  dw := dw or TVS_CHECKBOXES;                           
  SetWindowLong(TreeView1.Handle, GWL_STYLE , dw);     
end;procedure Tfrm_index.TreeView1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  Node : TTreeNode;
begin
  inherited;
  Node := TreeView1.GetNodeAt(X, Y);
  if Node = nil then exit;
  TreeView1.Selected := Node;
end;
function SetTreeViewNodeChecked(ATreeView: TTreeView;
  ATreeNode: TTreeNode; Checked: Boolean): Boolean;        //设置一个节点的是否被Check
var
  tvItem: TTVItem;
begin
  tvItem.mask := TVIF_HANDLE or TVIF_STATE;
  tvItem.hItem := ATreeNode.ItemId;
  tvItem.stateMask := TVIS_STATEIMAGEMASK;  (*Image 1 in the tree-view check box image list is the
  unchecked box. Image 2 is the checked box.*)
  if Checked then
    tvItem.state := IndexToStateImageMask(1) else
    tvItem.state := IndexToStateImageMask(0);
  
  Result := TreeView_SetItem(ATreeView.Handle, tvItem); 
end; 
  
function GetTreeViewNodeChecked(ATreeView: TTreeView;
  ATreeNode: TTreeNode): Boolean;                 //取得一个节点的Check状态
var
  tvItem: TTVItem; 
begin
  tvItem.mask := TVIF_HANDLE or TVIF_STATE;
  tvItem.hItem := ATreeNode.ItemId;
  tvItem.stateMask := TVIS_STATEIMAGEMASK;
  TreeView_GetItem(ATreeView.Handle, tvItem);
  Result := Boolean((tvItem.state shr 12) - 1);
end;procedure Tfrm_index.BuildTree(TreeView1: TTreeView;Level:integer=MaxInt);
var
  DS :TADODataSet;
  ID,PID : string;
  Pnode : TTreeNode;
  NodeData : PDepart;
begin
  DS := TADODataSet.Create(nil);  DS.Recordset := DataM.ADOConn_indu.Execute('select id,ziduan,code,F_parentid from T_main ');
 TreeView1.Items.Clear;
  try
    DS.Filtered := false;
    DS.Filter := 'id='+ QuotedStr('0')  ;
    DS.Filtered := true;
  except
  end;  if DS.RecordCount <> 1 then
  begin
    FreeAndNil(DS);
    exit;
  end;
  PID := DS.FieldByName('F_parentid').AsString;
  ID := DS.FieldByName('ID').AsString;
  new(NodeData);
  NodeData^.ID := ID;
  NodeData^.Code:= DS['code'];
  TreeView1.Items.AddObject(nil,DS['ziduan'],NodeData);  PNode := TreeView1.Items[0];  while (PNode <> nil) do
  begin
    PID := PDepart(PNode.Data)^.ID;
    if PNode.Level < Level-1 then
    begin
      DS.Filtered := false;
      DS.Filter := 'F_parentid='+ QuotedStr(PID);
      DS.Filtered := true;
      while not DS.Eof do
      begin
        ID := DS.FieldByName('ID').AsString;
        new(NodeData);
        NodeData^.ID := ID;
        NodeData^.Code:= DS['code'];
        TreeView1.Items.AddChildObject(Pnode,DS['ziduan'],NodeData);
        DS.Next;
      end;
    end;
    PNode := PNode.GetNext;
  end;
  freeandnil(DS);
end;