Imposta CheckBox. Controllato senza l'evento OnClick

TCheckBox Delphi control visualizza una casella che può essere attivata (selezionata) o disattivata (non selezionata). Il Proprietà controllata specifica se la casella di controllo è selezionata o meno.

Quando l'utente fa clic sulla casella di controllo per modificarne lo stato Controllato, viene attivato l'evento OnClick per la casella di controllo.

Modifica della proprietà selezionata della casella di controllo

Dal momento che non c'è OnCheckedChanged evento, probabilmente gestirai la logica del programma in base allo stato selezionato della casella di controllo nel suo evento OnClick.

Tuttavia, se tu modificare a livello di codice la proprietà Checked, l'evento OnClick verrà generato - anche se nessuna interazione dell'utente ha avuto luogo.

Esistono (almeno) due modi per modificare a livello di programmazione la proprietà selezionata della casella di controllo durante la "disabilitazione" dell'evento OnClick.

Rimuovi gestore OnClick, Modifica selezionata, Ripristina gestore OnClick originale

instagram viewer

In Delphi per Win32, a un evento può essere associato un solo gestore di eventi (procedura) (anche se esiste un modo per simulare eventi multicast in Delphi per Win32). La firma dell'evento OnClick di un controllo TCheckBox è "type TNotifyEvent = procedure (Sender: TObject) dell'oggetto;"

Se si assegna NIL all'evento OnClick prima di modificare lo stato della casella di controllo, si ripristina la procedura di gestione degli eventi OnClick originale: l'evento OnClick non verrà generato.

procedura SetCheckedState (const checkBox: TCheckBox; const check: boolean);

var

 onClickHandler: TNotifyEvent;

inizio

con checkBox fare

inizio

 onClickHandler: = OnClick;

 OnClick: = zero;

Controllato: = controllo;
OnClick: = onClickHandler;
fine;

fine; 

L'uso di questa procedura è semplice:

// attiva / disattiva lo stato controllatoinizio

 SetCheckedState (CheckBox1, NOT CheckBox1.Checked);

fine;

SetCheckedState sopra attiva / disattiva la proprietà Checked della casella di controllo CheckBox1.

Hack protetto: ClicksDisabled: = true

Un altro modo per interrompere l'esecuzione di OnClick, quando si modifica a livello di codice la proprietà Checked di una casella di controllo, è quello di sfruttare il "nascosto" (protetto) ClicksDisabled proprietà.

Osservando la procedura SetState di TCheckBox che viene eseguita ogni volta che cambia la proprietà Checked, OnClick viene attivato se ClicksDisabled non è vero.

Poiché ClicksDisabled è protetto, non puoi accedervi dal tuo codice.

Fortunatamente, la tecnica di hacking protetto consente di accedere alle proprietà nascoste / protette di un controllo Delphi.

L'accesso ai membri protetti di un componente fornisce ulteriori informazioni sull'argomento.

Quello che devi fare è dichiarare una semplice classe fittizia che estende TCheckBox nella stessa unità in cui utilizzerai la proprietà ClicksDisabled.

Dopo aver messo le mani su ClicksDisabled, è sufficiente impostarlo su true, modificare la proprietà Checked, quindi impostare ClicksDisabled su false (valore predefinito):

genere


 TCheckBoxEx = class (TCheckBox);


 ...


con TCheckBoxEx (CheckBox1) dobegin

 ClicksDisabled: = true;

 Controllato: = NON controllato;

 ClicksDisabled: = false;

fine;

Nota: il codice precedente attiva / disattiva la proprietà Checked della casella di controllo "CheckBox1" utilizzando la proprietà ClicksDisabled protetta.

Creazione di applicazioni con Delphi

  • Guida per principianti alla programmazione del database Delphi
  • Integrazione di grafici di base nelle applicazioni Delphi
  • Come spostare e ridimensionare i controlli in fase di esecuzione
  • Query del database Delphi multithread
instagram story viewer