问题标签 [c++builder-xe5]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
8910 浏览

c++ - 在 Embarcadero C++Builder XE5 中将 .png 加载到 TImage

我需要加载 .png 图像,因为我需要它的透明度。例如在 bmp 中转换它不是一个选项,因为我失去了它的透明度。我怎样才能做到这一点?

0 投票
0 回答
209 浏览

windows-8 - Windows 8 标准 VCL 风格/主题

我目前正在使用 Rad Studio XE5,我想根据标准 Windows 8 样式(不是现代 UI)创建自己的样式。我正在使用 Rad Studio 中称为位图样式设计器的内置设计器。但是,我似乎无法为 Windows 主题找到 vsf 文件。有谁知道我在哪里可以找到这个,或者它是否存在?谢谢。

0 投票
1 回答
644 浏览

c++builder - 如何将新的位图格式添加到 TBitmapCodecManager

我写了一个读写PPM文件的类(别问,我没选这种格式)。我希望它成为TBitmap加载/保存系统的一部分。

有谁知道我可以如何添加这种支持?我真的必须编写/安装完整的编解码器吗?

解决方案:

通过 Remy Lebeau 的帖子,我设法编写并注册了一个编解码器。然而,所有需要的功能都没有记录,所以它需要一些试验/错误才能让它工作。

要注册新的编解码器,您需要使用这样的静态RegisterBitmapCodecClass成员TBitmapCodecManager

编解码器需要定义这些函数:

该类Fmx::Surfaces::TBitmapSurface没有任何文档痕迹,但 IDE 为我提供了可用的功能。我认为该Pixels[x][y]数组用于读取/写入像素。

注册课程后,您可以像往常一样读取新的图像类型TBitmap->LoadFromFile("");

享受!

PS。那些投票结束这个的人,请评论为什么?如果我们不知道自己犯了什么错误,我们如何改进?

0 投票
2 回答
944 浏览

c++builder - .res 文件是否需要在源代码管理中?

在 C++Builder XE5 中。

我的理解二进制文件MyProject.res(由编译器在与.cbproj文件相同的目录中创建)包含程序图标的编译版本和项目版本详细信息(尽管我的似乎也包含 XML 清单)。

但是这个信息也包含在.cbproj文件和.ico files; 如果我删除该.res文件,那么它似乎会被重新创建,就像我下次打开项目时一样。

那么标记*.res为不在源代码管理中是否安全?(我用git)。和/或者是否可以在与目标文件相同的目录中生成它,所以它不会与源文件混合?

(这在 C++Builder 5 中肯定是不安全的——如果你删除了 .res 文件,那么它会抱怨找不到它,并且你丢失了你的图标)。

更新:这也适用于.tlb文件吗?这似乎是根据.ridl文件编译的,如果我删除它,它会自动重新生成。

0 投票
0 回答
134 浏览

com - 仅允许 COM 对象的单个实例

有没有一种好方法可以强制在任何时候只能创建我的 COM 对象的一个​​实例(由进程内服务器提供服务)?

目前我正在 TMyObjectImpl 的构造函数中创建一个 Windows 互斥锁;如果互斥体已经存在,那么我设置一个标志以将我的对象置于“死”状态:当设置此标志时,接口函数的所有实现都将返回一个错误代码。

我想抛出一个异常而不是像这样创建一个“死”对象,但是跨 COM 边界抛出 C++ 异常并不好,我不确定 COM 的 C++Builder 实现是否可以处理这个问题可靠。

实际上有两种可能的问题场景:

  • 相同的过程创建两个 MyObject
  • 两个不同的进程分别创建一个 MyObject

互斥锁可以防止这两种情况。

我的对象工厂函数是:

根据 C++Builder DocWiki,设置 Instancing 属性对进程内服务器没有影响 -ciMultiInstance即使您指定ciSingleInstance.

我的对象需要这个属性,因为它访问全局资源(例如写入特定磁盘位置的文件);对象的语义是这样的,一次只应该打开一个。我不希望添加对我的对象的多个实例的支持。

0 投票
2 回答
42 浏览

c++builder-xe5 - 在用户组件中设置父级

我在 XE5 中创建了两个用户组件。第一个是 TCustomPanel 的后代,它的目的是成为第二个组件的容器,它是 TCustomLabel 的后代。

容器。

所包含的。

到目前为止一切顺利,组件已安装,它们出现在调色板中,它们的属性出现在检查器中。但...

如果MenuPanel 放在窗体上,MenuLabels 就放在里面。如果它放置在窗体中的面板上,则菜单标签将放置在面板中。有趣的是,如果将放置在表单中的 MenuPanel 剪切并粘贴到面板上,则 MenuLabels 位于 MenuPanel 中。

菜单面板中的菜单标签

我知道这与设置 MenuPanel 的父属性有关,但构造函数采用 TComponent *Owner 参数,即 Form。然而,面板可以放置在面板内,面板内,标签将放置在右侧。

有没有人遇到过同样的问题?

0 投票
1 回答
976 浏览

c++ - 使用 TEventLogger 在事件查看器中使用 C++ 记录事件

我想在我的应用程序执行期间记录错误日志。我正在尝试使用带有 C++ Builder XE5 的 VCL 表单应用程序将事件写入 Windows 事件查看器。我正在使用 Vcl.SvcMgr.TEventLogger 类。头文件中的代码是:

cpp文件中的代码是:

但在我的消息旁边,在事件查看器的错误描述中有一条消息:“找不到来自源 MySource 的事件 ID 0 的描述。引发此事件的组件未安装在本地计算机上,或者安装是腐败。” . 如何删除该描述并只写我想要的消息?我应该使用其他 C++ 类吗?我找不到有关此类的任何文档。使用事件查看器的想法是,当应用程序在具有受限权限的用户上运行时,他将无法写入文件,这意味着我不能只输入“.txt”文件。如果其他人有不同的想法如何制作有错误的日志,请分享!:)

在此先感谢,兹德拉夫科

0 投票
0 回答
660 浏览

delphi - 如何修复delphi XE5中的断言失败异常?

如何修复delphi XE5 RAD studio中的断言错误?在我的项目中,我有一个连接到火鸟数据库的 sqlconnection。当我将连接属性设置为 true 时,编译器会显示一个错误。

按下 OK 按钮后,IDE 突然关闭。我使用 XE5 作为开发 IDE。我不明白为什么会导致这个异常。谁能给我一个解决方案?

0 投票
0 回答
259 浏览

dll - 在 firemonkey 应用程序中使用 VCL dll

是否可以在 firemonkey 应用程序中使用 VCL dll?我正在尝试将 VCL dll 动态链接到我的 firemonkey 应用程序。GetProcAddress 返回 NULL;这可能是由于两个框架不兼容造成的吗?

是否需要将任何特定代码添加到我的 FM 应用程序才能使 VCL 正常工作?

谢谢和问候, 普里亚

0 投票
1 回答
57 浏览

constructor - 在构造函数中传递 __closure 函数

请参阅这个小脑袋里的男女同校片段:

现在来解决问题。

如果调用bar.SetByAssignment()它工作正常,则函数指针已设置并从 Foo 正确调用。但在这种情况下,它作为公共变量公开。我希望它是私人的。

我想通过在构造函数中传递函数指针来简化类,并将其隐藏为私有,bar.SetByConstructor()但在这里我得到编译器错误:

我认为这__closure将使这成为可能。有没有可能,或者我只是做错了?