Obter número da linha onde é levantada uma exceção

22/10/2003

0

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]


Macario

Macario

Responder

Posts

22/10/2003

Aroldo Zanela

Colega,

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;



Responder

22/10/2003

Macario

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]
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


Responder

22/10/2003

Beppe

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


Responder

27/10/2003

Macario

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


Responder

27/10/2003

Sistemald

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.


Responder

31/10/2003

Macario

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?


Responder

10/03/2020

Performance Brasil

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?




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;
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar