• R/O
  • SSH
  • HTTPS

cico: Commit


Commit MetaInfo

Revisión23 (tree)
Tiempo2021-09-04 01:55:51
Autorderekwildstar

Log Message

ATENÇÃO: CÓDIGO-FONTE COM ERROS!

UDAMOPrincipal.pas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Criados os métodos HideMainForm e ShowMainForm
Quando este datamodule é destruído, a conexão é desfeita, para garantir a exclusão do arquivo -journal, mas isso não deu muito certo porque se o programa for forçado a fechar esse evento parece não ser executado

UFORMPrincipal.pas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Agora a mensagem WM_QUERYENDSESSION é manipulada. Antes de o logoff ser executado, verificamos se o botão de saída está ativo. Caso esteja, retornamos false para que o CiCo bloqueie o logoff, neste caso, a tela padrão do Windows mostrando os programas que estão impendido seu desligamento vai mostrar o CiCO com a mensagem definina no FormCreate pela função ShutdownBlockReasonCreate. Caso o botão de saída não esteja habilitado, significa que já fizemos o check-out e neste caso removemos a mensagem de razão para o bloqueio.
Usada a função ShutdownBlockReasonCreate tanto no handle do form quanto no handle da aplicação, com o intuito de definir uma mensagem customizada no caso de haver a tentativa de logoff e o CiCo esteja ativo. Foi necessário fazer isso para os dois handles porque se o form principal estiver visível a mensagem definida com o handle do form será usada e caso o form principal estiver oculto, será usada a mensagem definida no handle da aplicação. O ideal seria usar um handle só, o do form, tentando mostrar ele antes da aplicação ser fechada, mas não consegui desse modo.

CiCoSetup.iss
¯¯¯¯¯¯¯¯¯¯¯¯¯

Arquivo de instalação alterado para que o programa seja instalado incondicionalmente em D:\CiCo

Cambiar Resumen

Diferencia incremental

