【问题标题】:Create Image Button in FireMonkey在 FireMonkey 中创建图像按钮
【发布时间】:2014-08-22 17:43:58
【问题描述】:

适用于 XE6、Firemonkey

我正在通过在 firemonkey 中自定义 TSpeedButton 来创建一个带有图像的按钮。我通过在样式编辑器中将图像添加到 TSpeedButton 来做到这一点。新按钮工作正常。我现在想制作另一个图像按钮,所以我想我会复制并粘贴表单上的第一个按钮。我更改了复制按钮中的图像(通过样式编辑器),当我点击应用并关闭时,新按钮会获取新图像。但是我也注意到我复制的原始按钮也得到了新图像。所以现在我有两个具有相同图像的按钮。除了创建一个全新的按钮并添加一个新图像(这确实允许我拥有具有独特图像的按钮)之外,有没有一种方法可以使用复制/粘贴来创建具有自己风格的按钮?

我注意到这个问题与How to edit a control within a FireMonkey style outside of the style designer? 有关,但在这里我想做同样的事情,但从 IDE 中,而不是通过编程方式。

【问题讨论】:

  • 我想我想通了: 1:创建带有图像的按钮; 2)复制粘贴按钮; 3) 在第二个按钮的属性编辑器中,将 StyleLookup 名称更改为新名称。这似乎为复制的按钮创建了一种新样式。我第一次尝试这个时,我在样式编辑器中得到了一些额外的样式(具有重复的名称),我无法删除或选择这些样式,因此我不得不删除所有按钮并重试。除非有更好的答案,否则我会在 24 小时内将此评论推广为答案。
  • 我注意到上述方法的一个问题,它否定了处理按钮的全部意义。当您更改样式的名称时,按钮会丢失所有以前的样式信息,这意味着必须重新设计按钮。这不可能。
  • 您不能简单地将图像控件作为子项添加到按钮中吗?样式不应该包含图像。
  • 使用样式来个性化同一类型的多个组件是一种非常低效的做事方式,因为它从来没有为这样的目的而设计。
  • @Rabbe:您的意思是在样式编辑器中添加子元素还是在运行时以编程方式添加子元素?

标签: delphi firemonkey


【解决方案1】:

他们存在其他方法。这是资源的消耗者,但它们可以按您的意愿工作。

1 - 在您的表单上放置一个 TSpeedButton

2 - 在您的表单上放置一个 TImage 控件。

3 - 使用结构视图(与表单设计器相反),将 Image1 组件拖放到 SpeedButton1 组件上,使 TSpeedButton 属于 Image1 的所有者。

3 - 现在调整 Image1 的尺寸,使其与 SpeedButton 相同。

4 - 在结构视图上,您必须再次选择 Image1 并展开它。它似乎是 MultiResBitMap 拥有的组件。

5 - 也扩展这个组件:MultiResBitmap。它出现了一个名为“0 - Normal (1,000)”的 TFixedBitmapItem

6 - 在Object Inpector上点击他的属性Bitmap的(...)。

现在您可以根据速度按钮复制此结构并更改每个按钮的位图!

7 - 提示!!!您必须将图像的 HitTest 设置为 False, 并将按钮的相同属性设置为 True。在其他情况下,它们似乎不会触发 SpeedButton 的事件处理程序。

【讨论】:

  • 我试过了,但似乎没有用。当我将 timage 移到结构视图中的 speedbutton 上时,timage 就像您预测的那样成为 speedbutton 的子级,但它没有在表单上移动。 timage 和 speedbutton 在视觉上是分开的。
  • 好的,我想我明白你的意思了,同时将表单上的 timage 移到按钮本身上。最后一件事,有没有简单的方法来设置透明度?
  • 将图像对齐属性设置为客户端可能会有所帮助。
  • 弄清楚如何设置透明度,使用TImage本身的MultiresBitmap属性,这会弹出一个新对话框,您可以在其中加载图像并设置透明度颜色。这也意味着不必扩展为 TFixedBitmapItem。我会为此制作一个 YouTube 视频。
  • 使用 FireMonkey 很重要,不要忘记任何组件都是任何其他组件的子组件。这是在平台上获得协同效应的好方法。
猜你喜欢
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 2015-07-25
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-12
相关资源
最近更新 更多