Gostaria de relatar um problema no qual estou enfrentando depois que atualizei meu sistema de xHarbour para o Harbour 3.2...
Quando entro na tela de pedidos q é um TBROWSER e pressiono a tecla "A" para Alterar .. meu sistema gera um DBF temporario e abre um novo TBROWSER com os itens do pedido .. se simplesmente eu pressionar <ESC> o ponteiro fica corretamente no resgistro em q estava antes de entrar alterando o pedido ... agora se eu se movimentar para baixo dentro dos itens alterados .. e pressionar <ESC> para retornar a tela anterior de pedidos ele move de lugar o ponteiro ... na versão xHarbour não ocorria isso ..
Resumindo .. a mesma quantidade de movimentos que faço pra baixo dentro dos itens é a quantidade de movimentos que o cursor sobre dentro da tela de pedidos .. alguém ja passou por isso ??
Abraço!
CODIGO TELA DE PEDIDOS ...
Código: Selecionar todos
cAlias := "PED"
nOrdem := "PEDCX_02"
db_PED := WIN(03,01,22,78, "* * PUNTO DE VENTA * *", WT_AZUL2BRANCO, WD_AZUL2BRANCO)
DB_PEDIDO_VENDA( aCab, aCamp, aPict, cAlias, nOrdem, Regra)
return nil
*---------------------------------------------------------------------*
function DB_PEDIDO_VENDA( aCab, aCamp, aPict, cAlias, nOrdem, Regra )
*---------------------------------------------------------------------*
local oTAB, oCol, nKey, nRow, nCol, cTela, cArea
local OLDREC, OBROWSE, OCOLUNA, PESQUISA
select( cAlias )
set order to nOrdem
__KEYBOARD(CHR(30)) //(K_CTRL_PGDN)
setcursor(0)
cArea := savescreen( 00, 00, 24, 79 )
X:=aCamp[2]
oTab := TBrowseDB( 05, 02, 21, 77 ) // GERA UM TBROWSE
oTab:colsep := CHR(179)
oTab:headsep := CHR(194)+CHR(196)
oTab:footsep := CHR(193)+CHR(196)
// 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19
oTab:ColorSpec := "N/W*,W+/B+,R+/W*,W+/N,GR+/N,W+/B+,B+/W*,R+/W*,R+/B,G/W*,GR+/R+,W+/G,R+/N+,N*/GR,W+/R+,GR+/B+,GR+/G,GR+/N,GR+/R"
// LETRA + COR DA LINHA
for i = 1 TO len( aCamp )
if valtype(aCamp[I]) == "B"
oCol:=TBcolumnNew( aCab[I], ( aCamp[I] ) )
oCol:Picture:=aPict[I]
else
oCol:=TBcolumnNew( aCab[I], FIELDWBLOCK( aCamp[I], SELECT()))
oCol:Picture:=aPict[I]
endif
oCol:ColorBlock:={|X| IIF(cc_marcfat = 'C',{15,5},IIF(cc_Mfact = 'û',{13,5},IIF(cc_marcfat = ' ' .and. cc_tipoven # 'D' .and. cc_tipoven # 'T' .and. cc_tipoven # 'O';
.and. cc_tipoven # 'C' ,{1,5}, IIF(cc_tipoven = 'D' .or. cc_tipoven = 'T',{3,5}, IIF(cc_tipoven = 'O' .or. cc_tipoven = 'C',{10,5},{7,2})))))}
oTab:addColumn( oCol )
next
nCol_Reg := (oTab:nRight-oTab:nLeft+2) / LEN(aCamp) // Para iluminar o TBrowser // [V] VAREJO
// [A] ATACADO
oTab:Freeze := 2 // Definindo Coluna fixa // [O] PRESUPUESTO VAREJO
oTab:ColPos := 1 // [C] PRESUPUESTO VAREJO
// [D] DEVLUCION VAREJO
do while .T. // [T] DEVLUCION ATACADO
// [R] REQUISICION
DO WHILE !oTab:Stabilize() // [S] SERVICIOS
ENDDO
// LETRA BR + TARJA PT // LETRA AM + FUNDO PT
IF cc_marcfat = ' ' // EM ABERTOS // W+/N // GR+/N
oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{4,18}) // linha colorida (BR/PT) , cursor (AM/PT)
elseif cc_marcfat = 'û'
oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{6,16})
elseif cc_marcfat = 'C'
oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{11,19})
endif
IF cc_tipoven = 'O' .or. cc_tipoven = 'C' // OR€AMENTOS
oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{12,17})
ENDIF
IF cc_tipoven = 'D' .or. cc_tipoven = 'T' // DEVOLUیES
oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{15,19})
ENDIF
IF cc_Mfact = 'û'
oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{13,5})
ENDIF
oTab:hilite()
nKey := Inkey(0)
setpos( nRow, nCol )
if PED_ret = .T.
keyboard chr(73)
endif
do case
case lastkey() = 27 // K_ESC
rstenv(PRINC)
rstenv(DB_PED)
set key 274 to
select(n_Arqant)
DESAT_TAB()
MOSTRA_USU()
exit
......
otherwise
endcase
setcursor(0)
oTab:Refreshcurrent() // Refresca a Tela ou Atualiza os Dados
if nKey == K_F1
elseif nKey == K_F2
elseif nKey == K_F3
elseif nKey == K_F4
elseif nKey == K_F5
elseif nKey == K_F6
elseif nKey == K_F7
elseif nKey == K_UP ; oTab:UP()
elseif nKey == K_DOWN ; oTab:DOWN()
elseif nKey == K_LEFT ; oTab:LEFT()
elseif nKey == K_CTRL_LEFT ; oTab:PANLEFT()
elseif nKey == K_RIGHT ; oTab:RIGHT()
elseif nKey == K_CTRL_RIGHT ; oTab:PANRIGHT()
elseif nKey == K_PGUP ; oTab:PAGEUP()
elseif nKey == K_CTRL_PGUP ; oTab:GOTOP()
elseif nKey == K_PGDN ; oTab:PAGEDOWN()
elseif nKey == K_CTRL_PGDN ; oTab:GOBOTTOM()
elseif nKey == K_HOME ; oTab:HOME()
elseif nKey == K_CTRL_HOME ; oTab:PANHOME()
elseif nKey == K_END ; oTab:END()
elseif nKey == K_CTRL_END ; oTab:PANEND()
endif
enddo
return
Código: Selecionar todos
cAlias := "TMP" // ABRE ARQUIVO TEMPORARIO
nOrdem := " "
ATU_VALOR()
DB_ALTERA_PEDVEN( aCab, aCamp, aPict, cAlias, nOrdem, Regra)
return nil
*----------------------------------------------------------------------*
function DB_ALTERA_PEDVEN( aCab, aCamp, aPict, cAlias, nOrdem, Regra )
*----------------------------------------------------------------------*
local oTAB, oCol, nKey, nRow, nCol, cTela, cArea
local OLDREC, OBROWSE, OCOLUNA, PESQUISA
LOCAL GETLIST := {}, sav_ord, Tela_PedVen
select( cAlias )
set order to nOrdem
go top
setcursor(0)
cArea := savescreen( 00, 00, 24, 79 )
X:=aCamp[2]
oTab := TBrowseDB( 09, 01, 20, 78 ) // GERA UM TBROWSE
if (PAR->cc_vendlin) = "N"
oTab:colsep := " "
oTab:headsep := CHR(196)
oTab:footsep := CHR(196)
else
oTab:colsep := CHR(179)
oTab:headsep := CHR(194)+CHR(196)
oTab:footsep := CHR(193)+CHR(196)
endif
oTab:ColorSpec := "N/W,W+/B+,R+/W,R+/N+,GR+/N"
for i = 1 TO len( aCamp )
if valtype(aCamp[I]) == "B"
oCol:=TBcolumnNew( aCab[I], ( aCamp[I] ) )
oCol:Picture:=aPict[I]
else
oCol:=TBcolumnNew( aCab[I], FIELDWBLOCK( aCamp[I], SELECT()))
oCol:Picture:=aPict[I]
endif
If Regra # Nil
oCol:ColorBlock:={|X| If(&(Regra),{3,4},{1,2})}
EndIf
oTab:addColumn( oCol )
next
nCol_Reg := (oTab:nRight-oTab:nLeft+2) / LEN(aCamp) // Para iluminar o TBrowser
oTab:Freeze := 2 // Definindo Coluna fixa
oTab:ColPos := 1
do while .T.
oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{})
DO WHILE !oTab:Stabilize()
ENDDO
IF ITEM_SEM_ESTOQUE_PED() == 'N' .and. cc_marcfat = ' ' .and. CC_UND # 'SER'
oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{4,5})
else
oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{2,5})
endif
oTab:hilite()
setpos( nRow, nCol )
nKey := inkey()
if oTAB:stable
if oTAB:hittop
oTAB:HITTOP := .F. // INICIO DO ARQUIVO
elseif oTAB:hitbottom
oTAB:HITBOTTOM := .F. // FIM DO ARQUIVO
endif
setpos( nRow, nCol )
nKey := Inkey(0)
endif
do case
case lastkey()=73 .or. lastkey()=105 // INCLUIR ITEM PEDIDO DEFINITIVO
ordsetfocus("ptmcx_15") // ordem decrescente de data + hora // ultimo item fica no top
oTab:ColPos := 1
oTab:Refreshall()
sav_ord := indexord() && SALVA ORDEM
Tela_PedVen := SavEnv(10,01,20,78)
if PED->cc_marcfat = "û"
MSGBOX1("Para Incluir, cancele o faturamento do pedido antes!")
select TMP
keyboard chr(27)
endif
if PED->cc_marcfat = "C"
MSGBOX1("Este pedido est cancelado, imposs¡vel alterar!")
select TMP
keyboard chr(27)
endif
n_itempar := LOJ->cn_qtditem
select TMP
sav_ord := indexord() && SALVA ORDEM
...................
otherwise
endcase
setcursor(0)
oTab:Refreshcurrent() // Refresca a Tela ou Atualiza os Dados
if nKey == K_F1
elseif nKey == K_F2
elseif nKey == K_F3
elseif nKey == K_F4
elseif nKey == K_F5
elseif nKey == K_F6
elseif nKey == K_F7
elseif nKey == K_UP ; oTab:UP()
elseif nKey == K_DOWN ; oTab:DOWN()
elseif nKey == K_LEFT ; oTab:LEFT()
elseif nKey == K_CTRL_LEFT ; oTab:PANLEFT()
elseif nKey == K_RIGHT ; oTab:RIGHT()
elseif nKey == K_CTRL_RIGHT ; oTab:PANRIGHT()
elseif nKey == K_PGUP ; oTab:PAGEUP()
elseif nKey == K_CTRL_PGUP ; oTab:GOTOP()
elseif nKey == K_PGDN ; oTab:PAGEDOWN()
elseif nKey == K_CTRL_PGDN ; oTab:GOBOTTOM()
elseif nKey == K_HOME ; oTab:HOME()
elseif nKey == K_CTRL_HOME ; oTab:PANHOME()
elseif nKey == K_END ; oTab:END()
elseif nKey == K_CTRL_END ; oTab:PANEND()
endif
enddo
return

