Obter número da linha onde é levantada uma exceção
Ola pessoal!
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]
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
Curtidas 0
Respostas
Aroldo Zanela
22/10/2003
Colega,
Vc pode obter isso por meio do DEBUG.
Resolvendo o seu problema:
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;
GOSTEI 0
Macario
22/10/2003
Caro Zanela
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
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]
procedure TForm1.Button1Click(Sender: TObject);
begin
//lembrando que edit1.visible:=false;
Edit1.SetFocus;
end;
[/color: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
GOSTEI 0
Beppe
22/10/2003
Uma asserção salva a o número da linha:
try
Edit1.SetFocus;
except
Assert(False);
end;
É uma aproximação do verdadeiro erro, já que a linha exibida é do Assert(False).
Ataliba
try
Edit1.SetFocus;
except
Assert(False);
end;
É uma aproximação do verdadeiro erro, já que a linha exibida é do Assert(False).
Ataliba
GOSTEI 0
Macario
22/10/2003
Valeu Ataliba
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
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
GOSTEI 0
Sistemald
22/10/2003
Procedure Tfrmprincipal.MostraErro(Sender: TObject; E: Exception);
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.
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.
GOSTEI 0
Macario
22/10/2003
Ola colegas..venho novamente recorrer a ajuda de voces
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?
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?
GOSTEI 0
Performance Brasil
22/10/2003
Ola colegas..venho novamente recorrer a ajuda de voces
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?
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;
GOSTEI 0