Página 1 de 1

O mouse não funciona nem no DBEDIT nem no TBROWSE..

Enviado: 05 Ago 2009 01:40
por lugab
Boa noite, pessoal...

Compilo o sistem em xharbour (modo console) e o mouse funciona em todo o resto, menos no DBEDIT() e no TBROWSE().

E eu peguei aqui no fórum as 2 rotinas citadas , principalmemte pq o DBEDIT nativo do xharbour esta cheio de problemas e eu substitui por uma aqui postada e depois a maioria dos posts dizem que o Tbrouse é melhor que o Dbedit, daí eu conclui que no tbrowse o mouse funcionava...

Alguém tem idéia do que seja ? A seguir, um Resumo dos meus códigos. Ambos estão funcionando perfeitamente, EXCETO PELO NÃO FUNCIONAMENTO DO MOUSE...

No Meu function main eu já experimentei tudo isso :
-> SET( _SET_EVENTMASK, 255 ) && mouse && não funcionou

#include "SET.CH"
#include "BOX.CH"

->SET EVENTMASK TO INKEY_ALL
-> *SET (39, 159)

-> SET EVENTMASK TO 159
e fiquei usando o abaixo, já q nenhm deles afetou o dbedit e o tbrowse

#include "inkey.ch"
set eventmask to INKEY_ALL
msetcursor(.t.)


Meu DBEDIT está assim:
ITEM=DBEDIT(02,00,22,78,VET1,"PESQR",VET2,VET3,"Ä","³","Ä")

Meu Tbrowse está assim:
local btel:= savescreen(10,03,24,79) // salva a tela
#include "inkey.ch"
CLEA GETS

bsu4:= tbcolumnnew( , { || space(1)+REF+space(2)+DESREF+space(2)+aplref+space(2)+UNDMOV+" "+tran(&WCAMPO,"@E 999,999.99")+space(2)+tran(preven,"@E 999,999.99")+space(2)}) // bsu4 ‚ a vari vel que cont‚m o que vai ser exibido.

bsu3:= tbrowseDB(11,04,18,76) // esse cara define as coordenadas, igual as coordenadas do dbedit

bsu3:colorspec:= "n/w*,gr+/b,n+/w*,w/n*,g+/gr" // cores do que vai ser exibido
bsu4:defcolor:= {5} //cor padrÆo
bsu4:colorblock:= {|bsu3| iif(PREVEN < 1 , {3,4},{1,2})} // essa ‚ legal, ele define uma determinada cor se algum dado satisfizer uma condi‡Æo

bsu3:addcolumn(bsu4) // essa ‚ quem vai adicionar as colunas (note que bsu4 j foi declarado l em cima)

do while .t. // la‡o do while para o tbrowse ficar dentro (nÆo necess rio)

Do while !bsu3:stabilize() // esse la‡o maluco, ‚ que faz a distribui‡Æo dos dados na tela, enquanto nÆo estabilizar
Enddo // a exibi‡Æo, ele nÆo sai


Agradeço qq ajuda que seja...

Re: O mouse não funciona nem no DBEDIT nem no TBROWSE..

Enviado: 12 Ago 2009 17:42
por sygecom
Bom, pelo que vi na documentação do xharbour, isso não funciona no automatico assim como você deseja, tens que programar para aceitar o uso do mouse no Tbrowse. De uma consultada no Help do xHarbour que tem os comandos para usar o Mouse no TBROWSE()

Re: O mouse não funciona nem no DBEDIT nem no TBROWSE..

Enviado: 08 Nov 2009 16:14
por lugab
É verdade, Sygecom. Tenho q desistir do mouse ou refazer toda a rotina...

Vou ver a relação custoxbenefício disso....

Re: O mouse não funciona nem no DBEDIT nem no TBROWSE..

Enviado: 08 Nov 2009 19:36
por Itamar M. Lins Jr.
É verdade, Sygecom. Tenho q desistir do mouse ou refazer toda a rotina...
Para mim, mouse é no modo gráfico. Ainda tenho um sistema em console, mas com mouse desligado.
Infelizmente ainda exitem usuários resistentes ao uso do mouse, mas penso que essa situação não passará de 2010.

Olha, houve essas correções no xHarbour do CVS.
* source/rtl/tbrowse.prg
! fixed Initkeys(), HitTest() methods and Tbmouse() function to work properly with mouse
events.

