You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FireMonkey ListView的ItemClickEx事件Pascal转C++:类型判断实现咨询

FireMonkey ListView ItemClickEx事件的Pascal转C++实现(核心类型判断解决)

刚好帮你把这段FireMonkey ListView的Pascal代码转换成C++版本,重点解决你疑惑的ItemObject is TListItemAccessory类型判断问题:

原Pascal代码

procedure TfrmCategory.lstListCategoryItemClickEx(const Sender: TObject; ItemIndex: Integer; const LocalClickPos: TPointF; const ItemObject: TListItemObject);
begin
  if ItemObject is TListItemAccessory then
  begin
    ShowMessage('Acessory clicked');
  end;
end;

对应的C++实现

在C++里没有Delphi的is运算符,我们可以用dynamic_cast来实现相同的类型判断逻辑——如果ItemObject确实是TListItemAccessory类型,dynamic_cast会返回有效的指针,否则返回nullptr。完整代码如下:

void __fastcall TfrmCategory::lstListCategoryItemClickEx(TObject * const Sender, int ItemIndex, const TPointF &LocalClickPos, TListItemObject * const ItemObject)
{
    // 用dynamic_cast做类型判断,等价于Delphi里的"is"
    if (dynamic_cast<TListItemAccessory*>(ItemObject))
    {
        ShowMessage(L"Acessory clicked");
    }
}

补充说明

  • 注意C++ Builder的Unicode环境下,字符串要加L前缀(比如L"Acessory clicked"),或者用_D("Acessory clicked")宏保证兼容性。
  • dynamic_cast要求目标类拥有虚函数,而FireMonkey的TListItemObject及其派生类本身就满足这个条件,所以可以放心使用。

内容的提问来源于stack exchange,提问作者relayman357

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:52:08