大哥们救命啊如何在TREEview控制中出现复选框 就像是金山毒霸中用于选择磁盘目录 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自己从TREEview继承,写一个组件,加入Check功能。 呵其实你通过图片也可以实现的,设置节点的选中图片与未选中图片为CheckBox的两种状态的图片不就OK了!简单又实用! 重载TreeView的CreateParams:typeTCheckBoxTreeView = class(TTreeView)protectedprocedure CreateParams(var Params: TCreateParams); override;end;procedure TCheckBoxTreeView.CreateParams(var Params: TCreateParams);begininherited;Params.Style:=Params.Style or TVS_CHECKBOXES;{ TVS_CHECKBOXES declared in CommCtrl }end;如果要Check这个CheckBox,可以用下面的代码:function IsNodeChecked(Node :TTreeNode) :Boolean;constTVIS_CHECKED = $2000;varTvItem :TTVItem;beginTvItem.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);constTVIS_CHECKED = $2000;varTvItem :TTVItem;beginFillChar(TvItem, SizeOf(TvItem), 0);with TvItem do beginhItem := Node.ItemId;Mask := TVIF_STATE;StateMask := TVIS_STATEIMAGEMASK;if Checked thenTvItem.State :=TVIS_CHECKEDelseTvItem.State :=TVIS_CHECKED shr 1;TreeView_SetItem(Node.TreeView.Handle, TvItem);end;end;可以做成事件和封装成一个类:private OldState :Boolean;procedure Change(Node: TTreeNode); override;begininherited Change(Node);OldState := IsNodeChecked(Node);end;procedure Click; override;varNewState :Boolean;begininherited 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; ----我有源码,可以发给你! 如何把--------------字符串转为同名的组件属性? 会delphi的帮个忙,帮我看看以下代码 delphi 增删改查写在一个类里面,增删改可以,查询没反应 如何让前一个窗体挡住后一个窗体?求教高手。 动态创建的TABSHEET和STRINGGRID,怎么样判别该窗体内有该控件,怎样释放? 求购即时通软件(源码) 简单的问题搜索不到,只有问大家了:怎样用ADO把access数据库中表的数据导入到MS SQL数据库中的表中? 工资表里的计算问题 很急 很急 大分 怎么样来控制声道,如左声道,右声道,立体声? 请教:一个小问题 动态添加的字段能否在第一个??? GIS做烦了,我想到北京去做MIS系统,不知道有没有人要
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货