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...
O mouse não funciona nem no DBEDIT nem no TBROWSE..
Moderador: Moderadores
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: O mouse não funciona nem no DBEDIT nem no TBROWSE..
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()
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
Re: O mouse não funciona nem no DBEDIT nem no TBROWSE..
É verdade, Sygecom. Tenho q desistir do mouse ou refazer toda a rotina...
Vou ver a relação custoxbenefício disso....
Vou ver a relação custoxbenefício disso....
lugab
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Re: O mouse não funciona nem no DBEDIT nem no TBROWSE..
Para mim, mouse é no modo gráfico. Ainda tenho um sistema em console, mas com mouse desligado.É verdade, Sygecom. Tenho q desistir do mouse ou refazer toda a rotina...
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.
Saudações,* 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
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
Re: O mouse não funciona nem no DBEDIT nem no TBROWSE..
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
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
Editado pela última vez por Toledo em 04 Jun 2010 19:27, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: O mouse não funciona nem no DBEDIT nem no TBROWSE..
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.
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.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
Mário Isa
- Usuário Nível 4

- Mensagens: 907
- Registrado em: 07 Jul 2004 13:54
- Localização: Ilha Solteira-sp
O mouse não funciona nem no DBEDIT nem no TBROWSE..
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...
e lá, na hora do inkey:
e foi só....
obrigado a todos.
Mário
)
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
obrigado a todos.
Mário

