GARANTIR DESCONTO

Fórum Try e Finally no DELPHI #426793

22/10/2012

0

Olá pessoal alguém poderia explicar,

com qual finalidade eu,

uso o Try / Finally
Gustavo Fernandes

Gustavo Fernandes

Responder

Post mais votado

22/10/2012

Boa tarde, o try é um bloco de comandos que você quer que determinadas operações sejam feitas. Já o finaly é um bloco de comandos que você utiliza para terminar determinado procedimento. Um exemplo cálculo de média:

try{
nota1=5
nota2=5

media=(5+5)/2
}
finaly{

imprimir("A média é :" +media)
}


Espero ter ajudado

Tiago

Tiago
Responder

Gostei + 1

Mais Posts

23/10/2012

Alessandro Yamasaki

Tratamento de exceções
Responder

Gostei + 0

23/10/2012

Jurandi Frade

Tratamento de exceções é através de
Try
Except
On E: except // caso vc queira saber a exceção
End;

E

Try
Finally
End;

vc usa quando quer que uma determinada ação sempre ocorra ao final de um procedimento.
Ex:
Try
TextoHeader := TRichEdit.Create(Self);
....
....
Finally
Textheader.free;
End;

Espero ter ajudado.
Sds,

Responder

Gostei + 0

24/10/2012

Alisson Santos

Esse tipo de tratamento você pode estar fazendo sempre que achar que aquele código que está desenvolvendo pode dar algum erro, independente do erro que ocorrer ele vai executar o finally.
Responder

Gostei + 0

26/10/2012

Gustavo Fernandes

Agradeço pela atenção galera.

Só mais uma pergunta eu, estou montando

meu, bloco da seguinte maneira abaixo.

Application.CreatForm(TF_Form1, F_Form1)
try
F_Form1.ShowModal;
F_Form1.Realese;
finally
FreeAndNil(F_Form1)
end;

Neste Bloco tem como utilizar o Except junto com finally ?

pois quando tento da erro, logicamente acabo optando um deles.
Responder

Gostei + 0

26/10/2012

Claudia Nogueira

Está estranho você usar um Release depois do ShowModal, isso não é necessário.
Quando tem algum retorno depois do ShowModal, quer dizer que a tela já foi fechada.
Pra criar/abri um form eu simplesmente faço dessa maneira:
  Application.CreateForm(TF_Form1, F_Form1);
  F_Form1.ShowModal;
  FreeandNil(F_Form1);


Se você deixa seus Forms criando automaticamente no projeto (não é aconselhado), aí ficaria somente assim:

  F_Form1.ShowModal;


Em todo caso, respondendo sua dúvida, se é possível usar o except com o finally, sim é possível, veja o exemplo:
try
  F_Form1.ShowModal;
  F_Form1.Realese;
finally
  try
    FreeAndNil(F_Form1)
  except
  end;
end;


Agradeço pela atenção galera.

Só mais uma pergunta eu, estou montando

meu, bloco da seguinte maneira abaixo.

Application.CreatForm(TF_Form1, F_Form1)
try
F_Form1.ShowModal;
F_Form1.Realese;
finally
FreeAndNil(F_Form1)
end;

Neste Bloco tem como utilizar o Except junto com finally ?

pois quando tento da erro, logicamente acabo optando um deles.
Responder

Gostei + 0

27/10/2012

Marco Salles

Hummm , a dúvida dele não é se pode usar mas qual usar e qual a diferença entre os blocos

primeiro lugar sua estrututa de instanciação não é recomendada e ja tive relatos de inumeros erros com ela


Application.CreatForm(TF_Form1, F_Form1)
try
F_Form1.ShowModal;
F_Form1.Realese;
finally
FreeAndNil(F_Form1)
end;


Veja o Link , onde aparentemente nada de anormal ao utilizar o Application.createForm

http://forum.devmedia.com.br/viewtopic.php?t=79822&highlight=application+createform

Nesta estrutura o Proprietário do Form é do Objeto application .. È dele a responsabilidade de desalocar a memória de
destruir a instancia do form ... Ma logo abaixo vc da um FreeAndNil(F_Form1) o que é incoerente com o próposito . Logo
descarte a utilização desta estrutura (no meu ponto de vista)

2)Segundo lugar como a amiga Claudiadnh relatou


Está estranho você usar um Release depois do ShowModal, isso não é necessário.
Quando tem algum retorno depois do ShowModal, quer dizer que a tela já foi fechada.
Pra criar/abri um form eu simplesmente faço dessa maneira:


Não so é estranho como não se aplica utilizar o release neste arquitetura . As bigrafias do delphi comentam sobre o release mas ela geralmente é utilizado dentro do próprio form e não fora dele ... Aqui vc esta instanciando um form a partir da uses (do form Principal) e portanto o release não se aplica ... O freeandnil ou em alguns casos (depende do escopo da variável Form) o simples free resolve

3)Agora sua dúvida quanto o try excpet ou try finally é simples .... o try finaly sempre indepedemente de ocorre ou não
uma exceção o Finally sera sempre executado e o excpet depende de ocorrer a exceção

então vejamos



F_Form1:=TF_Form1.create(nil);
try
F_Form1.ShowModal;

//supor outras instruções passiveis de erros como valiaçoes , formatações enfim -->> Aqui cabe um try excpet
try
//codigo que deve ser tratado caso aja uma exceção
excpet
//blablablabla
end;

finally //Vc deve utilizar o Finally pq vc quer indepemente de ocorrer ou não a exceção liberar a memória 
FreeAndNil(F_Form1); //ou F_Form1.free  para variáveis locais conforme comentado acima
end;
end;


O último detalhe que pode paraecer despercebido (utilizo como critétio pessoal para conhecer o nivel do programador)
é se o try esta antes ou depois do F_Form1:=TF_Form1.create(nil);

Vejo em algumas revistas em alguns códigos de artigos conceituados a má aplicação desta ordem . De cara fico com receio de
continuar a leitura , pois é um básico que não pode ser deixado de mão em quem quer forma opinição . Logo o Try fica após
o F_Form1:=TF_Form1.create(nil); porque subtende-se que caso ocorra algum erro interno ou fora do nosso controle o próprio
delphi desaloca a memória e a instrução Finally não é executada


F_Form1:=TF_Form1.create(nil); // Por alguma razão deu erro aqui -->>> O Próprio delphi se vira para desalocar memória
try  // blocos abaixo devido ao erro não é executado
//
finally
.....



desculpe o testamento , mas se vc ler com atenção dificilmente vc terá problemas com isto [[sds e um abraço amigo
Responder

Gostei + 0

28/10/2012

Gustavo Fernandes

Desde já,

gostaria agradecer a Claudia e Marco Antonio e entre outros.

Pela atenção dada em relação a minha dúvida, muito obrigado.


Responder

Gostei + 0

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

Aceitar