I discovered that DCBROWSECOL .... FOOTER cause IDC error.
Run the code below:
Code: Select all
FUNCTION XSample_19
/* ARRAY BROWSER WITH COLORS
This example demonstrates how to control the color of cells in
an array browser using DCBROWSE. In this example, the color of
the SIZE cells is dependent on the size of the file. The
function DC_GETCOLARRAY() is used as a pointer into the array
being browsed.
*/
LOCAL GetList := {}, cDir, oFileName, aDirectory, i, ;
nPointer, oDirectory, aColors, bColor, GetOptions, cFooter := TRANSFORM(0,"###,###,###")
cDir := Space(30)
@ 2,2 DCGET cDir GETSIZE 43 POPUP {|c|DC_PopDir(c)}
aDirectory := Directory()
FOR i := 1 TO Len(aDirectory)
ASize(aDirectory[i],5)
aDirectory[i,5] := .f.
NEXT
ASort(aDirectory,,,{|a,b|a[1]<b[1]})
@ 3.5,2 DCBROWSE oDirectory DATA aDirectory ;
SIZE 60,12 ;
FONT '10.Helv Bold' ;
PRESENTATION DC_BrowPres() ;
POINTER nPointer ;
OPTIMIZE ;
FIT ;
NOHSCROLL ;
MARK 5 ;
MKCOLOR 5, GRA_CLR_WHITE, GRA_CLR_BLUE
aColors := { {GRA_CLR_WHITE,GRA_CLR_DARKRED}, ;
{GRA_CLR_WHITE,GRA_CLR_DARKBLUE}, ;
{GRA_CLR_BLACK,GRA_CLR_DARKGREEN}, ;
{GRA_CLR_BLACK,GRA_CLR_YELLOW} }
bColor := {| nSize, nCase | nSize := DC_GetColArray(2,oDirectory),;
nCase := DC_PickCase(nSize,'>=',;
{1000000,100000,10000,0}, ;
{ 1, 2, 3,4} ), aColors[nCase] }
DCBROWSECOL ELEMENT 1 WIDTH 10 HEADER "Name" PARENT oDirectory
DCBROWSECOL ELEMENT 2 WIDTH 7 HEADER "Size" PARENT oDirectory ;
EVAL { |o|o:colorBlock := bColor } // FOOTER {|| cFooter }
DCBROWSECOL ELEMENT 3 WIDTH 8 HEADER "Date" PARENT oDirectory
DCBROWSECOL ELEMENT 4 WIDTH 6 HEADER "Time" PARENT oDirectory
DCBROWSECOL ELEMENT 5 WIDTH 4 HEADER "Marked" PARENT oDirectory
@ 2,50 DCPUSHBUTTON CAPTION "Display" SIZE 7,0.8 ;
ACTION {|| _UpdateDirFooter(aDirectory, cDir, @cFooter, GetList, oDirectory)}
DCGETOPTIONS NOMINBUTTON NOMAXBUTTON NORESIZE TABSTOP
DCREAD GUI ;
OPTIONS GetOptions ;
FIT ;
MODAL ;
BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL ;
TITLE 'Array Browse of Directory'
RETURN nil
*
Static Function _UpdateDirFooter(aDir, cDir, cFooter, GetList, oDirectory)
Local nSize := 0, i
aDir := Directory(AllTrim(cDir)+"\*.*")
aEval(aDir, {|e| nSize += e[2]})
cFooter := TRANSFORM(nSize, "###,###,###")
FOR i := 1 TO Len(aDir)
ASize(aDir[i],5)
aDir[i,5] := .f.
NEXT
DC_GetBrowArray(oDirectory,aDir)
DC_GetRefresh(GetList)
Return nil
* ------------