Página 1 de 1

Executar ação antes de fechar dialog

Enviado: 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

Enviado: 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

Enviado: 21 Set 2020 17:38
por Itamar M. Lins Jr.
Ola!

Código: Selecionar todos

#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

Enviado: 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

Enviado: 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

Código: Selecionar todos

	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

Código: Selecionar todos

		@ 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

Enviado: 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,

Código: Selecionar todos

   METHOD Close()    INLINE hwg_EndDialog( ::handle )
...

Código: Selecionar todos

      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

Enviado: 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

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

Código: Selecionar todos

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

Executar ação antes de fechar dialog

Enviado: 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

Enviado: 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

Enviado: 21 Set 2020 18:51
por Itamar M. Lins Jr.
Ola!
Olha ai o teste completo. Testem

Código: Selecionar todos

#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

Enviado: 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

Enviado: 21 Set 2020 18:59
por Itamar M. Lins Jr.
Ola!

Código: Selecionar todos

            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

Enviado: 21 Set 2020 19:15
por Itamar M. Lins Jr.
Ola!
Pergunta do Fernando no Bate Papo.

Código: Selecionar todos

#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.