BUG xBrowse - Antonio olhe isso por favor !

BUG xBrowse - Antonio olhe isso por favor !

Postby AOKISANTOS » Sat Apr 21, 2007 12:30 pm

Antonio,

Utilizando o código abaixo:

uBrw := TXBrowse():New( oDlp )

bStruc :={{"","Sim",0,CTOD(""),CTOD(""),0}}

uBrw:SetArray( bStruc )

uBrw:aCols[1]:cHeader := "Parcela"
ubrw:aCols[1]:nWidth := 50
uBrw:aCols[1]:cEditPicture := "999"
uBrw:aCols[1]:bClrEdit := uBrw:bClrStd
uBrw:aCols[1]:bOnPostEdit := {|o,x| bStruc[ uBrw:nArrayAt, 1 ] := x }

uBrw:aCols[2]:cHeader := "Recebida"
ubrw:aCols[2]:nWidth := 60
uBrw:aCols[2]:nDataStrAlign := AL_LEFT
uBrw:aCols[2]:nHeadStrAlign := AL_LEFT
uBrw:aCols[2]:nEditType := EDIT_LISTBOX
uBrw:aCols[2]:aEditListTxt := {"Sim", "Não"}
uBrw:aCols[2]:bOnPostEdit := {|o,x| bStruc[ uBrw:nArrayAt, 2 ] := x }
uBrw:aCols[2]:aEditListBound := {"Sim", "Não"}
uBrw:aCols[2]:bClrEdit := uBrw:bClrStd

uBrw:aCols[3]:cHeader := "Valor"
ubrw:aCols[3]:nWidth := 70
uBrw:aCols[3]:cEditPicture := "@E 999,999.99"
uBrw:aCols[3]:nDataStrAlign := AL_RIGHT
uBrw:aCols[3]:nHeadStrAlign := AL_RIGHT
uBrw:aCols[3]:bOnPostEdit := {|o,x| bStruc[uBrw:nArrayAt, 3 ] := x }
uBrw:aCols[3]:nEditType := EDIT_GET
uBrw:aCols[3]:bStrData := {|| TRANS(bStruc[uBrw:nArrayAt, 3 ] ,"@E 999,999.99")}

uBrw:aCols[4]:cHeader := padc("Vencimento",11)
ubrw:aCols[4]:nWidth := 80
uBrw:aCols[4]:nDataStrAlign := AL_CENTER
uBrw:aCols[4]:nHeadStrAlign := AL_CENTER
uBrw:aCols[4]:bOnPostEdit := {|o,x| bStruc[ uBrw:nArrayAt, 4 ] := x }
uBrw:aCols[4]:nEditType := EDIT_GET

uBrw:aCols[5]:cHeader := padc("Data Pgto",11)
ubrw:aCols[5]:nWidth := 80
uBrw:aCols[5]:nDataStrAlign := AL_CENTER
uBrw:aCols[5]:nHeadStrAlign := AL_CENTER
uBrw:aCols[5]:bOnPostEdit := {|o,x| bStruc[ uBrw:nArrayAt, 5 ] := x }
uBrw:aCols[5]:nEditType := EDIT_GET

uBrw:aCols[6]:cHeader := "Valor Pgto"
ubrw:aCols[6]:nWidth := 70
uBrw:aCols[6]:cEditPicture := "@E 999,999.99"
uBrw:aCols[6]:nDataStrAlign := AL_RIGHT
uBrw:aCols[6]:nHeadStrAlign := AL_RIGHT
uBrw:aCols[6]:bOnPostEdit := {|o,x| bStruc[ uBrw:nArrayAt, 6 ] := x}
uBrw:aCols[6]:nEditType := EDIT_GET
uBrw:aCols[6]:bStrData := {|| TRANS(bStruc[uBrw:nArrayAt, 6 ],"@E 999,999.99")}

uBrw:nMarqueeStyle := MARQSTYLE_HIGHLCELL
uBrw:nColDividerStyle := LINESTYLE_DARKGRAY
uBrw:lColDividerComplete := .t.
uBrw:nFooterLines := 2
uBrw:lFooter := .t.
uBrw:aCols[ 1 ]:cFooter := "Total:"

