Anleitung : "Farbe" in XbpBrowse

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Anleitung : "Farbe" in XbpBrowse

Beitrag von AUGE_OHR »

immer wieder taucht die Frage nach "Farbe" in XbpBrowse auf.
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 } }
Anmerkung : COL_HA = Header, COL_DA = DataArea

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","","" } }
Ich habe also im Array Element :
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
in die FOR / NEXT Schleife einfügt.

gruss by OHR
Jimmy
Antworten