Clipper On Line • Ver Tópico - Executar ação antes de fechar dialog
Página 1 de 1

Executar ação antes de fechar dialog

MensagemEnviado: 21 Set 2020 17:08
por JoséQuintas
Como faço pra hwgui executar uma ação antes de uma dialog ser fechada?

Executar ação antes de fechar dialog

MensagemEnviado: 21 Set 2020 17:12
por Itamar M. Lins Jr.
Ola!
Verifique os EVENTOS, ON INIT {||}, ON CLOSE {||} e o bloco oDlg:bActivate := {|| x,y,z,...}

Saudações,
Itamar M. Lins Jr.

Executar ação antes de fechar dialog

MensagemEnviado: 21 Set 2020 17:38
por Itamar M. Lins Jr.
Ola!
#include "hwgui.ch"
Function Main
Local oDlg

   INIT DIALOG oDlg TITLE "EVENTOS NO DIALOG" AT 0,0 SIZE 800,600 ;
     On INIT {||hwg_msginfo("Bloco do Inicio")} ;
     On EXIT {||oDlg:Hide(),hwg_msginfo("Bloco do EXIT")}

   @ 300,300 SAY oSay CAPTION "Click no X para fechar" size 300,30

    oDlg : bActivate:={||oDlg:Show(),hwg_msginfo("Bloco do Activate")}

   ACTIVATE DIALOG oDlg CENTER
Return Nil


Errei não tem ON CLOSE é ON EXIT <bExit...
Teste e veja os resultados.

Saudações,
Itamar M. Lins Jr.

Executar ação antes de fechar dialog

MensagemEnviado: 21 Set 2020 17:54
por JoséQuintas
Ajudou pra achar o EXIT.

Tô fazendo um teste muito doido kkkk

Como prender a janela sem prender a rotina.

Sem sucesso ainda.

Executar ação antes de fechar dialog

MensagemEnviado: 21 Set 2020 17:55
por Fernando queiroz
JoséQuintas escreveu:Como faço pra hwgui executar uma ação antes de uma dialog ser fechada?


QUINTAS eu fiz o seguinte, desativei o fechamento com o X
   INIT DIALOG oDlg TITLE "Nota de Pedido" ;   
      ICON MEMVAR->SGC_ICON  ;
      AT 0, 0 SIZE 1008,600 CLIPPER  NOEXIT NOEXITESC NOCLOSABLE


e criei um button para fazer o controle

      @ 340,104 OWNERBUTTON oOwnerbutton1  ID 1001 SIZE 75,40 ;
            TEXT 'SAIR'  ;
            COORDINATES 0, 25, 0, 0  ;
            FONT HFont():Add( '',0,-10,400,,,) ;
            BITMAP 'EXIT16BMP' FROM RESOURCE TRANSPARENT;
            COORDINATES 0, 7, 0, 0 ;
            TOOLTIP 'Sai da Rotina / Finaliza Venda' ;
            ON CLICK {|| oDlg:oPhantom:SETFOCUS(), IF( nw_vNF > 0.00 , NOTA_DE_PEDIDO_PAGAMENTO_GRAFICO(oDlg, oServer, oQuery3, @nNOMVEN, @nPEDIDOS_ID, @cPEDIDOS_ID, @nCLIENTES_ID, @ne_CNPJ, ;
                                          @ce_xNome, @ne_CEP, @ce_xLgr, @ne_nro, @ce_xBairr, @ce_xMun, @ce_fone, @nPRODUTOS_ID, @ci_xProd, @ce_xCpl, @cNRAZ_SOC, @nNUMITEM, ;
                                          @ni_qCom, @ni_vUnCom, @ni_vProd, @nw_vNF, @nTOTALNOTA, @nTOTALPESO ), oDlg:Close() )  }

Executar ação antes de fechar dialog

MensagemEnviado: 21 Set 2020 18:02
por Itamar M. Lins Jr.
Ola!
Como eu disse é ON EXIT pode deixar o X na janela que vai executar o bloco(On Exit) até por botão.
Pq ele pega a saida pela função hwg_EndDialog()
E façam exemplos que possamos testar, pq eu mesmo esqueço, e não sei muita coisa e gostaria de testar esses exemplos aqui.
Facilita para outros que não usam a Hwgui testar,
   METHOD Close()    INLINE hwg_EndDialog( ::handle )

...
      IF oDlg:bDestroy != Nil
         res := Eval( oDlg:bDestroy, oDlg )
         res := Iif( Valtype(res)=="L", res, .T. )
      ENDIF

Saudações,
Itamar M. Lins Jr.

Executar ação antes de fechar dialog

MensagemEnviado: 21 Set 2020 18:14
por alxsts
Olá!
Itamar M. Lins Jr. escreveu:Pq ele pega a saida pela função hwg_EndDialog()

Tem certeza? Tenho a impressão que oDlg:endDialog() simplesmente fecha a dialog. Já oDlg:close() executa tudo que existir, se existir algo, no bloco ON EXIT da dialog (oDlg:bOnExit ) e dó depois fecha a dialog.
Já que estão com a mão na massa, por favor, podem testar este caso?

Executar ação antes de fechar dialog

MensagemEnviado: 21 Set 2020 18:14
por JoséQuintas
Tudo bem, não se preocupe, estou num teste muito doido.

   INIT DIALOG ::oFrm TITLE cTitulo AT 20, 0 SIZE 800, 600 ON EXIT { || ::lExit := .T. }

Executar ação antes de fechar dialog

