C++ Builder 10.2での作業Tokyo、カスタムコンポーネントを実行時にプログラムでFireMonkey TForm
に追加しようとしています。カスタムFireMonkeyコンポーネントが描画されない
カスタムコンポーネントはパッケージとしてインストールされず、IDEに登録されています(これはプロジェクトが複雑すぎてしまいます)。単純にTPanel
のサブクラスです。
ただし、コンポーネントとその子は、アプリケーションを実行すると描画されません。私はこれをWindowsとAndroidでテストし、WidthとHeightを明示的に設定するなど、複数の修正を試みました。
どうすればこの問題を解決できますか?以下は
私のコードの該当ビットである:それはFireMonkeyの3Dコンポーネントをレンダリングするために設計されており、(OnRender使用されるようTForm3Dは、標準のFireMonkeyのコンポーネントとうまく動作しないように見えます
__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;
}
実行時にコンポーネントを動的に作成するか、デザイン時にフォームに配置するかの違いはありません。実行時にロードされると、DFMに格納されているデザインタイムオブジェクトは、表示されたものと同様に、動的に作成されます(ただし、他のプロパティを設定する前に 'Parent'を設定する必要があります)。だから、あなたのオブジェクトが現れないようにするために何かが進んでいます。また、BTWでは、 'this-> OnMouseDown'を設定しないで、代わりに仮想' MouseDown() 'メソッドをオーバーライドします。 –