- Create a new FireMonkey HD application, before adding a check box and an action list to the form.
- Double click the action list and add an action to it; set the action’s AutoCheck property to True.
- Assign the action just created to the check box’s Action property.
- Double click the form to create a handler for its OnCreate event. In the handler, set the action’s DisableIfNoHandler property to False:
procedure TForm1.FormCreate(Sender: TObject); begin Action1.DisableIfNoHandler := False; end;
- Run the application; once showing, click the check box. Expected: its checked state is toggled. Actual: nothing happens
- In fact, toggling the check box does work, however you need to double click the control for this to work. This is patently a bug caused by the IsChecked property setter getting called twice in the course of a single mouse click
To fix the problem, you can at a pinch create a suitable interposer class. Doing that won’t be very ‘clean’ however because the IsChecked property setter isn’t virtual, so do this instead:
- Take a copy of FMX.Controls.pas, add it to your project, and open it up.
- Find your way to the implementation of TCheckBox.MouseUp.
- Ignoring the reams of ‘Live’Bindings support code, add a check for IsCheckedStored in front of IsChecked being toggled:
if IsCheckedStored then IsChecked := not IsChecked;
Rebuild the application, and the bug should be fixed.