想在树里面加入,多选框,,有谁做过这个帮忙指教,,,

解决方案 »

  1.   

    Delphi好像没有这个功能,但可以用图片实现。
      

  2.   

    推荐用第三方控件!! 如rxLib           or dx
      

  3.   

    在 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;
      

  4.   

    这个实现起来还是和一个ImageList连一下,里面就放两个图片,一个打勾,另一个不打,就好了,每次Index换一下,最简单了