Clipper On Line • Ver Tópico - Ao clicar no botão selecionar o method é chamado duas vezes
Mudar para estilo Clássico
Discussão sobre a biblioteca Fivewin - O Clipper para Windows.
Postar uma resposta

Ao clicar no botão selecionar o method é chamado duas vezes

17 Jun 2015 10:32

Não sei o que ta acontecendo, não fiz recursividade se é isso que alguns estão pensando.
No meu código, ao clicar no botão selecionar o method é chamado.

Só q ta acontecendo dele ser chamado duas vezes e não sei pq isso ta acontecendo,ja aconteceu com alguém aq?
alguém poderia me ajudar a resolver isso?

Vou mostrar a chamada do method e o method para vc analisarem:

Código:
REDEFINE BUTTON bSelecionar ID 4005 OF ::oDlg ACTION {::MudarEmp2()}

METHOD MudarEmp2() CLASS XBMudarEmpresa
   LOCAL i:=::xBrw2:nVScrollPos, subDir
   
     IF !file("C:\MFOLHA\MFOLHA.DIR")
         IF !FILE(::bancos:getRaiz()+"MFOLHA.DIR")
            MsgAlert("Falha ao selecionar diretório da empresa selecionada! Tente novamente", "Erro ao selecionar diretório" )
           return .f.
         endif
     endif
   
      /******************************************/

   nReg := RECNO()
   IF !(39->(USED()))
      ::bancos:abrir(39)
      SELE 39
      GO nReg
   ENDIF

   IF !EMPTY(39->DIRETORIO)
      subDir := alltrim(39->DIRETORIO) + "\"
   ELSE
      MsgAlert("Não foi possível abrir um dos diretório, verifique o tamanho dos mesmos", "Alerta")
   ENDIF
   ::empresa := 39->EMPRESA
   ::cnpj := 39->CGC
   
   IF TRAVAREG(10)
      REPL 39->SN WITH "S"
   ELSE
      MsgAlert("Não foi possível alterar o arquivo 'MFOLHA.DIR'")
   ENDIF
   
   ::bancos:closeAllDBF()
   
   ::bancos:SetSubDir(subDir)
   
   REST FROM &(::bancos:arqParam) ADDI
   KWEMPDIR    :=subDir
   KWEMPNOM := ::empresa
   KWEMPCGC := ::cnpj
   save all like kw* to &(::bancos:arqParam)
   ::lSelecionou := .T.
      
   ::oDlg:End()
   
RETURN .T.
Editado pela última vez por Toledo em 27 Jul 2015 10:05, num total de 1 vezes
Razão: O presente tópico foi movido da seção Harbour, uma vez que seu conteúdo não tem relação com os objetivos daquela seção, onde só podem constar dúvidas técnicas de programação diretamente relacionadas com o [x]Harbour.

Ao clicar no botão selecionar o method é chamado duas vezes

17 Jun 2015 10:39

Vc. não postou o código completo, mas provável, tenha um VALID em um GET, então, tens que usar o CANCEL ou lCancel := .T. para não ativar o VALID duas vezes. eu acho...

Código:
REDEFINE BUTTON bSelecionar ID 4005 OF ::oDlg ACTION {::MudarEmp2()} CANCEL

Ao clicar no botão selecionar o method é chamado duas vezes

17 Jun 2015 10:45

Não tem valid
da uma olhada

- chamada do method na linha (57)

Código:
METHOD  buildDlg(oWnd) CLASS XBMudarEmpresa
   local xClass := self, oIcon
   ::xVer2enter:=0
   
   
   //"strhlp.dll"
   DEFINE ICON oIcon RESOURCE "#8026"

   DEFINE DIALOG ::oDlg RESOURCE "#1236" ICON oIcon
   
   ::getParams()

   ::lSelecionou:=.F.   
   ::UseDB()
   
   SELE 39
   ordsetfocus(3)
   DBGOTOP()

   lsubdir := alltrim(::bancos:getSubDir())
   lsubdir := IF(substr(lsubdir,len(lsubdir)) == "\", substr(lsubdir,1,len(lsubdir)-1), lsubdir)
   
   39->(dbseek(UPPER(lsubdir)))
   
   ::empresa   := 39->EMPRESA
   ::cnpj      := 39->CGC
   ::diretorio := ::bancos:getRaiz()+::bancos:getSubDir()
   
   39->(ordsetfocus(1))
   
   REDEFINE SAY ID 4001 OF ::oDlg
   REDEFINE SAY ID 4007 OF ::oDlg
   
   REDEFINE SAY ::gempresa   VAR ::empresa   ID 4002 OF ::oDlg
   REDEFINE SAY ::gdiretorio VAR ::diretorio ID 4008 OF ::oDlg
   
   REDEFINE XBROWSE ::xBrw2 ID 4003 OF ::oDlg CELL LINES;
      FIELDS 39->DIRETORIO, IF(39->SN == "S", .T., .F.), 39->EMPRESA, 39->CGC;
      HEADERS "Pasta", "S/N", "Empresa", "C.N.P.J.";
      ON DBLCLICK ::c4change()                                       
      * Manipulando o Browse
         ::xBrw2:aCols[1]:bLClickHeader := {|| 39->(DBSETORDER(3)), ::xBrw2:GoTop(), ::xBrw2:Refresh()}
         ::xBrw2:aCols[1]:cSortOrder = 39->(OrdSetFocus(3))
         ::xBrw2:aCols[3]:bLClickHeader := {|| 39->(DBSETORDER(1)), ::xBrw2:GoTop(), ::xBrw2:Refresh()}
         ::xBrw2:aCols[3]:cSortOrder = 39->(OrdSetFocus(1)) 
         ::xBrw2:bSeek            := {|c| 39->(DbSeek( Upper( c ) )) }   
      * Fim
   ::xBrw2:lHScroll := .F.
   
   AEval( ::xBrw2:aCols, { |o| ::SetPostEdit(o) } )                               
   AEval( ::xBrw2:aCols, { |o| ::SetPostEdit2(o) } )

   REDEFINE BUTTON bmarcar ID 4009 OF ::oDlg ACTION {::marcarTodos(.T.)}
   REDEFINE BUTTON bdesmarcar ID 4010 OF ::oDlg ACTION {::marcarTodos(.F.)}
   
   REDEFINE BUTTON bSelecionar ID 4005 OF ::oDlg ACTION {::MudarEmp2()}
   REDEFINE BUTTON bBuscar ID 4004  OF ::oDlg ACTION ::InitSrch()
   REDEFINE BUTTON bCancelar ID 4006  OF ::oDlg ACTION xClass:oDlg:End()
   
RETURN

Ao clicar no botão selecionar o method é chamado duas vezes

17 Jun 2015 10:46

Ola!
Parece que está usando a Hwgui como interface gráfica. É isso mesmo ?

Saudações,
Itamar M. Lins Jr.

Ao clicar no botão selecionar o method é chamado duas vezes

17 Jun 2015 10:53

não sei te responder Itamar M. Lins Jr.
so estou corrigindo os erros desse sistema,não fui eu que desenvolvi

Ao clicar no botão selecionar o method é chamado duas vezes

17 Jun 2015 11:21

No botões de Saida das telas em FIVEWIN Daiane, sempre ponha CANCEL.

Código:
58      REDEFINE BUTTON bCancelar ID 4006  OF ::oDlg ACTION xClass:oDlg:End() CANCEL


Em tempo: todo modulo que comece com #Include "Fivewin.Ch", significa que você esta usando ou incorporando FiveWin com outra LIB qualquer ou somente usando FiveWin.

No meu skype tem uma pessoa que usa uma tal de gtwvw(?) com FiveWin, disse ela que dá uns bugs terriveis.

abs.

Ao clicar no botão selecionar o method é chamado duas vezes

17 Jun 2015 11:22

Itamar M. Lins Jr. escreveu:Parece que está usando a Hwgui como interface gráfica.

Provavelmente deve ser FiveWin... e confirmando isto, o tópico será movido para a seção FiveWin.

Abraços,

Ao clicar no botão selecionar o method é chamado duas vezes

27 Jul 2015 09:53

alguém poderia me ajudar,ainda está acontecendo da mesma forma so que em rotina diferente
não sei se é o action, o action tem algum parametro?
é como se o method estivesse sendo chamado duas vezes,mas ja verifiquei aqui no fonte e so é chamado uma vez
ele não tem nenhum valid.
Alguem poderia me ajudar?
Código:
//Chamanda do method
REDEFINE BUTTON ::bAlterar PROMPT "&Baixa" ID 4002  OF ::oChild ACTION (::oCadastro:IncOuAlt(.F.))

METHOD IncOuAlt(inc) CLASS CadMultBaixa
Private nRec:=Recno()
   DEFINE ICON oIcon RESOURCE if(inc,"#8004","#8033")
   DEFINE DIALOG ::oDlg RESOURCE "#1034" OF ::oChild ICON oIcon;
   TITLE if(inc, "Incluir", "Alterar") + " Pagamento"
   
   ::bancos := SGBD():getInstance()            
   ::inicializarDados(inc)   
   
   REDEFINE SAY ID 4005 OF ::oDlg
   REDEFINE SAY ID 4002 OF ::oDlg
   REDEFINE SAY ID 4012 OF ::oDlg
   REDEFINE SAY ID 4017 OF ::oDlg
   REDEFINE SAY ID 4014 OF ::oDlg

   REDEFINE GET ::gDtPagamento    VAR ::cDtPagamento    ID 4006 OF ::oDlg 
   REDEFINE GET ::gNumCheque       VAR ::cNumCheque       ID 4013 OF ::oDlg
   REDEFINE GET ::gCgCpf          VAR ::cCgCpf          ID 4018 OF ::oDlg
   REDEFINE GET ::gEmitente       VAR ::cEmitente       ID 4015 OF ::oDlg
   REDEFINE GET ::gDesconto       VAR ::cDesconto       ID 4001 OF ::oDlg
   
      
   REDEFINE BUTTON ::bSalvar ID 4026 OF ::oDlg ACTION ::SalvarDados(inc);
       WHEN (!EMPTY(::cDtPagamento))
   REDEFINE BUTTON ::bCancelar ID IDCANCEL OF ::oDlg;
      ACTION ::oDlg:End() CANCEL
   
   ACTIVATE DIALOG ::oDlg CENTERED   
   DbGoto(nRec)
   ::xbrowBusca:Refresh()
   ::xbrowBusca:gotop()

RETURN nil

Ao clicar no botão selecionar o method é chamado duas vezes

27 Jul 2015 15:09

Daiane,

Código:
REDEFINE BUTTON ::bAlterar PROMPT "&Baixa" ID 4002  OF ::oChild ACTION (::oCadastro:IncOuAlt(.F.)) CANCEL


Ou no Botão de Saida deste metodo que faz a chamada: CANCEL UPDATE

Abs.

Ao clicar no botão selecionar o method é chamado duas vezes

28 Jul 2015 09:21

Obrigada Kapiaba

Ao clicar no botão selecionar o method é chamado duas vezes

22 Dez 2015 14:32

Continuo com o mesmo problema. ja utilizei o CANCEL UPDATE e infelizmente não adiantou
na minha maquina não ocorre o erro, so na do cliente. testei em varias maquinas,alguns ocorre esse bug e outras não

Ao clicar no botão selecionar o method é chamado duas vezes

22 Dez 2015 15:00

Daiane,

Código:
CANCEL // UPDATE


Não use o UPDATE, pois ele atualizará o Dialogo se for MODAL.

Ao clicar no botão selecionar o method é chamado duas vezes

22 Dez 2015 15:07

Código:
#include "FiveWin.ch"

FUNCTION Main()
   LOCAL oDlg, oFld, aFld,lAdd ,lSave
   
   MsgInfo( "start" )
   
   SetDlgGradient( { { 1, RGB( 199, 216, 237 ), RGB( 237, 242, 248 ) } } )

   aFld:={1,4300,121,"Descripción        "}
   lAdd:=.f.
   
   DEFINE DIALOG oDlg RESOURCE "CtaAux" TRANSPARENT
   
   REDEFINE FOLDER oFld ;
               ID 4001 ;
               OF oDlg ;
               PROMPTS "&1-Principal","&2-Identificación", "&3-Est.Balances";
               DIALOGS "CtaAux1" ,"CtaAux2", "CtaAux3"

   //--Principal
   REDEFINE GET aFld[1] ID 600 OF oFld:aDialogs[1] WHEN .F.
   REDEFINE GET aFld[2] ID 601 OF oFld:aDialogs[1] WHEN lAdd
   REDEFINE GET aFld[3] ID 602 OF oFld:aDialogs[1] WHEN lAdd
   REDEFINE GET aFld[4] ID 603 OF oFld:aDialogs[1]
   
   REDEFINE BUTTON ID 1 OF oDlg ACTION ( oDlg:End(), lSave := .T. ) // OK
   REDEFINE BUTTON ID 2 OF oDlg ACTION ( oDlg:End(), lSave := .F. ) ;
            CANCEL // UPDATE
   
   ACTIVATE DIALOG oDlg CENTERED
   
   IF lSave
      MsgInfo('ok')
   ENDIF

RETURN  nil



Ao clicar no botão selecionar o method é chamado duas vezes

22 Dez 2015 15:08

Arquivo.rc

Código:
#ifdef __FLAT__
   1 24 "./WinXP/WindowsXP.Manifest"
#endif

#ifdef __64__
   1 24 "WinXP/WindowsXP.Manifest64"
#endif

CTAAUX DIALOGEX DISCARDABLE 6, 18, 346, 226
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Ficha de empresas"
FONT 10, "MS Shell Dlg"
{
  CONTROL "OK", IDOK, "Button", WS_TABSTOP, 120, 204, 45, 15
  CONTROL "Cancel", IDCANCEL, "Button", WS_TABSTOP, 172, 204, 45, 15
  CONTROL "", 4001, "SysTabControl32", WS_VISIBLE, 4, 4, 276, 144
}

CTAAUX1 DIALOGEX DISCARDABLE 6, 18, 246, 134
STYLE WS_CHILD|DS_3DLOOK|WS_VISIBLE
FONT 10, "MS Shell Dlg"
{
  CONTROL "Edit", 600, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 56, 16, 20, 12
  CONTROL "Edit", 601, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 56, 32, 32, 12
  CONTROL "Edit", 602, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 56, 48, 32, 12
  CONTROL "Edit", 603, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 56, 64, 156, 12
  CONTROL "Empresa", -1, "Static", WS_EX_TRANSPARENT, 8, 20, 28, 8
  CONTROL "Mayor", -1, "Static", WS_EX_TRANSPARENT, 8, 36, 36, 8
  CONTROL "Sub.Cuenta", -1, "Static", WS_EX_TRANSPARENT, 8, 52, 36, 8
  CONTROL "Descripción", -1, "Static", WS_EX_TRANSPARENT, 8, 68, 36, 8
}

CTAAUX2 DIALOGEX DISCARDABLE 6, 18, 246, 134
STYLE WS_CHILD|DS_3DLOOK|WS_VISIBLE
FONT 10, "MS Shell Dlg"
{
 
}

CTAAUX3 DIALOGEX DISCARDABLE 6, 18, 246, 134
STYLE WS_CHILD|DS_3DLOOK|WS_VISIBLE
FONT 10, "MS Shell Dlg"
{
 
}



Ao clicar no botão selecionar o method é chamado duas vezes

22 Dez 2015 15:16

Código:
// Ideia original:
// http://www.pctoledo.com.br/forum/viewtopic.php?f=1&t=15482
// Special thanks ao autor do topico: Billy1943.

#Include "FiveWin.ch"
#Include "Directry.ch"

STATIC lSaida := .F., lLigaBotao := .F.

FUNCTION Google_Rua()

   LOCAL oWnd, oActiveX, oFnt, oFont, nKey := VK_RETURN
   LOCAL cEvents := "", cCookieUser
   LOCAL oMapa, mde_uf, mpara_uf, mde_cid, mpara_cid, mde_rua, mpara_rua
   LOCAL oGet1, oGet2, oGet3, oGet4, oBusca, oSaida, oDlg, msearch

   /*
   mpara_uf  := "SP" // uf
   mpara_cid := "SAO PAULO"//cidade
   mpara_rua := "RUA ROCHA"//rua
   */

   mpara_uf  := space(2)
   mpara_cid := space(40)  // PINDAMONHANGABA
   mpara_rua := space(50)

   SetGetColorFocus()

   SkinButtons()

   DEFINE FONT oFnt   NAME "Ms Sans Serif" SIZE 0,  14 BOLD //UnderLine
   DEFINE FONT oFont  NAME "Ms Sans Serif" SIZE 0, -14 BOLD //UnderLine

   DEFINE DIALOG oDlg TITLE "Buscar Rua no Google Maps" ;
          FROM 0,0 TO 304, 480 PIXEL COLORS CLR_BLACK, CLR_WHITE TRANSPARENT

   oDlg:lHelpIcon := .F.

   Set( _SET_INSERT, ! Set( _SET_INSERT ) )

   //@ 11, 01 say "PROCURAR :"
   @ 1, 2 SAY "PROCURAR A RUA:" OF oDlg UPDATE FONT oFont ;
          COLORS CLR_HRED, CLR_WHITE

   //@ 13, 01 say "Estado ..:" get mpara_uf picture "@!"
   @ 2, 2 SAY "Estado ..:" OF oDlg UPDATE FONT oFnt ;
          COLORS CLR_HBLUE, CLR_WHITE

   @ 30, 50 GET oGet1 VAR mpara_uf OF oDlg PIXEL SIZE 25, 12 PICTURE "@!" ;
            CENTER UPDATE FONT oFnt COLORS CLR_BLACK, CLR_WHITE           ;
            VALID VALIDA_GET1( mpara_uf )

   //@ 14, 01 say "Cidade ..:" get mpara_cid picture "@!"
   @ 3, 2 SAY "Cidade ..:" OF oDlg UPDATE FONT oFnt ;
          COLORS CLR_HBLUE, CLR_WHITE

   @ 45, 50 GET oGet2 VAR mpara_cid OF oDlg PIXEL SIZE 175, 12 PICTURE "@!" ;
            UPDATE FONT oFnt COLORS CLR_BLACK, CLR_WHITE                    ;
            VALID VALIDA_GET2( mpara_cid )

   //@ 15, 01 say "Endere‡o :" get mpara_rua picture "@!"
   @ 4, 2 SAY OemToAnsi( "Endere‡o:" ) OF oDlg UPDATE  FONT oFnt ;
          COLORS CLR_HBLUE, CLR_WHITE

   @ 65, 50 GET oGet3 VAR mpara_rua OF oDlg PIXEL SIZE 185, 12 PICTURE "@!" ;
            UPDATE FONT oFnt COLORS CLR_BLACK, CLR_WHITE                    ;
            VALID VALIDA_BOTAO( mpara_rua, oBusca )

   @ 7.00, 13 BUTTON oBusca PROMPT "&Buscar"  OF oDlg ;
              WHEN( lLigaBotao )                      ;
              ACTION ( lSaida := .T., nKey := VK_RETURN, oDlg:End() ) CANCEL

   oBusca:cToolTip := "Pesquisar a Rua no Google Maps"

   @ 7.00, 21 BUTTON oSaida PROMPT "&Saida"  OF oDlg ;
              ACTION ( lSaida := .T., nKey := VK_ESCAPE, oDlg:End() ) CANCEL

   oSaida:cToolTip := "Saida - Exit - Cancelar"

   SET FONT OF oBusca  TO oFont
   SET FONT OF oSaida  TO oFont

   //read

   ACTIVATE DIALOG oDlg CENTERED ;
            VALID( lSaida )

   oFnt:End()
   oFont:End()

   Set( _SET_INSERT, ! Set( _SET_INSERT ) )

   DO CASE
   CASE nKey == VK_ESCAPE .OR. GETKEYSTATE( VK_ESCAPE )

      lSaida := .F.
      lLigaBotao := .F.

      RETURN NIL

   ENDCASE

   // By Billy1943 - Forum PC Toledo. Ideia Original. Agradecimentos.
   mpara_uf  := alltrim( mpara_uf  )
   mpara_cid := alltrim( mpara_cid )
   mpara_rua := alltrim( mpara_rua )
   msearch   := mpara_rua + " " + mpara_cid + " " + mpara_uf

   DEFINE WINDOW oWnd TITLE "FiveWin ActiveX Support"

   oActiveX = TActiveX():New( oWnd, "Shell.Explorer" )

   oActivex:Silent := .T.  // Para Evitar: Erro de Script na Pagina.

   oWnd:oClient = oActiveX // To fill the entire window surface

   // funciona assim quebra se clicar na imagem
   /*
   oActiveX:Navigate( "https://google.com.br/search?q=" + ;
                       ALLTRIM( msearch ) + "&oq=" +      ;
                       ALLTRIM( msearch ) + "&aqs=chrome" )
   */

   // Erro de Script na Pagina?
   // https://www.google.com.br/maps/place
   // gerando erro de navegador antigo. ?????
   //oActiveX:Navigate( "https://www.google.com.br/maps/place/" + msearch  )

   oActiveX:Navigate( "https://www.google.com.br/maps/place/" + ALLTRIM(msearch)  )

   //oActiveX:bOnEvent = { | event, aParams, pParams | cEvents += EventInfo( event, aParams, pParams, oActiveX ) }

   ACTIVATE WINDOW oWnd MAXIMIZED  /*  ;  // Nao quero editar nada.
            VALID ( MemoEdit( cEvents ), .t. ) */

RETURN NIL

FUNCTION VALIDA_GET1( cmpara_uf )

   IF GETASYNCKEY( VK_UP ) // Para nao perder o foco do dialgo
      RETURN( .F. )
   ENDIF

   IF EMPTY( cmpara_uf )

      MsgInfo( OemToAnsi( "OPERA€ÇO INVµLIDA!             " )+CRLF+ ;
               OemToAnsi( "DIGITIE O NOME DA UF...        " )+CRLF+ ;
               OemToAnsi( "TECLE <ENTER> PARA CONTINUAR..." ),      ;
               OemToAnsi( "OPERA€ÇO INVµLIDA!             " ) )

      lLigaBotao := .F.

      RETURN( .F. )

   ENDIF

RETURN( .T. )

FUNCTION VALIDA_GET2( cmpara_cid )

   IF EMPTY( cmpara_cid )

      MsgInfo( OemToAnsi( "OPERA€ÇO INVµLIDA!             " )+CRLF+ ;
               OemToAnsi( "DIGITIE O NOME DA CIDADE...    " )+CRLF+ ;
               OemToAnsi( "TECLE <ENTER> PARA CONTINUAR..." ),      ;
               OemToAnsi( "OPERA€ÇO INVµLIDA!             " ) )

      lLigaBotao := .F.

      RETURN( .F. )

   ENDIF

RETURN( .T. )

FUNCTION VALIDA_BOTAO( cmpara_rua, oBusca )

   IF EMPTY( cmpara_rua )

      MsgInfo( OemToAnsi( "OPERA€ÇO INVµLIDA!             " )+CRLF+ ;
               OemToAnsi( "DIGITIE O NOME DA RUA...       " )+CRLF+ ;
               OemToAnsi( "TECLE <ENTER> PARA CONTINUAR..." ),      ;
               OemToAnsi( "OPERA€ÇO INVµLIDA!             " ) )

      lLigaBotao := .F.

      RETURN( .F. )

   ENDIF

   // TUDO NORMAL, VAI BUSCAR NO GOOGLE

   lLigaBotao := .T.

   oBusca:Enable()
   oBusca:Refresh()

RETURN( .T. )

FUNCTION EventInfo( event, aParams, pParams, oActiveX )

   local cMsg := "Event: " + cValToChar( event ) + CRLF
   local n

   cMsg += "Params: " + CRLF

   for n = 1 to Len( aParams )
   cMsg += cValToChar( aParams[ n ] ) + CRLF
   next

   if event == "BeforeNavigate2"
   // MsgInfo( aParams[ 2 ] )
   // SetEventParam( pParams, 7, .t. ) // Comment this to allow navigation
   endif

RETURN cMsg + CRLF

// END OF PROGRAM


Postar uma resposta