Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Assign вызывает EconvertError, или клонирование наследников TComponent 
V
    Опции темы
jsa
Дата 16.10.2008, 04:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 1
Всего: 20



Hi All!

есть код
Код

type
  TStructuredObj = class(TComponent)
    private
     ....
    published
      property PropA: Integer read ... write...
  end;

...
var SObj1, SObj2: TStructueredObj;

SObj1:=TStructuredObj.Create(nil);
SObj2:=TStructuredObj.Create(nil);

SObj1.PropA:=10;

SObj2.Assign(SObj1); // здесь возникает EConvertError

Почему?
 smile 

PS: конечно можно написать метод клонирования с пробегом по всем свойствам через rtti, но хочется понять почему не работает Assign, где ошибка в 17 строке
PPS: может у меня руки кривые?


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
Rrader
  Дата 16.10.2008, 06:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191



Потому что метод Assign нужно перекрывать и релизовывать самому. Примеры реализации - их полно в VCL.

Код

type
  TStructuredObj = class(TComponent)
  private
    FPropA: Integer;
  public
    procedure Assign(Source: TPersistent); override;
  published
    property PropA: Integer read FPropA write FPropA;
  end;

implementation

{ TStructuredObj }

procedure TStructuredObj.Assign(Source: TPersistent);
begin
  if Source is TStructuredObj then
  begin
    FPropA := TStructuredObj(Source).PropA;
    Exit;
  end;
  inherited Assign(Source);
end;


Это сообщение отредактировал(а) Rrader - 16.10.2008, 06:18


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
jsa
Дата 16.10.2008, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 1
Всего: 20



Цитата(Rrader @  16.10.2008,  11:16 Найти цитируемый пост)
Потому что метод Assign нужно перекрывать и релизовывать самому. 

Rrader, ясно, спасибо за помощь

Это сообщение отредактировал(а) jsa - 16.10.2008, 09:12


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0836 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.