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.
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