【问题标题】:How cand I include a bitmap in my custom component (if is possible)?如何在我的自定义组件中包含位图(如果可能)?
【发布时间】:2015-08-19 07:35:54
【问题描述】:

我正在编写一个需要在其上显示位图的组件(按钮)。我不想创建 ImageList 属性并且用户分配了图像。我希望该按钮只有我选择的图像。

我尝试将位图包含在资源文件中,但当我尝试访问它时,我收到“找不到资源”错误消息。这就是我所做的:

myres.rc

FIXED BMP "fixed.bmp"

我编译的资源文件是:brcc32 myres.rc

然后我将它包含在我的组件单元中......

implementation
{$R .\resources\myres.res}

然后使用...访问它

MyComponent.Glyph.LoadFromResourceName(HInstance,'FIXED');
// MyComponent = class(TSpeedButton)

编辑1: 我删除了 {$R .\resources\myres.res} 指令,并从菜单 Project -> Resources 加载了资源,它可以使用 HInstance 或 FindClassHInstance(MyComponent)。

使用资源编辑器时,我发现当我从菜单加载资源时,资源显示的名称应为“FIXED”,但是当我加载使用 brcc32 编译的资源时,它显示的名称为“0”。好像brcc32没有正确设置名称。

但我不想从菜单中加载它,我希望它与组件一起自动加载。

编辑2: 雷米勒博是正确的。我使用了错误的 BMP 格式(文件以 'BM6' 字符开头,而不是 'BM8' 像 Photoshop 生成的那样,它可以工作)。

【问题讨论】:

标签: delphi components delphi-2009


【解决方案1】:

将 RC 文件中的 BMP 更改为 BITMAP,并将代码中的 HInstance 更改为 FindClassHInstance()

FIXED BITMAP "fixed.bmp"

Glyph.LoadFromResourceName(FindClassHInstance(MyComponent), 'FIXED');

【讨论】:

  • 在我编写的每个使用自定义位图的组件中都可以正常工作。并且您需要使用FindClassHInstance() 而不是HInstance 以便正确找到组件的资源,无论使用您的组件的项目是否启用了运行时包。 HInstance 不会总是指向你的组件包,但FindClassHInstance() 总是会为你的组件包返回一个合适的实例句柄。
猜你喜欢
  • 2018-09-03
  • 2021-01-05
  • 2015-07-20
  • 1970-01-01
  • 2021-09-14
  • 2011-03-04
  • 2021-09-28
  • 1970-01-01
  • 2020-06-16
相关资源
最近更新 更多