evertonlb Posted September 14, 2016 Report Share Posted September 14, 2016 Olá pessoal. Estou com um pequeno probleminha num xBrowse. Tenho um browse que lista as contas a receber, tenho uma coluna onde clicando com o botão direito do mouse, marca as contas a receber e se clicando novamente desmarca a conta. Gostaria de fazer esta marcação com a barra de espaço, se conseguir fica mas prático para o usuário, pois navega com as setas e marca com a barra de espaço. Coloquei a seguinte linha oXBrw5:bKeyDown := { | nKey | IF( nKey = 27, MarcaParc( (_cNomArq)->TMP_VEND, (_cNomArq)->TMP_PARC, @nSomaNumParcelas, @nSomaValOriginal, @nSomaValJuros, Recno(), @nKey ), .F. ) } O que esta acontecendo é que pressionando UMA ÚNICA vez a barra de espaço ( nKey == 32 ) está entrando duas vezes na função. Na primeira vez marca a parcela e na segunda, já que a parcela está marcada, ele desmarca.... Só consegui fazer funcionar usando o ESC ( conforme esta no código acima ), mas colocando qualquer outra tecla o xBrowse manda duas vezes para a função MarcaParc. Como posso fazer para que entre uma única vez na função? Espero ter sido claro! Att. Everton Quote Link to comment Share on other sites More sharing options...
Theotokos Posted September 14, 2016 Report Share Posted September 14, 2016 não sei se daria certo, mas tenta ai: Function MarcaParc(.... KeyBoard( Chr(0) ) /// Limpar Buffer do Teclado qdo entra na função ..... Return(.... Quote Link to comment Share on other sites More sharing options...
aferra Posted September 14, 2016 Report Share Posted September 14, 2016 pq não usar então o setcheck(), simples e vai fazer o que vc quer somente com essa linha? oBrw:aCols[ <numero_sua_coluna ]:SetCheck( <bmp>, {|oBrw,lVar| <dbf>-><campo> := lVar } ) Quote Link to comment Share on other sites More sharing options...
gunafe Posted September 14, 2016 Report Share Posted September 14, 2016 Boa tarde, Coloque um 0(ZERO) antes da chave que fecha o comando, assim: ,0 } usando o nKey = 32, este 0(zero) evita duas passadas da Function. Espero que resolva. []´s Luiz Quote Link to comment Share on other sites More sharing options...
kapiaba Posted September 14, 2016 Report Share Posted September 14, 2016 Tente assim: /* #define VK_ESCAPE 27 // 0x1B #define VK_SPACE 32 // 0x20 */ oXBrw5:bKeyChar := { | nKey | IF( nKey = VK_SPACE, ; // OU <ESC>? MarcaParc( (_cNomArq)->TMP_VEND, ; (_cNomArq)->TMP_PARC, ; @nSomaNumParcelas, ; @nSomaValOriginal, ; @nSomaValJuros, ; Recno(), @nKey ), .F. ) } Quote Link to comment Share on other sites More sharing options...
evertonlb Posted September 14, 2016 Author Report Share Posted September 14, 2016 não sei se daria certo, mas tenta ai: Function MarcaParc(.... KeyBoard( Chr(0) ) /// Limpar Buffer do Teclado qdo entra na função ..... Return(.... Esse não deu! Obrigado! Quote Link to comment Share on other sites More sharing options...
aferra Posted September 14, 2016 Report Share Posted September 14, 2016 e o resto, vc tentou? Quote Link to comment Share on other sites More sharing options...
evertonlb Posted September 14, 2016 Author Report Share Posted September 14, 2016 e o resto, vc tentou? Aferra.. Estou testando.. Tua sugestão é boa, poderia resolver, porém, a função não só marca a parcela, mas calcula juros, multa e se a parcela será paga antes do vencimento calcula um desconto... Obrigado pela dica! Quote Link to comment Share on other sites More sharing options...
evertonlb Posted September 14, 2016 Author Report Share Posted September 14, 2016 Ah.. vou deixar o ESC mesmo!!!! Dane-se.. os caras que se acostumem!!! At. Everton Quote Link to comment Share on other sites More sharing options...
aferra Posted September 14, 2016 Report Share Posted September 14, 2016 Rapaz tente assimoBrw:aCols[ <numero_sua_coluna ]:SetCheck( , {|oBrw,lVar| SuaFuncao( lVar ) } ) function suafuncao( lvar ) IF lvar faça isso else faça aquilo endif return Quote Link to comment Share on other sites More sharing options...
evertonlb Posted September 14, 2016 Author Report Share Posted September 14, 2016 Rapaz tente assimoBrw:aCols[ <numero_sua_coluna ]:SetCheck( , {|oBrw,lVar| SuaFuncao( lVar ) } ) function suafuncao( lvar ) IF lvar faça isso else faça aquilo endif return Cara.. vou tentar. Obrigado! Quote Link to comment Share on other sites More sharing options...
evertonlb Posted September 20, 2016 Author Report Share Posted September 20, 2016 Todas as tentativas que fiz e que chamavam a função davam a mesma coisa... Entrava duas vezes. Ai resolvi colocando um contador dentro da função. Na primeira vez executa a função na segunda só dá um return .t. Não é o ideal, mas ao menos ta funcionando! Att. Everton Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.