非常的简单
首先当然是要在Form加一个TTreeView控件咯。:)
然后在单元的公共uses部分加一个Commctrl单元。
好,接下来要做三件事,
1、在FormCreate事件中
加入如下代码
var
dw: DWORD;
begin
dw := GetWindowLong( TreeView1.Handle, GWL_STYLE);
dw := dw or TVS_CHECKBOXES;
SetWindowLong(TreeView1.Handle, GWL_STYLE , dw);
end;
2、加两个函数
function SetTreeViewNodeChecked(ATreeView: TTreeView;
ATreeNode: TTreeNode; Checked: Boolean): Boolean;
function GetTreeViewNodeChecked(ATreeView: TTreeView;
ATreeNode: TTreeNode): Boolean;
第一个用来设置一个节点的是否被Check
第二个用来取得一个节点的Check状态。
3、就是这两个地实现代码了。
function SetTreeViewNodeChecked(ATreeView: TTreeView;
ATreeNode: TTreeNode; Checked: Boolean): Boolean;
var
tvItem: TTVItem;
begin
tvItem.mask := TVIF_HANDLE or TVIF_STATE;
tvItem.hItem := ATreeNode.ItemId;
tvItem.stateMask := TVIS_STATEIMAGEMASK;
(*Image 1 in the tree-view check box image list is the
unchecked box. Image 2 is the checked box.*)
if Checked then
tvItem.state := IndexToStateImageMask(2) else
tvItem.state := IndexToStateImageMask(1);
Result := TreeView_SetItem(ATreeView.Handle, tvItem);
end;
function GetTreeViewNodeChecked(ATreeView: TTreeView;
ATreeNode: TTreeNode): Boolean;
var
tvItem: TTVItem;
begin
// Prepare to receive the desired information.
tvItem.mask := TVIF_HANDLE or TVIF_STATE;
tvItem.hItem := ATreeNode.ItemId;
tvItem.stateMask := TVIS_STATEIMAGEMASK;
// Request the information.
TreeView_GetItem(ATreeView.Handle, tvItem);
// Return zero if it's not checked, or nonzero otherwise.
Result := Boolean((tvItem.state shr 12) - 1);
end;
搞定咯!!!!是不是很简单啊?
当然这个只是用来实现Checked 和 UnChecked,是Windows标准TreeView规定的。
如果要实现Grey的话,还要该一下哦。
呼~~~~~~~~~~~~~~*o*忙了一下午终于搞出来了。
大家有什么好方法快拿出来,不要私藏哦。
哈哈哈哈哈~~~~~~~~~~~~~~~
首先当然是要在Form加一个TTreeView控件咯。:)
然后在单元的公共uses部分加一个Commctrl单元。
好,接下来要做三件事,
1、在FormCreate事件中
加入如下代码
var
dw: DWORD;
begin
dw := GetWindowLong( TreeView1.Handle, GWL_STYLE);
dw := dw or TVS_CHECKBOXES;
SetWindowLong(TreeView1.Handle, GWL_STYLE , dw);
end;
2、加两个函数
function SetTreeViewNodeChecked(ATreeView: TTreeView;
ATreeNode: TTreeNode; Checked: Boolean): Boolean;
function GetTreeViewNodeChecked(ATreeView: TTreeView;
ATreeNode: TTreeNode): Boolean;
第一个用来设置一个节点的是否被Check
第二个用来取得一个节点的Check状态。
3、就是这两个地实现代码了。
function SetTreeViewNodeChecked(ATreeView: TTreeView;
ATreeNode: TTreeNode; Checked: Boolean): Boolean;
var
tvItem: TTVItem;
begin
tvItem.mask := TVIF_HANDLE or TVIF_STATE;
tvItem.hItem := ATreeNode.ItemId;
tvItem.stateMask := TVIS_STATEIMAGEMASK;
(*Image 1 in the tree-view check box image list is the
unchecked box. Image 2 is the checked box.*)
if Checked then
tvItem.state := IndexToStateImageMask(2) else
tvItem.state := IndexToStateImageMask(1);
Result := TreeView_SetItem(ATreeView.Handle, tvItem);
end;
function GetTreeViewNodeChecked(ATreeView: TTreeView;
ATreeNode: TTreeNode): Boolean;
var
tvItem: TTVItem;
begin
// Prepare to receive the desired information.
tvItem.mask := TVIF_HANDLE or TVIF_STATE;
tvItem.hItem := ATreeNode.ItemId;
tvItem.stateMask := TVIS_STATEIMAGEMASK;
// Request the information.
TreeView_GetItem(ATreeView.Handle, tvItem);
// Return zero if it's not checked, or nonzero otherwise.
Result := Boolean((tvItem.state shr 12) - 1);
end;
搞定咯!!!!是不是很简单啊?
当然这个只是用来实现Checked 和 UnChecked,是Windows标准TreeView规定的。
如果要实现Grey的话,还要该一下哦。
呼~~~~~~~~~~~~~~*o*忙了一下午终于搞出来了。
大家有什么好方法快拿出来,不要私藏哦。
哈哈哈哈哈~~~~~~~~~~~~~~~
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货