Fórum Log de Erro - Capturar nome do Formulário. #300580

25/10/2005

0

[b:4ac1a04776]Descrição do Problema:[/b:4ac1a04776]

Estou utilizando uma função para criar um arquivo texto sempre que ocorrer um erro(exceção) na aplicação.

Neste arquivo texto gravo o erro, a data e hora do erro, contudo não sei como capturar e escrever no arquivo texto [u:4ac1a04776]em qual formulário o erro aconteceu[/u:4ac1a04776] o que é de extrema importância na hora de realizar o ´reparo´ na aplicação.


Desde já agradeço a Atenção de Todos


Lnunes

Lnunes

Responder

Posts

25/10/2005

Facc

vc tentou com Nome_Formulário.Caption?


Responder

Gostei + 0

25/10/2005

Lnunes

Facc agradeço primeiramente a sua atenção mas o problema é que esta função fica em um evento do componente application event no formulário principal destinado a capturar qualquer execeção que ocorra no sistema sendo assim se eu utiliza-se o Nome_Formulário.Caption iria sempre capturar o nome do formulário principal e não do formulário onde realmente o erro aconteceu.


Responder

Gostei + 0

25/10/2005

Facc

esse código que vc criou, ´varre´ o código de todos os formulários? Se sim, não seria o caso de vc criar uma váriavel que receba o nome do formulário?


Responder

Gostei + 0

25/10/2005

Martins

Facc agradeço primeiramente a sua atenção mas o problema é que esta função fica em um evento do componente application event no formulário principal destinado a capturar qualquer execeção que ocorra no sistema sendo assim se eu utiliza-se o Nome_Formulário.Caption iria sempre capturar o nome do formulário principal e não do formulário onde realmente o erro aconteceu.


Desculpe lhe perguntar isso mas, como essa rotina tá pegando esses exceptions, e vc não poderia capturar o nome do objeto (Form)?

Nunca fiz nada igual, apenas uma idéia!!

Boa Sorte


Responder

Gostei + 0

25/10/2005

Lnunes

A ideia é justamente esta criar uma variável string e carrega-la com o nome do formulário que apresentou o erro mas eu não tenho ideia de como carrega-la.


Responder

Gostei + 0

25/10/2005

Facc

A ideia é justamente esta criar uma variável string e carrega-la com o nome do formulário que apresentou o erro mas eu não tenho ideia de como carrega-la.


tente criar ela no Form Principal na parte de Public, daí nos demais Forms vc colocaria (veja o local mais apropriado) pra receber o nome do form
FPrincipal.VForm := NomeFormulario.Caption


e na rotina onde grava os erros, vc passaria a variável

nunca fiz isso, é uma idéia


Responder

Gostei + 0

25/10/2005

Lnunes

Facc obrigado pela a dica vou tentar agora e mais tarde posto uma resposta informado se o código funcionou ou não.

Desde já agradeço a atenção de todos.


Responder

Gostei + 0

26/10/2005

Lnunes

A utilização da variável neste caso funciona mas acaba dando muito trabalho.

descobrir que a solução mas adequada é utilizar o getactivewindow(não sei se escrevi corretamente) para capturar o nome do formulário.


Obrigado a todos pela ajuda.


Responder

Gostei + 0

08/11/2005

Facc

A utilização da variável neste caso funciona mas acaba dando muito trabalho. descobrir que a solução mas adequada é utilizar o getactivewindow(não sei se escrevi corretamente) para capturar o nome do formulário. Obrigado a todos pela ajuda.


e aí cara... funcionou desse jeito que vc falou? com o comando GetActiveWindow? Pois se traduzindo ao pé da letra, o comando pega o nome da tela ativa... e pelo que eu entendi, vc quer que retorne o possível erro no exato momento que vc chama o Form Principal, seria isso?


Responder

Gostei + 0

12/12/2005

Braytiner Heggendorn

Tente usar o objeto Screen do Delphi para obter o nome do controle e do formulário atual


Responder

Gostei + 0

12/12/2005

Thomaz_prg

tenta aí fazer um for usando o objeto screen (como dito pelo colega).

For i:= 0 to Screen.Forms.Count -1 do

Para pegar o nome dos forms
Screen.Forms[i].Name


Responder

Gostei + 0

12/12/2005

Marco Salles

e aí cara... funcionou desse jeito que vc falou? com o comando GetActiveWindow? Pois se traduzindo ao pé da letra, o comando pega o nome da tela ativa...


Olhe LNunes , tb estou curioso para saber se funcionou ...

A Idéia simples porem um pouquinho cansativa (eu digo so um pouquinho) , porque e so copiar e colar nos eventos onShow de cada formulário aberto , como foi colocado pelo amido Facc

tente criar ela no Form Principal na parte de Public, daí nos demais Forms vc colocaria (veja o local mais apropriado) pra receber o nome do form Código:
FPrincipal.VForm := NomeFormulario.Caption 
[b:4ec5514397]e na rotina onde grava os erros, vc passaria a variável [/b:4ec5514397]


Ate o momento acho a idéia mais plausivel

[b:4ec5514397]Na secção Public do Form Principal[/b:4ec5514397]

var
 NomeFormularioErro:Strings;


procedure TFormPrincipal.ApplicationEvents1Exception(Sender: TObject;
  E: Exception);
var
  Filename: string;
  LogFile: TextFile;
begin
  // prepares log file
  FileName:=´C:\NomeDaPasta.txt´;
  AssignFile (LogFile, Filename);
  if FileExists (FileName) then
    Append (LogFile) // open existing file
  else
    Rewrite (LogFile); // create a new one

  // write to the file and show error
  Writeln (LogFile, DateTimeToStr (Now) + ´-> Ocorreu um Erro No Formulário :´+ NomeFormularioErro);
  Writeln (LogFile,´ O Tipo de erro apresentado foi :´ + E.Message);
  // close the file
  CloseFile (LogFile);
end;



Responder

Gostei + 0

12/12/2005

Thomaz_prg

Amigo, uso da forma com a qual eu disse, e funciona legal... se você quer pegar o nome do form com erro, é só pegar o último formulário instanciado no Objeto Screen ( Screen.Forms[ Screen.Forms.Count-1 ]).


Responder

Gostei + 0

12/12/2005

Marco Salles

Amigo, uso da forma com a qual eu disse, e funciona legal... se você quer pegar o nome do form com erro, é só pegar o último formulário instanciado no Objeto Screen ( Screen.Forms[ Screen.Forms.Count-1 ]).


Eu entendi e confesso que ate tinha me esquecido do objeto global Screen
..

Mas o problema é que quando ocorre um erro em algum formulario , para que o nome dele seje passado para o manipulador de evento Application , voce deve saber o indice do formulario que esta ativo..
Na minha opinião não basta escrever
Screen.Forms[ Screen.Forms.Count-1 ].Name porque nen sempre sera o formulário onde foi gerado a exceção
Mas de modo geral a idéia de usar o Screen é válida eu particularmente vou tentar dar uma investida nela amanhã


Responder

Gostei + 0

12/12/2005

Lnunes

Agradeço a atenção de todos mas até o momento não encontrei a solução para este problemas , contudo com as novas idéias postadas pelo Marco Salles ,thomaz_prg e braytiner acredito que a solução esteja mais próxima,
principalmente a idéia de realizar um for usando o objeto screen.

Vou tentar e caso tenha êxito vou disponibilizar o código para todos, pois acho que a captura de erros sendo feita desta forma vai ajudar a todos.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar