Как заставить Delphi TSpeedButton оставаться нажатым, если он единственный в группе - PullRequest
11 голосов
/ 15 октября 2008

Я не уверен, почему TSpeedButton имеет это свойство, но когда TSpeedButton является единственной кнопкой данного группового индекса, он не остается нажатым, независимо от того, нажата ли кнопка «AllowAllUp». Возможно, контроля джедая будет достаточно, но, надеюсь, есть какое-то решение. Любая помощь или анекдоты приветствуются.

Кстати, я (все еще) использую Delphi 7, но не уверен, что это загадка по всем направлениям.

Ответы [ 11 ]

17 голосов
/ 15 октября 2008

У меня нет D7 здесь, но в D2006 кнопка Speed ​​не работает, если GroupIndex имеет значение> 0.

Если это не то поведение, которое вы хотите, вы можете установить свойство Down вручную в OnClick-Eventhandler (убедитесь, что GroupIndex равен 0).

11 голосов
/ 15 октября 2008

Я только что попробовал это в Delphi 7 (Build 4.453):

  • создать новое приложение
  • добавить TSpeedButton в форму
  • набор AllowAllUp := true;
  • набор GroupIndex := 1;
  • запустить приложение

При нажатии на кнопку она переключается в нерабочее состояние без какого-либо другого кода.

2 голосов
/ 01 июня 2011

Delphi сделает всю работу за вас, поэтому "не пишите ЛЮБОЙ КОД".

В IDE выберите ВСЕ ваши кнопки SpeedButton, которые вы хочу работать как группа, а затем установить весь GroupIndex группы к чему-то кроме «0» и все готово - без кода - НАДА !!

2 голосов
/ 15 октября 2008

knight_killer правильно. я могу сказать вам, что это будет работать в любой версии Delphi:

object SpeedButton1: TSpeedButton
  Left = 152
  Top = 384
  Width = 23
  Height = 22
  AllowAllUp = True
  GroupIndex = 99
end
1 голос
/ 10 марта 2014

Чтобы заставить это работать, вы не можете просто переключить свойство Down, потому что оно всегда в событии OnClick. Вам нужно иметь другое значение:

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  MyBoolProperty := not MyBoolProperty;
  SpeedButton1.Down := MyBoolProperty;
end;
1 голос
/ 15 октября 2008

Хм, странно, я помню, что использовал это несколько раз с успехом. Возможно, вам стоит попробовать поиграть со свойством SpeedButton Down? Я не думаю, что он переключается автоматически, когда вы нажимаете на него - вы должны явно переключить Down, я думаю ...

[редактировать: заменено Checked на Down --- TSpeedButton не имеет свойства Checked, извините!]

0 голосов
/ 20 октября 2017

GroupIndex группирует кнопки. Только одна кнопка в группе может быть активной. Все они должны иметь одинаковый индекс выше 0.

AllowAllUp позволяет переключать кнопку вниз и вверх при нажатии на нее 2 раза подряд.

0 голосов
/ 03 апреля 2015

Установите для параметра AllowAllUp значение True.

Установите для GroupIndex значение, отличное от 0.

Чтобы сохранить все в OnClick, попробуйте

 with Speedbutton1 do
 begin
      if tag = 1 then tag := 0 else tag := 1;
      down := (tag = 1);
 end;
0 голосов
/ 05 марта 2013

Установите для параметра AllowAllup значение true, а для Down значение false.

Затем в OnClick событие:

....
btn.AllowAllUp := not btn.AllowAllUp;
btn.Down       := not btn.Down;
....
0 голосов
/ 30 октября 2008

Хитрость заключается в том, чтобы установить для GroupIndex уникальное значение и установить для AllowAllUp значение true. Если вы забудете первое, оно не остановится, если вы забудете второе, оно не будет оставаться включенным после того, как оно упало.

...