Главная страница
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.017 c
14-37928
Agent[007]
2003-12-20 16:55
2004.01.13
СРОЧНО! У МЕНЯ 22 ДЕКАБРЯ ЭКЗАМЕН ПО ГЕОМЕТРИИ!


1-37632
Steven V Uspen
2003-12-27 17:48
2004.01.13
Подскажите как проект из D6 сохранить в D5?


1-37688
___Nikolay
2003-12-25 09:08
2004.01.13
Вопрос про MicroStation


3-37566
List
2003-12-12 00:01
2004.01.13
Data Module


3-37540
napik
2003-12-16 08:47
2004.01.13
halycon