修复了启用更改按钮" Down"状态

时间:2016-08-14 18:04:31

标签: delphi button delphi-5

我在一个有多种用途的表单上有一些TSpeedButtons。在一种模式中,我不想点击一个按钮,因此我只需设置"启用:=假;"

但是,如果它是Down 并且我强制它为Enabled:= False它会进入Up-State。如何防止"启用"影响当前的上/下状态,因为我仍然需要它来直观地显示当前状态。

1 个答案:

答案 0 :(得分:4)

简而言之,您无法使用标准TSpeedButton执行您要求的操作。这就是编码工作的方式。

Enabled上将TSpeedButton设置为false时,无论其Down属性如何,该按钮都将处于禁用状态。 TSpeedButton.Paint()方法强制State属性为bsDisabled,消除任何当前的Up / Down状态。在Delphi 5中,这会导致按钮以Up外观绘制。在更现代的Delphi版本中,如果启用了视觉样式,则按钮将以平面外观绘制,既不是向上也不是向下。

更改此行为的唯一方法是:

  1. TSpeedButton派生一个新类并覆盖虚拟Paint()方法,以便您可以随意自定义按钮。但是,您必须绘制整个按钮。

  2. 在XE2及更高版本中制作VCL的Buttons.pas源文件(Vcl.Buttons.pas)的副本,将复制的文件添加到项目中(确保禁用运行时包),然后可以根据需要修改implementation本身的TSpeedButton.Paint()。请注意,这会影响项目中的每个TSpeedButton