请问这样在treeview当中添加一个形如checkbox的控件并可以选中和不选

解决方案 »

  1.   

    在 TreeView 中添加一个 CheckBox
    可以用变通的手法。    TreeView 有 Images 属性不是吗?自己做三张小图片 : 全选中、部分选中、不选状态 ( 直接拍下 CheckBox 三种状态的图片在加工一下就可以了 ),然后在点击事件中根据具体情况设置 TTreeNodes 的 ImageIndex 就 OK 了。   如果嫌麻烦的话就去 Down 一个控件 ,其实有些控件也是这样做的 ,界面上你是看不出来的 .     :)**************Manan Patel <[email protected]>重载 TreeView 的 CreateParams:type  TCheckBoxTreeView = class(TTreeView)  protected    procedure CreateParams(var Params: TCreateParams); override;  end;
    procedure TCheckBoxTreeView.CreateParams(var Params: TCreateParams);begin  inherited;  Params.Style:=Params.Style or TVS_CHECKBOXES;  { TVS_CHECKBOXES declared in CommCtrl }end;
    如果要 Check 这个 CheckBox,可以用下面的代码 :function IsNodeChecked(Node :TTreeNode) :Boolean;const  TVIS_CHECKED = $2000;var  TvItem :TTVItem;begin  TvItem.Mask  := TVIF_STATE;  TvItem.hItem := Node.ItemId;  TreeView_GetItem(Node.TreeView.Handle, TvItem);  Result := (TvItem.State and TVIS_CHECKED) = TVIS_CHECKED;end;
    procedure SetNodeChecked(Node :TTreeNode; Checked :Boolean);const  TVIS_CHECKED = $2000;var  TvItem :TTVItem;begin  FillChar(TvItem, SizeOf(TvItem), 0);  with TvItem do begin    hItem     := Node.ItemId;    Mask      := TVIF_STATE;    StateMask := TVIS_STATEIMAGEMASK;    if Checked then      TvItem.State :=TVIS_CHECKED    else      TvItem.State :=TVIS_CHECKED shr 1;    TreeView_SetItem(Node.TreeView.Handle, TvItem);  end;end;可以做成事件和封装成一个类 :private OldState :Boolean;
    procedure Change(Node: TTreeNode); override;begin  inherited Change(Node);  OldState := IsNodeChecked(Node);end;
    procedure Click; override;var  NewState :Boolean;begin  inherited Click;  NewState := IsNodeChecked(Self.Selected);  if NewState = OldState then Exit;  if (NewState) and Assigned(OnNodeChecked) then OnNodeChecked()  else if (not NewState) and Assigned(OnNodeUnChecked) thenOnNodeUnChecked()
    // OnNodeChecked & OnNodeUnchecked will be events that you declareend;
      

  2.   

    别费劲了,人家早有写好的在卖了,不过可以免费用,上网搜去吧
    RZchecktree控件
    搜关键字:Raise 
    ^_^,这个控件包,可以给你带来很多的好处,
    哈哈哈哈,试试吧。保你满意,
    把分送过来吧