ps: it seems threre is a bug
with mouse wheel on console window, that is changing MCol()
MRow() values, so if you use mouse wheel to change tbrowse rows, the behaviour can be unexpected.

regards,
Eduardo
Saudações,
Itamar M. Lins Jr.

Re: O mouse não funciona nem no DBEDIT nem no TBROWSE..

Enviado: 10 Nov 2009 09:24
por frazato
Bom dia. Estou fazendo o uso do Mouse normal em meu sistema usando o Tbrowse, nao estou usando o dbedit, apesar q o uso do mouse tambem e automatico nao presciso fazer nada a nao ser testar o valores dos botoes tipo (1004 e 1006 )

Segue uma parte do codigo que utilizo usando a Gtwvw.

Esta parte do codigo que utilizo faz parte de uma tela de digitacao de preco pelo fornecedor, inclusive tem uma rotina de pular tipo excel e com linhas destacadas.


Frazato

sistema_jaf@hotmail.com

Código: Selecionar todos

//--------------------------------------------------------
Static Function MANUITEMPELOFORNECEDOR()
Local nMaxCol:= MaxCol()
Local nMaxLin:= MaxRow()-1
Local cCor   := setcolor(), nWidth, nCol, nRow
wDigitados:= {}

           Centra(24,'Gerando dados para terminal exclusivo...')
           nSeq :=  0
           Do While .t.
                   nSeq++
                   If ! File("C:\temp\WTS_"+StrZero(nSeq,4)+'.cdx' )
                        cFILE3 := "C:\temp\WTS_"+StrZero(nSeq,4)+'.cdx'
                        Exit
                   Endif
           Enddo
           cFileWTS := cFile3

           Sele LogTabela
                Append Blank
                 Repla LogTabela->Id_Fornec    With Capa->ID_Fornec
                 Repla LogTabela->Id_Tabela    With Capa->ID_Tabela
                 Repla LogTabela->Usuario      With Capa->TituloTab
                 Repla LogTabela->Data         With Date()
                 Repla LogTabela->hEntra       With Time()
                 Repla LogTabela->TpAcesso     With xProdExec
                Destrava()
                xPosSalvaLog:= Recno()

           Centra(24,'Aguarde....Carregando Itens da Tabela')
           Sele Item // Base de Item por Tabela
                Index on ID_Prod_ to (cFileWTS);
                         For( Item->ID_Forn == Capa->ID_Fornec ;
                               .And. ;
                              Item->ID_Tabe == Capa->ID_Tabela ; 
                              )


                     Set Index to (cFileWTS)

                     Centra(24,'Aguarde....Carregando Trocas')
                     nTotalTroca:= ValorTrocaItem()

                     cDados     := '**** TOTAL TROCA A FAZER :'+Transf(nTotalTroca,'@EZ 999,999,999.99')+;
                                    ' SALDO DEVEDOR CARTEIRA:'+;
                                    Transf(wSaldoCarteira,'@EZ 999,999,999.99')+;
                                    '****'

                     Go Top               

                     nJanGet:= CAIXATEXTO(00,00,nMaxLin-1,nMaxCol,"DIGITACAO DE ITENS FORNECEDOR "+cDados,"BG+/NB+","NN/NN","N")
                     _alias := 'Item' // Dbf para Navegacao
                     _browse:= 'oTab'

                     if !ToolBarGEN(nJanGet)
                         Return NIL
                     endif
                     SetInkeyAfterBlock({|nkey| AfterInkeyGEN( nkey ) })


                     oTab:=TbrowseDb(00,00,nMaxLin-1,nMaxCol)
                     oTab:ColSep    := " ³ "
                     oTab:HeadSep   := "ÍËÍ"
                     oTab:FootSep   := "ÍÊÍ"
                     *oTab:ColSep    := "   "
                     *oTab:HeadSep   := "   "
                     *oTab:FootSep   := "   "

                     *oTab:ColorSpec := "n/ww+*,n+/b+*,b/ww+*,n/GB+*,g+*/ww+*"
                     oTab:ColorSpec := "n/ww+*,B/GR+*,N/w,N/W*+,g+*/ww+*"

               //--- Linhas Grades
                     /*
                     SET(_SET_EVENTMASK, INKEY_ALL )
                     nJanela := nJanGet
                     nTop    :=  1
                     nLeft   :=  1
                     nBottom := nMaxLin-8
                     nRight  := nMaxCol-1

                     ResetObjects( nJanela )
                     AddObjects( nJanela, {|nWin| WVW_DrawBoxRecessed( nWin, oTab:nTop, oTab:nLeft, oTab:nBottom, oTab:nRight ) } )
                     AddObjects( nJanela, {|nWin| WVW_DrawGridHorz( nWin, oTab:nTop+1, oTab:nLeft, oTab:nRight, oTab:nBottom - oTab:nTop - 2 ) } )
                     AddObjects( nJanela, {|nWin| WVW_DrawGridVert( nWin, oTab:nTop, oTab:nBottom, oTab:aColumnsSep, len( oTab:aColumnsSep ) ) } )
                     AddObjects( nJanela, {|nWin| wvw_drawboxget( nWin, nBottom+1, nLeft+10, nWidth ) } )
                     */

                     //---

                     Coluna1 := TbColumnNew("PRODUTO"     ,{ ||MarcaAlterado(Recno())+Item->Id_Prod+'-'+Item->ID_Prod_ } )
                     Coluna2 := TbColumnNew("EMB"         ,{ ||Item->TpoEmbal } )
                     Coluna3 := TbColumnNew("QTD"         ,{ ||Transf(Item->QtdEmbal   ,'@EZ 999.99') } )
                     Coluna4 := TbColumnNew("ANTIGO"      ,{ ||Transf(Item->VlrAntigo  ,'@EZ 9999.99') } )
                     Coluna5 := TbColumnNew("ATUAL"       ,{ ||Transf(Item->VlrBruto   ,'@EZ 9999.99') } )
                     Coluna6 := TbColumnNew("NOVO"        ,{ ||Transf(Item->VlrNovo    ,'@EZ 9999.99') } )
                     Coluna7 := TbColumnNew("I.P.I (%)"   ,{ ||Transf(Item->Aliq_Ipi   ,'@EZ 99.999') } )
                     Coluna8 := TbColumnNew("S.T (%)"     ,{ ||Transf(Item->Vlr_Subs   ,'@EZ 99.999') } )
                     Coluna9 := TbColumnNew("Bonif(%)"     ,{ ||Transf(Item->Bonifica  ,'@EZ 99.999') } ) // Bonificacao
                     Coluna10:= TbColumnNew("Verba(%)"     ,{ ||Transf(Item->Desconto  ,'@EZ 99.999') } ) // gera Verba sem Repasse
                     Coluna11:= TbColumnNew("Abatim(%)"    ,{ ||Transf(Item->AbatFinan ,'@EZ 99.999') } ) // Desconto na Entrada(Repasse)

                     *nPrecFinal:= Item->VlrNovo + ( Item->VlrNovo * (Item->Aliq_Ipi+ Vlr_Subs /100) )
                     *nPrecFinal:= nPrecFinal - ( nPrecFinal*( Item->Bonifica+Item->Desconto+Item->AbatFinan )/100 )
                     *nPrecFinal:= nPrecFinal / Item->QtdEmbal

                     Coluna12:= TbColumnNew("Preco Final"  ,;
                                { ||Transf( (Item->VlrNovo + ( Item->VlrNovo * ( Item->Aliq_Ipi + Vlr_Subs - Item->Bonifica - Item->Desconto - Item->AbatFinan ) /100)) / Item->QtdEmbal ,'@EZ 99.999') } )

                     oTab:AddColumn(Coluna1)
                     oTab:AddColumn(Coluna2)
                     oTab:AddColumn(Coluna3)
                     oTab:AddColumn(Coluna4)
                     oTab:AddColumn(Coluna5)
                     oTab:AddColumn(Coluna6)
                     oTab:AddColumn(Coluna7)
                     oTab:AddColumn(Coluna8)
                     oTab:AddColumn(Coluna9)
                     oTab:AddColumn(Coluna10)
                     oTab:AddColumn(Coluna11)
                     oTab:AddColumn(Coluna12)

                     oTab:Freeze := 2 // oTab:Colpos - 1

                     Centra(24,'')

                     Do While .t.
                        For i:= 1 to 12
                            oTab:GetColumn(i):ColorBlock :=  { || { Iif(OrdKeyNo()%2==0,4,3),2 } }
                        Next

                        Lin_Br := 21
                        Do While ! oTab:Stabilize()
                        Enddo


                        nKey := Inkey()
                        If oTab:Stable
                           nKey := Inkey(0)
                           oTab:ForcEstable()
                        Endif

                        If nKey == K_F12 // ESC
                              *If MSGCONF("Deseja abandonar a digitacao ?","1") == .T.
                                 nRetorno := 0
                                 Exit
                              *Endif
                              *VoltaFoco()
                           ElseIf nKey == K_ENTER .OR. nKey==1006 .or. ;
                                  ( nKey >= 48 .and. nKey <= 57  ) //.and. oTab:Colpos == 6
                                  KeyBoard Chr(nKey)
                                  If oTab:Colpos == 2  // Tipo de Embalagem
                                     nRow     := Row()
                                     nCol     := Col()
                                     GetList  := {}
                                     mTitulo  := Item->TpoEmbal
                                     @ nRow,nCol Get mTitulo Pict "@!" ;
                                                 Valid Lista_Tipo_Emb(mTitulo)== .T.

                                     Read
                                     If Lastkey()#27
                                        Trav_reg()
                                        Repla Item->TpoEmbal  With mTitulo
                                        Destrava()
                                        Aadd(wDigitados,{ Recno() ,"S" } )
                                     Endif
                                   ElseIf oTab:Colpos == 3
                                     nRow     := Row()
                                     nCol     := Col()
                                     GetList  := {}
                                     nQtdEmb  := Item->QtdEmbal
                                     @ nRow,nCol Get nQtdEmb Pict '@EZ 999.9'
                                     Read
                                     If Lastkey()#27
                                        Trav_reg()
                                        Repla Item->QtdEmbal  With nQtdEmb
                                        Destrava()
                                        Aadd(wDigitados,{ Recno() ,"S" } )
                                     Endif
                                   ElseIf oTab:Colpos == 6 // Preco

                                     nRow     := Row()
                                     nCol     := Col()
                                     GetList  := {}
                                     nPrecoEmb:= Item->VlrNovo
                                     @ nRow,nCol Get nPrecoEmb  Pict '@EZ 9999.99'
                                     Read
                                     If Lastkey()#27
                                        Trav_reg()
                                        Repla Item->VlrNovo  With nPrecoEmb
                                        Destrava()
                                        Aadd(wDigitados,{ Recno() ,"S" } )

                                     Endif
                                     
                                   ElseIf oTab:Colpos == 7 // iPI

                                     nRow     := Row()
                                     nCol     := Col()
                                     GetList  := {}
                                     nPrecoEmb:= Item->Aliq_Ipi
                                     @ nRow,nCol Get nPrecoEmb  Pict '@EZ 99.999'
                                     Read
                                     If Lastkey()#27
                                        Trav_reg()
                                        Repla Item->Aliq_Ipi  With nPrecoEmb 
                                        Destrava()
                                        Aadd(wDigitados,{ Recno() ,"S" } )
                                     Endif

                                   ElseIf oTab:Colpos == 8 // ST

                                     nRow     := Row()
                                     nCol     := Col()
                                     GetList  := {}
                                     nPrecoEmb:= Item->Vlr_Subs
                                     @ nRow,nCol Get nPrecoEmb  Pict '@EZ 99.999'
                                     Read
                                     If Lastkey()#27
                                        Trav_reg()
                                        Repla Item->Vlr_Subs  With nPrecoEmb        //Item->Vlr_Subs
                                        Destrava()
                                        Aadd(wDigitados,{ Recno() ,"S" } )
                                     Endif

                                   ElseIf oTab:Colpos == 9 // Bonficacao
                                             nRow     := Row()
                                             nCol     := Col()
                                             GetList  := {}
                                             nPrecoEmb:= Item->Bonifica
                                             @ nRow,nCol Get nPrecoEmb  Pict '@EZ 99.999'
                                             Read
                                             If Lastkey()#27
                                                Trav_reg()
                                                Repla Item->Bonifica  With nPrecoEmb        //Item->Vlr_Subs
                                                Destrava()
                                                Aadd(wDigitados,{ Recno() ,"S" } )
                                             Endif

                                   ElseIf oTab:Colpos == 10 // Verba
                                             nRow     := Row()
                                             nCol     := Col()
                                             GetList  := {}
                                             nPrecoEmb:= Item->Desconto
                                             @ nRow,nCol Get nPrecoEmb  Pict '@EZ 99.999'
                                             Read
                                             If Lastkey()#27
                                                Trav_reg()
                                                Repla Item->Desconto  With nPrecoEmb        //Item->Vlr_Subs
                                                Destrava()
                                                Aadd(wDigitados,{ Recno() ,"S" } )
                                             Endif

                                   ElseIf oTab:Colpos == 11 // Abatimento com Repasse na Entrada
                                             nRow     := Row()
                                             nCol     := Col()
                                             GetList  := {}
                                             nPrecoEmb:= Item->AbatFinan
                                             @ nRow,nCol Get nPrecoEmb  Pict '@EZ 99.999'
                                             Read
                                             If Lastkey()#27
                                                Trav_reg()
                                                Repla Item->AbatFinan  With nPrecoEmb        //Item->Vlr_Subs
                                                Destrava()
                                                Aadd(wDigitados,{ Recno() ,"S" } )
                                             Endif
                                   Endif
                                   oTab:Down()
                                   oTab:Refreshall()
                                   VoltaFoco()
                          ElseIf nKey == K_TAB
                          ElseIf nKey == K_UP
                             oTab:Up()
                          ElseIf nKey == K_DOWN
                             oTab:Down()
                          ElseIf nKey == K_LEFT
                             oTab:Left()
                          ElseIf nKey == K_RIGHT
                             oTab:Right()
                          ElseIf nKey == K_PGUP
                            oTab:PAGEUP()
                          ElseIf nKey == K_PGDN
                            oTab:PAGEDOWN()
                          ElseIf nKey == K_ALT_F
                                 oTab:Refreshall()
                                 VoltaFoco()
                          ElseIf nKey == K_ALT_O
                          ElseIf nKey == K_ALT_P
                          ElseIf nKey == K_ALT_E
                        ElseIf nKey== 99 .or. nKey == 67
                               //  Congelar Coluna
                           If oTab:Freeze=0
                                oTab:Freeze := oTab:Colpos - 1
                                Lin_Br := 21
                            Else
                                oTab:Freeze = 0
                                Lin_Br := 21
                                oTab:Panhome()
                                oTab:Refreshall()
                            Endif
                         Elseif nKey == K_LBUTTONUP .or. nKey == K_LBUTTONDOWN
                                HandleMouse( oTab, nKey, mrow(), mcol() )
                        Else
                            If nKey >= 48 .and. nKey <= 57 .and. oTab:Colpos == 6
                                    KeyBoard Chr(nKey)
                                    nRow     := Row()
                                    nCol     := Col()
                                    GetList  := {}
                                    nPrecoEmb:= Item->VlrNovo
                                    @ nRow,nCol Get nPrecoEmb  Pict '@EZ 9999.99'
                                    Read
                                    If Lastkey()#27
                                        Trav_reg()
                                        Repla Item->VlrNovo  With nPrecoEmb
                                        Destrava()
                                        Aadd(wDigitados,{ Recno() ,"S" } )

                                   Endif
                                   oTab:Down()
                                   oTab:Refreshall()
                                   VoltaFoco()
                                   ForcaBaixo()
                            Endif
                      Endif
                      Enddo
                      FechaJanela()
                      *ResetObjects( nWindow )

                   Sele LogTabela
                        Go xPosSalvaLog
                        Trav_reg()
                        Repla LogTabela->hSaida     With Time()
                        Repla LogTabela->Alterados  With Len(wDigitados)
                        Destrava()
