我在一个有多种用途的表单上有一些TSpeedButtons。在一种模式中,我不想点击一个按钮,因此我只需设置"启用:=假;"
但是,如果它是Down 并且我强制它为Enabled:= False它会进入Up-State。如何防止"启用"影响当前的上/下状态,因为我仍然需要它来直观地显示当前状态。
答案 0 :(得分:4)
简而言之,您无法使用标准TSpeedButton
执行您要求的操作。这就是编码工作的方式。
在Enabled
上将TSpeedButton
设置为false时,无论其Down
属性如何,该按钮都将处于禁用状态。 TSpeedButton.Paint()
方法强制State
属性为bsDisabled
,消除任何当前的Up / Down状态。在Delphi 5中,这会导致按钮以Up外观绘制。在更现代的Delphi版本中,如果启用了视觉样式,则按钮将以平面外观绘制,既不是向上也不是向下。
更改此行为的唯一方法是:
从TSpeedButton
派生一个新类并覆盖虚拟Paint()
方法,以便您可以随意自定义按钮。但是,您必须绘制整个按钮。
在XE2及更高版本中制作VCL的Buttons.pas
源文件(Vcl.Buttons.pas
)的副本,将复制的文件添加到项目中(确保禁用运行时包),然后可以根据需要修改implementation
本身的TSpeedButton.Paint()
。请注意,这会影响项目中的每个TSpeedButton
。