关于treenode中data的使用问题(100分)

  • 主题发起人 主题发起人 hxning
  • 开始时间 开始时间
H

hxning

Unregistered / Unconfirmed
GUEST, unregistred user!
treenode的属性data,这是一个pointer,很多例程包括delphi本身的帮助都是
与一个record的指针相关在一起的.但是,按照帮助上说的pointer是可以指向任何
类型的.但是我曾经尝试定义一个指针指向一个类,并通过指针访问类实体中的信息,如下:
type
TAClass = class; //这里是一个类的定义
PPointer = ^TAClass; //定义指针类型
...
var
lpPointer: FPointer; //在某函数中定义一个指针类型变量
aClass: TAClass; //在某函数中定义一个类实体变量
begin
...
lpPointer = PPointer(aClass); //[red]在这里就已经发现虽然指针内的结构等同于类,但是内容却已面目全非了[/red]
treeview.items.addnodeobject(..., lpPointer); //试图把类的实体通过指针存放在treenode的data中
...
end

结果并非想象的结果,不知道是我程序有问题,还是指针不能这样使用呢?请各位高手指正,谢啦
 
new(lpPointer);//加這句
lpPointer = PPointer(aClass); //[red]在这里就已经发现虽然指针内的结构等同于类,但是内容却已面目全非了[/red]
下面這句改成如下:
treeview.items.addnodeobject(...,tobject(lpPointer));
//treeview.items.addnodeobject(..., lpPointer); //试图把类的实体通过指针存放在treenode的data中
給分啦老兄;
不行再找我
 
type
TAClass = class; //这里是一个类的定义
PPointer = ^TAClass; //定义指针类型
...
var
lpPointer: PPointer; //在某函数中定义一个指针类型变量 ****PPointer
aClass: TAClass; //在某函数中定义一个类实体变量
begin
New(lpPointer);
// 这里可以对lpPointer赋值
treeview.items.addnodeobject(..., Pointer(lpPointer));
...
end
 
怎么 pdb 你动作比我快呀,我写的时候还没看到你呢。 ;)

// 这里可以对lpPointer赋值


上面这一句应该是
//这里可以对lpPointer所指的存储单元赋值。
(是不是这么讲比较妥当?)
 
new(lpPointer);//加這句
//这句有问题:
//lpPointer = PPointer(aClass); //[red]在这里就已经发现虽然指针内的结构等同于类,但是内容却已面目全非了[/red]
lpPointer^ = aClass;
把指针指向aClass因为PPointer是指向TAClass类型的指针,
不过想不通为什么要转换,在Delphi中类就是一种指针,
你直接把aClass加到Data中去不就行了?
treeview.items.addnodeobject(...,aClass);
取出的时候,TAClass(TreeView.Items.Data)就可以了!
 
另外to pdb:
TreeNode Add的时候第三个参数不必转换成TObject,因为它本来就是Pointer类型的参数.
 
呵呵,明白啦,谢谢aizb的提点

coolingxyz 所说的方法好像不行,我试过,不过也可以给分啦
 
后退
顶部