¡Hola!
Puedes utilizar el evento OnDataChange de tu componente fuente de datos (TDataSource). Este evento se dispara cada vez que un campo cambia de valor (y también cuando el conjunto de datos se posiciona en un registro). Si el parámetro Field es diferente de Nil, significa que ese es el campo que cambió de valor. Aprovechando este evento puedes habilitar o inhabilitar el botón de guardar, dependiendo del contenido actual de los campos.
Pero OJO: El principal problema de ese mecanismo es que no considera el texto que actualmente se esté introduciendo en un TDBEdit. Por lo cual, quizá te convenga más usar el evento
OnChange de esos cuadros de edición.
Saludos José, esperamos tus comentarios.
Al González.