Da ich gerade eine Antwort darauf fertig habe werde ich die auch hier
nochmal, aber in Deutsch, posten.
Also so geht es
1.) create ein "Presentation Parameter" Array
Code: Alles auswählen
LOCAL aPP3 := { { XBP_PP_COL_HA_CAPTION , "" }, ;
{ XBP_PP_COL_HA_BGCLR , GRA_CLR_PALEGRAY }, ;
{ XBP_PP_COL_HA_FGCLR , GRA_CLR_BLACK }, ;
{ XBP_PP_COL_DA_BGCLR , GRA_CLR_WHITE }, ;
{ XBP_PP_COL_DA_FGCLR , GRA_CLR_BLACK }, ;
{ XBP_PP_COL_DA_HILITE_FGCLR , GRA_CLR_WHITE }, ;
{ XBP_PP_COL_DA_HILITE_BGCLR , GRA_CLR_BLUE }, ;
{ XBP_PP_COL_DA_CHARWIDTH , 1 }, ;
{ XBP_PP_COL_DA_CELLALIGNMENT , XBPALIGN_LEFT }, ;
{ XBP_PP_COL_DA_FRAMELAYOUT , XBPFRAME_NONE }, ;
{ XBP_PP_COL_DA_HILITEFRAMELAYOUT, XBPFRAME_NONE }, ;
{ XBP_PP_COMPOUNDNAME , FONT_HELV_SMALL }, ;
{ XBP_PP_COL_DA_CELLFRAMELAYOUT , XBPFRAME_BOX +
XBPFRAME_RAISED } }
2.) create ein Array von den "Feld"ern
Code: Alles auswählen
LOCAL aDBF := {{ {|| SCANDBF->W9MARK } , 1,"*"
,"MARK","IF(!EMPTY(SCANDBF->W9MARK),{ 0,12 },NIL )","" },;
{ {|| SCANDBF->ARTIST } ,15,"Artist" ,"ARTIST","","" },;
{ {|| SCANDBF->TITEL } ,15,"Titel" ,"TITEL","","" },;
{ {|| SCANDBF->W9RATE } , 1,"Rate" ,"",;
"IF(SCANDBF->W9RATE=0, {1, 0},"+;
"IF(SCANDBF->W9RATE=1, {1, 5},"+;
"IF(SCANDBF->W9RATE=2, {1, 7},"+;
"IF(SCANDBF->W9RATE=3, {1, 6},"+;
"IF(SCANDBF->W9RATE=4, {0,14},"+;
"IF(SCANDBF->W9RATE=5, {0, 4},"+;
"IF(SCANDBF->W9RATE=6, {0, 3},{ 0, 3 })))))))","" },;
{ {|| SCANDBF->JAHR } , 3,"Jahr" ,"JAHR","","" },;
{ {|| SCANDBF->GENRE } , 6,"Genre" ,"GENRE","","" },;
{ {|| SCANDBF->KOMMENTAR } , 8,"Kommentar" ,"KOMMENTAR","","" },;
{ {|| SCANDBF->ALBUM } , 6,"Album" ,"ALBUM","","" } }
a.) Alias->Feld oder Codeblock
b.) "wide" im Browser
c.) "Header" Überschrift
d.) das ist "intern" für den Index der Spalte (sort bei klick auf Header)
e.) colorblock
f.) das ist für den Footer, hier nicht vorhanden
ok nun müssen wir nur noch das ganze "zusammen bauen"
3.) benutzte diesen Code um die oColume Object zu createn :
Code: Alles auswählen
oBrowse := GuiBrowseDb( oDlg:drawingArea, {2,30}, {aSize[1],aSize[2]} )
FOR i:=1 TO imax
aPP3[1,2] := aDBF[i,3] // field wide
aPP3[8,2] := aDBF[i,2] // title name
IF EMPTY(aDBF[i,5]) // colorblock
aPP3[9,2] := XBPALIGN_LEFT
oCol := XbpColumn():new(oBrowse,,,, aPP3)
IF VALTYPE(aDBF[i,1])=="C"
oCol:dataLink := &("{||"+aDBF[i,1]+"}")
ELSE
oCol:dataLink := aDBF[i,1]
ENDIF
ELSE
aPP3[9,2] := XBPALIGN_RIGHT
//
// you can use a "normal" XbpColume , but "Cursor" will cover it
//
* oCol := XbpColumn():new(oBrowse,,,, aPP3)
//
// these a a "spezial" Color Colume Class from Diego
// it will show the "right Color" even if it is coverd by "Cursor Row"
//
oCol := XbpColumnLocal():new(oBrowse,,,, aPP3)
IF VALTYPE(aDBF[i,1])=="C"
oCol:dataLink := &("{||"+aDBF[i,1]+"}")
ELSE
oCol:dataLink := aDBF[i,1]
ENDIF
oCol:colorBlock := &("{||"+aDBF[i,5]+"}")
ENDIF
oCol:create()
oBrowse:addColumn(oCol)
NEXT
tja das ist es dann auch schon. Wie schon gesagt in diesem Beispiel
fehlt der "Footer". Wenn man "Footer" verwenden will sollte man zuerst
unter 1.) die "Presentation Parameter" mit COL_FA erweitern, dann bei
3.) die neun Reihenfolge von aPP3 beachten bevor man :
Code: Alles auswählen
IF EMPTY(aDBF[i,6]) // footer
aPP3[nPos_in_aPP3,2] := ""
ELSE
aPP3[nPos_in_aPP3,2] := &("{||"+aDBF[i,6]+"}")
ENDIF
gruss by OHR
Jimmy