Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.01.13;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.009 c
1-37790
AGN
2003-12-29 11:19
2004.01.13
ListBox.Items.Add


1-37652
European
2003-12-26 20:17
2004.01.13
Предварительный просмотр


8-37806
SMike
2003-08-27 19:14
2004.01.13
Как определить/нажать клавиши на навороченных клавиатурах?


4-37972
Малиновский Владимир
2003-11-11 15:09
2004.01.13
Господа! Как достучаться до Excel? (группировка строк)


8-37800
Незнайко
2003-09-13 12:45
2004.01.13
DynamicSkinForm





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский