首页
社区
课程
招聘
[求助]delphi里面 怎么实现record 的list?
发表于: 2013-6-14 22:03 11915

[求助]delphi里面 怎么实现record 的list?

2013-6-14 22:03
11915
接收到的record数据,用TList存储.不想用指针的方式来实现.
type
TXXX = record
xxx: integer;
end;
PXXX = ^TXXX;

var
.....
p: PXXX;
begin
....
New(p);
p.xxx := 10;
AList.Add(p);
end

这样存储不安全而且操作麻烦
Type
    RecTest = record (packed)
      ID :integer;
       Name :string;
      Descript:string;
    end;

PRecList = ^RecTest
     RecList arrary[0..100] of PRecList

这样 也太麻烦,这样是静态的 我想要动态的。

1.
  type
    PA1 = ^TA1
    TA1 = record
      FA1, FA2: string;
    end;
2.
  type
    PB2 = ^TB2
    TB2 = record
      FB1, FB2: string;
    end;  

List_USERTYPE := TList.Create;     

//释放Tlist的存储的结构体
procedure TFrom_AdvSpreadGrid.FreeRecord(AList: TList);
var
  i: Integer;
begin
  for i := 0 to AList.Count - 1 do
  begin
    if Assigned(AList[i]) then
      2. 如果定义的是基本类型如:integer,char等可以通用释放;3.如果定义的是短字符串类型,string[255]这样也可以释放
      //Dispose(AList[i]);
      // 1.定义的记录类型是复杂类型,包括string时,必须使用对应定义的记录来释放,例如如下:
      Dispose(PUSE_TYPERec(AList[i]));
  end;
end;

增加记录的代码:
1.
  New(MyUSE_TYPERec);
  MyUSE_TYPERec^.F_USE_TYPE_ID := '';
  MyUSE_TYPERec^.F_USE_TYPE_Name := '';
  List_USERTYPE.Add(MyUSE_TYPERec);

  New(MyUSE_TYPERec);
  MyUSE_TYPERec^.F_USE_TYPE_ID := 'U';
  MyUSE_TYPERec^.F_USE_TYPE_Name := '正常编报';
  List_USERTYPE.Add(MyUSE_TYPERec);

  New(MyUSE_TYPERec);
  MyUSE_TYPERec^.F_USE_TYPE_ID := 'S';
  MyUSE_TYPERec^.F_USE_TYPE_Name := '虚拟汇总单位';
  List_USERTYPE.Add(MyUSE_TYPERec);
2.
  New(MyUSE_TYPERec);
  MyUSE_TYPERec^.F_USE_TYPE_ID := 1;
  MyUSE_TYPERec^.F_USE_TYPE_Name := 1;
  List_USERTYPE.Add(MyUSE_TYPERec);

  New(MyUSE_TYPERec);
  MyUSE_TYPERec^.F_USE_TYPE_ID := 2;
  MyUSE_TYPERec^.F_USE_TYPE_Name := 2;
  List_USERTYPE.Add(MyUSE_TYPERec);

//
这样又烦琐 又麻烦 还怕出错。。。

有没直接 list类支持record的
求教  delphi   版本 和写法

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 238
活跃值: (375)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
写个类 会方便 一些..把一些常用的方法 自己实现出来.
2013-6-15 01:39
0
雪    币: 6092
活跃值: (744)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
3
具体怎么写 请指教,这个我没写过 ,不太懂
2013-6-15 09:06
0
雪    币: 6092
活跃值: (744)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
4
自己搞定了,发现编程这块人气不足啊。
这么简单的问题也没一个人回应
弄的我好多次 自己提问自己回答
unit Unit1;
 interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TForm1 = class(TForm)
btn1: TButton;
mmo1: TMemo;
procedure btn1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; type
TGamelist =packed record
sky:Integer;
X: Single;
Y: Single;
Z: Single;
get:Boolean;
end; 
var
Form1: TForm1;
 implementation {$R *.dfm}

uses Generics.Collections;//这个单元要引用 否则无法实现提示编译错误
var
List: TList<TGamelist>; 


procedure TForm1.btn1Click(Sender: TObject);
var
ceshi:TGamelist;
number:Integer;
begin
ceshi.sky:=1;
ceshi.X:=100.24;
ceshi.Y:=55.24;
ceshi.Z:=0.22;
ceshi.get:=True;
number:=list.Add(ceshi);
Self.btn1.Caption:= IntToStr(number);
ceshi.sky:=55;
ceshi.X:=10.24;
ceshi.Y:=5.64;
ceshi.Z:=7.82;
ceshi.get:=false;
number:=list.Add(ceshi);//可以追加这个结构体
Self.mmo1.Clear;
Self.mmo1.Lines.Add(inttostr(list.Items[1].sky));//可以得到数据 
end; 
procedure TForm1.FormCreate(Sender: TObject);
begin
List := TList<TGamelist>.Create;//这里是构造
end; 


procedure TForm1.FormDestroy(Sender: TObject);
begin
List.Free;//这里释放。
end; 
end.

2013-6-15 18:06
0
雪    币: 126
活跃值: (189)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
Delphi2009-DelphiXE4都支持泛型。TList<record>
2013-6-17 22:26
0
雪    币: 952
活跃值: (1826)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
你要提c++的问题 很多人都会回答 现在会dephi的人太少了, 不能怪别人不回答
2013-6-17 23:07
0
游客
登录 | 注册 方可回帖
返回
//