Como fazer uma estadia Delphi TSpeedButton pressionado se é o único no grupo
Pergunta
Eu não tenho certeza por que o TSpeedButton tem essa propriedade, mas quando um TSpeedButton é o único botão de um determinado groupIndex, não fique pressionado, ou não "AllowAllUp" é pressionado. Talvez um controle Jedi seria suficiente, mas espero que haja alguma correção. Qualquer ajuda ou anedotas são apreciados.
BTW, eu estou (ainda) utilizando Delphi 7, não tenho certeza se este é um outro lado do enigma bordo.
Solução
Eu não tenho D7 aqui, mas em D2006 um speedbutton estadias para baixo se o GroupIndex tem um valor> 0.
Se isto não é o comportamento que você desejar, você pode definir o Down-propriedade manualmente no OnClick-eventhandler (certifique-se, que o GroupIndex é 0).
Outras dicas
Eu apenas tentei isso em Delphi 7 (criação de 4.453):
- criar novo aplicativo
- add
TSpeedButton
a forma - set
AllowAllUp := true;
- set
GroupIndex := 1;
- Aplicação de correr
Ao clicar no botão alterna seu estado para baixo, sem qualquer outro código necessário.
knight_killer está correto. eu posso dizer-lhe que ele vai trabalhar em qualquer versão do Delphi:
object SpeedButton1: TSpeedButton
Left = 152
Top = 384
Width = 23
Height = 22
AllowAllUp = True
GroupIndex = 99
end
Delphi faz o trabalho para você assim "não escrever qualquer código".
No IDE selecionar todos os seus SpeedButtons que você deseja operar como um grupo e, em seguida, definir o conjunto do grupo "GroupIndex" para algo diferente de "0" e está feito - com nenhum código - NADA !!
Hm, estranho, eu me lembro usando este algumas vezes com sucesso. Talvez você deve tentar jogar com a propriedade Down
do speedbutton? Eu não acho que ele alterna automaticamente quando você clicar nele --- você deve explicitamente alternância Down
, eu acho ...
[edit: Checked
substituído por Down
--- TSpeedButton não tem uma propriedade Checked
, desculpe]
Para chegar a este trabalho, você não pode simplesmente alternar a propriedade para baixo, porque é sempre para baixo no evento OnClick. Você precisa ter um outro valor:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
MyBoolProperty := not MyBoolProperty;
SpeedButton1.Down := MyBoolProperty;
end;
O truque é definir o GroupIndex para um valor único e conjunto AllowAllUp para true. Se você esquecer a primeira, ele não vai ficar para baixo, se você esquecer a segunda, ele não vai ficar, uma vez que tem sido baixo.
Set AllowAllUp para True.
Set GroupIndex para não 0.
Para manter tudo no OnClick, tente
with Speedbutton1 do
begin
if tag = 1 then tag := 0 else tag := 1;
down := (tag = 1);
end;
grupos GroupIndex
os botões. Apenas um botões no grupo pode estar ativa. Todos eles tem de ter o mesmo índice maior do que 0
.
AllowAllUp
permite botão para alternar para baixo e para cima, quando é clicado 2 vezes em uma linha.
Eu estava procurando por uma solução para o meu problema e eu acho que isso é uma espécie da mesma. Eu queria fazer um speedbutton alternância cima e para baixo estado apenas como um interruptor, e eu consegui isso definindo as propriedades:
AllowAllUp := True;
GroupIndex := 1;
Em seguida, no caso OnClick
do botão I escreveu:
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;
Isso alterna o botão para baixo quando é clicado e quando ele for clicado novamente.
Hope vai ser de alguma ajuda
Set AllowAllUp a verdade, e para baixo para falso.
Então, em evento OnClick
:
....
btn.AllowAllUp := not btn.AllowAllUp;
btn.Down := not btn.Down;
....