Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado (editado)

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
  • Fundadores
Postado

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.

  • Fundadores
Postado

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.

Postado

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.

Postado (editado)

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
  • Fundadores
Postado
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.

  • 10 meses depois ...
  • Este tópico foi criado há 1835 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.