ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Alterar cursor do mouse antes de um messagedlg

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
dinocesar
Novato
Novato


Registrado: Segunda-Feira, 15 de Mai de 2017
Mensagens: 26

MensagemEnviada: Seg Ago 21, 2017 5:16 pm    Assunto: Alterar cursor do mouse antes de um messagedlg Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Ter Ago 22, 2017 9:39 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
dinocesar
Novato
Novato


Registrado: Segunda-Feira, 15 de Mai de 2017
Mensagens: 26

MensagemEnviada: Ter Ago 22, 2017 9:56 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10653
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Ter Ago 22, 2017 1:45 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB