im Beispiel 3 verwendest Du den Standard XbpBrowse() (gerade noch einmal nachgesehen).
Code: Alles auswählen
STATIC FUNCTION ShowCheckResultDialog(oDlg, aData) // oDlg ist die :drawingArea eines XbpDialog()
Local aBaseSize, aPos, aSize, aPres, aColPres
Local nI
Local oBro, oXbp, oCol
oDlg:clipChildren := .T.
nMaxPoint := Len(aData)
nPointer := 1
aBaseSize := oDlg:currentSize()
aPos := {10, 50}
aSize := AClone(aBaseSize)
FOR nI := 1 TO 2
aSize[nI] -= aPos[nI] * 2
NEXT
// aus Beispiel 3 übernommen
aPres := {;
{XBP_PP_COL_DA_ROWHEIGHT, 15}, ;
{XBP_PP_COL_DA_CELLHEIGHT, 15}, ;
{XBP_PP_COL_DA_ROWSEPARATOR, IF(IsThemeActive(), XBPCOL_SEP_LINE, XBPCOL_SEP_NONE)},;
{XBP_PP_COL_DA_COLSEPARATOR, IF(IsThemeActive(), XBPCOL_SEP_LINE, XBPCOL_SEP_NONE)},;
{XBP_PP_HILITE_BGCLR, GraMakeRGBColor({136, 170, 214})},;
{XBP_PP_HILITE_FGCLR, GraMakeRGBColor({255, 102, 51})},;
{XBP_PP_COL_DA_CELLFRAMELAYOUT, XBPFRAME_BOX + XBPFRAME_RECESSED },;
{XBP_PP_COL_FA_FRAMELAYOUT, XBPFRAME_BOX + XBPFRAME_RECESSED },;
{XBP_PP_COL_DA_FRAMELAYOUT, XBPFRAME_NONE },;
{XBP_PP_COL_DA_FGCLR, GRA_CLR_BLACK},;
{XBP_PP_COL_DA_BGCLR, GRA_CLR_WHITE};
}
aColPres := aClone(aPres)
aAdd(aPres, {XBP_PP_COL_DA_CELLALIGNMENT, XBPALIGN_LEFT + XBPALIGN_VCENTER})
aAdd(aColPres, {XBP_PP_COL_DA_CELLALIGNMENT, XBPALIGN_LEFT + XBPALIGN_VCENTER})
oBro := XbpBrowse():new(oDlg, oDlg, aPos, aSize)
// more configurations
oBro:UseVisualStyle := .T.
oBro:SkipBlock := {|nSkip,oBro| DoSkip(nSkip,oBro) }
oBro:GoBottomBlock := {|| nPointer := Len(aData) }
oBro:GoTopBlock := {|| nPointer := 1 }
oBro:PosBlock := {|| nPointer }
oBro:PhyPosBlock := {|| nPointer }
oBro:LastPosBlock := {|| Len(aData) }
oBro:FirstPosBlock := {|| 1 }
oBro:CursorMode := XBPBRW_CURSOR_ROW
oBro:tabStop := .T.
oBro:setPresParam(aPres)
oBro:create()
oCol := oBro:addColumn({|| aData[nPointer, 1]}, 10, "Company")
oCol:Configure(, , , , aColPres, .T.)
// now we add numeric colums which need to be right adjusted:
ASize(aColPres, Len(aColPres) - 1)
AAdd(aColPres, {XBP_PP_COL_DA_CELLALIGNMENT, XBPALIGN_RIGHT + XBPALIGN_VCENTER})
AAdd(aColPres, {XBP_PP_COL_HA_ALIGNMENT, XBPALIGN_RIGHT + XBPALIGN_VCENTER})
oCol := oBro:addColumn({|| aData[nPointer, 2]}, 5, "FTE (I)")
oCol:Configure(, , , , aColPres, .T.)
oCol := oBro:addColumn({|| aData[nPointer, 3]}, 5, "FTE (D)")
oCol:ColorBlock := {|x| {MyGetColor(x, 2, oBro), GRA_CLR_WHITE}}
oCol:DataArea:DrawMode := XBP_DRAW_OWNER
oCol:DataArea:CustomDrawCell := {|oPs,aInfo,oArea| PaintCellWithForeGround(oPs, aInfo, oArea, aData)}
oCol:Configure(, , , , aColPres, .T.)
oBro:show()
aPos := {10, 10}
aSize := {120, 20}
oXbp := XbpPushButton():new(oDlg, oDlg, aPos, aSize)
oXbp:tabStop := .T.
oXbp:caption := "OK"
oXbp:activate := {|uNil1, uNil2, self| PostAppEvent(xbeP_Close)}
oXbp:create()
RETURN (.T.)
STATIC FUNCTION MyGetColor(x, nPosition, oBro)
Local nCompare
nCompare := oBro:getcolumn(nPosition):getData() // Vergleichswert aus vorheriger Spalte
DO CASE
CASE x = nCompare // bei Übereinstimmung SCHWARZ
RETURN GRA_CLR_BLACK
ENDCASE
RETURN GRA_CLR_RED // bei Abweichung ROT
PaintCellWithForeGround() entspricht dem aus Deinem Beispiel.