想在树里面加入,多选框,,有谁做过这个帮忙指教,,,
解决方案 »
- 做一个Web Service小程序,出现错误:Internal Server Error/ HTTP status code: 500 /HTTP error message: 系统找不到指定的路径。
- 打开文本文档的问题,请大侠帮忙!
- 怎么判断SQL中已存在一个数据库了,如,已存在一个叫T1的数据库了.
- 数据提供程序或其他服务返回 E_FAIL 状体 ???高手帮忙啊,好几天了还解决不了阿,着急啊
- 家中弟弟被人家打成轻伤,回家处理近四日未果,觉得自己好孤独...
- 请问哪有dephi的下载地址
- 能不能修改delphi的标准控件?
- 怎样把不同的控件作为同一个参数在函数中调用。
- 做一个商场MIS包括硬件系统,哪位高手能给一个解决方案?(高分相送)
- DbGrid的OnDrawColumnCell事件?
- 大家进来看看,我写了一个简单的带一个参数的存储过程,现在要用ADOStoredProc调用这个过程
- 合并题库的问题
可以用变通的手法。 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;