Mega Code Archive

 
Categories / Delphi / VCL
 

Change the OnClick behavior of a TRadioButton, TCombobox

Title: change the OnClick behavior of a TRadioButton, TCombobox? // Q: It appears that programatically setting Item.Index for the Radio Button // fires the onClick event. It also appears doing the same for the // ComboBox does NOT fire the OnClick event. Does another property the two // control effect this behavior. // A: No, it is caused by the way Windows sends the notifications that fire the // event when the control state is changed by a program action. // Q: I have an instance where I need each of // the control to exhibit the opposite behavior. // A: For a TRadiobutton you can disconnect the OnClick handler, change the // state, then reconnect the handler. procedure ChangeRadiobuttonState(ARadiobutton: TRadiobutton; checkit: Boolean); var oldhandler: TNotifyEvent; begin oldhandler := ARadiobutton.Onclick; ARadiobutton.Onclick := nil; ARadiobutton.Checked := checkit; ARadiobutton.OnClick := oldhandler; end; // To make the combobox "click" after setting the item index simply call its // Click method. The control inherits this method from TControl, but it is // protected. So you need a bit of hoop-jumping: Type TComboCracker = class(TCombobox); procedure SetComboboxIndex(ACombobox: TCombobox; Index: Integer); begin ACombobox.ItemIndex := Index; TCombocracker(ACombobox).Click; end;