Главная страница
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.016 c
3-37525
Ю.Ф.
2003-12-16 15:18
2004.01.13
Упаковка БД типа Парадокс или FoxPro


14-37936
Style
2003-12-19 16:54
2004.01.13
Каким будет мир в 2035 году: заголовки газет


1-37775
Proglam-ma
2003-12-29 15:49
2004.01.13
Динамика в Записях


1-37612
MadAngel
2003-12-28 14:13
2004.01.13
Путь в TreeView?


1-37656
BOA_KAA
2003-12-25 20:09
2004.01.13
Почему вываливается External Exception?