【问题标题】:How to change one image with another on click and back it again on release in Delphi?如何在单击时将一个图像更改为另一个图像并在 Delphi 中发布时再次返回它?
【发布时间】:2014-11-14 10:54:30
【问题描述】:

我制作了一组钢琴键盘图像,都有两个版本——一个是白色的,第二个是红色的。我将所有按键图片并排排列,首先是白色按键,然后是红色按键。现在我想隐藏红色的,它们只需要在单击某个白键时才显示,因此需要在视觉上显示为好像按下它一样。然后在释放时变回白色。

我也有兴趣用我的 MIDI 键盘来做这件事,所以想知道如何用 MIDI 数据来实现这一点? 谢谢

【问题讨论】:

  • 你在使用重叠的 TImage 控件吗?
  • 你的意思是前后带?嗯……好主意。但是如何点击?
  • 为什么不用 TSpeedButton 和字形?您可以在一个位图中使用四个图像...
  • 不能,图片是png格式的。

标签: image delphi swap midi


【解决方案1】:

如何实现这一点取决于您用于显示按钮的 Controll。

如果您使用 TImages,则使用 OnMouseDown (http://docwiki.embarcadero.com/Libraries/XE7/en/Vcl.Controls.TControl.OnMouseDown) 和 OnMouseUp (http://docwiki.embarcadero.com/Libraries/XE7/en/Vcl.Controls.TControl.OnMouseUp) 事件。

在 OnMouseDown 中,您将钢琴键颜色变为红色。
在 OnMouseUp 中,您将 Paino Key 颜色变为白色。

如果您决定采用这种方法,您可能还需要处理特殊情况(用户在按下鼠标按钮时将鼠标从键上移开)。
您可以通过 OnMouseLeave (http://docwiki.embarcadero.com/Libraries/XE7/en/Vcl.Controls.TControl.OnMouseLeave) 事件来实现这一点,在该事件中检查您的钢琴键是否为红色,然后将其更改为白色。

至于在按下和未按下的键版本之间切换的一般方法,不要通过将它们放在前面或将它们送回来改变它们的位置,因为这会破坏你的控件的点击检测(默认情况下,最上面的检测点击)。
而是使用一组控件并在运行时更改它们的图像。

如果您有任何创建自定义组件的经验,您可以快速创建一个具有两种状态和两个图像的每个状态。所以最后你只能用 ckick 或代码在两种状态之间切换。
如果您没有创建自定义组件的经验,请告诉您现在使用哪些组件,我可以尝试为您制作具有上述功能的该组件的自定义版本。

【讨论】:

  • 嗨,我现在使用 Timages
猜你喜欢
  • 1970-01-01
  • 2019-06-21
  • 2015-06-27
  • 1970-01-01
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多