Hola Joser.
Como comenta
Casimiro, hay varios detalles que faltan conocer. Por tu código da la impresión que el
TDataModule tiene acceso (incluye) a formusuarios, particularmente prefiero entablar la relación de modo inverso.
Quitando a formusuarios del comando
uses de DataModule1, podrías hacer:
Código Delphi
[-]
...
type
Tformusuarios = class(TForm)
BTCancelar: TButton;
BTNuevo: TButton;
procedure FormCreate(Sender: TObject);
...
procedure BTNuevoClick(Sender: TObject);
procedure BTCancelarClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
FNotifyEvent: TNotifyEvent;
procedure dsusuariosChange(Sender: TObject);
public
end;
var
formusuarios: Tformusuarios;
implementation
uses Unit2, DB;
procedure Tformusuarios.dsusuariosChange(Sender: TObject);
begin
with DataModule1 do
begin
BTCancelar.Enabled := dsusuarios.State in[dsEdit, dsInsert];
BTNuevo.Enabled := dsusuarios.State = dsBrowse;
end
end;
procedure Tformusuarios.FormCreate(Sender: TObject);
begin
with DataModule1 do
begin
FNotifyEvent := dsusuarios.OnStateChange;
dsusuarios.OnStateChange := dsusuariosChange;
CLIENTusuarios.active := True;
BTCancelar.Enabled := dsusuarios.State in[dsEdit, dsInsert];
BTNuevo.Enabled := dsusuarios.State = dsBrowse;
end
end;
...
procedure Tformusuarios.BTNuevoClick(Sender: TObject);
begin
DataModule1.CLIENTusuarios.Insert;
end;
procedure Tformusuarios.BTCancelarClick(Sender: TObject);
begin
DataModule1.CLIENTusuarios.Cancel;
end;
procedure Tformusuarios.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DataModule1.dsusuarios.OnStateChange := FNotifyEvent;
end;
...
end.
Saludos.