TreeViewNode1.data的指针内容为3,怎么给一个整形的数?用igroup_id :=@(treeview1.selected.data);不对呀?我对指针不是很明白..
解决方案 »
- TXmlDocument控件使用问题
- 用dataset提交数据没有成功!
- 想请教一个关于MDI的问题
- ~~~各位高手请帮帮忙~~~分不够可以再加~~~
- 急急急!!客户端主从表关系的两个clientdataset,如果从表关联的主表记录在clientdataset提交之前被修改或删除了怎么办!
- 大家给我介绍一下学习Delphi的好网站?
- [求助]用supermap实现最佳路径分析
- 帮我看看,怎么样才能让那个progressbar能正确反应进度
- 三层构架中 AS 端如何主动发送信息到 Client 端
- 请求帮忙,我给20分
- 百分求教开发环境中如何快速转到VCL源码中类或者数据类型的定义
- 如何将生成的EXE的图标换成自定义的?
PMyRecord = ^MyRecord;
MyRecord = record
ID : integer;
name:string;
ParentID : integer;
end;//end of recordvar
p : PMyRecord;
begin
...
new(p);
p.ID := ...;
p.name := ...;
p.ParentID := ..;
TreeView1.Items.AddChildObject(Node,p.name,p);
//dispose(p);//一定要去掉这条语句,不然的话,Treeview中的Data也被dispose掉了。
...
end;//use PMyRecord(Treeview1.Selected.Data).name
我是这样往TreeView中添加的:
leaf_node:=treeview1.Items.addchild(Anode,'aa')
leaf_node.data:= Pchar(id);
Node: TTreeNode;
id: integer;
begin
id := 123;
Node := TreeView1.Items.AddChild(TreeView1.Selected, 'aa');
Node.Data := @id;
showmessage(inttostr(integer(Node.Data^)));
end;
var
Node: TTreeNode;
id: string;
begin
id := 'abcdefg';
Node := TreeView1.Items.AddChild(TreeView1.Selected, 'aa');
Node.Data := @id;
showmessage(string(Node.Data^));
end;
showmessage(string(treeview1.selected.Data^));
Node: TTreeNode;
id: integer;
begin
id := 123;
Node := TreeView1.Items.AddChild(TreeView1.Selected, 'aa');
Node.Data := @id;
//你添加的时候就有问题leaf_node.data:= Pchar(id);
showmessage(inttostr(integer(Node.Data^)));
//这里不就是取Data是什么!自己没看明白之前不要瞎说!
end
treeview1.selected.data:=Pointer(k); // k=3;相反操作:
K:=Integer(treeview1.selected.data); // 之后 k=3;对data赋复杂数据就需用记录了
赋整形值用:
treeview1.selected.data:=Pointer(k);
赋整形值用:
treeview1.selected.data:=Pointer(k);已经可以了,但我还想问一下,为什么赋data值时用
Pchar(k) 和 @k 就不对呢?
1、Pchar(k)也行(k为整形),和Pointer(k) 一样操作 把K强制转换成Pointer类型
2、@k是k的地址直接赋给Data,反过来赋值只需k=Integer(TreeView1.Selected.data)^),但这个最好别用,给Data赋值时k可能为局部变量,再给k赋值时Data所对应的地址所指向的值可能改变,用k=Integer(TreeView1.Selected.data)^)得出的值就完全变样,而1只是强制转换,其所对应的地址有效无效都无所谓