procedure TForm1.Button3Click(Sender: TObject); begin with TreeView1.Items do begin AddChildObject(nil, Button1.Name, Button1); AddChildObject(nil, Button2.Name, Button2); end; end;procedure TForm1.Button4Click(Sender: TObject); var Obj: Pointer; begin with TreeView1.Items do begin Obj := Item[0].Data; FreeAndNil(Obj); //释放data指向的内存空间 Item[0].Delete; end; end;————————————————————————————————— 宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。 —————————————————————————————————
procedure TfrmMain.DBTreeRecDeletion(Sender: TObject; Node: TTreeNode); var pURL : pURLinfo; begin pURL := Node.Data; if pURL <> nil then dispose(pURL); end;我是按照上面写的,总是提示无效的指针操作 不知道该怎样改
procedure TfrmMain.DBTreeRecDeletion(Sender: TObject; Node: TTreeNode); var Obj: Pointer; begin Obj := Node.Data; FreeAndNil(Obj); //释放data指向的内存空间 end;dispose是用来释放new分配的内存的。————————————————————————————————— 宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。 —————————————————————————————————
1.释放data指向的内存空间
2.删除TreeNode
}
begin
with TreeView1.Items do
begin
AddChildObject(nil, Button1.Name, Button1);
AddChildObject(nil, Button2.Name, Button2);
end;
end;procedure TForm1.Button4Click(Sender: TObject);
var
Obj: Pointer;
begin
with TreeView1.Items do
begin
Obj := Item[0].Data;
FreeAndNil(Obj); //释放data指向的内存空间
Item[0].Delete;
end;
end;—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
var
pURL : pURLinfo;
begin
pURL := Node.Data;
if pURL <> nil then dispose(pURL);
end;我是按照上面写的,总是提示无效的指针操作
不知道该怎样改
var
Obj: Pointer;
begin
Obj := Node.Data;
FreeAndNil(Obj); //释放data指向的内存空间
end;dispose是用来释放new分配的内存的。—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
初始化时的代码是这样的:
var
pURL: pURLinfo;
new(pURL);
对pURL赋值;
Node.data := pURL;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;type
PTestNode = ^TTestNode;
TTestNode = record
s :string;
id :integer;
end; TForm1 = class(TForm)
TreeView1: TTreeView;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
TestNode :PTestNode;
begin
New(TestNode);
TestNode^.s := '123';
TestNode^.id := 123; TreeView1.Items.Item[0].Data :=TestNode;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(PTestNode(TreeView1.Items.Item[0].Data)^.s);
Dispose(TreeView1.Items.Item[0].Data);
end;end.
用户有选择的删除某个节点,但这节点的data关联着由new申请的空间,
我要的效果是当用户删除节点时,自动释放关联的内存空间中的数据
但我不知道该在哪个过程里写
我试着在onDeletion中写,但总是出错,说无效的指针操作
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
if Node<>nil then
TOrgnaiseNode(Node.Data).Free;