Definir CheckBox.Checked sem o evento OnClick
Reexibindo a propriedade protegida de cliques desativada
Getty Images/David Gould
O TCheckBox Delfos O controle exibe uma caixa de seleção que pode estar ativada (marcada) ou desativada (desmarcada). o Propriedade verificada especifica se a caixa de seleção está marcada ou não.
Quando o usuário clica na caixa de seleção para alterar seu estado Checked, o evento OnClick da caixa de seleção é acionado.
Alterando a propriedade marcada da caixa de seleção
Já que não há OnCheckedChanged evento, você provavelmente manipulará a lógica do programa dependente do estado marcado da caixa de seleção em seu evento OnClick.
No entanto, se você alterar programaticamente a propriedade Checked, o evento OnClick será acionado -- mesmo que nenhuma interação do usuário tenha ocorrido.
Existem (pelo menos) duas maneiras de alterar programaticamente a propriedade marcada da caixa de seleção enquanto 'desativa' o evento OnClick.
Remova o manipulador OnClick, altere o verificado, coloque de volta o manipulador OnClick original
No Delphi para Win32, um evento pode ter apenas um manipulador de eventos (procedimento) anexado a ele (mesmo que haja uma maneira de imitar eventos multicast no Delphi para Win32). A assinatura do evento OnClick de um controle TCheckBox é 'type TNotifyEvent = procedure(Sender: TObject) of object;'
Se você atribuir NIL ao evento OnClick antes de alterar o estado da caixa de seleção, reverta para o procedimento original de manipulação do evento OnClick - o evento OnClick não será acionado.
|_+_||_+_||_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
Verificado := verifica;
OnClick := onClickHandler;
|_+_|
|_+_|
O uso deste procedimento é simples:
|_+_||_+_|
|_+_|
|_+_|
O SetCheckedState acima alterna a propriedade Checked da caixa de seleção CheckBox1.
Hack Protegido: ClicksDisabled: = true
Outra maneira de interromper a execução do OnClick, quando você altera programaticamente a propriedade Checked de uma caixa de seleção, é aproveitar o 'oculto' (protegido) Cliques desativados propriedade.
Ao observar o procedimento SetState do TCheckBox que é executado sempre que a propriedade Checked é alterada, o OnClick é acionado se ClicksDisabled não for verdadeiro.
Como o ClicksDisabled está protegido, você não pode acessá-lo do seu código .
Felizmente, a técnica de hack protegido permite que você acesse essas propriedades ocultas/protegidas de um controle Delphi.
O acesso aos membros protegidos de um componente fornece mais informações sobre o assunto.
O que você precisa fazer é declarar uma classe fictícia simples estendendo o TCheckBox na mesma unidade onde você usará a propriedade ClicksDisabled.
Depois de colocar as mãos no ClicksDisabled, basta defini-lo como true, alterar a propriedade Checked e definir ClicksDisabled de volta para false (valor padrão):
|_+_||_+_||_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
Observação: o código acima alterna a propriedade Checked da caixa de seleção chamada 'CheckBox1' usando a propriedade ClicksDisabled protegida.
Construindo aplicativos com Delphi
- Guia para iniciantes em programação de banco de dados Delphi
- Integrando gráficos básicos em aplicativos Delphi
- Como mover e redimensionar controles em tempo de execução
- Consultas de banco de dados Delphi multithread