delphi - 仅使用内置工具在 Delphi XE 中制作组件图标的最佳方法

标签 delphi components delphi-xe

在Delphi 7中,包含了一个图像编辑器程序,它可以读写.dcr文件,这些文件只是二进制资源文件(.res文件),具有不同的扩展名,按照惯例,它表示 .dcr 文件包含一个已编译的资源,该资源具有命名的位图资源,这些资源的名称与您的组件名称相对应(对于名为 TMyComponent 的组件,名为 TMYCOMPONENT 的位图资源)。这些位图是用于在 Delphi 组件面板上放置图标的“图标”的来源,以及当您将非可视组件放在其上时在表单或数据模块上放置图标的位置。

快进到 Delphi XE 10 年了,我正在尝试使用位图文件和 RC 文件制作组件图标,并将其构建为 .DCR 文件,作为 Delphi IDE 的一部分。

只需在 .dpk(包源)文件中添加一个 .Rc 文件和这样的声明即可,如下所示:

{$R mypackageicons.rc mypackageicons.dcr}

包含组件图标的示例 .rc 文件:

 // COMPONENT ICON RESOURCES
 TMYCOMPONENT BMP "TMYCOMPONENT.BMP"

但是我无法让它工作。当我尝试时,您似乎遇到了一些奇怪的 RLINK32 错误,并且 IDE 在 borlandmm.dll 中崩溃:

[DCC Error] E2161 Error: RLINK32: Unsupported 16bit resource in file "C:\temp\compicon\COMPONENTICONS.rc"
[DCC Fatal Error] F2084 Internal Error: AV21515155-W06000D07-1

有问题的位图文件是一个简单的 256 色 bmp 文件,大小为 24x24 像素,我也尝试过 16 色位图,但没有成功。在我看来,ImageEdit 程序是我所知道的唯一可以用来创建 Delphi 组件图标的方法。

我错过了什么?

更新: 对于无法访问 Delphi 7 图像编辑器的人来说,外部工具是一个很好的解决方案,实际上可能更优越,但我更愿意仅使用Delphi 附带了什么,因为看起来应该可以只使用一个 {$R} 声明、一个文本文件和一个用画笔制作的 bmp 文件。当然,他们没有忽略使用这个伟大的 1.5 GB 开发工具来制作组件图标! .. 更新2:有一种方法;鲁迪·V. 找到了它。

最佳答案

我已经使用并取得了巨大成功:

更新

我刚刚在 XE 中尝试了以下操作,并且成功了。

  • 我在 NewAnimates.pas 中创建了一个新组件 TNewAnimate
  • 我将TNewAnimate.pas添加到dclusr.dpk
  • 我使用项目→资源和图像...对话框向添加了一个位图(名为TMRUComboBox.bmp,无论如何我都有它) .dpk 并将其命名为 TNEWANIMATE
  • 我重新安装了dclusr.dpk

dclusr.pdk 的源文件有一个新条目 {$R *.dres}(注意扩展名)。我可以在 Samples 调色板中看到 TNewAnimate 以及 TMRUComboBox.bmp 中的字形。

我将dclusr.dres定位在与dclusr.dpk相同的目录中(通常位于C:\Program Files下,但不是在我的设置中)。我尝试使用 XN 资源编辑器打开它,但拒绝打开它,并显示一条神秘的错误消息。看来这不是一个普通的 .res 文件。

enter image description here

关于delphi - 仅使用内置工具在 Delphi XE 中制作组件图标的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6999939/

相关文章:

windows - Delphi XE 和使用 OnKeyDown 捕获箭头键

delphi - 如何在 VirtualTreeView 中将单元格与背景图像混合颜色?

c++ - [C++]构造函数不检测组件

javascript - React.createElement : type should not be null

delphi - 在 Delphi 中将 TCheckBox 放入 TStringGrid 中

multithreading - FloatToStr/DateToStr 的线程安全性

delphi - 出现效果,第二次显示窗口时

delphi - Indy 9 SMTP 使用 TLS 发送导致崩溃

spring - 扩展非容器类的 Autowiring 类

iphone - 如何使用 Delphi Firemonkey 在 iPhone 应用程序上使用手势?