Qual botão de rádio está selecionado em um tradiogrupo?
-
22-09-2019 - |
Pergunta
Como você pode ver na minha história de perguntas, estou desenvolvendo um gerente de e-book, que será de código aberto e o lançarei em cerca de 10 dias, mas eu tenho um TRadioGroup
, como você pode ver:
TRADIOGROUP Usado no meu formulário http://img85.imageshack.us/img85/1830/radiogroup.png
E eu quero armazenar algo em uma variável (que precisa ser um Integer
) que estará "vinculado" a isso TRadioGroup
.
Eu preciso fazer um if
função assim:
Legenda do Tradiobutton -> Número que precisará ser armazenado na variável
FIT 2XWidth - Padrão -> 0
Ajuste 2xHeight -> 1
Largura de ajuste -> 2
Altura de ajuste -> 3
Mas eu acabei de usar um TRadioGroup
e a TRadioButton
Uma vez, diferente de C# que usei mais de 20 vezes. Então eu quero saber o que preciso colocar na função IF, porque o que vai fazer eu já sei como fazer:
var
num: Integer;
begin
if(TRadioButton1 checked?)
begin
num := 0;
end;
end.
O que eu preciso colocar dentro dos colchetes do if
função?
PS: Vou colocar os créditos no programa para as pessoas que me ajudaram neste pequeno projeto.
Solução
Um Tradiobutton tem a propriedade verificada. Mas um tradiogrupo possui a propriedade ItemIndex.
Os itens em um tradiogrupo são armazenados usando um TSTRINGS. Assim, você pode associar um objeto a cada opção e ele pode lançar um número inteiro para um objeto para ser armazenado.
Exemplo:
// fill the radiogroup
radiogroup.Items.AddObject('Fit 2xWidth', TObject(0));
radiogroup.Items.AddObject('Fit 2xHeight', TObject(1));
radiogroup.Items.AddObject('Fit Width', TObject(2));
radiogroup.Items.AddObject('Fit Height', TObject(3));
radiogroup.ItemIndex := 0;
Para ler a configuração atual:
value := radiogroup.ItemIndex;
Ou para obter o número inteiro associado:
index := radiogroup.ItemIndex;
Assert(index>=0); // Sanity check
value := Integer(radiogroup.Items.Objects[index]);
No seu caso, os valores são de 0 a 3 para que você possa usar o itemIndex.
Como nota, se não for uma função. Uma função é uma peça de código que retorna um valor com base nos parâmetros de entrada. Se for uma declaração, que é um comando que pode ser executado. A instrução IF é especial porque permite executar uma instrução diferente com base na condição if.
Outras dicas
Apenas uma pequena dica: configuração .ItemIndex
Não envia foco no teclado para o item de rádio, eu sei como corrigi -lo, leia com antecedência.
Em vez de selecionar por codificar um rádio em um radiograma, configurando .ItemIndex
É muito melhor fazê -lo enviando foco para o item de rádio; Só para ser muito claro: quero dizer, enviando foco apenas para o item de rádio, não para todo o grupo de rádio.
Ao invés de: radiogroup.itemindex:=TheIndex;
Faça assim: TRadioButton(radiogroup.Controls[TheIndex]).SetFocus;
Isso fará com que o item de rádio seja selecionado e Envie o foco do teclado para ele, por isso exibirá o controle de retângulo pontilhado, como se o usuário tivesse clicado nele.
Nota 1: Para vê -lo em ação, use as teclas do cursor do teclado e compare o comportamento de apenas configurar .ItemIndex
e enviando foco para o item de rádio.
Nota2: Se você usa TRadioButton(radiogroup.Controls[TheIndex]).SetFocus;
Então não há necessidade de definir .ItemIndex
de jeito nenhum, também será feito.
Espero que ajude alguém a ter o mesmo problema que eu, quando precisar defini -lo por código, por exemplo, para evitar o comportamento circular do teclado, por exemplo, para que ele permaneça no último item de rádio quando o último item de rádio é selecionado e o cursor direito do teclado é pressionado , o mesmo para primeiro.