Как сделать так, чтобы кнопка Delphi TSpeedButton оставалась нажатой, если она единственная в группе

StackOverflow https://stackoverflow.com/questions/202702

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

У меня здесь нет D7, но в D2006 кнопка Speedbutton остается нажатой, если groupIndex имеет значение > 0.

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

Другие советы

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

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

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

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

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

Delphi делает всю работу за вас, поэтому "не пишите НИКАКОГО КОДА".

В среде IDE выберите ВСЕ ваши кнопки быстрого доступа, которыми вы хотите управлять как группой, а затем установите для всей "groupIndex" группы значение, отличное от "0" и вы закончили - без КОДА - НАДА!!

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

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

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

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  MyBoolProperty := not MyBoolProperty;
  SpeedButton1.Down := MyBoolProperty;
end;

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

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

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

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

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

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

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

Я искал решение своей проблемы, и я думаю, что это примерно то же самое.Я хотел заставить SpeedButton переключать состояние вверх и вниз точно так же, как переключатель, и я справился с этим, установив свойства:

AllowAllUp := True; 
GroupIndex := 1;

Затем в OnClick событие кнопки, которую я написал:

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  if( SpeedButton1.AllowAllUp ) then 
  begin 
    SpeedButton1.AllowAllUp := False; 
    SpeedButton1.Down := True; 
  end else 
  begin 
    SpeedButton1.AllowAllUp := True; 
    SpeedButton1.Down := False; 
  end; 
end;

Это переключает кнопку вниз при нажатии и вверх при повторном нажатии.

Надеюсь, это чем-нибудь поможет

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

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

....
btn.AllowAllUp := not btn.AllowAllUp;
btn.Down       := not btn.Down;
....
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top