我制作了一组钢琴键盘图像,全部有两个版本 - 一个是白色,第二个是红色。我将所有按键图片排列在一起,第一个是白色键,然后是红色。现在我想隐藏红色,只有当它点击某个白键时才需要显示,所以它需要在视觉上显示它是否被按下了。当它被释放后再回到白色。
我也对使用midi键盘感兴趣,所以想知道如何使用midi数据实现这一目标? 感谢
答案 0 :(得分: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)事件来实现此目的,在该事件中,您可以检查您的钢琴键是否为红色,然后将其更改为白色。
对于在按下和未按下的按键版本之间切换的一般方法,不要通过将它们放在前面或将它们发回来改变它们的位置,因为这会搞砸控件的点击检测(默认情况下,最顶层检测点击)。
而是使用一组控件并在运行时更改其图像。
如果您对创建自定义组件有任何考验,可以快速创建一个具有两个状态和两个图像的状态。所以最后你只能用ckicks或代码在两个状态之间切换 如果您没有创建自定义组件的经验,请告诉您现在使用哪些组件,我可以尝试使用上述功能为您创建该组件的自定义版本。