【问题标题】:is it possible to load a jpg/png image into a TbitBtn or a TSpeedButton?是否可以将 jpg/png 图像加载到 TbitBtn 或 TSpeedButton 中?
【发布时间】:2019-06-28 14:37:13
【问题描述】:

我需要在按钮中显示图像,以便用户在视觉上更容易知道按钮的用途,而不是阅读其文本。

据我所知,TBitBtnTSpeedButton 是可以显示图像的按钮,但我对此一无所知,我想知道是否可以使用 .JPG 或 .PNG文件并将该图像加载到按钮中,以便它显示它。

【问题讨论】:

  • 如果您有兴趣在设计时从 JPEG 或 PNG 加载字形,请参阅此 ancient article from Dr. Bob,他建议创建自定义属性编辑器 - TPictureEditor。它可以使用 JPEG 和 PNG 轻松扩展。这样您就可以在设计时将任何图像格式转换为 TBitmap。

标签: delphi vcl


【解决方案1】:

是的,这是可能的。 TBitBtn 类型按钮的背景颜色在某些情况下默认是透明的。创建具有透明背景的 PNG 图像。在窗体上放置一个 TImage 组件。将 PNG 图像加载到 TImage 组件的 Image 属性中。将带有所选图像的 TImage 组件放在窗体上 TBitBtn 按钮所在的位置。在图像上放置一个 TBitBtn 按钮。这将是一个不错的按钮。

  • 在 Lazarus IDE、Linux 中测试。如果按钮和图像放置在组件 TGroupBox 上,则可以正常工作。如果将它们放在其他分组组件上,则不会显示 TBitBtn 的透明背景。

【讨论】:

  • 还需要禁用TImage。
【解决方案2】:

TBitBtnTSpeedButton 只支持 BMP 图片,不支持 JPG/PNG。您必须将 JPG/PNG 图像转换为 BMP(这可以在代码中通过先将图像加载到 TJPEGImage/TPNGImage,然后将 Assign() 加载到按钮的 Glyph 来完成,这是一个 @ 987654325@)。

在现代 Delphi 版本中,TButton 有一个Images 属性,您可以将任何TCustomImageList 分配给该属性,并且您可以将PNG 图像添加到标准TImageList,或使用第3 方PNG ImageList。

否则,您可以创建自己的所有者绘制按钮来直接绘制 JPG/PNG 图像。从TButton 派生并覆盖其CreateParams() 方法以启用BS_OWNERDRAW 样式,然后处理WM_DRAWITEM 消息以根据需要绘制按钮(这是TBitBtn 所做的)。

【讨论】:

  • 感谢@Remy,我在 Delphi Rio 上,您的第二次建议对我帮助很大,这正是我所需要的。
【解决方案3】:

不,您不能将文件分配给其中任何一个。如果您不知道某个控件,请查阅该控件的手册:http://docwiki.embarcadero.com/Libraries/Tokyo/en/Vcl.Buttons.TBitBtnhttp://docwiki.embarcadero.com/Libraries/Tokyo/en/Vcl.Buttons.TSpeedButton

您必须间接执行此操作:将文件加载到 TBitmap,然后将其分配给按钮的 Glyph 属性 - 手册通过 http://docwiki.embarcadero.com/CodeExamples/Tokyo/en/TBitBtnLayout_(Delphi) 为您提供了一个示例

【讨论】:

  • 可以将 BMP(不是 JPG 或 PNG)直接加载到 Glyph 中,您不需要使用中间 TBitmap
  • 这只是“你不需要使用不同颜色的中间变量”,而且true= true 这样明显是多余的
猜你喜欢
  • 2014-12-19
  • 1970-01-01
  • 2019-08-25
  • 2013-05-10
  • 2021-07-03
  • 2020-06-11
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多