怎么将Treeview.Items.Item[i].data的值赋给一个record类型的变量啊? 小弟对指针的操作很茫然!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 给你写了一个demounit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls;type PTest = ^Test; Test = record id:Integer; end; TForm1 = class(TForm) TreeView1: TTreeView; procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);var Node:TTreeNode; p:PTest;begin Node:=self.TreeView1.GetNodeAt(x,y); if Node = nil then exit; if Node.Data = nil then exit; p:=Node.Data; showmessage(IntToStr(p^.id));end;procedure TForm1.FormCreate(Sender: TObject);var p:PTest; Node:TTreeNode;begin Node:=TreeView1.Items.AddChild(nil,'123'); new(p); p^.id:=1; Node.Data:=p;end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);var IntI:Integer;begin for IntI:=TreeView1.Items.Count-1 downto 0 do begin Dispose( self.TreeView1.Items[IntI].Data ); end;end;end. p := Treeview.Items.Item[i].data 每个树节点(TTreeNode)都有一个Data属性(Pointer类型),有点像Tag一样,想怎么用就怎么用。不过有一点要注意,可能需要在适当的时候(比如FormDestroy)释放掉Data,否则会造成内存泄露。 Data属性所指向的空间, 建议在TreeView的OnDeletion事件处理代码中进行释放。这样,节点删除操作时就不需要另外再加释放内存的处理代码了。procedure Form1.TreeView1Deletion(Sender: TObject; Item: TListItem);begin if Item.Data <> nil then begin Dispose(Item.Data); Item.Data := nil; end;end; 奇怪delphi自動關閉? 寻找答案。。。 各位大侠,国庆快乐!有个问题请教,设计了很多Form,打算dock到主Form,是否可行? 关于Delphi和VC之间类型转换 关于chart控件问题. 时间查询问题. 问一个ttreeview的问题 数据库取值 哪位高人知道如何获取其它正在运行中程序的路径?? 高分重酬--delphi下如何打印数据库中blob字段的内容 请教高手枚举窗口的问题.. 结果为什么会这样?真的难以理解
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;type
PTest = ^Test;
Test = record
id:Integer;
end; TForm1 = class(TForm)
TreeView1: TTreeView;
procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Node:TTreeNode;
p:PTest;
begin
Node:=self.TreeView1.GetNodeAt(x,y);
if Node = nil then exit;
if Node.Data = nil then exit;
p:=Node.Data;
showmessage(IntToStr(p^.id));
end;procedure TForm1.FormCreate(Sender: TObject);
var
p:PTest;
Node:TTreeNode;
begin
Node:=TreeView1.Items.AddChild(nil,'123');
new(p);
p^.id:=1;
Node.Data:=p;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
IntI:Integer;
begin
for IntI:=TreeView1.Items.Count-1 downto 0 do
begin
Dispose( self.TreeView1.Items[IntI].Data );
end;
end;end.
procedure Form1.TreeView1Deletion(Sender: TObject; Item: TListItem);
begin
if Item.Data <> nil then
begin
Dispose(Item.Data);
Item.Data := nil;
end;
end;