Como fazer uma estadia Delphi TSpeedButton pressionado se é o único no grupo

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

  •  03-07-2019
  •  | 
  •  

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.

Foi útil?

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;
....
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top