Executar ação antes de fechar dialog

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Executar ação antes de fechar dialog

Mensagem por JoséQuintas »

Como faço pra hwgui executar uma ação antes de uma dialog ser fechada?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Executar ação antes de fechar dialog

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Executar ação antes de fechar dialog

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Executar ação antes de fechar dialog

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Executar ação antes de fechar dialog

Mensagem 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() )  } 
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Executar ação antes de fechar dialog

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Executar ação antes de fechar dialog

Mensagem 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?
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Executar ação antes de fechar dialog

Mensagem 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. }
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Executar ação antes de fechar dialog

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Executar ação antes de fechar dialog

Mensagem 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
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Executar ação antes de fechar dialog

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Executar ação antes de fechar dialog

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Executar ação antes de fechar dialog

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Executar ação antes de fechar dialog

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Responder