Just assign to the
OnChange event, and to exclude a double question dialog check what the selection status is.
As for the buttons, in my case it is as you write, i.e. “yes” as the first on the left, but you can manipulate the order of the buttons by changing the order in the array.
procedure TForm1.CheckBox1Change(Sender: TObject);
begin
if CheckBox1.Checked and (QuestionDlg('Confirm', 'Do you understand?', mtWarning, [mrNo, 'Not really', 'IsDefault', mrYes, 'I Understand'], 0) = mrNo) then
CheckBox1.Checked := False;
end;