由于Delphi自带的TTreeView里并没有复选框的功能。因此,必须重新设计控件。
在设计时因TTreeView里有一个StateIndex和StateImages,而纵观TTreeView的代码可以知道它只是发布了一下TCustomTreeView定义并实现好的属性和方法而已。因此我们也选择TCustomTreeView为TCheckTree控件的祖先类。
    重要的实现技术为:
procedure TCheckTree.WMPaint( var Msg: TWMPaint );
var
  I: Integer;
begin
  for I := 0 to Items.Count - 1 do
    begin                           
    if not(Items[ I ].StateIndex in [Ord(csUnknown)..Ord(csPartiallyChecked)]) then
      Items[ I ].StateIndex := Ord(csUnchecked)       //这里我修改了
  end;
  inherited;
end;
function TCheckTree.GetItemState( Node:TTreeNode ): TCheckCheckState;
begin
  Result := TCheckCheckState( Node.StateIndex );
end;
procedure TCheckTree.SetItemState( Node:TTreeNode; Value: TCheckCheckState );
begin
  if TCheckCheckState( Node.StateIndex ) <> Value then
    ChangeNodeCheckState( Node, Value );
end;
procedure TCheckTree.StateChange( Node: TTreeNode; NewState: TCheckCheckState );
begin
  if Assigned( FOnStateChange ) then
    FOnStateChange( Self, Node, NewState );
end;上面说的这些是在哪修改,具体实施办法,刚开始学,谢谢各位了!!!