unit umstCadastro; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, StdCtrls, DBCtrls, ExtCtrls, Buttons, ComCtrls, DB, Menus, Vcl.Mask, System.UITypes; type TmstCadastro = class(TForm) GroupBox2: TGroupBox; pcClientes: TPageControl; tabCadastro: TTabSheet; dtsDB: TDataSource; stbStatus: TStatusBar; navPrincipal: TDBNavigator; grpDescricao: TGroupBox; Nome: TLabel; DBEdit1: TDBEdit; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure navPrincipalBeforeAction(Sender: TObject; Button: TNavigateBtn); procedure dtsDBStateChange(Sender: TObject); private { Private declarations } public { Public declarations } AcaoRealizada: String; end; var mstCadastro: TmstCadastro; implementation uses udtmSystem; {$R *.DFM} procedure TmstCadastro.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (ActiveControl is TDBGrid) or // ((ActiveControl is TDBLookupCombo) and (ActiveControl.Tag = 1)) or ((ActiveControl is TDBComboBox) and (ActiveControl.Tag = 1)) or // ((ActiveControl is TDBDateTimePicker) and (ActiveControl.Tag = 1)) or ((ActiveControl is TDBEdit) and (ActiveControl.Tag = 1)) or (ActiveControl is TDBMemo) or (ActiveControl is TDBRichEdit) // or // (ActiveControl is TDBWPRichText) or (ActiveControl is TMemo) or (ActiveControl is TDBMemo) then exit; case Key of VK_RETURN: begin SelectNext(ActiveControl as tWinControl, True, True); Key := 0; end; { VK_UP: begin SelectNext(ActiveControl as tWinControl, False, True ); Key := 0; end; VK_DOWN: begin SelectNext(ActiveControl as tWinControl, True, True ); Key := 0; end; } end; end; procedure TmstCadastro.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if navPrincipal.DataSource <> nil then if navPrincipal.DataSource.State in [dsInsert, dsEdit] then begin MessageDlg ('Existem alterações pendentes, clique em CONFIRMAR ou CANCELAR.', mtConfirmation, [mbOK], 0); CanClose := False; end; end; procedure TmstCadastro.dtsDBStateChange(Sender: TObject); begin grpDescricao.Enabled := dtsDB.State in [dsEdit, dsInsert]; tabCadastro.Enabled := grpDescricao.Enabled; end; procedure TmstCadastro.FormClose(Sender: TObject; var Action: TCloseAction); begin if dtsDB.DataSet <> nil then begin dtsDB.DataSet.Filtered := False; if dtsDB.DataSet.State in [dsInsert, dsEdit] then dtsDB.DataSet.Cancel; end; // Envia as alterações para o banco // if dtsDB.DataSet.State in [dsInsert, dsEdit] then // RegistraSaida; // Volta o cursor para o estado normal Screen.Cursor := crDefault; // Libera a memória Action := caFree; end; procedure TmstCadastro.FormCreate(Sender: TObject); begin dtmSystem.tx_formulario := TForm(Sender).Name; dtsDB.DataSet.Open; pcClientes.ActivePage := tabCadastro; end; procedure TmstCadastro.FormShow(Sender: TObject); begin pcClientes.ActivePageIndex := 0 end; procedure TmstCadastro.navPrincipalBeforeAction(Sender: TObject; Button: TNavigateBtn); begin case Button of nbFirst, nbPrior, nbNext, nbLast, nbInsert, nbRefresh: if navPrincipal.DataSource.State in [dsInsert, dsEdit] then begin MessageDlg('Existem alterações pendentes, clique em CONFIRMAR ou CANCELAR.', mtConfirmation, [mbOK], 0); Abort; end; nbPost: SelectNext(ActiveControl as tWinControl, True, True); nbDelete: begin if navPrincipal.DataSource.State in [dsInsert, dsEdit] then begin MessageDlg('Existem alterações pendentes, clique em CONFIRMAR ou CANCELAR.', mtConfirmation, [mbOK], 0); Abort; end; if MessageDlg('Deseja apagar este registro?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then Abort; try dtsDB.DataSet.Delete; except ShowMessage('Este registro está sendo utilizado pelo sistema ou contém dependências e não pode ser apagado'); end; Abort; end; nbCancel: if MessageDlg('Deseja cancelar as modificações?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then Abort; end; end; end.