Я пытаюсь создать простой настраиваемый элемент управления с помощью Borland C++ Builder 6. В данном случае я пытаюсь создать TPageControl с одним листом TTabSheet. У меня возникли проблемы с определением правильного места для инициализации этих дочерних элементов управления. На данный момент я инициализирую все в конструкторе. Все компилируется нормально, но когда я пытаюсь поместить элемент управления в форму, Borland IDE выдает ошибку «У элемента управления нет родительского окна» или что-то очень похожее. Я обнаружил, что строка, которая вызывает это конкретно, является настройкой свойства PageControl TTabSheet.
Код для моего управления ниже:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "TestControl.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
static inline void ValidCtrCheck(TTestControl *)
{
new TTestControl(NULL);
}
//---------------------------------------------------------------------------
__fastcall TTestControl::TTestControl(TComponent* Owner)
: TCustomControl(Owner)
{
pageControl = new TPageControl(this);
pageControl->Parent = this;
tabSheet = new TTabSheet(pageControl);
tabSheet->Parent = pageControl;
tabSheet->Caption = "Page 1";
tabSheet->PageControl = pageControl;
}
//---------------------------------------------------------------------------
__fastcall TTestControl::~TTestControl()
{
pageControl->Free();
}
//---------------------------------------------------------------------------
namespace Testcontrol
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TTestControl)};
RegisterComponents("Test", classes, 0);
}
}
//---------------------------------------------------------------------------
Любая помощь будет очень признательна - я обнаружил, что из-за возраста этой конкретной технологии мне не очень повезло найти ресурсы по этому вопросу.
CreateParams()
- это неправильное место для инициализации свойств, зависящих от окна. Окно еще не существует.CreateWnd()
больше подходит. - person Remy Lebeau   schedule 27.08.2016