Sobre Criação de Componentes

Delphi

18/08/2006

Criei um componente para controle das Mensagens de Erro na aplicação. O caso é que precisei trabalhar com alguns outros pontos, então no Constructor do componente, crio um TApplicationEvents.
O caso é que, foi só eu criar esse TApplicationEvent no constructor do componente, que o componente, ao ser inserido no form (mesmo em DesignTime) fecha o Delphi. Estranho, mas simplesmente fecha o delphi.

Uso o Delphi 7.


Thomaz_prg

Thomaz_prg

Curtidas 0

Respostas

Micheus

Micheus

18/08/2006

Vc precisa processar estes eventos em design-time?
Talvez se vc criar o objeto apenas em run-time pode não ter esse efeito estranho. Tente verificar o estado o componente antes de criar e utilizar o objeto, utilizando a propriedade ComponentState:
if not (csDesigning in ComponentState) then
  CompAppEvents := TApplicationEvents.Create
...



GOSTEI 0
Thomaz_prg

Thomaz_prg

18/08/2006

Muito Obrigado pela dica amigo...
realmente não preciso desse componente em DesignTime... vou testar sua dica...

muito obrigado mesmo!
Ah, se o componente ficar bom, mando aqui pro pessoal pra ficar disponível pra download.


GOSTEI 0
Thiago Vidal

Thiago Vidal

18/08/2006

tecnicamente, vc nao precisaria de um TApplicationEvents para isso.

base vc colocar, no Create do seu componente:
if not (csDesigning in ComponentState) then
begin
  FOldOnExcept := Application.OnExcept;
  Application.OnExcept := AppExcept;
end;


e no Destroy:
if not (csDesigning in ComponentState) then
begin
  Application.OnExcept := FOldExcept;
end;


Ele deve estar fechando o Delphi, pq o Delphi tem o seu proprio evento no Application.OnExcept, se vc apontar para o seu componente, e depois destruí-lo, qdo houver uma exceção ocorrerá um access violation, e aí o Delphi fecha. Por isso recomendo salvar a instrução atual do Application.OnExcept e restaurar na hora de destruir o componente.

lembrando que o objeto Application fica na unit Forms.

Espero ter ajudado.


GOSTEI 0
Thomaz_prg

Thomaz_prg

18/08/2006

Beleza Thiago...

vou testar isso e posto pra dizer se deu certo.


GOSTEI 0
POSTAR