Ir para conteúdo
Fórum Script Brasil
  • 0

Saber o nome do componente com o foco


João Paulo Taraciuk

Pergunta

Boa tarde

Estou fazendo uma rotina para capturar erros do sistema e mandar um e-mail com as informações de Form, tipo de erro, etc.

O que eu gostaria de saber é se tem como pegar o nome do componente onde ocorreu determinada exceção ou mesmo o nome do evento que ocasionou uma exceção, tentei colocar no OnMessage do ApplicationEvents o código Variavel:=ActiveControl.Name, mas retorna Access Violation.

Tem alguma forma de saber isso no Try ?

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0
O que eu gostaria de saber é se tem como pegar o nome do componente onde ocorreu determinada exceção ou mesmo o nome do evento que ocasionou uma exceção

A captura de exceções é diferente da captura do nome do componente em foco

Faça um teste ... crie um form coloque um memo e outros componentes ... no evento OnEnter do Memo coloque o código baixo

procedure TForm1.Memo1Enter(Sender: TObject);
begin
   memo1.lines.add(TWinControl(Sender).Name);
end;

No evento onEnter de cada componente direcionar para o OnEnter do Memo1

OBS: teclando o TAB voce vera que o foco mudará para cada componente no form e o nome de cada componente que recebeu o foco aparecerá no Memo.

Quanto a captura de exceções, faça uma busca no forum

http://scriptbrasil.com.br/forum/index.php...te=exce%E7%F5es

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Bom Jhonas, na verdade o que eu estou tentando fazer é o seguinte, coloquei um ApplicationEvents no form principal e no evento OnException dele coloquei o código:

procedure TForm1.ApEvPrincipalException(Sender: TObject; E: Exception);
begin
  try
    MensagemEmail:=TStringList.Create;
    MensagemEmail.Add('CLIENTE: [' + BuscaNomeCliente() +  ']');
    MensagemEmail.Add('APLICAÇÃO: [' + Application.Title +  ']');
    MensagemEmail.Add('LOCAL: FORM['+Screen.ActiveForm.Name+ '] CAPTION['+ Screen.ActiveForm.Caption +']');
    MensagemEmail.Add('DATA/HORA: ['+DateTimeToStr(Now)+']');
    MensagemEmail.Add('ERRO: ['+ E.Message+']');
    MensagemEmail.Add('------------------------------------------------------');
    MensagemEmail.Add('');
    MensagemEmail.Add('======================================================');
    EnviaEmail();
    Application.MessageBox('Ocorreu um erro, um e-mail será enviado ao suporte', 'INFORMAÇÃO', MB_ICONINFORMATION + MB_OK);
    except
  END;
end;

Então, ele pega o erro com o nome do form e me manda um e-mail, mas eu queria um pouco mais, gostaria que ele me trouxesse o nome do componente que disparou o exception de dentro do form, tentei colocar da forma que você sugeriu, mas me retorna o nome do form, que, tendo o nome do componente, eu vou tentar descobrir o evento realizado por ele que causou erro.

Por que dessa forma, com apenas esse código, eu capturo todos os erros da aplicacao, e o local exato de onde partiram.

Abraço!!!

Link para o comentário
Compartilhar em outros sites

  • 0

Então, consegui pegar o nome do componente que realizou a última operacao, assim:

Screen.ActiveControl.Name

Agora, comeca a ficar mais divertido, eu gostaria de saber se tem como eu saber o nome do evento executado por determinado componente, algo como:

Se eu der um TAB num TEdit, de um ShowMessage com a mensagem : "OnExit".

Será que tem como fazer isso ?

Link para o comentário
Compartilhar em outros sites

  • 0
Agora, comeca a ficar mais divertido, eu gostaria de saber se tem como eu saber o nome do evento executado por determinado componente, algo como:

Se eu der um TAB num TEdit, de um ShowMessage com a mensagem : "OnExit".

Será que tem como fazer isso ?

Ter como fazer tem, mas eu não colocaria isso em um sistema comercial.

Se quiser fazer isso como aprendizado acho válido, mas não use esse tipo de coisa em um sistema, ou se for preciso usar, faça-o somente se necessario, pois em um sistema bem estruturado não haverá a necessidade disso.

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,2k
×
×
  • Criar Novo...