如何使Delphi TSpeedButton在组中是唯一的时候保持按下状态

14

我不确定为什么 TSpeedButton 有这个属性,但当一个 TSpeedButton 是给定 groupindex 的唯一按钮时,它不会保持按下状态,无论 "AllowAllUp" 是否按下。也许 Jedi 控件可以解决问题,但希望能找到一些解决方法。非常感谢任何帮助或趣闻轶事。

顺便说一下,我仍在使用 Delphi 7,不确定这是否是普遍的难题。

11个回答

19

我这里没有 D7,但在 D2006 中,如果 GroupIndex 的值大于 0,则 Speedbutton 会保持按下状态。

如果这不是您想要的行为,您可以在 OnClick-Eventhandler 中手动设置 Down 属性(确保 GroupIndex 是 0)。


15

我刚试了一下Delphi 7(版本4.453):

  • 创建新的应用程序
  • 在表单中添加TSpeedButton
  • 设置AllowAllUp := true;
  • 设置GroupIndex := 1;
  • 运行应用程序

单击按钮时,它会切换到其下降状态,不需要任何其他代码。


就像一个完美的答案一样,开发者们现在非常懒。 - user30478
如果你阅读了Delphi的文档以及任意数量关于该主题的书籍,这就是它的实现方式。自从Delphi 1以来一直如此。(除了GroupIndex可以是任何一个未被其他按钮GroupIndex值使用的值;该按钮需要一个唯一的数字。) - David Schwartz
如果你阅读了Delphi的文档以及关于这个主题的任何数量的书籍,这就是它的实现方式。自从Delphi 1以来就一直是这样。(除了GroupIndex可以是任何其他按钮GroupIndex值未使用的值;该按钮需要一个唯一的数字。) - undefined

2

Delphi可以为您完成所有工作,因此“无需编写任何代码”。

在IDE中选择您想要作为组操作的所有SpeedButton,然后将整个组的“GroupIndex”设置为非“0”值,您就完成了 - 没有代码 - 什么都没有!!


2

knight_killer是正确的。我可以告诉你,在任何版本的Delphi中都可以使用:

object SpeedButton1: TSpeedButton
  Left = 152
  Top = 384
  Width = 23
  Height = 22
  AllowAllUp = True
  GroupIndex = 99
end

1
是的,您可以使用任何GroupIndex。但它必须大于零。 - Roman Ganz

1
嗯,奇怪,我记得我用过这个功能很多次并且成功了。也许你应该尝试一下调整SpeedButton的Down属性?我不认为它在你单击它时会自动切换 - 你应该明确地切换Down,我猜...

[编辑:用Down替换了Checked - TSpeedButton没有Checked属性,抱歉!]


1

诀窍是将GroupIndex设置为唯一值,并将AllowAllUp设置为true。 如果您忘记了第一个,它将无法保持下降状态;如果您忘记了第二个,它将无法保持上升状态,一旦它已经下降。


1

GroupIndex用于对按钮进行分组。每个组中只能有一个按钮处于激活状态。所有按钮的索引都必须大于0

AllowAllUp允许在连续点击两次时切换按钮的按下和弹起状态。


0
将AllowAllup设置为true,Down设置为false。
然后在OnClick事件中:
....
btn.AllowAllUp := not btn.AllowAllUp;
btn.Down       := not btn.Down;
....

0
为了使这个工作起来,你不能只切换下拉属性,因为在OnClick事件中它总是下拉的。你需要有另一个值:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  MyBoolProperty := not MyBoolProperty;
  SpeedButton1.Down := MyBoolProperty;
end;

-1

将AllowAllUp设置为True。

将GroupIndex设置为非0值。

为了保持所有内容都在OnClick中,尝试使用

 with Speedbutton1 do
 begin
      if tag = 1 then tag := 0 else tag := 1;
      down := (tag = 1);
 end;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接