主题:请教:treeview的复选框
lanjping
[专家分:270] 发布于 2006-11-29 08:56:00
我用下面的程序,想用treeview做有复选框的树型控件,但实现的效果是前面不是复选狂,而是空白,请教该怎么改,谢谢
procedure TForm1.Button1Click(Sender: TObject);
var node1,subnode1: TTreeNode;
begin
imagelist1.ResourceLoad(rtbitmap,'smallimages',clteal);
node1:=Treeview1.Items.Add(nil,'根');
node1.ImageIndex:=0;
node1.SelectedIndex:=0;
subnode1:=TreeView1.Items.AddChildObject(node1,'结点1', nil);
subnode1.ImageIndex:=1;
subnode1.SelectedIndex:=2;
end;
回复列表 (共5个回复)
沙发
长尾兔 [专家分:3630] 发布于 2006-11-29 13:43:00
在form的oncreate事件里写:
SetWindowLong(TreeView1.Handle, GWL_STYLE, GetWindowLong(TreeView1.Handle, GWL_STYLE) or $00000100);
板凳
lanjping [专家分:270] 发布于 2007-01-25 12:26:00
那怎么样将在选中复选框时,关联到复选框的标题,可以知道选中的是什么内容???
谢谢
3 楼
5cai [专家分:90] 发布于 2007-03-03 16:04:00
不需要这样, 改用ListView可以啊
4 楼
5cai [专家分:90] 发布于 2007-03-03 16:06:00
网上有改TreeView为有复选框的代码!
文转自csdn,原作: BCB(天下三分明月夜,二分无赖是扬州)
void __fastcall TForm1::FormCreate(TObject *Sender)
{
SetWindowLong(TreeView1->Handle,GWL_STYLE,
GetWindowLong(TreeView1->Handle,GWL_STYLE) | TVS_CHECKBOXES);
}
//判断一个节点是否处于Checked状态
bool GetNodeChecked(TTreeNode *ANode)
{
TVITEM tvItem;
tvItem.mask = TVIF_HANDLE | TVIF_STATE;
tvItem.hItem = ANode->ItemId;
tvItem.stateMask = TVIS_STATEIMAGEMASK;
TreeView_GetItem(ANode->TreeView->Handle, &tvItem);
return ((BOOL)(tvItem.state >> 12) -1);
}
//设置一个节点为Checked状态或者Unchecked状态,由参数IsSetToChecked来确定
void SetNodeChecked(TTreeNode *ANode,bool IsSetToChecked)
{
TVITEM tvItem;
tvItem.mask = TVIF_HANDLE | TVIF_STATE;
tvItem.hItem = ANode->ItemId;
tvItem.stateMask = TVIS_STATEIMAGEMASK;
tvItem.state = INDEXTOSTATEIMAGEMASK(IsSetToChecked?2:1);
TreeView_SetItem(ANode->TreeView->Handle, &tvItem);
}
void SetChildChecked(TTreeNode *ANode,bool yn)
{ // 把它的子孙都置成一样
int count=ANode->Count;
SetNodeChecked(ANode,yn);
if (count!=0)
for (int i=0;i<count;i++) // 递归
SetChildChecked(ANode->Item[i],yn);
}
// TTreeNode *ClickNode; // 保存点中的节点
// bool NodeChecked; // 保存点中的节点checked
void __fastcall TForm1::TreeView1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
ClickNode=TreeView1->GetNodeAt(X,Y);
if (ClickNode!=NULL) // 保存原节点的Checked值
NodeChecked=GetNodeChecked(ClickNode);
}
void __fastcall TForm1::TreeView1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if (ClickNode!=NULL)
if (GetNodeChecked(ClickNode)!=NodeChecked)
{ // 把它的子孙都置成一样
NodeChecked=!NodeChecked; // 更新它
SetChildChecked(ClickNode,NodeChecked);
}
}
5 楼
5cai [专家分:90] 发布于 2007-03-03 16:06:00
我从网上抄的
我来回复