Sencillo, ya está hecho en Delphi
, usando un componente TActionList, (yo lo uso en mi MainForm para *todos* los DBGrids de mi app):
- En la ventanita de la lista de acciones del TActionList, selecciona la opción "New standard action" del botón New Action y selecciona los TDataSetXXXX que quieras usar.
- Si defines un valor para la propiedad
DataSource de los TDataSetXXXX, sólo funcionan con ese en específico, si lo dejas en blanco toman el DataSource del control de BD con el focus, aún si te cambias de ventanas y son diferentes DataSets.
- Enlazalos a un TButton, TMenuItem o cualquier objeto que tenga la propiedad llamada
Action.
- Si necesitas llamar una ventana adicional para capturar los campos,
asígnale el evento
OnExecute del TDataSetXXXX. Yo creo un procedure en la form MDI y lo asigno dinámicamente en el OnActivate (para Altas y Cambios) y lo pongo a Nil en el OnDeactivate de la misma MDI, para cuando la destruya no mande llamar al código del evento que ya no es válido.
Y eso es todo. Con esto es automático el Enabled/Disabled de los botones, sin código. Y es válido para toda la app.
Déjenme saber si me dí a entender y funciona mi método.