Fórum uso do evento onActivate em TDI #3122

28/02/2009

0

Usando o mesmo exemplo enviando no chamado anterior, preciso fazer com que o código do onActivate seja executado. No código fonte da classe TDI, existe o comando: PageControl.ActivePage.OnEnter := OnActivate; na procedure TTDI.CriarFormulario(Classe: TFormClass); Que é executado sempre que a nova aba é criada. Preciso de algo similar para que o onactivate também seja executado quando ocorrer a mudança de aba. Espero ter sido claro. No aguardo Nirlan
Nirlan Fundao

Nirlan Fundao

Responder

Posts

28/02/2009

Rodrigo Mourão

Olá amigo !!!


Estamos trabalhando so seu chamado, peço apenas que aguarde até postarmos a resposta !!!

abs !!!!

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Responder

Gostei + 0

28/02/2009

Rodrigo Mourão

Olá Nirlan !!

A classe TDI já está configurada para fazer oque você quer, mas há um porém. Repare em que evento do PAgeControl o programador da classe fez o Method Pointer: OnEnter!!

PageControl.ActivePage.OnEnter := OnActivate;

Ou seja, para que o OnActive dos seus forms sejam chamados o evento OnEnter do PageCOntrol tem que ser disparado. Para que o OnEnter do Page seja disparado o Form que foi aberto nele te que ter pelo menos um componetes para receber foco !!

Bem a classe não esta errada, mas também não esta 100% certa. Para que o OnActive possa ser chamado sempre idependente de ter ou não controle no form faça o seguinte, altere o codigo acima pelo seguinte código:

PageControl.ActivePage.OnShow := OnActivate;

Assim sempre que trocar de aba o OnActive será invocado !!

Uma grande abraço e até a próxima !!!!

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi

Responder

Gostei + 0

01/03/2009

Nirlan Fundao

entendi perfeitamente a sua explicação, só que existe um detalhe que você não percebeu. A troca do "PageControl.ActivePage.OnEnter := OnActivate" por "PageControl.ActivePage.OnShow := OnActivate" está dentro da função "procedure TTDI.CriarFormulario(Classe: TFormClass)" que só é chamada quando uma nova aba/form é criada. No caso da simples troca de abas, esta função não é chamada. No aguardo Nirlan
Responder

Gostei + 0

01/03/2009

Rodrigo Mourão

Olá Nirlan !!! Acho que você não conhece mothod pointer rsrsrsrs. O fato do código estar no CiarFormulario não significa que ele só será executado quando for criado, pelo contrário. Ali estamos setando o ponteiro de um metodo em outro metodo para que ocorra um efeito cascata, o OnShow do tab chama o OnActive do Form. Uma vez setado o ponteiro esse "efeito cascata" vai acontecer ate que o objeto seja destruido!! Abaixo segue um video demonstando o funcionamento. Ele está propositalmente sem áudio !! Abs !!!

[#VIDEO-80#]
Responder

Gostei + 0

02/03/2009

Nirlan Fundao

como você pode observar o activate é disparado quando se troca de aba, mas não é disparado quando ela é criada. Eu preciso que ocorra nos dois casos. Assim eu passei a utilizar: "PageControl.ActivePage.OnEnter := OnActivate;" e "PageControl.ActivePage.OnShow := OnActivate;" Podemos fechar este chamado e farei novos testes. Você conhece alguma outra alternativa para o uso do FDI, que seja mais completa que essa classe que estou utilizando ? abraços Nirlan
Responder

Gostei + 0

02/03/2009

Rodrigo Mourão

Exatamente Nirlan !!

Para que ocorra nos dois casos faça dois method pointer, é o único modo !!

Quanto a conhecer alguma classe mais completa no que esta eui não conheço!! 

Abs !!!

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Responder

Gostei + 0

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

Aceitar