MensagemEnviado: 21 Set 2020 18:27
por Itamar M. Lins Jr.
Ola!
Tem certeza?
O código do SVN e o teste está ai para vc ver.
podem testar este caso?

O exemplo e código do SVN estão ai. Podem testar ai no seus computadores. Aqui quando clico no X aparece a DIALOG com a msginfo.

Saudações,
Itamar M. Lins Jr.

Executar ação antes de fechar dialog

MensagemEnviado: 21 Set 2020 18:44
por Fernando queiroz
itamar no caso de fechar o que tiver abaixo do ACTIVATE DIALOG

tambem é executado depois do fechamento do DIALOG
EX:

ACTIVATE DIALOG oDlg CENTER
IF nw_vNF = 0.00 .AND. nPEDIDOS_ID != 0
oServer:Execute("DELETE FROM PEDIDOS WHERE PEDIDOS_Id='" + STRZERO(nPEDIDOS_ID,11,0) + "' LIMIT 1")
ENDIF
RETURN NIL

Executar ação antes de fechar dialog

MensagemEnviado: 21 Set 2020 18:51
por Itamar M. Lins Jr.
Ola!
Olha ai o teste completo. Testem
#include "hwgui.ch"

Function Main
Local oDlg, oSay, oBtn

   INIT DIALOG oDlg TITLE "EVENTOS NO DIALOG" AT 0,0 SIZE 800,600 ;
     On INIT {||hwg_msginfo("Bloco do Inicio")} ;
     On EXIT {||oDlg:Hide(),hwg_msginfo("Bloco do EXIT")}

   @ 300,100 SAY oSay CAPTION "Click no X para fechar" size 300,30

   @ 300,200 button oBtn Caption "SAIR Close" size 200,50 ON CLICK {||oDlg:Close()}
   @ 300,400 button oBtn Caption "SAIR EndDialog" size 200,50 ON CLICK {||hwg_EndDialog()}

    oDlg : bActivate:={||oDlg:Show(),hwg_msginfo("Bloco do Activate")}

   ACTIVATE DIALOG oDlg CENTER
Return Nil


Saudações,
Itamar M. Lins Jr.

Executar ação antes de fechar dialog

MensagemEnviado: 21 Set 2020 18:53
por Itamar M. Lins Jr.
Ola!
tambem é executado depois do fechamento do DIALOG

Ai já está fora do READ(vamos dizer assim) do bloco(janela) com os componentes dentro.

Saudações,
Itamar M. Lins Jr.

Executar ação antes de fechar dialog

MensagemEnviado: 21 Set 2020 18:59
por Itamar M. Lins Jr.
Ola!
            ON CLICK {|| oDlg:oPhantom:SETFOCUS(), IF( nw_vNF > 0.00 , NOTA_DE_PEDIDO_PAGAMENTO_GRAFICO(oDlg, oServer, oQuery3, @nNOMVEN, @nPEDIDOS_ID, @cPEDIDOS_ID, @nCLIENTES_ID, @ne_CNPJ, ;
                                             @ce_xNome, @ne_CEP, @ce_xLgr, @ne_nro, @ce_xBairr, @ce_xMun, @ce_fone, @nPRODUTOS_ID, @ci_xProd, @ce_xCpl, @cNRAZ_SOC, @nNUMITEM, ;
                                             @ni_qCom, @ni_vUnCom, @ni_vProd, @nw_vNF, @nTOTALNOTA, @nTOTALPESO ), oDlg:Close() )  }
Pode colocar esse CODE BLOCK, o bloco todo no ON EXIT da DIALOG que será executado.
Eu evito colocar código muito grande, depois de um determinado tamanho de código eu crio uma FUNCTION

As variáveis estão no objeto DIALOG. Então podemos acessar qualquer variável dessa pelo próprio objeto oDlg.
Teste ai:
oDlg:oCE_xNome...
Ou melhor hwg_msginfo( hb_valtoexp(oDlg) )

Saudações,
Itamar M. Lins Jr.

Executar ação antes de fechar dialog

MensagemEnviado: 21 Set 2020 19:15
por Itamar M. Lins Jr.
Ola!
Pergunta do Fernando no Bate Papo.
#include "hwgui.ch"

Function Main
Local oDlg, oSay, oBtn, oOBtn

   INIT DIALOG oDlg TITLE "EVENTOS NO DIALOG" AT 0,0 SIZE 800,600 ;
     On INIT {||hwg_msginfo("Bloco do Inicio")} ;
     On EXIT {||oDlg:Hide(),hwg_msginfo("Bloco do EXIT")}

   @ 300,100 SAY oSay CAPTION "Click no X para fechar" size 300,30

   @ 300,200 button oBtn Caption "SAIR Close" size 200,50 ON CLICK {||oDlg:Close()}
   @ 300,300 button oBtn Caption "SAIR EndDialog" size 200,50 ON CLICK {||hwg_EndDialog()}
   @ 300,400 OWNERBUTTON oOBtn SIZE 200,50 TEXT "SAIR"

    oDlg : bActivate:={||oDlg:Show(), oOBtn:Disable(), hwg_msginfo("Bloco do Activate")}

   ACTIVATE DIALOG oDlg CENTER
Return Nil


Só desabilita qualquer objeto depois dele apresentado na DIALOG. Primeiro agente coloca o objeto na tela, depois desligamos ou ligamos.
Olhe no bloco o desligamento dele, bActivate. O mesmo problema do VALID no ultimo GET.(acredito)

Saudações,
Itamar M. Lins Jr.