Type
TClass1 = class
End;
TClass2 = class
Private
FObj: TClass1;
Published
Property Obj: TClass1 Read FObj Write FObj;
End;
Создание сложных компонентов
Есть у меня класс, допустим, Class1, и есть еще один класс, например, Class2. Причем Class2 объявлен, как published свойство в Class1. При это Class2 имеет несколько своих published свойств. Сделано это для удобства.
Так вот, о чем я... Все создается вроде, в инспекторе объектов редактируется и все такое, но когда дело доходит до сохранения или компиляции, вылетает Access violation в ide60.rtl
В чем беда, никак не могу понять
Ты бы для начала посмотрел в исходниках VCL, как там это реализовано. Типичный пример - свойство Font.
Глюк происходит скорее всего потому, что у тебя свойство объявлено типа такого:
Код:
что есть совершенно неправильно, т.к. объект, предствленный в свойстве Obj может (и будет) разрушен/утерян при присвоении значения свойству.
Привильно вот так:
Код:
Type
TClass1 = class(TPersistent)
End;
TClass2 = class(TPersistent)
Private
FObj: TClass1;
Procedure SetObj(Const Value: TClass1);
Public
Constructor Create;
Destructor Destroy; Override;
Published
Property Obj: TClass1 Read FObj Write SetObj;
End;
Constructor TClass2.Create;
Begin
FObj:= TClass2.Create;
End;
Destructor TClass2.Destroy; Override;
Begin
FObj.Destroy;
Inherited;
End;
Procedure TClass2.SetObj(Const Value: TClass1);
Begin
FObj.Assign(Value);
End;
TClass1 = class(TPersistent)
End;
TClass2 = class(TPersistent)
Private
FObj: TClass1;
Procedure SetObj(Const Value: TClass1);
Public
Constructor Create;
Destructor Destroy; Override;
Published
Property Obj: TClass1 Read FObj Write SetObj;
End;
Constructor TClass2.Create;
Begin
FObj:= TClass2.Create;
End;
Destructor TClass2.Destroy; Override;
Begin
FObj.Destroy;
Inherited;
End;
Procedure TClass2.SetObj(Const Value: TClass1);
Begin
FObj.Assign(Value);
End;
При этом TClass1 должен корректно поддерживать метод Assign (если ты знаешь, для чего он служит).
Всякое бывает. Кто не ошибается в этой жизни? :) Как говорится, на ошибках учатся.