Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何用C++;建筑商XE10(西雅图)和叮当声_C++_Clang_C++builder_Vcl - Fatal编程技术网

C++ 如何用C++;建筑商XE10(西雅图)和叮当声

C++ 如何用C++;建筑商XE10(西雅图)和叮当声,c++,clang,c++builder,vcl,C++,Clang,C++builder,Vcl,在我的应用程序中,我需要捕获TDBGrid组件的OnDrawCell事件(默认情况下不可用/可见)。 因此,我创建了一个新组件(名为TDBGridHack)作为TDBGrid的后代 头文件: #ifndef DBGridHackH #define DBGridHackH #include <System.SysUtils.hpp> #include <System.Classes.hpp> #include <Vcl.Controls.hpp> #inclu

在我的应用程序中,我需要捕获TDBGrid组件的OnDrawCell事件(默认情况下不可用/可见)。 因此,我创建了一个新组件(名为TDBGridHack)作为TDBGrid的后代

头文件:

#ifndef DBGridHackH
#define DBGridHackH

#include <System.SysUtils.hpp>
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.DBGrids.hpp>
#include <Vcl.Grids.hpp>

class PACKAGE TDBGridHack : public TDBGrid
{
    private:
        Vcl::Grids::TDrawCellEvent FOnDrawCell;
    public:
        __fastcall TDBGridHack(TComponent* Owner);
        __published:
            __property Vcl::Grids::TDrawCellEvent OnDrawCell = {read=FOnDrawCell, write=FOnDrawCell};
            virtual void __fastcall DrawCell(int ACol, int ARow, const TRect& ARect, TGridDrawState AState);
};

#endif
到目前为止-还不错,但是: 我计划使用该组件的真正的最终应用程序是使用clang编译器构建的

将测试应用程序的编译器更改为CLANG(32位)会引发链接器错误:“未解析的外部\uu InitExceptBlockLDTC

因此,我将BPL的编译器设置也更改为CLANG(32位)。 -安装组件成功了,但组件本身从调色板中显示出来

然后我添加了“-tP”选项,如下所述:

结果:

  • 组件返回到调色板

  • 也可以将网格放在TestApplications表单上

…但双击OnDrawCell事件会创建以下断开的代码:

void __fastcall TForm1::DBGridHack1DrawCell(Variant , int , int , Variant &, Variant )
{

}
现在我有点困了。 创建用于CLANG编译器的VCL组件的正确方法是什么

致意 赫尔维格


<我的设置是:在MS Windows 10上的AppCad Eng+C++ Builder XE10西雅图(没有更新订阅包)。在代码< >代码> tdGrase.OnDRAPENCINCELL 和 TBGRADE中,您需要做什么?关于
\uuu InitExceptBlockLDTC
错误,当启用运行时包时,clang编译器会出现问题,因此您通常必须将其关闭,当您创建自己的包希望与调用应用程序共享RTL包时,这不是一件好事。在编写自定义包时,您可能必须坚持使用经典的32位编译器,甚至切换到Delphi。我需要在标题行中进行修改(例如绘制图标)。恐怕这不能由OnDrawDataCell完成。如果我有德尔菲个性,我会这样做,但我只有C++ Builder。我得到的上一个Delphi许可版本是XE2…RTL/VCL是用Delphi编写的,所以C++Builder包括一个Delphi编译器,即使您没有Delphi的个性。你可以在C++项目中使用<代码> .pas<代码>文件。或者使用命令行Delphi编译器。东京C++ +2.2.1仍然存在同样的问题,因此我们不能使用Clang,因为它不支持自定义包。
void __fastcall TForm1::DBGridHack1DrawCell(TObject *Sender, int ACol, int ARow,
          const TRect &Rect, TGridDrawState State)
{
    // do something here....
}
void __fastcall TForm1::DBGridHack1DrawCell(Variant , int , int , Variant &, Variant )
{

}