Return Nil


**************************************************
PROCEDURE HandleMouse( oBrowse, nKey, mRow, mCol )
**************************************************
   local nHeadLines := 2 ,;
         nFootLines := 1

   local i, mrowpos, mcolpos, lFrozen, mleftbound, mrightbound, lDone,;
         msepwidth, mcolwidth, numrow, numcol, mMinPos, ndirection

   if nKey # K_LBUTTONDOWN
      return
   endif

   if !( mrow >= oBrowse:nTop+nHeadlines    .and.;
         mrow <= oBrowse:nBottom-nFootlines .and.;
         mcol >= oBrowse:nLeft              .and.;
         mcol <= oBrowse:nRight )
      return
   endif

   dispbegin()
      mrowpos := mrow - (oBrowse:nTop+nHeadlines) + 1
      if oBrowse:RowPos > mrowpos
         numrow := oBrowse:RowPos - mrowpos
         for i := 1 to numrow
            oBrowse:up()
            oBrowse:forcestable()
         next
      elseif oBrowse:RowPos < mrowpos
         numrow :=  mrowpos - oBrowse:RowPos
         for i := 1 to numrow
            oBrowse:down()
            oBrowse:forcestable()
         next
      endif

      lFrozen   := oBrowse:Freeze > 0
      mMinPos   := if( lFrozen, 1, oBrowse:LeftVisible )
      lDone     := .F.
      mcolpos   := oBrowse:colpos
      msepwidth := NextSepWidth( oBrowse, mcolpos )
      mcolwidth := oBrowse:ColWidth(mcolpos)

      if mcol < col()
         nDirection := -1
      elseif mcol > col() + mcolwidth + msepwidth - 1
         nDirection := 1
      else
         lDone := .T.
      endif

      while !lDone
         mcolpos   := oBrowse:colpos
         msepwidth := NextSepWidth(oBrowse, mcolpos)
         mcolwidth := oBrowse:ColWidth(mcolpos)

         if mcol < col() .and. nDirection < 0
            mcolpos := if( lFrozen .and. mcolpos == oBrowse:LeftVisible, oBrowse:Freeze, mcolpos-1 )
            if mcolpos < mMinPos
               lDone := .T.
            else
               numcol := oBrowse:ColPos - mcolpos
               for i := 1 to numcol
                  oBrowse:left()
                  oBrowse:forcestable()
               next
            endif
         elseif mcol > col() + mcolwidth + msepwidth - 1 .and. nDirection > 0
            mcolpos := if( lFrozen .and. mcolpos == oBrowse:Freeze, oBrowse:LeftVisible, mcolpos+1 )
            if mcolpos > oBrowse:RightVisible
               lDone := .T.
            else
               numcol := mcolpos - oBrowse:ColPos
               for i := 1 to numcol
                  oBrowse:right()
                  oBrowse:forcestable()
               next
            endif
         else
            lDone := .T.
         endif
      enddo
   dispend()
