记录类型的数组 ( 积分: 200 )

  • 主题发起人 主题发起人 流水寿司
  • 开始时间 开始时间

流水寿司

Unregistered / Unconfirmed
GUEST, unregistred user!
本人水平不高,现在想写一个类,其中包括一个叫Files的属性,用于保存一组文件的信息,我希望能够像Files[index]这样引用;
于是我就定义成这样
type
TFile= packed record
path:WideString;
name:WideString;
size:Integer;
end;
然后在下面这个类中使用这个记录类型
type
TFileinfo=class(TPersistent)
private
...
FFiles:TList;
...
public
...
property Files[Index:Integer]:TFile Read GetFile
default;
...
end;

function TFileinfo.GetFile(Index:Integer):TFile;
var
p:^TFile;
begin
p:=FFiles.Items;
Result:=p^;①
end;


如各位所见,现在我通过一个TList来访问各个TFile元素.现在执行到①出错,出错似乎是内存溢出(我也不是很懂,反正就是说写到XXX地址出错),请问各位为什么?还有记录类型的数组一般是不是这样定义的?是不是用TList的?或者还有什么其他的方法?
先谢谢各位大虾指点了,词不达意之处还请指出.
 
本人水平不高,现在想写一个类,其中包括一个叫Files的属性,用于保存一组文件的信息,我希望能够像Files[index]这样引用;
于是我就定义成这样
type
TFile= packed record
path:WideString;
name:WideString;
size:Integer;
end;
然后在下面这个类中使用这个记录类型
type
TFileinfo=class(TPersistent)
private
...
FFiles:TList;
...
public
...
property Files[Index:Integer]:TFile Read GetFile
default;
...
end;

function TFileinfo.GetFile(Index:Integer):TFile;
var
p:^TFile;
begin
p:=FFiles.Items;
Result:=p^;①
end;


如各位所见,现在我通过一个TList来访问各个TFile元素.现在执行到①出错,出错似乎是内存溢出(我也不是很懂,反正就是说写到XXX地址出错),请问各位为什么?还有记录类型的数组一般是不是这样定义的?是不是用TList的?或者还有什么其他的方法?
先谢谢各位大虾指点了,词不达意之处还请指出.
 
如果方便, 把源代码贴上, 或者发送到iihe@vip.sina.com, 我帮你看一看.
 
type
PFile = ^TFile
//添加这句
TFile= packed record
path:WideString;
name:WideString;
size:Integer;
end;
然后在下面这个类中使用这个记录类型
type
TFileinfo=class(TPersistent)
private
...
FFiles:TList;
...
public
...
property Files[Index:Integer]:PFile Read GetFile
default;//TFile 改为PFile
...
end;

function TFileinfo.GetFile(Index:Integer):PFile;//TFile 改为PFile
begin
Result:=FFiles.Items[index];
end;

注:往List添加项时为
var
P: PFile;
begin
New(P);
....//对P的各项进行赋值
FFiles.add(P);
end;
 
function TFileinfo.GetFile(Index:Integer):TFile;
begin
if FFiles.Items.Objects is PFile then
@Result := TFile(FFiles.Items.Objects);
end;
 
帮你试一下, 请稍等!
 
示例:
procedure TForm1.Button1Click(Sender: TObject);
var
a: PFile;
b: TList;
begin
New(a);
a^.path := Edit1.Text;
ListBox1.Items.AddObject(Edit1.Text, TObject(a));

end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
ShowMessage(pfile(ListBox1.Items.Objects[ListBox1.itemindex])^.path);
end;
 
to iihe:
TList.Items似乎没有Object属性,而且似乎也必须类似这样的Items的引用,您的代码是否是针对类的?这个TFile是个记录类型,非常感谢您在百忙中抽空为我答疑.
to tonmy:
您的解答太准确了,我修改以后马上就解决了问题,虽然还有些疑问,不过也不便再占用您宝贵的时间,自己解惑去了.必须要向您道歉的是,我觉得iihe也帮了我一些忙,请您宽容得从您应得的200分里划出小小的20分给他(她),再次感谢您的指点.
 
to iihe:
非常抱歉,我在结算分数后才看到您的回复,我想您的解答也很有道理,不过我的问题已经解决了,tonmy对我的帮助稍大一些,非常感谢您的指点.
 
后退
顶部