Fórum Log de Erro - Capturar nome do Formulário. #300580
25/10/2005
0
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
Curtir tópico
+ 0Posts
25/10/2005
Facc
Gostei + 0
25/10/2005
Lnunes
Gostei + 0
25/10/2005
Facc
Gostei + 0
25/10/2005
Martins
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
Gostei + 0
25/10/2005
Lnunes
Gostei + 0
25/10/2005
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
FPrincipal.VForm := NomeFormulario.Caption
e na rotina onde grava os erros, vc passaria a variável
nunca fiz isso, é uma idéia
Gostei + 0
25/10/2005
Lnunes
Desde já agradeço a atenção de todos.
Gostei + 0
26/10/2005
Lnunes
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.
Gostei + 0
08/11/2005
Facc
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?
Gostei + 0
12/12/2005
Braytiner Heggendorn
Gostei + 0
12/12/2005
Thomaz_prg
For i:= 0 to Screen.Forms.Count -1 do
Para pegar o nome dos forms
Screen.Forms[i].Name
Gostei + 0
12/12/2005
Marco Salles
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
FPrincipal.VForm := NomeFormulario.Caption
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;
Gostei + 0
12/12/2005
Thomaz_prg
Gostei + 0
12/12/2005
Marco Salles
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ã
Gostei + 0
12/12/2005
Lnunes
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.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)