c++ builder XE4, 10.2 Tokyo > コンポーネントのタイプ?(TLabelなど)を取得する > srcPtr->ClassName() / bool isTLabel = (dynamic_cast<TLabel *>(lblPtr) != NULL);


動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)

try1

コンポーネントがTCheckBoxかどうかの確認にはClassName()を使う。

static bool isTCheckBox(TControl *srcPtr)
{
    if (srcPtr->ClassName() == L"TCheckBox") {
        return true;
    }
    return false;
}

ヘルプのVcl.Controls.TControl のメソッドを参考にした。


try2

SOにて教えていただいた方法。
以下を使う。

if (dynamic_cast<TLabel*>(ParentControl->Controls[i]) != NULL)

実装してみた。

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TControl *lblPtr = (TControl *)Label1;

    bool isTLabel = (dynamic_cast<TLabel *>(lblPtr) != NULL);
    bool isTComboBox = (dynamic_cast<TComboBox *>(lblPtr) != NULL);

    Memo1->Lines->Add(BoolToStr(isTLabel));
    Memo1->Lines->Add(BoolToStr(isTComboBox));
}
結果
-1
0