DELPHI中记录类型动态数组删除

DELPHI中记录型动态数组删除,从中间删除一条记录,如果是一维的记录型,如ARRAY OF T1,则成功,如果是二维,则失败.

TYPE
  T1=RECORD
    YEAR:integer;
    month:integer;
    text:string;
  end;

  T2=record
    mydate: array of T1;
  end;

//如果是一维,L1,L2是TListbox,成功

procedure TForm1.Button3Click(Sender: TObject);
var
  bb:array of t1;
  i:integer;
begin
  SetLength(bb,8);
  for i:=low(bb) to high(bb) do
    bb[i].YEAR:=i;
  L1.Clear;
  for i:=low(bb) to high(bb) do
    l1.Items.Add(inttostr(bb[i].YEAR));

  i:=1;                                                                           //删除位置
  Move(bb[i + 1], bb[i], (high(bb) - i) * SizeOf(t1));
  SetLength(bb, length(bb) - 1);

  L2.Clear;
  for i:=low(bb) to high(bb) do
    l2.Items.Add(inttostr(bb[i].YEAR));

end;

//如果是二维,失败,不能从中间删除

procedure TForm1.Button4Click(Sender: TObject);
var
  bb:array of t2;
  i,j:integer;
begin
  SetLength(bb,5);

  for i:=low(bb) to high(bb) do
  begin
    setlength(bb[i].mydate,4);
    for j:=0 to 3 do
      bb[i].mydate[j].YEAR:=i*100+j;
  end;


  L1.Clear;
  for i:=low(bb) to high(bb) do
    for j:=low(bb[i].mydate) to high(bb[i].mydate) do
      l1.Items.Add(inttostr(bb[i].mydate[j].YEAR));

  i:=2;
  setlength(bb[i].mydate,0);

  Move(bb[i + 1], bb[i], (high(bb) - i) * SizeOf(t2));     //还是有问题
  SetLength(bb, length(bb) - 1);

  L2.Clear;
  for i:=low(bb) to high(bb) do
    for j:=low(bb[i].mydate) to high(bb[i].mydate) do          
      l2.Items.Add(inttostr(bb[i].mydate[j].YEAR));
end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值