uso do evento onActivate em TDI
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
Curtidas 0
Respostas
Rodrigo Mourão
28/02/2009
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
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
GOSTEI 0
Rodrigo Mourão
28/02/2009
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
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
GOSTEI 0
Nirlan Fundao
28/02/2009
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
GOSTEI 0
Rodrigo Mourão
28/02/2009
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#]
[#VIDEO-80#]
GOSTEI 0
Nirlan Fundao
28/02/2009
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
GOSTEI 0
Rodrigo Mourão
28/02/2009
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
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
GOSTEI 0