Hi Viktor,
Below test code when run between Harbour and xHarbour demonstrates one
difference specifically on the TBrowse column alignment. I was able to
compile in Harbour my whole console application successfully but this
difference, personally, is a show stopper. If it's not too much to ask,
kindly assess if you can easily spot and adjust this difference and be
included in 1.0. But if it would take you long, just don't mind it and
I'll just wait when you'll have spare time.
Thanks and best regards,
Mario
/////////////////////////////////////////////////////////////////
#include "inkey.ch"
static scope
function main
local oJB_Br,oGL_Br
local key,x,y
local aM1Struct,aD1Struct
local lSwitch := .t.
local seek_key
scope :="ST10CRISP"
setmode(25,80)
cls
aM1Struct := { ;
{ "STORE_CODE", "C", 4, 0 }, ;
{ "BOOK_TYPE" , "C", 2, 0 }, ;
{ "TR_TYPE" , "C", 3, 0 }, ;
{ "DOC_CODE" , "C", 2, 0 }, ;
{ "TR_NO" , "C", 8, 0 } }
aD1Struct := { ;
{ "STORE_CODE", "C", 4, 0 }, ;
{ "BOOK_TYPE" , "C", 2, 0 }, ;
{ "TR_DATE" , "D", 8, 0 }, ;
{ "DOC_CODE" , "C", 2, 0 }, ;
{ "TR_NO" , "C", 8, 0 }, ;
{ "ACCT_CODE" , "C", 4, 0 } }
DbCreate( "M1", aM1Struct, "DBFNTX" )
use M1 shared new alias "JBTRAN"
index on
jbtran->store_code+jbtran->book_type+jbtran->tr_type+jbtran->doc_code+jbtran->tr_no
to M1
for x = 1 to 10
JBTRAN->(DbAppend())
JBTRAN->STORE_CODE := "ST10"
JBTRAN->BOOK_TYPE := "CR"
JBTRAN->TR_TYPE := "ISP"
JBTRAN->DOC_CODE := "03"
JBTRAN->TR_NO := StrZero(x,8)
next x
DbCreate( "D1", aD1Struct, "DBFNTX" )
use D1 shared new alias "GLTRAN"
index on
gltran->store_code+gltran->doc_code+gltran->tr_no+dtos(gltran->tr_date)
to D1
for x = 1 to 10
for y = 1 to if(lSwitch,4,3)
GLTRAN->(DbAppend())
GLTRAN->STORE_CODE := "ST10"
GLTRAN->BOOK_TYPE := "CR"
GLTRAN->TR_DATE := date()
GLTRAN->DOC_CODE := "03"
GLTRAN->TR_NO := StrZero(x,8)
GLTRAN->ACCT_CODE := StrZero(y,4)
next y
lSwitch := !lSwitch
next x
DbSelectArea("jbtran")
DbSetRelation("GLTRAN",{||
JBTRAN->STORE_CODE+JBTRAN->DOC_CODE+JBTRAN->TR_NO})
oJB_Br:=MHSBrow("JBTRAN",{3,2,13,77}, ;
{ {"StoreCode",{||JBTRAN->STORE_CODE}}, ;
{"DocCode",{||JBTRAN->DOC_CODE}}, ;
{"TrNo",{||JBTRAN->TR_NO}} }, ;
scope ,;
{"STORE_CODE","BOOK_TYPE","TR_TYPE"} )
************ GL BROW ************
oGL_Br:=GLBrow({14,2,21,77})
oGL_Br:goTopBlock :={| |
PosWhile("top",JBTRAN->STORE_CODE+JBTRAN->DOC_CODE+JBTRAN->TR_NO,,,"GLTRAN")}
oGL_Br:goBottomBlock:={| |
PosWhile("bottom",JBTRAN->STORE_CODE+JBTRAN->DOC_CODE+JBTRAN->TR_NO,{|x|
GLTRAN->STORE_CODE+GLTRAN->DOC_CODE+GLTRAN->TR_NO==x},,"GLTRAN")}
oGL_Br:skipBlock :={|n|
PosWhile("skip",JBTRAN->STORE_CODE+JBTRAN->DOC_CODE+JBTRAN->TR_NO,{|x|
GLTRAN->STORE_CODE+GLTRAN->DOC_CODE+GLTRAN->TR_NO==x},n,"GLTRAN")}
oGL_Br:autoLite:=.F.
oGL_Br:deHilite()
jbtran->(DbGotop())
do while .t.
oJB_Br:ForceStable()
oGL_Br:ForceStable()
key:=inkey(0)
do case
case navigate(oJB_Br,key)
oGL_Br:ForceStable()
oGL_Br:goTop()
case upper(chr(key)) == "S"
seek_key := scope+"9999999999" //space(10)
JBTRAN->(DbSeek(seek_key,.t.))
if JBTRAN->(eof())
JBTRAN->(DbSkip(-1))
endif
oJB_Br:refreshAll()
oGL_Br:refreshAll()
case key==K_ESC
exit
endcase
enddo
return nil
**************************************
* MHSBrow()
**************************************
Function MHSBrow(dbAlias,aCoord,aHdr,scope,aFldScope)
local old_cursor :=setcursor(0)
local s:=""
local oBr
LOCAL nT,nL,nB,nR,x
if aCoord==nil
nT:=14
nL:=2
nB:=21
nR:=77
else
nT:=aCoord[1]
nL:=aCoord[2]
nB:=aCoord[3]
nR:=aCoord[4]
endif
oBr:=TBrowseDB(nT,nL,nB,nR)
for x = 1 to len(aHdr)
oBr:AddColumn(TBColumnNew(aHdr[x,1], aHdr[x,2] ))
next x
oBr:headSep:="ÄÂÄ"
oBr:colSep :=" ³ "
oBr:footSep:="ÄÁÄ"
oBr:freeze:=1
if scope <> nil
for x = 1 to len(aFldScope)
s+=dbAlias+"->"+aFldScope[x] + if(x < len(aFldScope),"+","")
next x
oBr:goTopBlock :={| | PosWhile("top",scope,,,(dbAlias) )}
oBr:goBottomBlock:={| | PosWhile("bottom",scope,{|x| &(s)
==x},,(dbAlias) )}
oBr:skipBlock :={|n| PosWhile("skip",scope,{|x| &(s)
==x},n,(dbAlias) )}
endif
return oBr
**************************************
Function GLBrow(aCoord)
local old_cursor:=setcursor(0)
local prev_color:=setcolor()
local maincolor := if(Iscolor(), 'w/b', 'w/n')
local oBr
LOCAL nT,nL,nB,nR
if aCoord==nil
nT:=14
nL:=2
nB:=21
nR:=77
else
nT:=aCoord[1]
nL:=aCoord[2]
nB:=aCoord[3]
nR:=aCoord[4]
endif
oBr:=TBrowseDB(nT,nL,nB,nR)
oBr:AddColumn(TBColumnNew("StoreCode",{||GLTRAN->STORE_CODE}))
oBr:AddColumn(TBColumnNew("DocCode",{||GLTRAN->DOC_CODE}))
oBr:AddColumn(TBColumnNew("TrNo",{||GLTRAN->TR_NO}))
oBr:AddColumn(TBColumnNew("AcctCode",{||GLTRAN->ACCT_CODE}))
oBr:headSep:="ÄÂÄ"
oBr:colSep :=" ³ "
oBr:footSep:="ÄÁÄ"
oBr:freeze:=1
return oBr
*** POSWHILE ***
Function PosWhile(how, firstkey, condition, howMany,_Alias)
local actual:=0
if _Alias==nil;_Alias:=alias();endif
do case
case how=="top"
(_Alias)->(DbSeek(firstkey))
case how=="bottom"
(_Alias)->(DbSeek( firstkey+chr(255),.T.))
(_Alias)->(DbSkip(-1))
if (.not. eval(condition,firstkey))
(_Alias)->( DbGoto( (_Alias)->(lastrec()) +1) )
endif
case how=="skip"
if .not. (_Alias)->(eof())
do case
case howmany < 0
do while (actual > howmany) .and. (.not. (_Alias)->(bof()));
.and. eval(condition,firstkey)
(_Alias)->(DbSkip(-1))
if (.not. (_Alias)->(bof())) .and. eval(condition,firstkey)
actual--
endif
enddo
if (.not. eval(condition,firstkey))
(_Alias)->(DbSkip(+1))
if (.not. eval(condition,firstkey))
(_Alias)->(DbGoto(lastrec()+1))
endif
endif
case howmany > 0
do while (actual < howmany) .and. (.not. (_Alias)->(eof()));
.and. eval(condition,firstkey)
(_Alias)->(DbSkip(+1))
if (.not. (_Alias)->(eof())) .and. eval(condition,firstkey)
actual++
endif
enddo
if (.not. eval(condition,firstkey))
(_Alias)->(DbSkip(-1))
if (.not. eval(condition,firstkey))
(_Alias)->(DbGoto(lastrec()+1))
endif
endif
otherwise
(_Alias)->(DbSkip(0))
endcase
endif
endcase
return actual
*** NAVIGATE ***
Function Navigate(b,k)
local n,keys_:={;
{K_UP , {||b:up()}} , {K_DOWN , {||b:down()}},;
{K_LEFT , {||b:left()}} , {K_RIGHT , {||b:right()}},;
{K_PGUP , {||b:pageUp()}} , {K_PGDN , {||b:pageDown()}},;
{K_CTRL_PGUP, {||b:goTop()}} , {K_CTRL_PGDN, {||b:goBottom()}},;
{K_HOME , {||b:home()}} , {K_END , {||b:end()}},;
{K_CTRL_HOME, {||b:panHome()}} , {K_CTRL_END , {||b:panEnd()}},;
{K_TAB , {||b:panRight()}}, {K_SH_TAB , {||b:panLeft()}} ;
}
n:=ascan(keys_,{ |pair| k==pair[1] })
if n <> 0
eval(keys_[n,2])
endif
return (n <> 0)
/////////////////////////////////////////////////////////////////////////////////////////
_______________________________________________
Harbour mailing list
Harbour@harbour-project.org
http://lists.harbour-project.org/mailman/listinfo/harbour