Fórum Erro estranho: Internal Error: L681 #314661
02/03/2006
0
Internal Error: L681
E ao compilar novamente, aparece o seguinte erro:
[Fatal Error] teste.dpr(10): Unit Dialogs was compiled with a different version of Forms.TForm
Nunca aconteceu isso... e eu não fiz nada.. simplesmente coloquei uma função no meu menu e ao compilar apareceu isso...
Uso Delphi 7 Ent.
Desde já agradeço.
[]s
Titanius
Curtir tópico
+ 0Posts
02/03/2006
Michael
[url=http://qc.borland.com/wc/qcmain.aspx?d=5336]Neste link[/url] do Quality Central da Borland há mais informações e coisas que vc pode tentar para descobrir o problema e/ou eliminar o erro.
[]´s
Gostei + 0
02/03/2006
Titanius
if PgCtrlPrincipal.ActivePageIndex >= 0 then begin (PgCtrlPrincipal.Pages[PgCtrlPrincipal.ActivePageIndex].Components[0] as TFormClass).Close; PgCtrlPrincipal.Pages[PgCtrlPrincipal.ActivePageIndex].Free; end;
Estou tentando fechar o Form associado à Page, e depois liberar a Sheet da memoria.. estou fazendo errado?
P.S.: Estou usando a sua funcao, do outro topico..
[]s
Gostei + 0
02/03/2006
Michael
Sim [b:a492ea795e]Titanius[/b:a492ea795e], há dois erros na sua abordagem. Vamos a eles:
1) [b:a492ea795e]TFormClass [/b:a492ea795e]é um tipo nativo do Delphi definido como [b:a492ea795e]class of TForm[/b:a492ea795e]. Isso quer dizer que ele pode receber referências à classes, e não à instâncias. Eu o usei pq desta forma posso chamar a função passando a classe do Form que quero criar, sem me preocupar em instanciá-lo antes, pois a rotina irá fazê-lo para mim. Desta forma o que vc fez não vai resultar no esperado. O correto seria:
(PgCtrlPrincipal.ActivePage.Components[0] as TCustomForm).Close
Aproveitei e usei a propriedade [b:a492ea795e]ActivePage [/b:a492ea795e]do [b:a492ea795e]PageControl [/b:a492ea795e]para economizar código. ;-)
2) Porém, como eu mencionei no outro tópico, vc [b:a492ea795e]não precisa[/b:a492ea795e] fechar o form, bastando apenas destruir a [b:a492ea795e]TabSheet[/b:a492ea795e]. Isso funciona pq o formulário foi criado com o [b:a492ea795e]Owner [/b:a492ea795e]definido para a aba em questão. Se vc tem algum código no evento [b:a492ea795e]OnClose [/b:a492ea795e]do form, mova-o para o [b:a492ea795e]OnDestroy [/b:a492ea795e]para as coisas ficarem mais coerentes.
Seu código final ficaria assim agora:
if Assigned(PgCtrlPrincipal.ActivePage) then PgCtrlPrincipal.ActivePage.Free;
[]´s
Gostei + 0
02/03/2006
Titanius
Seguinte, tenho uma duvida... quanto ao Owner eu entendi, o porem é que eu precisava mesmo, é de algo que passasse dentro do OnClose do Form em questao, e o codigo
if Assigned(PgCtrlPrincipal.ActivePage) then PgCtrlPrincipal.ActivePage.Free;
nao passava, ja tirava ele...
quanto ao primeiro codigo funcionou legal..
Obrigado,
[]s
Gostei + 0
02/03/2006
Michael
Vou começar a cobrar pela consultoria... ;-)
Por que precisa usar especificamente o [b:dbfec786db]OnClose[/b:dbfec786db]? Não pode usar o [b:dbfec786db]OnDestroy [/b:dbfec786db]como eu mencionei? Se não, e dentro do [b:dbfec786db]OnClose [/b:dbfec786db]vc fizer isso:
Action := caFree;
Então vc não deve criar os formulários passando a [b:dbfec786db]TabSheet [/b:dbfec786db]como [b:dbfec786db]Owner[/b:dbfec786db], e sim [b:dbfec786db]nil[/b:dbfec786db].
Só vejo duas razões para usar o [b:dbfec786db]OnClose[/b:dbfec786db] neste contexto: ou vc quer poder impedir o fechamento do Form, e nesse caso tbm poderia usar o [b:dbfec786db]OnCloseQuery[/b:dbfec786db], ou se os forms são compartilhados entre projetos [b:dbfec786db]MDI/SDI[/b:dbfec786db] e [b:dbfec786db]MTI[/b:dbfec786db].
[]´s
Gostei + 0
25/04/2014
Rfb
Você demonstrar ter um grande conhecimento em Delphi.
Estou desenvolvendo um projeto e gostaria de saber se você se interessa em prestart consultoria.
Por favor, entre em contato e te dai mais detalhes. (rfbarrozo@gmail.com)
Fico no aguardo.
Um abraço.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)