Показать сообщение отдельно
  #7  
Старый 28.11.2012, 09:02
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

для того, чтобы воспользоваться методом Assign класса TPersistent, его нужно override:
Код:
type
  MyRec = record
    s1: String;
    s2: String;
  end;

  MyRecs = array of MyRec;

  TMyClass = class(TPersistent)
  public
    Recs: MyRecs;
    v1: String;
    v2: String;
    procedure Assign(Source: TPersistent); override;  
  end;

procedure TMyClass.Assign(Source: TPersistent);
var
  i: Integer;
begin
  v1:=TMyClass(Source).v1;
  v2:=TMyClass(Source).v2;
  SetLength(Recs, Length(TMyClass(Source).Recs));
  for i:=0 to Length(TMyClass(Source).Recs)-1 do
  begin
    Recs[i].s1:=TMyClass(Source).Recs[i].s1;
    Recs[i].s2:=TMyClass(Source).Recs[i].s2;
  end;
end;

Код:
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);

procedure TForm1.FormCreate(Sender: TObject);
var
  c1, c2: TMyClass;
begin
  c1:=TMyClass.Create;
  c2:=TMyClass.Create;

  c1.v1:='123';
  c1.v2:='abc';
  SetLength(c1.Recs, 2);
  c1.Recs[0].s1:='hello';
  c1.Recs[0].s2:='world';
  c1.Recs[1].s1:='bill';
  c1.Recs[1].s2:='gates';

  c2.Assign(c1);
  
  Memo1.Lines.Add(c1.v1);
  Memo1.Lines.Add(c1.v2);

  Memo1.Lines.Add(c2.v1);
  Memo1.Lines.Add(c2.v2);

  Memo1.Lines.Add(c1.Recs[0].s1);
  Memo1.Lines.Add(c1.Recs[0].s2);
  Memo1.Lines.Add(c1.Recs[1].s1);
  Memo1.Lines.Add(c1.Recs[1].s2);

  Memo1.Lines.Add(c2.Recs[0].s1);
  Memo1.Lines.Add(c2.Recs[0].s2);
  Memo1.Lines.Add(c2.Recs[1].s1);
  Memo1.Lines.Add(c2.Recs[1].s2);
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием