Ir para conteúdo
  • Cadastre-se

dev botao

TDI Form Activate


  • Este tópico foi criado há 1623 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Bom dia a todos, estou iniciando o uso do TDI Notebook e me deparei com uma duvida, como eu emulo o onFormActivate no form dentro de uma aba? Se não for possivel, existe alguma forma de emular ele quando o form da aba ficar novamente visivel?

 

Muito obrigado a todos.

José Ricardo

Editado por stiware
Link para o comentário
Compartilhar em outros sites

  • Fundadores

Esse evento não faz muito sentido, quando usamos o TDI... pois na verdade o todos os Forms estão no mesmo formulário...

Poderíamos emular esse comportamento... com algumas mudanças no fonte do TDI...

Veja o código comentado em

procedure TTDINoteBook.DoChange ;
 

procedure TTDINoteBook.DoChange ;
begin
  inherited DoChange;

  if ([csDesigning, csDestroying, csFreeNotification] * ComponentState <> []) then exit ;

  // Emulate FormInPage.OnActivate //
  (*
  if (not FIsRemovingAPage) and (ActivePage is TTDIPage) then
  begin
    with TTDIPage(ActivePage) do
    begin
      if Assigned( FormInPage ) then
        if ([csDesigning, csDestroying, csFreeNotification] * FormInPage.ComponentState = []) then
          if Assigned( FormInPage.OnActivate ) then
            if FormInPage.Visible then
              FormInPage.OnActivate( Self );
    end;
  end ;
  *)

  CheckInterface;

  {
  // This doesn't work on Win32, Focus always go to first control on Page //
  if FRestoreActiveControl then
    if (ActivePage is TTDIPage) then
      TTDIPage( ActivePage ).RestoreLastFocusedControl;
  }

  // This is a ugly workaround.. but it works :) //
  if tdiRestoreLastActiveControl in FTDIOptions then
    RestoreLastFocusedControl;
end ; 

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Por favor teste como a Unit em Anexo...

Citar

09/01/2019
[+] Added new Option "tdiEmulateFormOnActivate". If Seted, will fire Internal Form
    OnActivate and OnDeactivate when changing Pages
    (by: DSA)    

 

tdiclass.pas

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Obrigado pelos testes... vou subir as alterações para o SVN do CCR e uma nova versão do Package, para o OPM - OnLine Package Manager, do Lazarus

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Aproveitando uma duvida me ocorreu, eu estou vendo algumas diferenças no aproach do MDI para TDI no caso eu automatizava muita coisa com Screen.ActiveForm.FindComponent(... para localizar componentes de dados e administrar o CRUD como isso fica no TDINotebook, visto que o ActiveForm sempre vai ser o form principal da aplicação? Mais uma vez obrigado.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Humm.. acho que seria melhor usar os evento de Banco de Dados... OnDataChange, OnStateChange, para habilitar e desabilitar os controles de acordo com o CRUD

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

eu uso onDatachange mais a implementação dele esta no meu form base

 

  TB_NOVO.Enabled := (TADOQUERYSQL(Screen.ActiveForm.FindComponent(NomeQuery)).State = dsBrowse) and
                     (UInsere) and (NInsere);
  TB_ELIMINA.Enabled := (TADOQUERYSQL(Screen.ActiveForm.FindComponent(NomeQuery)).State = dsBrowse) and
                        (not TADOQUERYSQL(Screen.ActiveForm.FindComponent(NomeQuery)).FieldByName(Campo).IsNull) and
                        (UExclui) and (NExclui);
  TB_GRAVA.Enabled := (TADOQUERYSQL(Screen.ActiveForm.FindComponent(NomeQuery)).State = dsInsert) or
                      (TADOQUERYSQL(Screen.ActiveForm.FindComponent(NomeQuery)).State = dsEdit);
  TB_CANCELA.Enabled := TB_GRAVA.Enabled;
 

 

Esse TADOQUERYSQL eu estou reescrevendo minha aplicação pra Lazarus RESTDataware então estou migrando aos poucos, vlw.

Editado por stiware
Link para o comentário
Compartilhar em outros sites

  • Fundadores
51 minutos atrás, stiware disse:

Screen.ActiveForm.FindComponent(.

isso pode ficar lento no TDI... pois provavelmente todos os Formulários estarão dentro do formulário principal, (ActiveForm)....

como você quer que esse código rode sempre no Formulário... porque não usar:

Self.FindComponent 

 

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • 10 meses depois ...
  • Este tópico foi criado há 1623 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...