 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
dinocesar Novato

Registrado: Segunda-Feira, 15 de Mai de 2017 Mensagens: 26
|
Enviada: Seg Ago 21, 2017 5:16 pm Assunto: Alterar cursor do mouse antes de um messagedlg |
|
|
Opa galera, tudo bem?
Estou com uma dúvida aqui... eu gostaria de sempre antes de um messagedlg alterar o cursor do mouse para o default, pois utilizo o crHourGlass dentro de try e exception com banco, e sempre tenho que alterar para default tanto no commit quanto no rollback.
Alguma sugestão?
PS: Eu sei que dá pra montar uma procedure de mensagem que já faça isso, mas se tivesse nativamente essa opção...
um exemplo do código em que ficar recursivo:
Código: |
procedure TfrmPrincipal.btnCadastarClick(Sender: TObject);
begin
VA_SQL := 'INSERT INTO CONTA (LOGIN, NOME, SENHA, EMAIL, SERIAL, STATUS_CONTA, DATA_CADASTRO) '
+ ' VALUES (:LOGIN, :NOME, :SENHA, :EMAIL, :SERIAL, :STATUS_CONTA, SYSDATE())';
try
begin
Screen.Cursor := crHourGlass;
VA_SERIAL := funcGeraSerial(20,2);
cnnBD.StartTransaction;
with qryGeral do
begin
Close;
SQL.Clear;
SQL.Add(VA_SQL);
Params.ParamByName('LOGIN').Value := edtLoginCadastro.Text;
Params.ParamByName('NOME').Value := edtNomeCadastro.Text;
Params.ParamByName('SENHA').Value := edtSenhaCadastro.Text;
Params.ParamByName('EMAIL').Value := edtEmailCadastro.Text;
Params.ParamByName('SERIAL').Value := VA_SERIAL;
Params.ParamByName('STATUS_CONTA').Value := 'Aguardando';
ExecSQL;
end;
cnnBD.Commit;
edtLoginCadastro.Clear;
edtNomeCadastro.Clear;
edtSenhaCadastro.Clear;
edtSenhaConfirmaCadastro.Clear;
edtEmailCadastro.Clear;
Screen.Cursor := crDefault;
MessageDlg('Cadastro realizado com sucesso! Foi enviado um e-mail ' +
'com o serial de ativação, confira a caixa de entrada e ' +
' a pasta spam de seu e-mail!', mtInformation, [mbOK], 0);
end;
except on E: Exception do
begin
cnnBD.Rollback;
Screen.Cursor := crDefault;
MessageDlg('Ocorreu o seguinte erro: ' + e.Message, mtError, [mbOK], 0);
end;
end;
end;
|
_________________ Delphi + Oracle + MSSQL + MySQL + Forms & Report + Qlikview |
|
Voltar ao Topo |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Ter Ago 22, 2017 9:39 am Assunto: |
|
|
Uma sugestão é colocar o seu bloco Try..Except dentro de um bloco Try..Finally iniciando com o cursor crHourGlass e no bloco Finally crDefault.
Assim você chama cada cursor apenas uma vez.
Código: | procedure TfrmPrincipal.btnCadastarClick(Sender: TObject);
begin
VA_SQL := 'INSERT INTO CONTA (LOGIN, NOME, SENHA, EMAIL, SERIAL, STATUS_CONTA, DATA_CADASTRO) ' +
' VALUES (:LOGIN, :NOME, :SENHA, :EMAIL, :SERIAL, :STATUS_CONTA, SYSDATE())';
try
Screen.Cursor := crHourGlass;
try
VA_SERIAL := funcGeraSerial(20, 2);
cnnBD.StartTransaction;
with qryGeral do
begin
Close;
SQL.Clear;
SQL.Add(VA_SQL);
Params.ParamByName('LOGIN').Value := edtLoginCadastro.Text;
Params.ParamByName('NOME').Value := edtNomeCadastro.Text;
Params.ParamByName('SENHA').Value := edtSenhaCadastro.Text;
Params.ParamByName('EMAIL').Value := edtEmailCadastro.Text;
Params.ParamByName('SERIAL').Value := VA_SERIAL;
Params.ParamByName('STATUS_CONTA').Value := 'Aguardando';
ExecSQL;
end;
cnnBD.Commit;
edtLoginCadastro.Clear;
edtNomeCadastro.Clear;
edtSenhaCadastro.Clear;
edtSenhaConfirmaCadastro.Clear;
edtEmailCadastro.Clear;
MessageDlg('Cadastro realizado com sucesso! Foi enviado um e-mail ' +
'com o serial de ativação, confira a caixa de entrada e ' + ' a pasta spam de seu e-mail!',
mtInformation, [mbOK], 0);
except
on E: Exception do
begin
cnnBD.Rollback;
MessageDlg('Ocorreu o seguinte erro: ' + E.Message, mtError, [mbOK], 0);
end;
end;
finally
Screen.Cursor := crDefault; // A compilação sempre passará aqui
end;
end; |
_________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
 |