RETURN

Re: O mouse não funciona nem no DBEDIT nem no TBROWSE..

Enviado: 11 Nov 2009 17:00
por sygecom
Olá Frazato,
Funcionar funciona, inclusive eu já tinha passado exemplo para o Colega Gabriel, o que acontece que isso não é automático como ele imaginou que era. No caso tem que fazer as rotinas acontecer. No caso de visual Gráfico isso é automático.

O mouse não funciona nem no DBEDIT nem no TBROWSE..

Enviado: 30 Mar 2016 09:05
por Mário Isa
Desculpem acordar este tópico só agora..... tantos anos depois....
mas hoje.... com a minha amiguinha DBEDIT() fiz funcionar o roller do mouse com a WVW + dbedit .... e foi muito simples....
é só isso...
no dbedit.prg lá no inicio da função...

Código: Selecionar todos

Function DBEdit(nTop, nLeft, nBottom, nRight, aCols, xFunc, xPict, xHdr, xHSep, xCSep, xFSep, xFoot, xPre, xPost)
Local oTBR, oTBC, i, xnRet := DE_REFRESH, xKey := Nil, bFun, nCrs, cHdr, nIndex, nxhb_file := select()
local nVScrollBar , nHScrollBar
local nMax,nMxV
local NCurWindow
//Local my_XbPos, My_hXBPos

SET(_SET_EVENTMASK, INKEY_ALL )

e lá, na hora do inkey:

Código: Selecionar todos

       setlastkey(0)
       xKey=inkey(3)
       xykey := xkey
       //msginfo(strzero(xkey,4))
       if xKey = 1015
        keyboard(24)
        setlastkey(24)
        xkey := 24
       elseif xKey = 1014
        keyboard(5)
        setlastkey(5)
        xkey := 5
       end
e foi só....
obrigado a todos.
Mário
:))