The difference between TTMSFNCGrid & TTMSFNCDataGrid is that TTMSFNCDataGrid is using real controls, so deleting the control while a control action occurs will generate an access violation. And this is because the there is still code running after clicking the checkbox. The best solution is to start a timer.
procedure TForm13.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False;
if FDeleteRow <> -1 then
begin
TMSFNCDataGrid1.DeleteRow(FDeleteRow);
FDeleteRow := -1;
end;
end;
procedure TForm13.TMSFNCDataGrid1CellCheckBoxChange(Sender: TObject; AColumn,
ARow: Integer);
begin
if TMSFNCDataGrid1.Booleans[AColumn, ARow] then
begin
FDeleteRow := ARow;
Timer1.Enabled := True;
end;
end;