unit ucadModeloRepasse; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Buttons, System.UITypes, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, umstCadastro, Data.DB, Vcl.Grids, Vcl.DBGrids, Vcl.ExtCtrls, Vcl.DBCtrls, Vcl.StdCtrls, Vcl.Mask, Vcl.ComCtrls, System.ImageList, Vcl.ImgList; type THackDBNavigator = class(TDBNavigator); type TcadModeloRepasse = class(TmstCadastro) dbg_repasse: TDBGrid; gb_porcentagens: TGroupBox; lbl_principal: TLabel; dbedt_prprin: TDBEdit; dbedt_prjuros: TDBEdit; lbl_juros: TLabel; dbedt_prmulta: TDBEdit; lbl_multa: TLabel; dbedt_enc: TDBEdit; lbl_encargos: TLabel; dbedt_prcorrigido: TDBEdit; lbl_corrigido: TLabel; ImageList1: TImageList; GroupBox1: TGroupBox; dblulb_indices: TDBLookupListBox; dtsfases: TDataSource; navfases: TDBNavigator; dbedt_atrasomin: TDBEdit; dbedt_atrasomax: TDBEdit; lbl_atrasomin: TLabel; lbl_atrasomax: TLabel; GroupBox3: TGroupBox; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; DBEdit2: TDBEdit; DBEdit3: TDBEdit; DBEdit4: TDBEdit; DBEdit5: TDBEdit; DBEdit6: TDBEdit; procedure dbedt_prprinKeyPress(Sender: TObject; var Key: Char); procedure dbedt_prjurosKeyPress(Sender: TObject; var Key: Char); procedure dbedt_prmultaKeyPress(Sender: TObject; var Key: Char); procedure dbedt_encKeyPress(Sender: TObject; var Key: Char); procedure dbedt_prcorrigidoKeyPress(Sender: TObject; var Key: Char); procedure navPrincipalBeforeAction(Sender: TObject; Button: TNavigateBtn); procedure FormCreate(Sender: TObject); procedure dbedt_prprinExit(Sender: TObject); procedure dbedt_prjurosExit(Sender: TObject); procedure dbedt_prmultaExit(Sender: TObject); procedure dbedt_encExit(Sender: TObject); procedure dbedt_prcorrigidoExit(Sender: TObject); procedure dtsDBStateChange(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure dtsfasesStateChange(Sender: TObject); procedure navfasesBeforeAction(Sender: TObject; Button: TNavigateBtn); procedure DBEdit2Exit(Sender: TObject); procedure DBEdit3Exit(Sender: TObject); procedure DBEdit4Exit(Sender: TObject); procedure DBEdit5Exit(Sender: TObject); procedure DBEdit6Exit(Sender: TObject); procedure DBEdit2KeyPress(Sender: TObject; var Key: Char); procedure DBEdit3KeyPress(Sender: TObject; var Key: Char); procedure DBEdit4KeyPress(Sender: TObject; var Key: Char); procedure DBEdit5KeyPress(Sender: TObject; var Key: Char); procedure DBEdit6KeyPress(Sender: TObject; var Key: Char); private procedure SetupHackedNavigator(const Navigator: TDBNavigator; const Glyphs: TImageList; S: string); procedure WMMoving(var Msg: TWMMoving); message WM_MOVING; { Private declarations } public { Public declarations } end; // janela a princípio não utilizada até hoje var cadModeloRepasse: TcadModeloRepasse; implementation {$R *.dfm} uses udtmSystem; procedure TcadModeloRepasse.DBEdit2Exit(Sender: TObject); begin inherited; if DBEdit2.Field.Value > 100 then begin DBEdit2.Field.Value := 100; end; end; procedure TcadModeloRepasse.DBEdit2KeyPress(Sender: TObject; var Key: Char); begin inherited; if not(Key in [#8, '0' .. '9', System.SysUtils.FormatSettings.DecimalSeparator]) then begin Key := #0; end else if (Key = System.SysUtils.FormatSettings.DecimalSeparator) and (Pos(Key, DBEdit2.Field.Text) > 0) then begin Key := #0; end; end; procedure TcadModeloRepasse.DBEdit3Exit(Sender: TObject); begin inherited; if DBEdit3.Field.Value > 100 then begin DBEdit3.Field.Value := 100; end; end; procedure TcadModeloRepasse.DBEdit3KeyPress(Sender: TObject; var Key: Char); begin inherited; if not(Key in [#8, '0' .. '9', System.SysUtils.FormatSettings.DecimalSeparator]) then begin Key := #0; end else if (Key = System.SysUtils.FormatSettings.DecimalSeparator) and (Pos(Key, DBEdit3.Field.Text) > 0) then begin Key := #0; end; end; procedure TcadModeloRepasse.DBEdit4Exit(Sender: TObject); begin inherited; if DBEdit4.Field.Value > 100 then begin DBEdit4.Field.Value := 100; end; end; procedure TcadModeloRepasse.DBEdit4KeyPress(Sender: TObject; var Key: Char); begin inherited; if not(Key in [#8, '0' .. '9', System.SysUtils.FormatSettings.DecimalSeparator]) then begin Key := #0; end else if (Key = System.SysUtils.FormatSettings.DecimalSeparator) and (Pos(Key, DBEdit4.Field.Text) > 0) then begin Key := #0; end; end; procedure TcadModeloRepasse.DBEdit5Exit(Sender: TObject); begin inherited; if DBEdit5.Field.Value > 100 then begin DBEdit5.Field.Value := 100; end; end; procedure TcadModeloRepasse.DBEdit5KeyPress(Sender: TObject; var Key: Char); begin inherited; if not(Key in [#8, '0' .. '9', System.SysUtils.FormatSettings.DecimalSeparator]) then begin Key := #0; end else if (Key = System.SysUtils.FormatSettings.DecimalSeparator) and (Pos(Key, DBEdit5.Field.Text) > 0) then begin Key := #0; end; end; procedure TcadModeloRepasse.DBEdit6Exit(Sender: TObject); begin inherited; if DBEdit6.Field.Value > 100 then begin DBEdit6.Field.Value := 100; end; end; procedure TcadModeloRepasse.DBEdit6KeyPress(Sender: TObject; var Key: Char); begin inherited; if not(Key in [#8, '0' .. '9', System.SysUtils.FormatSettings.DecimalSeparator]) then begin Key := #0; end else if (Key = System.SysUtils.FormatSettings.DecimalSeparator) and (Pos(Key, DBEdit6.Field.Text) > 0) then begin Key := #0; end; end; procedure TcadModeloRepasse.dbedt_encExit(Sender: TObject); begin if dbedt_enc.Field.Value > 100 then begin dbedt_enc.Field.Value := 100; end; end; procedure TcadModeloRepasse.dbedt_encKeyPress(Sender: TObject; var Key: Char); begin if not(Key in [#8, '0' .. '9', System.SysUtils.FormatSettings.DecimalSeparator]) then begin Key := #0; end else if (Key = System.SysUtils.FormatSettings.DecimalSeparator) and (Pos(Key, dbedt_enc.Field.Text) > 0) then begin Key := #0; end; end; procedure TcadModeloRepasse.dbedt_prcorrigidoExit(Sender: TObject); begin if dbedt_prcorrigido.Field.Value > 100 then begin dbedt_prcorrigido.Field.Value := 100; end; end; procedure TcadModeloRepasse.dbedt_prcorrigidoKeyPress(Sender: TObject; var Key: Char); begin // método pra só poder digitar números e "." ou "," no edit if not(Key in [#8, '0' .. '9', System.SysUtils.FormatSettings.DecimalSeparator, '-']) then begin Key := #0; end else if (Key = System.SysUtils.FormatSettings.DecimalSeparator) and (Pos(Key, dbedt_prcorrigido.Field.Text) > 0) then begin Key := #0; end; end; procedure TcadModeloRepasse.dbedt_prjurosExit(Sender: TObject); begin if dbedt_prjuros.Field.Value > 100 then begin dbedt_prjuros.Field.Value := 100; end; end; procedure TcadModeloRepasse.dbedt_prjurosKeyPress(Sender: TObject; var Key: Char); begin if not(Key in [#8, '0' .. '9', System.SysUtils.FormatSettings.DecimalSeparator]) then begin Key := #0; end else if (Key = System.SysUtils.FormatSettings.DecimalSeparator) and (Pos(Key, dbedt_prjuros.Field.Text) > 0) then begin Key := #0; end; end; procedure TcadModeloRepasse.dbedt_prmultaExit(Sender: TObject); begin if dbedt_prmulta.Field.Value > 100 then begin dbedt_prmulta.Field.Value := 100; end; end; procedure TcadModeloRepasse.dbedt_prmultaKeyPress(Sender: TObject; var Key: Char); begin if not(Key in [#8, '0' .. '9', System.SysUtils.FormatSettings.DecimalSeparator]) then begin Key := #0; end else if (Key = System.SysUtils.FormatSettings.DecimalSeparator) and (Pos(Key, dbedt_prmulta.Field.Text) > 0) then begin Key := #0; end; end; procedure TcadModeloRepasse.dbedt_prprinExit(Sender: TObject); begin if dbedt_prprin.Field.Value > 100 then begin dbedt_prprin.Field.Value := 100; end; end; procedure TcadModeloRepasse.dbedt_prprinKeyPress(Sender: TObject; var Key: Char); begin if not(Key in [#8, '0' .. '9', System.SysUtils.FormatSettings.DecimalSeparator]) then begin Key := #0; end else if (Key = System.SysUtils.FormatSettings.DecimalSeparator) and (Pos(Key, dbedt_prprin.Field.Text) > 0) then begin Key := #0; end; end; procedure TcadModeloRepasse.dtsDBStateChange(Sender: TObject); begin dblulb_indices.Enabled := not(dtsDB.DataSet.State in [dsEdit, dsInsert]); grpDescricao.Enabled := (dtsDB.DataSet.State in [dsEdit, dsInsert]); // gb_porcentagens.Enabled := grpDescricao.Enabled; // dbg_repasse.ReadOnly := not(dtsDB.DataSet.State in [dsEdit, dsInsert]); // navfases.Enabled := not(dtsDB.DataSet.State in [dsEdit, dsInsert]); pcClientes.Enabled := not(dtsDB.DataSet.State in [dsEdit, dsInsert]); GroupBox3.Enabled := grpDescricao.Enabled; end; procedure TcadModeloRepasse.dtsfasesStateChange(Sender: TObject); begin inherited; grpDescricao.Enabled := not(dtsfases.DataSet.State in [dsEdit, dsInsert]); navPrincipal.Enabled := not(dtsfases.DataSet.State in [dsEdit, dsInsert]); gb_porcentagens.Enabled := dtsfases.DataSet.State in [dsEdit, dsInsert]; dbg_repasse.ReadOnly := not(dtsfases.DataSet.State in [dsEdit, dsInsert]); dblulb_indices.Enabled := not(dtsfases.DataSet.State in [dsEdit, dsInsert]); end; procedure TcadModeloRepasse.FormClose(Sender: TObject; var Action: TCloseAction); begin inherited; cadModeloRepasse := nil; end; procedure TcadModeloRepasse.FormCreate(Sender: TObject); begin inherited; if not dtmSystem.tblRepasse.Active then begin dtmSystem.tblRepasse.Open; end; if not dtmSystem.tblRepasseFase.Active then begin dtmSystem.tblRepasseFase.Open; end; SetupHackedNavigator(navPrincipal, ImageList1, 's'); SetupHackedNavigator(navfases, ImageList1, 's'); end; procedure TcadModeloRepasse.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin inherited; if Key = VK_ESCAPE then begin Key := 0; Close; end; end; procedure TcadModeloRepasse.navfasesBeforeAction(Sender: TObject; Button: TNavigateBtn); begin case Button of nbPost: begin if dbedt_atrasomin.Text = '' then begin MessageDlg('Por favor preencha um número para o atraso mínimo.', mtWarning, [mbOK], 0); abort; end; if dbedt_atrasomax.Text = '' then begin MessageDlg('Por favor preencha um número para o atraso máximo.', mtWarning, [mbOK], 0); abort; end; if strtoint(dbedt_atrasomin.text) > strtoint(dbedt_atrasomax.text) then begin MessageDlg('Há uma inconsistência nos valores do atraso. Por favor reveja-os.', mtWarning, [mbOK], 0); abort; end; // SelectNext(ActiveControl as TWinControl, True, True); end; nbCancel: if MessageDlg('Deseja cancelar as modificações?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then abort; end; end; procedure TcadModeloRepasse.navPrincipalBeforeAction(Sender: TObject; Button: TNavigateBtn); begin inherited; // end; procedure TcadModeloRepasse.SetupHackedNavigator(const Navigator: TDBNavigator; const Glyphs: TImageList; S: string); const Captions: array [TNavigateBtn] of string = ('Primeiro', 'Anterior', 'Próximo', 'Último', 'Adicionar', 'Excluir', 'Alterar', 'Confirmar', 'Cancelar', 'Atualizar', 'Aplicar Atualizações', 'Cancelar Atualizãções'); (* Captions : array[TNavigateBtn] of string = ('First', 'Prior', 'Next', 'Last', 'Insert', 'Delete', 'Edit', 'Post', 'Cancel', 'Refresh'); *) Hints: array [TNavigateBtn] of string = ('Primeiro', 'Anterior', 'Próximo', 'Último', 'Adicionar', 'Apagar', 'Modificar', 'Confirmar', 'Cancelar', 'Atualizar', 'Aplicar Atualizações', 'Cancelar Atualizãções'); var btn: TNavigateBtn; begin // função propriamente dita para "hackear" o navigator for btn := Low(TNavigateBtn) to High(TNavigateBtn) do with THackDBNavigator(Navigator).Buttons[btn] do begin // from the Captions const array Hint := Hints[btn]; if LowerCase(S) = 's' then begin Caption := Captions[btn]; end; // the number of images in the Glyph property NumGlyphs := 1; // Remove the old glyph. Glyph := nil; // Assign the custom one Glyphs.GetBitmap(Integer(btn), Glyph); // gylph above text Layout := blGlyphTop; Font.Style := Font.Style - [fsbold]; end; end; procedure TcadModeloRepasse.WMMoving(var Msg: TWMMoving); var workArea: TRect; begin workArea := Screen.WorkareaRect; with Msg.DragRect^ do begin if left < workArea.left then OffsetRect(Msg.DragRect^, workArea.left - left, 0); if top < workArea.top then OffsetRect(Msg.DragRect^, 0, workArea.top - top); if Right > workArea.Right then OffsetRect(Msg.DragRect^, workArea.Right - Right, 0); if Bottom > workArea.Bottom then OffsetRect(Msg.DragRect^, 0, workArea.Bottom - Bottom); end; end; end.