treeview的问题 请问这样在treeview当中添加一个形如checkbox的控件并可以选中和不选 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在 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; 别费劲了,人家早有写好的在卖了,不过可以免费用,上网搜去吧RZchecktree控件搜关键字:Raise ^_^,这个控件包,可以给你带来很多的好处,哈哈哈哈,试试吧。保你满意,把分送过来吧 请问如果如何获取系统中安装了什么MIDI软波表呢? 关于delphi7窗体font属性问题 一个简单的delhpi 问题﹐请进来看看。。。 工作郁闷 快!快!快! 怎样终止外部程序 新年快乐,礼物及分数大放送! 请问db格式的文件如何在delphi转换成dbf格式 很简单的问题…… 我做的多页浏览器的改进。。。 在线寻求delphi‘翻译’喽 专家debug!
可以用变通的手法。 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;
RZchecktree控件
搜关键字:Raise
^_^,这个控件包,可以给你带来很多的好处,
哈哈哈哈,试试吧。保你满意,
把分送过来吧