Home › Fóruns › Dúvidas e Problemas relacionados ao UserControl ShowDelphi Edition › Usercontrol Erro EAccessViolation
Boa Noite,
Instalei o usercontrol Versao 2.31 RC4 sob o Delphi 10.1 Berlin
Configurei na minha aplicação, conector UCDBISAMConn e funciona tudo (Cadastro de usuários, perfil, alterações etc.) mas, na hora de fechar a aplicação dá Exception EAccessViolation.
procedure TfPrincipal.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if application.messagebox (‘DESEJA REALMENTE SAIR DO PROGRAMA ??? ‘, ‘CONFIRMAÇÃO DE SAÍDA’, mb_yesno + mb_iconquestion)=idyes then
begin
try
action:= cafree;
application.terminate;
except
action:= cafree;
end;
End else
action:= canone;
end;
apresenta a tela com:
Application Error
Exception EAccessViolation in module BeerSorte.exe at
002F7EBE
Access violation at address 006F7EBE in module
BeerSorte.exe. Read of address 00000000.
Alguém já passou por isso?
Grato
Newton – Tangará da Serra/MT
RESOLVIDO
Apenas coloquei ucMycontrol.free;
procedure TfPrincipal.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if application.messagebox (‘DESEJA REALMENTE SAIR DO PROGRAMA ??? ‘, ‘CONFIRMAÇÃO DE SAÍDA’, mb_yesno + mb_iconquestion)=idyes then
begin
try
ucMycontrol.free; // Inclui essa linha antes de fechar o form.
action:= cafree;
application.terminate;
except
action:= cafree;
end;
End else
action:= canone;
end;
Prezado Newton,
Qual a versão do Delphi que está a usar? E, se estar a usar todos os componentes inclusive o TUCMassegeAplication e TUCHistorico?
É que depois que comecei a usar este dois componentes comecei a experimentar problemas que nunca tinha tido antes e uso o UCcontrol há muitos anos. Primeiro com D7 depois com XE e hoje com o Delphi XE7 (e a ultima versão do User control baixada do Show Delphi. Estou a usar o MDI, pelo vistos V. também “caFree”, mas não consigo replicar o que V. diz:
try
Aqui ele dá sempre um problema de MemoryLeak uma vezes e outras EAccessViolation quando faço o ucMycontrol.free; // Inclui essa linha
action:= cafree; // CHEGA: o caFree faz no MDI faz Application.Terminate
except
action:= cafree;
end;
No seu lugar passava para o
If
begin …
try…
caFree; // antes
except
…caFree; // depois é redundante, faz sempre
end;
// Passe para aqui porque evita a redundancia. Ou percebi mal?
// try e no except
caFree
end
else…
Obrigado Newton pelo retorno.
Desculpe mas não vejo qualquer retorno do Newton e gostaria de ter acesso ao mesmo. obrigado
Atentamente
Tô na área Máriodosreis, se derrubar é pênalty, se relar em mim eu caio. kkk Tirei a redundância conforme vc. sugeriu. Resolvido
Aqui comigo ficou assim, conforme sugerido, mas o problema persiste, quanto fecho a aplicação não dá erro de imediato, mas apos algum tempo aparece o erro
segue o código
if Application.MessageBox(‘Você tem certeza que deseja realmente sair do sistema?’,’Aguarde!…’,MB_YESNO+MB_ICONQUESTION) = ID_YES then
begin
try
ucMycontrol.free; // Inclui essa linha antes de fechar o form.
//UCApplicationMessage1.Free;
Action :=caFree;
Application.terminate;
except
Action :=caFree;
end;
end else
Action :=caNone;
Josimar, tente no OnClose do form onde o usercontrol desta colocar
usercontrol1.free, por exemplo, só para verificar se o erro para.
Não se repararam que o Vagner corrigiu o memoty leaks. Pedi k ele partilhasse o código, mas ele, ou não viu ainda ou só quer fazê-lo by the book(Como manda o livrinho)!?
Não sei é. Às tantas se houver mais gente a pedir o mesmo, pode ser que se apresse a partilhá-lo.