dinocesar Novato

Registrado: Segunda-Feira, 15 de Mai de 2017 Mensagens: 26
|
Enviada: Ter Ago 22, 2017 9:56 am Assunto: |
|
|
natanbh1 escreveu: | Uma sugestão é colocar o seu bloco Try..Except dentro de um bloco Try..Finally iniciando com o cursor crHourGlass e no bloco Finally crDefault.
Assim você chama cada cursor apenas uma vez.
Código: | procedure TfrmPrincipal.btnCadastarClick(Sender: TObject);
begin
VA_SQL := 'INSERT INTO CONTA (LOGIN, NOME, SENHA, EMAIL, SERIAL, STATUS_CONTA, DATA_CADASTRO) ' +
' VALUES (:LOGIN, :NOME, :SENHA, :EMAIL, :SERIAL, :STATUS_CONTA, SYSDATE())';
try
Screen.Cursor := crHourGlass;
try
VA_SERIAL := funcGeraSerial(20, 2);
cnnBD.StartTransaction;
with qryGeral do
begin
Close;
SQL.Clear;
SQL.Add(VA_SQL);
Params.ParamByName('LOGIN').Value := edtLoginCadastro.Text;
Params.ParamByName('NOME').Value := edtNomeCadastro.Text;
Params.ParamByName('SENHA').Value := edtSenhaCadastro.Text;
Params.ParamByName('EMAIL').Value := edtEmailCadastro.Text;
Params.ParamByName('SERIAL').Value := VA_SERIAL;
Params.ParamByName('STATUS_CONTA').Value := 'Aguardando';
ExecSQL;
end;
cnnBD.Commit;
edtLoginCadastro.Clear;
edtNomeCadastro.Clear;
edtSenhaCadastro.Clear;
edtSenhaConfirmaCadastro.Clear;
edtEmailCadastro.Clear;
MessageDlg('Cadastro realizado com sucesso! Foi enviado um e-mail ' +
'com o serial de ativação, confira a caixa de entrada e ' + ' a pasta spam de seu e-mail!',
mtInformation, [mbOK], 0);
except
on E: Exception do
begin
cnnBD.Rollback;
MessageDlg('Ocorreu o seguinte erro: ' + E.Message, mtError, [mbOK], 0);
end;
end;
finally
Screen.Cursor := crDefault; // A compilação sempre passará aqui
end;
end; |
|
Bom dia.
Pra você ver, 10 anos com a ferramenta e nunca pensei nisso.
Aprendendo cada dia... obrigado natanbh1 pela ajuda, deu super certo! _________________ Delphi + Oracle + MSSQL + MySQL + Forms & Report + Qlikview |
|
Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Ter Ago 22, 2017 1:45 pm Assunto: |
|
|
Se você não fizer desta forma, você acaba com um cursor que não é o default depois de uma exceção, o que pode ser desagradável para o usuário.
Algumas coisas que se mudam e podem dar problemas tem de colocar num try .. finally, isto para não irritar o usuário, visto que alguns podem ser bem críticos, por não dizer ácidos com a propaganda do sistema. O boca a boa sempre é importante e a resolução de problemas simples ajuda a melhorar até a confiança do usuário no sistema.
bye _________________ P.O.W.E.R B.Y D.E.L.P.H.I |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|