请举例说明 treeview的Node.data相当于n个node.text这种属性?
解决方案 »
- delphi 关于服务 的下载程序
- 初涉三层,出现 not supported by...........
- 把Tframe放入DLL中,在另一个程序的Form中插入
- 高分求超难SQL语句!
- date类型参数绑定的问题,很菜的问题,请大家帮帮忙!
- treeview,如何让一个node依次向下移动位置(包含node底下的子目录)?
- 软件加密心得?
- 怎么把.DBF格式数据库中的数据转到ACCESS中?一个很菜的问题
- 如何调用位于不同项目中的表单?
- 两个不同窗体上的两个ADOTABLE依次对同一个ACCESS数据库进行写操作,为何会出错?
- COM+,如何在一个接口的方法中输入值设置为通用变量?即可以为字符,又可以为数字等等!
- 怎样改变Tcanvas的背景颜色,这个貌似简单问题居然把我难住了
goods=record
id:string;
prod_code :string;
.......
create_date :string;
end; P_goods=^goods;//定义一个数据类型procedure TForm1.TVChanging(Sender: TObject;
Node: TTreeNode; var AllowChange: Boolean);
var
goods_tmp :p_goods;
begin
goods_tmp:=tv.selected.data;
label1.caption:=goods_tmp^.id;
......
end;
1、没有分配内存
2、结构的大小是动态的,无法明确确定大小,导致不能正确分配内存。一般的步骤如下:
1、在增加新节点的时候,对接点的Data进行赋值,注意不要忘记申请内存。
2、在访问的时候可以通过上面的代码进行操作。
.............................,,,.,,,,,,,,,,,.....,.:::;;:::;:::::::::::::::::::
...........................,.,::,,,::,,,,,,,,....,.,:;::::::::::::::::::::::::;
.......................,,,,,,,=;;,,:::::,,,,,.....,,,::::;::;:::::::::::::;;;;;
....................,.,:::::,:;+++:;=;;;:,,,,.......,:::::;;;;;::::::::;;;;;;;;
..................,,,,:;,;::;:=+tt;==;:::,,,,,...:==,,::;::;;:;:::;;;;;;;;;;;;;
...................,:;;::;==+=+t=;;;;=iiii+iit;,,,==t,:;;;;;;;;;;;;;;;;;;;;;;;;
..................,:===;=iitttt+++ii=;==;=tIYIt;;=itt;,:;;;;;;;:;;;;:;;;;;;::;;
..................,:;==itIYXXYYYYt+:,,=t+=tYVYYt===+Ii,,::;:::::::;;;;;;;;;:;::
...............,;;;+ttIYYVXRRXYVVitIIIYXXVXXXVYYi+=tII,,,::;;;::;::;;;;;:;:::::
..............,,,..:i=iYYVXRBRVYVXRRRRBBBMMBRXVYtiIII;,,,,::::;;;;;;;;:;;;;::::
............,,,=+;=ittIXXXXXRRXVXXXRRBBMMMMMBRXVYItY=.,,,,,,::::;;::;:;;;;;;:::
...........:==+tVXXXXRRRRRRXRBBXXXXRBBMMMMWMMRXVYt=:,,,,,,,,,::::::::::::::::::
..........:itYVRBBBBBBBBBBRXXBBBXVVVVXMMWWWWBRXVYI:,,,,,,,,,,,:::::::::::::::::
..........+IVXRBMMMBMBMMBRXXXBMMMRYVVVRMMMMMBRXVVY:;..,,,,,,,,,::::::::::::::::
..........;IYXXRBMMMMMMMRXXXVYXXVVIYXXRRRRBBBRXVVY;,:.,,:,.,,,,,:::::::::::::::
...........=IYVXRBBMWWMBRRBRXRBRRRBRXVVYYVRBBXXVYI,,=,;i.;,,,,,,,::::::::::::::
............;tYYVXRBBBBRRBRBRXVYYItIIt+:iXBBBXVVY=;;i=Yi.,:,,,,,,,,,::::::::,,,
.............,tYYVVXXRRXRXYi+itXRXRXIt+tYRRRRVVY=,i=..:,,,.,,,,,,,,,,,:::,,,,,,
...............iYYVVXRRRRXXYIiitttttIYIIXRRXXYI;,,....,,.,,,,,,,,,,,,,,::,,,,,,
................,+IVVXXRRBRBRRXYYYYYYVXRBBRXYt:,,...,,,,,,,,,,,,,,,,,,,,,,,,,,,
..............,....:iIYVXRRRBBBBMBBBBBMMMBXY=:,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,
..............,=.......;+tYVXRBMMMWWWMMBXVt;::,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,
............................:;itIYYYYYItti=;;:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
用鼠标全选,然后在2米远处看看!
.............................,,,.,,,,,,,,,,,.....,.:::;;:::;::::::::::::::::::
...........................,.,::,,,::,,,,,,,,....,.,:;:::::::::::::::::::::::;
.......................,,,,,,,=;;,,:::::,,,,,.....,,,::::;::;:::::::::::::;;;;
....................,.,:::::,:;+++:;=;;;:,,,,.......,:::::;;;;;::::::::;;;;;;;
..................,,,,:;,;::;:=+tt;==;:::,,,,,...:==,,::;::;;:;:::;;;;;;;;;;;;
...................,:;;::;==+=+t=;;;;=iiii+iit;,,,==t,:;;;;;;;;;;;;;;;;;;;;;;;
..................,:===;=iitttt+++ii=;==;=tIYIt;;=itt;,:;;;;;;;:;;;;:;;;;;;::;
..................,:;==itIYXXYYYYt+:,,=t+=tYVYYt===+Ii,,::;:::::::;;;;;;;;;:;:
...............,;;;+ttIYYVXRRXYVVitIIIYXXVXXXVYYi+=tII,,,::;;;::;::;;;;;:;::::
..............,,,..:i=iYYVXRBRVYVXRRRRBBBMMBRXVYtiIII;,,,,::::;;;;;;;;:;;;;:::
............,,,=+;=ittIXXXXXRRXVXXXRRBBMMMMMBRXVYItY=.,,,,,,::::;;::;:;;;;;;::
...........:==+tVXXXXRRRRRRXRBBXXXXRBBMMMMWMMRXVYt=:,,,,,,,,,:::::::::::::::::
..........:itYVRBBBBBBBBBBRXXBBBXVVVVXMMWWWWBRXVYI:,,,,,,,,,,,::::::::::::::::
..........+IVXRBMMMBMBMMBRXXXBMMMRYVVVRMMMMMBRXVVY:;..,,,,,,,,,:::::::::::::::
..........;IYXXRBMMMMMMMRXXXVYXXVVIYXXRRRRBBBRXVVY;,:.,,:,.,,,,,::::::::::::::
...........=IYVXRBBMWWMBRRBRXRBRRRBRXVVYYVRBBXXVYI,,=,;i.;,,,,,,,:::::::::::::
............;tYYVXRBBBBRRBRBRXVYYItIIt+:iXBBBXVVY=;;i=Yi.,:,,,,,,,,,::::::::,,
.............,tYYVVXXRRXRXYi+itXRXRXIt+tYRRRRVVY=,i=..:,,,.,,,,,,,,,,,:::,,,,,
...............iYYVVXRRRRXXYIiitttttIYIIXRRXXYI;,,....,,.,,,,,,,,,,,,,,::,,,,,
................,+IVVXXRRBRBRRXYYYYYYVXRBBRXYt:,,...,,,,,,,,,,,,,,,,,,,,,,,,,,
..............,....:iIYVXRRRBBBBMBBBBBMMMBXY=:,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,
..............,=.......;+tYVXRBMMMWWWMMBXVt;::,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,
............................:;itIYYYYYItti=;;:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
id:string;
prod_code :string;
.......
create_date :string;
end; P_goods=^goods;//定义一个数据类型procedure TForm1.TVChanging(Sender: TObject;
Node: TTreeNode; var AllowChange: Boolean);
var
goods_tmp :p_goods;
begin
goods_tmp:=tv.selected.data;
edit1.text:=goods_tmp^.id;
edit2.text:=goods_tmp^.prod_code
......
end;
procedure TForm1.TVDeletion(Sender: TObject; Node: TTreeNode);
begin
Dispose(P_goods(Node.Data));//释放
end;
var
addNode:ttreenode;
goods_tmp:p_goods;
begin
addNode := TreeView1.Items.AddChild(nil,'一个结点');
New(gosds_tmp);
goods_tmp^.id:= '8035';
oods_tmp^.prod_code:= 'sdkfjsld';
addNode.Data:=goods_tmp;
end;
id:string;
prod_code :string;
.......
create_date :string;
end; P_goods=^goods;//定义一个数据类型
goods_tmp:p_goods;
procedure TForm1.TVChanging(Sender: TObject;
Node: TTreeNode; var AllowChange: Boolean);
begin
goods_tmp:=tv.selected.data;
edit1.text:=goods_tmp^.id;
edit2.text:=goods_tmp^.prod_code
......
end;
procedure TForm1.TVDeletion(Sender: TObject; Node: TTreeNode);
begin
Dispose(P_goods(Node.Data));//释放
end;
procedure TForm1.addnodemu(Sender: TObject);
var
addNode:ttreenode;
begin
addNode := TreeView1.Items.AddChild(nil,'一个结点');
New(goods_tmp);
goods_tmp^.id:= '8035';
oods_tmp^.prod_code:= 'sdkfjsld';
addNode.Data:=goods_tmp;
end;
原来发过这个贴子,大家测试过后有的说有,有的说没有,后来我在d6下面用发现没有这个问题
我下面程序建立tree采用了两种方法一种正向和反向建立两个方法的时间不同。(测试环境d5)d6生成tree很快的。unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
tree: TTreeView;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
Mypoint=^TMypoint;
TMypoint=record
id:string;
end;
var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject); //正向建立tree
var iss,ie,j,i,rx:integer;
htm:mypoint;
one:array of TTreeNode;
begin
tree.Items.Clear;
iss:=gettickcount();
rx:=10;
setlength(one,rx);for i:=0 to 9 do
begin
new(htm);
htm.id:=inttostr(i);
one[i]:=tree.Items.AddObject(nil,inttostr(i),htm);
end;for i:=0 to 9 do
for j:=1 to 50 do
begin
new(htm);
htm.id:=inttostr(j);
tree.Items.AddChildObject(one[i],inttostr(j),htm);
end;
ie:=gettickcount();
iss:=gettickcount();
showmessage(floattostr((ie-iss)/1000.0)+'秒');
end;procedure TForm1.Button2Click(Sender: TObject); //反向建立tree
var iss,ie,j,i,rx:integer;
htm:mypoint;
one:array of TTreeNode;
begin
tree.Items.Clear;
iss:=gettickcount();
rx:=10;
setlength(one,rx);
for i:=0 to rx-1 do
begin
new(htm);
htm.id:=inttostr(i);
one[i]:=tree.Items.AddObject(nil,inttostr(i),htm);end;
for i:=rx-1 downto 0 do
for j:=1 to 50 do
begin
new(htm);
htm.id:=inttostr(j);
tree.Items.AddChildObject(one[i],inttostr(j),htm);
end;
ie:=gettickcount();
showmessage(floattostr((ie-iss)/1000.0)+'秒');
end;
end.************
* 努力学习 *
* 全为 *
*¥人民币¥*
************
原来发过这个贴子,大家测试过后有的说有,有的说没有,后来我在d6下面用发现没有这个问题
我下面程序建立tree采用了两种方法一种正向和反向建立两个方法的时间不同。(测试环境d5)d6生成tree很快的。
楼上说的对因该在展开时建立,但是如果用d5那么如果最后面的那个在展开时建立也要好久的,建议改用d6unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
tree: TTreeView;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
Mypoint=^TMypoint;
TMypoint=record
id:string;
end;
var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject); //正向建立tree
var iss,ie,j,i,rx:integer;
htm:mypoint;
one:array of TTreeNode;
begin
tree.Items.Clear;
iss:=gettickcount();
rx:=10;
setlength(one,rx);for i:=0 to 9 do
begin
new(htm);
htm.id:=inttostr(i);
one[i]:=tree.Items.AddObject(nil,inttostr(i),htm);
end;for i:=0 to 9 do
for j:=1 to 50 do
begin
new(htm);
htm.id:=inttostr(j);
tree.Items.AddChildObject(one[i],inttostr(j),htm);
end;
ie:=gettickcount();
iss:=gettickcount();
showmessage(floattostr((ie-iss)/1000.0)+'秒');
end;procedure TForm1.Button2Click(Sender: TObject); //反向建立tree
var iss,ie,j,i,rx:integer;
htm:mypoint;
one:array of TTreeNode;
begin
tree.Items.Clear;
iss:=gettickcount();
rx:=10;
setlength(one,rx);
for i:=0 to rx-1 do
begin
new(htm);
htm.id:=inttostr(i);
one[i]:=tree.Items.AddObject(nil,inttostr(i),htm);end;
for i:=rx-1 downto 0 do
for j:=1 to 50 do
begin
new(htm);
htm.id:=inttostr(j);
tree.Items.AddChildObject(one[i],inttostr(j),htm);
end;
ie:=gettickcount();
showmessage(floattostr((ie-iss)/1000.0)+'秒');
end;
end.************
* 努力学习 *
* 全为 *
*¥人民币¥*
************
原来发过这个贴子,大家测试过后有的说有,有的说没有,后来我在d6下面用发现没有这个问题
我下面程序建立tree采用了两种方法一种正向和反向建立两个方法的时间不同。(测试环境d5)d6生成tree很快的。
楼上说的对因该在展开时建立,但是如果用d5那么如果最后面的那个在展开时建立也要好久的,建议改用d6unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
tree: TTreeView;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
Mypoint=^TMypoint;
TMypoint=record
id:string;
end;
var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject); //正向建立tree
var iss,ie,j,i,rx:integer;
htm:mypoint;
one:array of TTreeNode;
begin
tree.Items.Clear;
iss:=gettickcount();
rx:=10;
setlength(one,rx);for i:=0 to 9 do
begin
new(htm);
htm.id:=inttostr(i);
one[i]:=tree.Items.AddObject(nil,inttostr(i),htm);
end;for i:=0 to 9 do
for j:=1 to 50 do
begin
new(htm);
htm.id:=inttostr(j);
tree.Items.AddChildObject(one[i],inttostr(j),htm);
end;
ie:=gettickcount();
iss:=gettickcount();
showmessage(floattostr((ie-iss)/1000.0)+'秒');
end;procedure TForm1.Button2Click(Sender: TObject); //反向建立tree
var iss,ie,j,i,rx:integer;
htm:mypoint;
one:array of TTreeNode;
begin
tree.Items.Clear;
iss:=gettickcount();
rx:=10;
setlength(one,rx);
for i:=0 to rx-1 do
begin
new(htm);
htm.id:=inttostr(i);
one[i]:=tree.Items.AddObject(nil,inttostr(i),htm);end;
for i:=rx-1 downto 0 do
for j:=1 to 50 do
begin
new(htm);
htm.id:=inttostr(j);
tree.Items.AddChildObject(one[i],inttostr(j),htm);
end;
ie:=gettickcount();
showmessage(floattostr((ie-iss)/1000.0)+'秒');
end;
end.************
* 努力学习 *
* 全为 *
*¥人民币¥*
************