Текущий архив: 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.45 MB
Время: 0.008 c