Estrutura TRY FINALLY
Alguém pode me explicar a estrutura TRY FINALLY eu sei q tem haver com erros mais não entendi direito tipo assim da um exemplo bem simples pra mim entender
Tipo assim tem lá o procedure
BItMap.loadFromfile(´oi.bmp´)
....
ai se o arquivo naum existir vai dar a msg file not found certo? e como aplicariamos essa estrutura aqui tipo pra se der este erro ele carregar o arquivo OLá.bmp
Tipo assim tem lá o procedure
BItMap.loadFromfile(´oi.bmp´)
....
ai se o arquivo naum existir vai dar a msg file not found certo? e como aplicariamos essa estrutura aqui tipo pra se der este erro ele carregar o arquivo OLá.bmp
Robotizar
Curtidas 0
Respostas
Denisbetim
29/06/2003
try
//codigo de abrir o OI.BMP
except
//codigo de abrir o olá.bmp
end;
tipo quando acontece um erro em try ele executa o except..
e o finally é quando tiver um erro ou quando terminar o codigo do try
//codigo de abrir o OI.BMP
except
//codigo de abrir o olá.bmp
end;
tipo quando acontece um erro em try ele executa o except..
e o finally é quando tiver um erro ou quando terminar o codigo do try
GOSTEI 0
Carlos Filho
29/06/2003
Alguém pode me explicar a estrutura TRY FINALLY eu sei q tem haver com erros mais não entendi direito tipo assim da um exemplo bem simples pra mim entender
Tipo assim tem lá o procedure
BItMap.loadFromfile(´oi.bmp´)
....
ai se o arquivo naum existir vai dar a msg file not found certo? e como aplicariamos essa estrutura aqui tipo pra se der este erro ele carregar o arquivo OLá.bmp
Olá!
Agora você vai entender realmente o que é o bloco Try - Finally/except - end
Começemos com o mais dificil de entender: TRY - FINALLY - END....
As vezes quando voce executa um certo código algumas operações que deveriam ocorrer não ocorrem... Ainda não sei pq isso acontece, mas por exempo, suponha que vc tenha criado uma rotina para carregar em um listview um grande número de arquivos. Sua rotina muda o cursor do mouse para ampulheta, indicando um processo demorado. Se algum problema ocorrer durante o carregamento, mas se esse problema não for um problema muito sério. seu programa não carregará mais nenhum arquivo e interromperá o código sem apresentar às vezes nenhuma mensagem de erro!!! A unica coisa que vc vai notar é que o seu cursor ainda é uma ampulheta, isto é, ele não voltou ao normal... Isso era esperado, já que ao acontecer o problema o código foi sumariamente interrompido e a linha de código que dizia para o cursor voltar ao normal nao foi executada!
Um bloco TRY - FINALLY - END resove essa questao do cursor, se vc colocar no bloco try o codigo de carregamento e no bloco finally as chamadas ´funções de limpeza´, responsaveis por voltar o seu programa ao estado normal, neste caso, voltar o cursor a forma de seta, assim:
screen.cursor := crHourGlass; try ... <codigo que possivelmente pode apresentar problemas aqui> ... finally //funções de limpeza screen.cursor := crDefault; end;
resumindo: o bloco TRY - FINALLY - END serve para que um certo conjunto de comandos no bloco FINALLY sejam executados SEMPRE, independente de qualquer erro que ocorra no bloco TRY.
O mais fácil de entender é TRY - EXCEPT - END, a ultilidade desta estrutura, ao meu ver, é a simples tradução de mensagens de erro. Se você sabe quais os possíveis erros que podem ocorrer no bloco TRY vc poderá criar mensagens de erro personalizadas no bloco EXCEPT usando a sintaxe:
try ... <codigo que possivelmente pode apresentar problemas aqui> ... except on Exxxxx do begin Application.MessageBox(...); end; end;
Acima, EXXX indica um tipo de erro. Na ajuda do Delphi tem a descrição de todos, como por exemplo EDivideByZero que indica uma divisão por zero ou EAccessViolation (tentativa de acesso a um endereço inexistente de memória).
No bloco except vc deve colocar tudo que deve ser feito quando um erro definido por Exxxx ocorrer entre o ´begin´ e o ´end´. Por exemplo em uma exceção do tipo EDivideByZero você provavelmente desejará colocar um valor padrão em uma possível variável:
begin try for i := 10 downto 0 do begin //i vai assumir o valor zero o que não é permitido. //Vai acontecer uma exceção EDivideByZero! x := 10 / i; end; except on EDivideByZero do begin //dando um valor padrão para X x := 0; Application.MessageBox(´Erro de divisão por zero´,´erro´,MB_ICONERROR); end; end; end;
Acima, quando i = 0 vai dar um erro de divisão por zero. O bloco except captura essa exceção manipulando-a, isto é, dando um valor para x e mostrando a mensagem de erro personalizada.
OBS.: Application.MessageBox é a forma mais sofisticada de apresentar mensagens na tela. Vc pode usar tbm MessageDlg, showmessage. ou ainda criar um formulário como caixa de dialogo totalmente personalizado!
Espero ter ajudado!
GOSTEI 0