Просьба помочь в написании компонента, при удалении с формы он вызывает AV

  1. Устанавливает компонент в IDE (PakPanelTest.dpk), после этого открывает в Delphi демо-проект (PakPanelTest.dpk).
  2. В дизайнере устанавливаем свойство TestPanel1.ExternalToolBarPanel = SuperPanel
  3. Удаляем в дизайнере SuperPanel.

По идее кнопка "M" должна была удалиться с SuperPanel (вызов метода DestroyToolBar из SetExternalToolBarPanel), а потом создатся заново на внутренней панеле (вызов метода из CreateToolBar из SetExternalToolBarPanel). Но вместо этого происходит AV на строке FreeAndNil(FTestSpeedButton) метода DestroyToolBar. Почему происходит AV понять не могу. Очень нужна помощь.

https://drive.google.com/file/d/1HeUsyxr4epUZ6_etJw3Q-Mtka3VrLLSF


Ответы (1 шт):

Автор решения: Lem0nti

Попробуйте так:

  1. При создании FTestSpeedButton указывайте овнером не себя, а FToolBarPanel:

    FTestSpeedButton := TSpeedButton.Create(FToolBarPanel);
    
  2. FreeAndNil(FTestSpeedButton); - вообще уберите из метода DestroyToolBar.

Тогда по идее кнопка автоматом будет удаляться вместе с удалением своего овнера. А сейчас получается что кнопка удалилась при удалении панели и теперь хочет удалиться ещё раз.

→ Ссылка