Конференция "Компоненты" » Создание к-та: определение родителя к-та [D7, WinXP]
 
  • Владимир (24.10.07 18:33) [0]
    вот конструктор к-та:

    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." Подскажите, может я делаю что не так или есть другой способ обращения к родителю.
  • Юрий Зотов © (24.10.07 19:00) [1]
    Когда исполняется конструктор, Parent компонента еще не назначен, поэтому обращение к нему вызывает ошибку. Перенесите эту строчку в замещенный метод SetParent после вызова inherited. Если в конструкторе останется только первая строка, то он не нужен совсем.
  • Владимир (29.10.07 18:58) [2]
    Воспользовался Вашим советом, переопределил метод SetParent, все работает как надо, но при (или после, я не уверен) уничтожении экземпляра моего класса, вылазиет таже самая ошибка. Может нужно что ни будь описать в деструкторе, или в самом методе?
  • Джо © (29.10.07 19:25) [3]
    Всем будет лучше, если вы приведете полный код компонента :)
  • ЮЮ © (30.10.07 10:33) [4]
    > вылазиет таже самая ошибка

    Если именно та же, т.е. в 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;
  • Владимир (30.10.07 17:29) [5]
    Всем большое спасибо, все заработало как надо)
 
Конференция "Компоненты" » Создание к-та: определение родителя к-та [D7, WinXP]
Есть новые Нет новых   [134427   +38][b:0][p:0]