uBrw:bClrStd := { ||{ RGB(0,0,0), iif( uBrw:nArrayAt % 2 == 0, RGB(234,255,234) , RGB(255,255,255) ) } }
uBrw:nFreeze := 6
uBrw:lHScroll := .f.
uBrw:lVScroll := .f.
uBrw:lFastEdit := .T. //ENTER cod barras
uBrw:CreateFromResource( 101 )

***********************************************************
STATIC FUNCTION CRIA_TITULOS(cocond,iniciemis,tivalor,uBrw)
***********************************************************
LOCAL X,vvaltotal:=0,calcv:=0,ultparc

select condicoes
dbsetorder(1)
if dbseek(cocond)
bStruc:={}
calcv :=round(tivalor/condicoes->co_parc,2)
Select TabCondicoes
dbsetorder(1)
dbseek(str(cocond,4,0))
do while TabCondicoes->pg_codi==cocond .and. TabCondicoes->(! eof())
iniciemis+=TabCondicoes->pg_praz
AADD(bStruc,{TabCondicoes->pg_nupa,"Sim",calcv,iniciemis,ctod(""),0})
TabCondicoes->(dbskip())
enddo
IF LEN(bStruc)>0
vvaltotal:=0
ultparc :=len(bStruc)
FOR X:=1 TO (LEN(bStruc)-1)
vvaltotal+=round(bStruc[x][3],2)
NEXT
bStruc[ultparc][3]:=round(tivalor-vvaltotal,2)
else
bStruc :={{"","Sim",0,CTOD(""),CTOD(""),0}}
ENDIF
uBrw:aArrayData := aClone( bStruc )
uBrw:refresh()
endif
RETURN(.T.)



Esta acontecendo o seguinte, vamos supor que o meu array tenha uns 100 registros, e, eu queira corre-los para baixo. aperto a seta para baixo e os registros começam a correr, porém, os dados de todas colunas(menos a ultima) assumem valores estranhos ex:

http://img255.imageshack.us/img255/1310/seta1cb3.jpg

E se a seta for para cima, ai o BUG é ao contrário, ou seja, todas as linhas ficam certas menos a ultima. ex:

http://img150.imageshack.us/img150/7351/seta2fz5.jpg

using fwh 7.01

AOKISANTOS

:cry:
FWH25+XHARBOUR 99.50
AOKISANTOS
 
Posts: 210
Joined: Sun Jul 23, 2006 1:15 am

Postby Ramón Avendaño » Sun Apr 22, 2007 6:07 pm

Hola AOKISANTOS:

El problema que planteas me tiene desconcertado, no por que se produzca, ya que es un error que conocía, sino porque tal como defines xBrouse en un recurso y sin borde, no debería producirse, salvo que hayas alterado el código original del xbrouse.prg. (y creo que sí)

En principio este problema se produce por un mal cálculo del la altura del xbrouse cuando esta definido el control con borde (WS_BORDER), por recursos, (.RC) y se utiliza con Footer, en estos casos hay una discordancia entre el pintado (::Paint()) y el scroll de la función XBrwScroll() que es el bug que tú indicas y además pinta mal el Footer (que como veras en los JPGs que adjuntas , esta cortado, le falta las últimas líneas de pixels)

Temporalmente la solución, y estoy trabajando en corregir este problema y otros, es cambiar en el código de xBrowse.prg para que METHOD BrwHeight() devuelva 2 ó 4 pixels menos, algo así como:

METHOD BrwHeight() INLINE ( ::nHeight - 2 - iif( ::lHScroll, GetSysMetrics( SM_CYHSCROLL ), 0 ) )

ó

METHOD BrwHeight() INLINE ( ::nHeight - 4 - iif( ::lHScroll, GetSysMetrics( SM_CYHSCROLL ), 0 ) )


Y también hay un bug en el METHOD GoUp() que te puede afectar cuando la altura de la cabecera y la de las líneas de datos son diferentes, donde pone:

::EraseData( ( Int(nHeight/::nRowHeight) + 1 )* ::nRowHeight )

Debería poner:

::EraseData( Int(nHeight/::nRowHeight) * ::nRowHeight + ::HeaderHeight() )



Un saludo,

Ramón Avendaño.
Ramón Avendaño
 
Posts: 8
Joined: Thu Mar 01, 2007 10:08 pm
Location: Santiago de Compostela (Spain)


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 90 guests