在TreeView组件中怎么实现类似CheckBox的功能。在DbGrid组件中怎么实现CheckBox的功能。
也就是每行中显示类似TCheckBox的功能,如果数据库中有Boolean类型的数据,
DbGrid中也应随着数据的变化而显示选取或者未选取的状态。
也就是每行中显示类似TCheckBox的功能,如果数据库中有Boolean类型的数据,
DbGrid中也应随着数据的变化而显示选取或者未选取的状态。
解决方案 »
- 请教个问题,腾讯聊天是udp还是TCP?
- Dbgrideh displayformat 显示问题
- 大家都来看看chin_chen的真实面目!
- 一個三方控件!!!!
- 我在Form 的 OnPaint事件响应当中 为菜单栏和工具栏 绘制背景,但是发现刷新速度太慢,一旦被遮挡,要等好久才能被重新绘制,怎样使窗口
- 怎样才能将3DMAX做的动画嵌入到DELPHI7中,各位求救啦!?
- 如何调用keypress事件?
- 用ACCESS做后台数据库,如何在程序中将一个表的数据导出到新的ACCESS数据库中,新数据库没有这个表时自动创建,有这个表时导出不重复的记
- 由x mod y=z如何根据z,y计算出x呢?100分!!!
- 如何得到动态数组的实际大小, Length好像不行?
- TreeView 中如何加载checkbox
- 高手请进,关于自定义控件组件编辑器的问题。
在 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;
dbgrid中加选择框也可以不要重绘的,把combox与dbgrid分别处理也可以达到这样的效果。