Q:  "How can I determine when the current record in a dataset has changed?"

A:  Check the DataSource's State property in the OnDataChanged event.  The State
    property will be set to dsBrowse if the record position has changed.  The
    following example will display a message box every time the record position
    has changed in MyDataSource:

procedure TMyForm.MyDataSourceDataChange(Sender: TObject; Field: TField);
begin
  if (Sender as TDataSource).State = dsBrowse then
    ShowMessage('Record Position Changed');
end;