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

Executar ação antes de fechar dialog

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Executar ação antes de fechar dialog

Mensagempor JoséQuintas » 21 Set 2020 17:08

Como faço pra hwgui executar uma ação antes de uma dialog ser fechada?
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14703
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 867 vezes

Executar ação antes de fechar dialog

Mensagempor Itamar M. Lins Jr. » 21 Set 2020 17:12

Ola!
Verifique os EVENTOS, ON INIT {||}, ON CLOSE {||} e o bloco oDlg:bActivate := {|| x,y,z,...}

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 4626
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 161 vezes
Mens.Curtidas: 254 vezes

Executar ação antes de fechar dialog

Mensagempor Itamar M. Lins Jr. » 21 Set 2020 17:38

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 4626
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 161 vezes
Mens.Curtidas: 254 vezes

Executar ação antes de fechar dialog

Mensagempor JoséQuintas » 21 Set 2020 17:54

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.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14703
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 867 vezes

Executar ação antes de fechar dialog

Mensagempor Fernando queiroz » 21 Set 2020 17:55

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() )  }
HARBOUR 3.2, HWGUI 2.22 B4, SEFAZCLASS, DBFCDX, PDFClass, LETODBF
Fernando queiroz
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 440
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 6 vezes
Mens.Curtidas: 16 vezes

Executar ação antes de fechar dialog

Mensagempor Itamar M. Lins Jr. » 21 Set 2020 18:02

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 4626
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 161 vezes
Mens.Curtidas: 254 vezes

Executar ação antes de fechar dialog

Mensagempor alxsts » 21 Set 2020 18:14

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)
alxsts
Colaborador

Colaborador
 
Mensagens: 2311
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 14 vezes
Mens.Curtidas: 161 vezes

Executar ação antes de fechar dialog

Mensagempor JoséQuintas » 21 Set 2020 18:14

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. }
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14703
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 867 vezes

Executar ação antes de fechar dialog

Mensagempor Itamar M. Lins Jr. » 21 Set 2020 18:27

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 4626
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 161 vezes
Mens.Curtidas: 254 vezes

Executar ação antes de fechar dialog

Mensagempor Fernando queiroz » 21 Set 2020 18:44

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.22 B4, SEFAZCLASS, DBFCDX, PDFClass, LETODBF
Fernando queiroz
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 440
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 6 vezes
Mens.Curtidas: 16 vezes

Executar ação antes de fechar dialog

Mensagempor Itamar M. Lins Jr. » 21 Set 2020 18:51

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 4626
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 161 vezes
Mens.Curtidas: 254 vezes

Executar ação antes de fechar dialog

Mensagempor Itamar M. Lins Jr. » 21 Set 2020 18:53

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 4626
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 161 vezes
Mens.Curtidas: 254 vezes

Executar ação antes de fechar dialog

Mensagempor Itamar M. Lins Jr. » 21 Set 2020 18:59

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 4626
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 161 vezes
Mens.Curtidas: 254 vezes

Executar ação antes de fechar dialog

Mensagempor Itamar M. Lins Jr. » 21 Set 2020 19:15

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 4626
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 161 vezes
Mens.Curtidas: 254 vezes




Retornar para HwGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro