我想创建一个包含一些 TImage 的自定义控件(来自 TPanel)。我想在这些法师中显示 PNG(透明)。因此,我试图通过 IDE 的“资源和图像”将 PNG 附加到包中。
问题是,当我将组件放入测试应用程序时,它将失败MyPng->LoadFromResourceName
并显示“找不到资源”。有趣的是,如果我将 PNG 作为资源添加到测试应用程序中,它将起作用。
这意味着该组件正在为 PNG 资源查找错误的模块。
我用 ShowMessage 打印实例,它确实显示了“ComponentTester.exe”。
__fastcall TVolumeCtrl::TVolumeCtrl(TComponent* Owner)
: TPanel(Owner)
{
HINST h = FindClassHInstance(__classid(TVolumeCtrl));
ShowMessage(GetModuleName(h));
TPngImage *Png3 = new TPngImage();
MyPng->LoadFromResourceName(h, "Btn1");
如何获得正确的实例?
注意:PNG 文件被编译成生成的 RES 文件。我用十六进制查看器查看内部。
唯一有意义的解释是您没有使用运行时包。所以你没有加载包含资源的模块。
在这种情况下,链接组件资源的正确方法是$R
在声明类型的源文件中使用指令TVolumeCtrl
。这样,资源将链接到包含TVolumeCtrl
. 当您编译运行时包(由您的设计时包在设计时使用)时,它将是一个包,当您编译不使用运行时包的可执行文件时,它将是可执行文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句