Defina CheckBox. Verificado sem o evento OnClick

O TCheckBox Delphi O controle exibe uma caixa de seleção que pode estar ativada (marcada) ou desativada (desmarcada). o Propriedade marcada 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 Verificado, o evento OnClick da caixa de seleção é acionado.

Alterando a propriedade marcada da caixa de seleção

Como não há OnCheckedChanged evento, você provavelmente manipulará a lógica do programa dependente do estado marcado da caixa de seleção no evento OnClick.

No entanto, se você alterar programaticamente a propriedade Checked, o evento OnClick será acionado - embora 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 "desabilita" o evento OnClick.

Remover o manipulador OnClick, alterar marcado, colocar de volta o manipulador OnClick original

No Delphi for Win32, um evento pode ter apenas um manipulador de eventos (procedimento) anexado a ele (mesmo que exista uma maneira de imitar eventos multicast no Delphi for Win32). A assinatura do evento OnClick de um controle TCheckBox é "type TNotifyEvent = procedure (Sender: TObject) of object;"

instagram viewer

Se você atribuir NIL ao evento OnClick antes de alterar o estado da caixa de seleção, volte ao procedimento de manipulação de eventos OnClick original - o evento OnClick não será acionado.

procedimento SetCheckedState (const checkBox: TCheckBox; const cheque: booleano);

var

 onClickHandler: TNotifyEvent;

início

com checkBox Faz

início

 onClickHandler: = OnClick;

 OnClick: = nada;

Verificado: = cheque;
OnClick: = onClickHandler;
fim;

fim; 

O uso deste procedimento é simples:

// alternar Estado verificadoinício

 SetCheckedState (CheckBox1, NÃO CheckBox1.Checked);

fim;

O SetCheckedState acima alterna a propriedade Checked da caixa de seleção CheckBox1.

Corte protegido: ClicksDisabled: = true

Outra maneira de impedir a execução do OnClick, quando você altera programaticamente a propriedade Checked de uma caixa de seleção, é tirar proveito do "oculto" (protegido) Cliques desativados propriedade.

Observando 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 a partir do seu código.

Felizmente, a técnica de hackers protegidos permite acessar as propriedades ocultas / protegidas de um controle Delphi.

Os membros protegidos de acesso de um componente fornecem mais informações sobre o assunto.

O que você precisa fazer é declarar uma classe fictícia simples estendendo o TCheckBox na mesma unidade em que você usará a propriedade ClicksDisabled.

Depois de colocar as mãos no ClicksDisabled, simplesmente defina-o como true, altere a propriedade Checked e defina ClicksDisabled novamente como false (valor padrão):

tipo


 TCheckBoxEx = classe (TCheckBox);


 ...


com TCheckBoxEx (CheckBox1) dobegin

 ClicksDisabled: = true;

 Verificado: = NÃO verificado;

 ClicksDisabled: = false;

fim;

Nota: o código acima alterna a propriedade Marcado da caixa de seleção denominada "CheckBox1" usando a propriedade ClicksDisabled protegida.

Criando aplicativos com o Delphi

  • Guia do iniciante para 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
instagram story viewer