Как заставить Delphi TSpeedButton оставаться нажатой, если она единственная в группе
Я не уверен, почему TSpeedButton имеет это свойство, но когда TSpeedButton является единственной кнопкой данного groupindex, она не остается нажатой, нажата ли "AllowAllUp". Может быть, джедайский контроль был бы достаточным, но, надеюсь, есть какое-то исправление. Любая помощь или анекдоты приветствуются.
кстати, я (все еще) использую Delphi 7, не уверен, что это сквозная головоломка.
11 ответов
У меня здесь нет D7, но в D2006 кнопка Speed остается вниз, если GroupIndex имеет значение > 0.
Если это не то поведение, которое вы хотите, вы можете установить Down-свойство вручную в OnClick-Eventhandler (убедитесь, что GroupIndex равен 0).
Я только что попробовал это в Delphi 7 (Build 4.453):
- создать новое приложение
- добавить
TSpeedButton
в форме - set
AllowAllUp := true;
- set
GroupIndex := 1;
- запустить приложение
при нажатии кнопки он переключает его вниз состояние без какого-либо другого кода, необходимого.
knight_killer является правильным. я могу сказать вам, что он будет работать в любой версии delphi:
object SpeedButton1: TSpeedButton
Left = 152
Top = 384
Width = 23
Height = 22
AllowAllUp = True
GroupIndex = 99
end
Delphi делает работу за вас, поэтому "не пишите никакого кода".
в IDE выберите все ваши кнопки SpeedButtons, которые вы хотите работать как группа, а затем все "GroupIndex группы" на что-то другое, чем "0" и вы закончили - без кода - нада!!
Хм, странно, я помню, что использовал это несколько раз с успехом. Возможно, вы должны попробовать играть с SpeedButton в Down
собственность? Я не думаю, что он автоматически переключается при нажатии на него - - - вы должны явно переключать Down
, Я думаю...
[edit: replaced 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;
....