Search code examples
user-interfacepaintc++builderfiremonkeyc++builder-10.2-tokyo

Custom FireMonkey component does not get drawn


Working in C++Builder 10.2 Tokyo, I am trying to add a custom component to a FireMonkey TForm programmatically at runtime.

The custom component is not installed as a package and registered in the IDE (as that ended up complicating the project too much), rather it is simply a subclass of TPanel.

However, The component, and its children, do not get drawn when I run the application. I have tested this on Windows and Android, and tried multiple modifications, like setting the Width and Height explicitly.

How can I fix this?

Below is the relevant bit of my code:

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm3D(Owner)
{
    mkView = new MKView(this);
    mkView->Align = TAlignLayout::Client;
    mkView->Enabled = true;
    mkView->Visible = true;
    mkView->Parent = this;
}

__fastcall MKView::MKView(TComponent *Owner)
    : TPanel(Owner)
{
    this->OnMouseDown = MKView_OnMouseDown;

    TLabel1 = new TLabel(this);
    TLabel1->Text = "Here I am!";
    TLabel1->Enabled = true;
    TLabel1->Visible = true;
    TLabel1->Parent = this;
    TLabel1->OnMouseDown = MKView_OnMouseDown;
}

Solution

  • It looks like TForm3D doesn't work well with standard FireMonkey components, as it is designed for rendering FireMonkey 3D components and uses OnRender() instead of OnPaint(). I was using TForm3D for its OpenGL context, but having switched to a standard TForm the components are now being drawn.