--- trunk/client/src/cico/UDAMOPrincipal.pas (revision 22)
+++ trunk/client/src/cico/UDAMOPrincipal.pas (revision 23)
@@ -43,6 +43,7 @@
4343 procedure FDTASaldosdiaGetText(Sender: TField; var Text: string; DisplayText: Boolean);
4444 procedure FDTASaldossaldoGetText(Sender: TField; var Text: string; DisplayText: Boolean);
4545 procedure FDTASaldossaldomensalGetText(Sender: TField; var Text: string; DisplayText: Boolean);
46+ procedure DataModuleDestroy(Sender: TObject);
4647 private
4748 { Private declarations }
4849 FLoggedUserName: String;
@@ -65,6 +66,8 @@
6566 procedure ObterSaldoMensal;
6667 procedure AtualizarSaldoAtual;
6768 procedure AtualizarSaldoGlobal;
69+ procedure HideMainForm;
70+ procedure ShowMainForm;
6871
6972 property LoggedUserName: String read FLoggedUserName;
7073 end;
@@ -94,6 +97,14 @@
9497 FORMPrincipal.Close;
9598 end;
9699
100+procedure TDAMOPrincipal.ShowMainForm;
101+begin
102+ Application.MainFormOnTaskBar := True;
103+ TRAI.Visible := False;
104+ Application.MainForm.Show;
105+ Application.Restore;
106+end;
107+
97108 procedure TDAMOPrincipal.ObterSaldoGlobal;
98109 var
99110 SaldoGlobal: SmallInt;
@@ -222,10 +233,7 @@
222233
223234 procedure TDAMOPrincipal.APEVMinimize(Sender: TObject);
224235 begin
225- Application.MainForm.Hide;
226- Application.MainFormOnTaskBar := False;
227- DAMOPrincipal.TRAI.Visible := True;
228- DAMOPrincipal.TRAI.ShowBalloonHint;
236+ HideMainForm;
229237 end;
230238
231239 procedure TDAMOPrincipal.AplicarFiltro;
@@ -248,6 +256,14 @@
248256 Configuracoes.Ambiente := TAmbiente(FORMPrincipal.RAGR.ItemIndex);
249257 end;
250258
259+procedure TDAMOPrincipal.HideMainForm;
260+begin
261+ Application.MainForm.Hide;
262+ Application.MainFormOnTaskBar := False;
263+ DAMOPrincipal.TRAI.Visible := True;
264+ DAMOPrincipal.TRAI.ShowBalloonHint;
265+end;
266+
251267 function TDAMOPrincipal.LimparCPF(ACPF: String): String;
252268 begin
253269 Result := StringReplace(ACPF,'.','',[rfReplaceAll]);
@@ -321,6 +337,11 @@
321337 OpenTables;
322338 end;
323339
340+procedure TDAMOPrincipal.DataModuleDestroy(Sender: TObject);
341+begin
342+ FDCO.Connected := False;
343+end;
344+
324345 procedure TDAMOPrincipal.DoMonthBalance(AMes: Byte; AAno: Word; ASaldos: TSaldos);
325346 var
326347 i: Byte;
@@ -408,10 +429,7 @@
408429
409430 procedure TDAMOPrincipal.TRAIDblClick(Sender: TObject);
410431 begin
411- Application.MainFormOnTaskBar := True;
412- TRAI.Visible := False;
413- Application.MainForm.Show;
414- Application.Restore;
432+ ShowMainForm;
415433 end;
416434
417435 procedure TDAMOPrincipal.CheckStatusAndUpdateGUI(ACPF: String; APassaword: String);
--- trunk/client/src/cico/UFORMPrincipal.pas (revision 22)
+++ trunk/client/src/cico/UFORMPrincipal.pas (revision 23)
@@ -72,13 +72,13 @@
7272 procedure CBBXYearsChange(Sender: TObject);
7373 procedure PNBBSaldoDoMesClick(Sender: TObject);
7474 procedure PNBBSaldoGlobalClick(Sender: TObject);
75- procedure DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
76- DataCol: Integer; Column: TColumn; State: TGridDrawState);
75+ procedure DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
7776 private
7877 { Private declarations }
7978 FAcaoAutomatica: Boolean;
8079 FHiddenWindowHandle: HWND;
8180 procedure WMEndSession(var Msg: TWMEndSession); message WM_ENDSESSION;
81+ procedure WMQueryEndSession(var Msg: TWMQueryEndSession); message WM_QUERYENDSESSION;
8282 procedure EuJaExisto(var Msg: TMessage); message WM_EUJAEXISTO;
8383
8484 procedure HiddenWindowProc(var Message: TMessage);
@@ -92,7 +92,8 @@
9292 implementation
9393
9494 uses
95- UConfiguracoes, UCiCo, UFORMPergunta, UFORMInformacao, DateUtils;
95+ UConfiguracoes, UCiCo, UFORMPergunta, UFORMInformacao, DateUtils,
96+ KRK.Rtl.Win.WinUser;
9697
9798 {$R *.dfm}
9899
@@ -116,6 +117,25 @@
116117 inherited;
117118 end;
118119
120+// Antes de o logoff ser executado, verificamos se o botão de saída está ativo.
121+// Caso esteja, retornamos false para que o CiCo bloqueie o logoff, neste caso,
122+// a tela padrão do Windows mostrando os programas que estão impendido seu
123+// desligamento vai mostrar o CiCO com a mensagem definina no FormCreate pela
124+// função ShutdownBlockReasonCreate. Caso o botão de saída não esteja
125+// habilitado, significa que já fizemos o check-out e neste caso removemos a
126+// mensagem de razão para o bloqueio.
127+procedure TFORMPrincipal.WMQueryEndSession(var Msg: TWMQueryEndSession);
128+begin
129+ apagar os arquivos do sqlite aqui??
130+ if BUTNSaida.Enabled then
131+ Msg.Result := LRESULT(False)
132+ else
133+ begin
134+ ShutdownBlockReasonDestroy(Application.Handle); // isso pode ser desnecessário
135+ ShutdownBlockReasonDestroy(Handle); // isso pode ser desnecessário
136+ end;
137+end;
138+
119139 procedure TFORMPrincipal.BUTNEntradaClick(Sender: TObject);
120140 begin
121141 if (Configuracoes.Ambiente = aProducao) and (not FAcaoAutomatica) then
@@ -262,6 +282,12 @@
262282 finally
263283 FAcaoAutomatica := False;
264284 end;
285+
286+ // Configura o bloqueio de desligamento por padrão. A mensagem só será
287+ // exibida se o o check-out não for, de fato, realizado. Veja o manipulador
288+ // da mensagem WM_QUERYENDSESSION para maiores detalhes
289+ ShutdownBlockReasonCreate(Application.Handle,'Foi detectado que você não realizou o Check-Out. Se você sair o Check-Out não será realizado');
290+ ShutdownBlockReasonCreate(Handle,'Foi detectado que você não realizou o Check-Out. Se você sair o Check-Out não será realizado');
265291 end
266292 else
267293 begin
@@ -330,6 +356,7 @@
330356
331357 try
332358 FAcaoAutomatica := True;
359+
333360 if BUTNEntrada.Enabled and (TFORMPergunta.ShowMe(Self,'E aí?','Foi detectado que você não realizou o Check-In. Deseja realizá-lo agora?',0) = mrYes) then
334361 BUTNEntrada.Click;
335362 finally
Show on old repository browser