Code: Select all
#include "dac.ch"
#INCLUDE "dcdialog.CH"
#INCLUDE "appevent.CH"
#Pragma Library("dclipx.lib")
FUNCTION Main
LOCAL GetList[0], GetOptions, aObjects, oBrowse, oBitmap, oStatic,  nPointer := 1, i, lStatus
DbeLoad( "foxdbe" )
DbeLoad( "cdxdbe" )
DbeBuild( "foxcdx", "foxdbe", "cdxdbe" )
Use parts VIA 'FOXCDX'
SELECT partno as Number, ;
   partname as Name, ;
   parttype as Type, ;
   bmpImage as Image, ;
   RecNo() as Record ;
   FROM parts ;
   INTO OBJECTS aObjects
FOR i := 1 TO Len(aObjects)
  aObjects[i]:name := Pad(aObjects[i]:name,20)   // Pad the data for cell editing
NEXT
oBitmap := XbpBitmap():new():create()
@ 0,0 DCBROWSE oBrowse ;
      SIZE 72,22 ;
      DATA aObjects ;
      HEADLINES 2 ;
      POINTER nPointer ;
      FONT '10.Lucida Console' ;
      EDIT xbeBRW_ItemSelected MODE DCGUI_BROWSE_EDITDOWN ;
      ITEMMARKED {||oBitmap:setBuffer(aObjects[nPointer]:image), oStatic:invalidateRect()}
DCBROWSECOL OBJECTVAR Number HEADER 'Part;Number' WIDTH 10 PARENT oBrowse PROTECT {||.t.} 
DCBROWSECOL OBJECTVAR Name HEADER 'Part;Name' WIDTH 30 PARENT oBrowse 
DCBROWSECOL OBJECTVAR Type HEADER 'Part;Type' WIDTH 10 PARENT oBrowse PROTECT {||.t.}
DCBROWSECOL OBJECTVAR Record HEADER 'Record;Number' WIDTH 6 PICTURE '99999' PARENT oBrowse ;
   PROTECT {||.t.}
@ 0, 74 DCSTATIC TYPE XBPSTATIC_TYPE_BITMAP OBJECT oStatic ;
         CAPTION oBitmap SIZE 43,12 ;
         RESIZE DCGUI_RESIZE_REPOSONLY
DCGETOPTIONS RESIZE RESIZEDEFAULT DCGUI_RESIZE_RESIZEONLY
DCREAD GUI ;
   FIT ;
   TITLE 'Browsing a Fox Database SQL Query' ;
   OPTIONS GetOptions ;
   TO lStatus ;
   ADDBUTTONS
IF lStatus
  PARTS->(GatherData(aObjects))
ENDIF
RETURN nil
* --------
PROC appsys ; RETURN
* --------
FUNCTION GatherData( aObjects )
LOCAL i
FOR i := 1 TO Len(aObjects)
  DbGoTo(aObjects[i]:record)
  IF dbRLock()
    REPLACE partname WITH aObjects[i]:name
    dbRUnlock()
  ENDIF
NEXT
RETURN nil