type
  TAPoint = array of TPoint;
………………
procedure TForm1.Button1Click(Sender: TObject);
var
  a,b,c:TAPoint;
begin
  setlength(a,1);
  setlength(b,2);
  setlength(c,0);
  a[0]:=point(1,1);
  b[0]:=point(1,11);
  b[1]:=point(1,100);
  Move(a,c,Sizeof(c));
  Move(b,c,Sizeof(c));
  //c:=copy(a,0,Sizeof(TPoint)*(High(a)+1));
  //c:=copy(b,0,Sizeof(TPoint)*(High(b)+1));
end;
上面的copy,move都不行,都把数组a的内容覆盖了。

解决方案 »

  1.   

    var
      a,b,c:TAPoint;
    begin
      setlength(a,1);
      setlength(b,2);
      //setlength(c,0);
      a[0]:=point(1,1);
      b[0]:=point(1,11);
      b[1]:=point(1,100);
      setlength(c,3);
      CopyMemory(@c[0], @a[0], sizeof(TPoint));
      CopyMemory(@c[1], @b[0], sizeof(TPoint)*2);
    end;
      

  2.   

    这种方法对上面的还是可以,但这种方法好像不太好,不通用阿,还有其他的方法吗?CopyMemory(@c[0], @a[0], sizeof(TPoint));是把以@a[0]开始的地址移大小为sizeof(TPoint)的内存到@c[0]开始的地址吗?
      

  3.   

    setlength(a,1);
      setlength(b,2);
      setlength(c,0);
      a[0]:=point(1,1);
      b[0]:=point(1,11);
      b[1]:=point(1,100);  CopyMemory(c, a, Sizeof(TPoint)*(High(a)+1));
      CopyMemory(@(c[High(a)+1]), b, Sizeof(TPoint)*(High(b)+1));
      

  4.   

    沒有阿
    在程序中比举的例子复杂多了,主要是要拷贝的内存大小跟起始地址不好确定。
    type
      TDPoint = record
        X,Y:double;
      end;
      TAPoint = array of TDPoint
      TADouble = array of Double;
    TLine = class
      public
        Selected : boolean;
        LineColor:TColor;
        a1 : TAPoint; 
        a2 : TAPoint;
        pointangle:TADouble;   
        pointlongth:TADouble;
        constructor Create;
      end;
      

  5.   

    要把N个a1合并到c1中,N个a2合并到c2中
      

  6.   

    For i:= 0 to N do
        begin
          Line1:=LineList[i];
          CopyMemory(@Line2.c1[XX],@Line1.a1[XX],XX)
                     
          CopyMemory(@Line2.c2[XX],@Line1.a2[XX],XX)
        end;XX 很难确定阿,谁帮我研究下,给十分。哈哈