Obter número da linha onde é levantada uma exceção
22/10/2003
0
a duvidaé a seguinte ao sabe como pegar linha onde é gerada um excessão?
sera que isso é possivel
eu consigo pegar nome de objetos mas onde e como pego a linha
por exemplo
Edit1.visible:=false;
Edit1.setfocus;// aqui ocorre a ecessão
suponhamos que essa seria a linha 123 como fazer para ele me retornar a linha?
[b:12108f8f02]Título editado pelo Moderador - AZ[/b:12108f8f02]
Macario
Posts
22/10/2003
Aroldo Zanela
Vc pode obter isso por meio do DEBUG.
Resolvendo o seu problema:
try Edit1.visible:=false; if Edit1.CanFocus then Edit1.setfocus;// aqui não ocorre mais a exceção except end;
22/10/2003
Macario
Veja só colega revendo meu topico vi que nao fui um tanto claro.
O exemplo que eu quis passar seria, eu tentando passar o foco
a um TEdit (edit1), mas o mesmo se encontra com a propriedade
visible = false, entao nesse momento gera uma excessão.
Agora se possivel como posso obter a linha onde eu seto o foco para o
Tedit
por exemplo
[color=green:2b505b3206]
e digamos que a linha onde esta o [b:2b505b3206][i:2b505b3206]Edit1.setfocus[/i:2b505b3206][/b:2b505b3206], seja de numero 123 na Unit1.paz
espero ter sido mais especifico agora
22/10/2003
Beppe
try
Edit1.SetFocus;
except
Assert(False);
end;
É uma aproximação do verdadeiro erro, já que a linha exibida é do Assert(False).
Ataliba
27/10/2003
Macario
Agora outra pergunta teria uma maneira de eu utilizar
essa [b:84c8ac4a13]procedure (Assert)[/b:84c8ac4a13] de uma forma global?
Tipo, uma procedure ou função...na qual, qualquer excessão que ocorra
o Assert me retorne a linha?
Um Abraço a todos
27/10/2003
Sistemald
Begin
//tratando alguns erros
if e.Message = ´Invalid input value. Use escape key to abandon changes´ then
begin
showmessage(´Valor invalido. Use o ´Esc´ para abondonar.´);
exit;
end;
if copy(e.Message, 1, 12) = ´SInvalidDate´ then
begin
showmessage(e.Message);
exit;
end;
if copy(e.Message, 1, 18 ) = ´SInvalidFloatValue´ then
begin
showmessage(e.Message);
exit;
end;
if e.Message = ´Não pode criar formulario modal´ then
begin
showmessage(´Não foi possivel abrir o formulario.´);
exit;
end;
//erros não tratados
frmerro.memo.lines.text:=´Erro ocorrido(características técnicas): ´ + #13 + E.Message;
try
frmerro.showmodal;
except
if messagedlg(´Não foi possivel carregas o formulario para tratamento de erro, talvez não seja possivel continuar, para continuar pressione o botão ´Ignorar´, para encerrar o aplicativo pressione o botão ´Abortar´´, mtwarning,
[mbignore, mbabort],0) = mrabort then
application.Terminate;
end;
end;
[b:8f6aaec432]frmerro é um formulario com um memo para demonstrar ao usuario o erro ocorrido[/b:8f6aaec432]
[b:8f6aaec432]Para funcionar[/b:8f6aaec432]
Voce deve colocar no oncreate de todos os form:
Application.OnException:=frmprincipal.MostraErro;
[b:8f6aaec432]Problema[/b:8f6aaec432]
Na Mensagem de erro, não fala em que form ocorreu, nem nada o ideal era implementar este tratamento.
31/10/2003
Macario
Com a procedure Assert que o colega Ataliba me passou
consigo obter a Unit e a Linha na qual houve a excessão mas
isso seria muito trabalhoso pois vendo que o sistema no qual trabalho ja é
bem extenso, e para sair aplicando
Try
<intrução>
except
Assert (false)
end;
seria bem trabalhoso.
Entao pergunto como criar uma função ou procedure
que seja colocada no form principal e apartir dele qualquer excessão seja
capturada?
me retornando a linha?
10/03/2020
Performance Brasil
Com a procedure Assert que o colega Ataliba me passou
consigo obter a Unit e a Linha na qual houve a excessão mas
isso seria muito trabalhoso pois vendo que o sistema no qual trabalho ja é
bem extenso, e para sair aplicando
Try
<intrução>
except
Assert (false)
end;
seria bem trabalhoso.
Entao pergunto como criar uma função ou procedure
que seja colocada no form principal e apartir dele qualquer excessão seja
capturada?
me retornando a linha?
Faz o seguinte:
type
TForm1 = class()
procedure AppException(Sender: TObject; E: Exception);
private
public
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnException := AppException;
end;
procedure TForm1.AppException(Sender: TObject; E: Exception);
begin
Application.ShowException(E);
Application.Terminate;
end;
Clique aqui para fazer login e interagir na Comunidade :)