主要的问题是vt树在onGetText时遇到了问题我的主要的数据结构如下
a=record
b:integer;
caption:shortstring;
end
pa=^a;mynode=record
nodetype:integer;
pdata:pa;
end;
pmynode=^mynode;
在使用时,我先用addchild获得一个指针,然后根据这个指针对数据进行初始化
例如
node1.nodetype:=1;
node1.pdata.a:=1;
node1.pata.caption:='adfasdfaf';在onGetText事件中
我是这么写的
celltext:=pmynode(sender.GetNodeData(node)).pdata.caption;但是程序在实际运行中一直提示内存访问出错。
请问熟悉vt树的,这是怎么回事?主要问题出在哪??还是说ongettext在addchild后马上就调用了,而此时我还没有初始化pdata数据?
a=record
b:integer;
caption:shortstring;
end
pa=^a;mynode=record
nodetype:integer;
pdata:pa;
end;
pmynode=^mynode;
在使用时,我先用addchild获得一个指针,然后根据这个指针对数据进行初始化
例如
node1.nodetype:=1;
node1.pdata.a:=1;
node1.pata.caption:='adfasdfaf';在onGetText事件中
我是这么写的
celltext:=pmynode(sender.GetNodeData(node)).pdata.caption;但是程序在实际运行中一直提示内存访问出错。
请问熟悉vt树的,这是怎么回事?主要问题出在哪??还是说ongettext在addchild后马上就调用了,而此时我还没有初始化pdata数据?
解决方案 »
- 关于delphi中self和C++中this区别的问题--高手指点一下
- char数组转String,简体中文平台OK,繁体中文平台乱码,请大侠帮忙
- ■■■怎样才能在屏幕上以透明的异型窗体的形式实现OSD(屏幕上的提示,背景是透明的)显示?(就是说用窗体模拟OSD显示)
- 取到系统目录以后操作怎么字符串怎么不可以操作?详细请看。。。。
- 急救:关于delphi 6中的重定向问题
- 紧急求助
- Delphi对字符#0如何处理
- 怎么样在程序中用flash控件播放的动画全屏啊!(up有分)
- 怎样去掉currency类型字段的人民币符号??
- 在Delphi中怎样用SQL查询语句对子表求和?
- 自定义gina,卡在'正在加载个人设置...'窗口
- 帮忙看看下面代码什么意思?
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, VirtualTrees, StdCtrls;type
MyRec=record
b:integer;
caption:shortstring;
end;
pa=^MyRec;
TForm1 = class(TForm)
VirtualStringTree1: TVirtualStringTree;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure VirtualStringTree1FreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
procedure Button1Click(Sender: TObject);
procedure VirtualStringTree1GetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
VirtualStringTree1.NodeDataSize := SizeOf(MyRec);
end;procedure TForm1.VirtualStringTree1FreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
begin
Finalize(pa(Sender.GetNodeData(Node))^);
end;procedure TForm1.VirtualStringTree1GetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
var
pData:pa;
begin
pData:= Sender.GetNodeData(Node);
Case Column of
0: CellText := Inttostr(pData^.b);
1: CellText := pData^.caption;
end;end;procedure TForm1.Button1Click(Sender: TObject);
var
pNode:PVirtualNode;
pData:pa;
begin
pNode:=VirtualStringTree1.AddChild(nil,nil);
pData:=VirtualStringTree1.GetNodeData(pNode);
pData^.b:=123;
pData^.caption:='Test';
end;
end.
procedure Tfrm_main.vstInitNode(Sender: TBaseVirtualTree; ParentNode,
Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
var
Data: ^Pa;
begin
try
inherited;
if ParentNode = nil then
begin
try
Data := Sender.GetNodeData(Node);
Data^ := Pa(InforList.Items[node.Index]); //inforlist:存储树中各节点数据
except
end;
end
except
end;
end;
结贴