是否可以将 jpg/png 图像加载到 TbitBtn 或 TSpeedButton 中?

is it possible to load a jpg/png image into a TbitBtn or a TSpeedButton?

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

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

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

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

为您提供了一个示例

TBitBtn and TSpeedButton only support BMP images, not JPG/PNG. You would have to convert the JPG/PNG images to BMP (which can be done in code by loading the images into TJPEGImage/TPNGImage first, and then Assign() them to the button's Glyph, which is a TBitmap).

在现代 Delphi 版本中,TButton has an Images property that you can assign any TCustomImageList to, and you can add PNG images to a standard TImageList,或使用第 3 方 PNG ImageList。

否则,您可以创建自己的 owner-drawn 按钮来直接绘制 JPG/PNG 图像。从 TButton 派生并覆盖其 CreateParams() method to enable the BS_OWNERDRAW style, and then handle the WM_DRAWITEM 消息以绘制按钮(这就是 TBitBtn 所做的)。

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

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