Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.13;
Скачать: CL | DM;

Вниз

TPersistent.Assign   Найти похожие ветки 

 
ghg ©   (2003-12-28 11:57) [0]

есть два экземпляра класса TData_piket

при попытке скопировать один в другой выдается EConvertError типа не могу сделать Assign одного в другой


TData_Piket=class(TPersistent)
public
size : Tsize;
kol_duble : integer; // количество дублей
active_duble : integer; // какой дубль активен
filter : shortstring; // степень сглаживания
eds_online : single; // поле для хранения ЕДС*rrr/tok и т.д.
Main : Tdata_piket_duble; // основные данные
theo : Tdata_piket_sintetics; // теоретические данные
margin : Tdata_piket_sintetics; // остаточные данные
dubles : array of Tdata_piket_duble; // массив дублей (only ead)
constructor Create;
destructor Destroy; override;
procedure save;
procedure load;
procedure GetData(number_duble : integer);
procedure new_load(path_file : string);
procedure add_duble(file_name : string);
procedure del_duble(number : integer);
procedure sglazh;

procedure summ(dubl : array of integer);
procedure ostat_pole;
procedure integral;
end;

piket_duble : TData_piket;
piket : TData_piket;

procedure Tedit_pik.FormCreate(Sender : TObject);
begin
piket_duble:=Tdata_piket.Create;
piket_duble.Assign(piket);
end;



Вопрос: почему не копируется?
Это наверняка происходит из-за наличия дин.массивов. Может перед выполнением Assign нужно создать такое же кол-во элементов в этих дин.массивах?


 
dmk ©   (2003-12-28 13:14) [1]

А Вы увереы, что "piket" уже создан?

В реализации Assign идет проверка:
procedure TPersistent.Assign(Source: TPersistent);
begin
if Source <> nil then Source.AssignTo(Self) else AssignError(nil);
end;


 
_юзер_   (2003-12-28 13:22) [2]

2ghg: я бы на твоём месте заменил динамический массив на TList


 
ghg ©   (2003-12-28 13:49) [3]

>_юзер_ (28.12.03 13:22) [2]
спасибо, посмотрим
может и правда лучше будет

>dmk © (28.12.03 13:14) [1]
да уверен

вопрос в принципе, мне тут на форуме сказали что наследники TPersistent спокойно копируются методом Assign друг в друга вне зависимости от того есть ли внутри дин.массивы, но у меня не работает

так это я что-то не так делаю или все-таки есть ограничения на использование Assign?


 
dmk ©   (2003-12-28 14:15) [4]

Кхе Кхе :D
В help"е написано, что если метод не перекрыт,
то по умолчанию вызывается внутренний метод TPersistent
AssignTo.
Это значит, что надо делать собственный Assign =)
Например в TBitmap перекрыт и с ним все работает нормально.


 
MBo ©   (2003-12-29 07:10) [5]

>на форуме сказали что наследники TPersistent спокойно копируются методом Assign
Но для этого нужно самому реализовать методы Assign и AssignTo - для осуществления "глубокого копирования".



Страницы: 1 вся ветка

Текущий архив: 2004.01.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.018 c
1-37780
TuZ
2003-12-29 13:27
2004.01.13
Как добавить иконку в консольное приложение?


4-37978
Vovchik
2003-11-02 15:39
2004.01.13
Как перехватить событие смены активного окна?


14-37883
Mihey
2003-12-20 23:37
2004.01.13
Вот так глюк


14-37927
Snappy
2003-12-18 01:28
2004.01.13
Теория нечетких множеств(обучалка)


14-37863
Nick-From
2003-12-22 20:38
2004.01.13
Халява?