我要生成一个树(treeview),然后通过数据库动态增加节点,设置每个节点的caption,还有data,我发现data是pointer 的类型,但是在表中,都是一般的数据类型,然后通过点击,判断每个节点的data 属性并显示,我发现不能直接赋值,要通过转化,但 不知道怎么转化,怎么做啊
解决方案 »
- 将javascript改成delphi要怎么写?
- 郁闷贴.... 散分七
- delphi7+mysql 存储longblob字段图像大时有问题?
- 各位请帮我看看这里的object1和object2指的是哪个啊
- 我在listview里动态插入10000个item,插入的过程需要等待很长时间而且屏幕显示的半拉克机,就象死机一样!
- 关于Express系列界面控件
- 关于sql语句问题 在线等 马上给分
- 巨难问题。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
- 请教高手,我想做一个程序来仿真鼠标点windows上任意窗体的某个指定坐标的控件.不知道该用api怎么来控制.
- 关于动态创建表、存储过程的问题(interbase)
- vista系統如何得到ip
- 求一个SQL语句
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;
type
pperson = ^Tperson;
TPerson = record
id: string;
name: string;
end;type
TForm1 = class(TForm)
Button1: TButton;
TreeView1: TTreeView;
procedure Button1Click(Sender: TObject);
procedure TreeView1Click(Sender: TObject);
private
{ Private declarations }
FPerson: PPerson;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
TNode1: TTreeNode;
begin
New(FPerson);
FPerson.id := '001';
FPerson.name := '张三';
TNode1 := TreeView1.Items.Add(nil,FPerson.name);
TNode1.Data := FPerson; New(FPerson);
FPerson.id := '002';
FPerson.name := '李四';
TNode1 := TreeView1.Items.Add(nil,FPerson.name);
TNode1.Data := FPerson;
end;procedure TForm1.TreeView1Click(Sender: TObject);
begin
if TreeView1.Selected.Count=1 then
New(FPerson);
FPerson := TreeView1.Selected.Data;
showMessage('您选择了'+FPerson.id+'/'+FPerson.name);
end;end.
2.在AddObject时把结构体指针送过去,用Pointer(结构体指针)
比如:ListView1.Items[0].AddObject('aaa', TButton.Create(nil));那在删除 这个 Item 之前,必须 释放这个buttonTButton(ListView1.Items[0].Data).Free;当然如果你像下面这样添加
ListView1.Items[0].AddObject('aaa', TButton.Create(Form1));
那么在 Form1 被 释放之前, 这个 TButton 也会被释放。
但如果form1 是主窗体的话,那就只有在程序退出之前,内存才会释放,这也是浪费。
楼上老大正解~
Delphi中只有TObjectList才能实现释放宿主后将列表中的对象删除,其它List均不可~