-
вот конструктор к-та:
constructor TPerformer.Create(AOwner:TComponent); begin inherited Create(AOwner); FPoleHeight:=Parent.Height; \\ поле integer end;
при компилированнии компонента, все нормально, а когда пытаюсь кинуть к-т на форму выдает ошибку: "Access violation at address 51001ACE in module 'dclusr70.bpl'. Read of address 0000004C." Подскажите, может я делаю что не так или есть другой способ обращения к родителю.
-
Когда исполняется конструктор, Parent компонента еще не назначен, поэтому обращение к нему вызывает ошибку. Перенесите эту строчку в замещенный метод SetParent после вызова inherited. Если в конструкторе останется только первая строка, то он не нужен совсем.
-
Воспользовался Вашим советом, переопределил метод SetParent, все работает как надо, но при (или после, я не уверен) уничтожении экземпляра моего класса, вылазиет таже самая ошибка. Может нужно что ни будь описать в деструкторе, или в самом методе?
-
Всем будет лучше, если вы приведете полный код компонента :)
-
> вылазиет таже самая ошибка
Если именно та же, т.е. в TPerformer.SetParent(AParent: TWidgetControl) то стоит не забывать
The TControl destructor calls SetParent(nil (Delphi) or NULL (C++)) to remove the control from its parent's control list before destroying the component.
и одидать, что в качестве параметра AParent можно получить и nil:
if AParent <> nil then begin FPoleHeight := AParent.Height; end;
-
Всем большое спасибо, все заработало как надо)
|