home *** CD-ROM | disk | FTP | other *** search
/ PC World 2002 June / PCWorld_2002-06_cd.bin / Software / Komercni / xbase / express / exd17208.r04 / exp17 / Samples / Xsample3.prg < prev    next >
Encoding:
Text File  |  2002-01-30  |  58.9 KB  |  2,284 lines

  1. *-- PROGRAM FILE -------------------------------------------------------------
  2. * Application: eXPress++ Library
  3. *  Description: eXPress++ sample programs
  4. *    File Name: xsample3.prg
  5. *       Author: Roger Donnay          Tester:
  6. * Date created: 10/11/99              Date updated: 11/07/2001
  7. *    Copyright: (c) 2001 by DONNAY Software Designs
  8. *-----------------------------------------------------------------------------
  9.  
  10. #include "DCDIALOG.CH"
  11. #include "SET.CH"
  12. #include "XBP.CH"
  13. #include "APPEVENT.CH"
  14. #include "dcpick.ch"
  15. #include "dcapp.ch"
  16. #include "dcbitmap.ch"
  17. #include "dcicon.ch"
  18. #include "dccursor.ch"
  19. #include "dcgra.ch"
  20. #INCLUDE "inkey.CH"
  21. #INCLUDE "dctree.ch"
  22. #INCLUDE "dcdir.ch"
  23. #include "font.ch"
  24. #INCLUDE "dcprint.CH"
  25. #include "directry.ch"
  26.  
  27. FUNCTION X_Samples_3( oDialog )
  28.  
  29. LOCAL GetList := {}, nTest := 0, cMemo := '', oMemo, i, j, oDlg, ;
  30.       lDebugCreate := .f., lDebugEvent := .f., GetOptions, aApp[1], ;
  31.       cTitle, oDlgWindow, aCoords, oSourceFile, cSource
  32.  
  33. SET DEFA TO
  34. SET PATH TO ..\DATA
  35.  
  36. cTitle := 'eXPress++ Sample Programs (Set 3)'
  37. nTest := 0
  38. cMemo := ''
  39. lDebugEvent := .f.
  40. lDebugCreate := .f.
  41.  
  42. FOR i := 1 TO  5
  43.   FOR j := 1 TO 6
  44.     nTest++
  45.     @ j-1,1 + (i-1)*14 DCRADIO nTest               ;
  46.       VALUE nTest ;
  47.       PROMPT XSample_Header(nTest)               ;
  48.       ACTION {||XSample_Memo(nTest,oMemo,oSourceFile,@cSource)}
  49.   NEXT j
  50. NEXT i
  51. nTest := 1
  52.  
  53. @ 2,73 DCPUSHBUTTON CAPTION 'Run Sample'  ;
  54.       SIZE 12, 1                               ;
  55.       ACTION {||XSample_Run(nTest,oDialog,lDebugCreate,lDebugEvent,GetList,GetOptions)}
  56.  
  57. @ 3,73 DCPUSHBUTTON CAPTION 'Print Source'  ;
  58.       SIZE 12, 1                               ;
  59.       ACTION {||XSample_Print(cSource)}
  60.  
  61. @ 4,73 DCPUSHBUTTON CAPTION 'Exit' ;
  62.       SIZE 12, 1  ;
  63.       ACTION {||PostAppEvent(xbeP_Close,,,oDlg)}
  64.  
  65. @ 5,73 DCCHECKBOX lDebugEvent PROMPT 'Debug Events'
  66.  
  67. @ 6.3,5 DCSAY '' SAYSIZE 60 COLOR GRA_CLR_DARKBLUE ;
  68.       OBJECT oSourceFile FONT '8.Courier Bold'
  69.  
  70. @ 7,1 DCMULTILINE cMemo ;
  71.      OBJECT oMemo ;
  72.      SIZE 85,12 ;
  73.      FONT '8.Alaska Crt'
  74.  
  75. DCGETOPTIONS ;
  76.    ICON ICON_EXPRESS ;
  77.    NOBUSY ;
  78.    CASCADE
  79.  
  80. DCREAD GUI ;
  81.       OPTIONS GetOptions ;
  82.       EVAL {||XSample_Memo(nTest,oMemo,oSourceFile,@cSource)} ;
  83.       APPWINDOW oDialog ;
  84.       PARENT @oDlg ;
  85.       TITLE cTitle ;
  86.       FIT
  87.  
  88. CLOSE DATABASES
  89.  
  90. RETURN nil
  91.  
  92. * ------------------------- *
  93.  
  94. STATIC FUNCTION XSample_Memo( nTest, oMemo, oSourceFile, cSource )
  95.  
  96. LOCAL cFunction, nFound, cSourceFile
  97.  
  98. cSource := ''
  99. nTest += 72
  100. cFunction := 'XSample_' + Alltrim(Str(nTest))
  101.  
  102. cSourceFile := 'XSAMPLE3.PRG'
  103. cSource := MemoRead(cSourceFile)
  104. IF Empty(cSource)
  105.   cSourceFile := '..\PRG\XSAMPLE3.PRG'
  106.   cSource := MemoRead(cSourceFile)
  107. ENDIF
  108. IF Empty(cSource)
  109.   cSource := 'XSAMPLE3.PRG cannot be found'
  110. ENDIF
  111.  
  112. nFound := AT('FUNCTION ' + cFunction,cSource)
  113. cSource := Substr(cSource,nFound)
  114. nFound := AT('*** END OF EXAMPLE ***',cSource)
  115. cSource := Substr(cSource,1,nFound+21)
  116.  
  117. IF !Empty(cSource)
  118.   oMemo:setData(cSource)
  119.   oSourceFile:setCaption(cSourceFile)
  120. ENDIF
  121. RETURN nil
  122.  
  123. * -------------------
  124.  
  125. STATIC FUNCTION XSample_Print( cSource )
  126.  
  127. LOCAL oPrinter, nLineCount := MLCount(cSource), i, cMemoLine, nRow
  128.  
  129. DCPRINT ON TO oPrinter PREVIEW FONT '10.Courier' NONSTOP HIDE
  130. IF Valtype(oPrinter) # 'O' .OR. !oPrinter:lActive
  131.   RETURN nil
  132. ENDIF
  133. nRow := 1
  134. FOR i := 1 TO nLineCount - 1
  135.   cMemoLine := MemoLine( cSource, nil, i )
  136.   @ nRow++,2 DCPRINT SAY cMemoLine PRINTER oPrinter
  137.   IF nRow > 60
  138.     DCPRINT EJECT
  139.     nRow := 1
  140.   ENDIF
  141. NEXT
  142. DCPRINT OFF
  143.  
  144. RETURN nil
  145.  
  146. * ---------------------------- *
  147.  
  148. STATIC FUNCTION XSample_Run( nTest, oDialog, lDebugCreate, lDebugEvent, ;
  149.                              GetList, GetOptions )
  150.  
  151. LOCAL nDebug := 0
  152.  
  153. DC_Gui(.t.)
  154.  
  155. nTest += 72
  156. IF lDebugCreate
  157.    nDebug += DCGUI_DEBUG_CREATE
  158. ENDIF
  159. IF lDebugEvent
  160.    nDebug += DCGUI_DEBUG_EVENTS
  161. ENDIF
  162. DC_ReadGuiDebug(nDebug)
  163. CLOSE ALL
  164. SET DEFA TO
  165.  
  166. IF nTest = 73
  167.    XSample_73()
  168. ELSEIF nTest = 74
  169.    XSample_74()
  170. ELSEIF nTest = 75
  171.    XSample_75()
  172. ELSEIF nTest = 76
  173.    XSample_76()
  174. ELSEIF nTest = 77
  175.    XSample_77()
  176. ELSEIF nTest = 78
  177.    XSample_78()
  178. ELSEIF nTest = 79
  179.    XSample_79()
  180. ELSEIF nTest = 80
  181.    XSample_80()
  182. ELSEIF nTest = 81
  183.    XSample_81()
  184. ELSEIF nTest = 82
  185.    XSample_82()
  186. ELSEIF nTest = 83
  187.    XSample_83()
  188. ELSEIF nTest = 84
  189.    XSample_84()
  190. ELSEIF nTest = 85
  191.    XSample_85()
  192. ELSEIF nTest = 86
  193.    XSample_86()
  194. ELSEIF nTest = 87
  195.    XSample_87()
  196. ELSEIF nTest = 88
  197.    XSample_88()
  198. ELSEIF nTest = 89
  199.    XSample_89()
  200. ELSEIF nTest = 90
  201.    XSample_90()
  202. ELSEIF nTest = 91
  203.    XSample_91()
  204. ELSEIF nTest = 92
  205.    XSample_92()
  206. ELSEIF nTest = 93
  207.    XSample_93()
  208. ELSEIF nTest = 94
  209.    XSample_94(GetList,GetOptions)
  210. ELSEIF nTest = 95
  211.    XSample_95()
  212. ELSEIF nTest = 96
  213.    XSample_96()
  214. ELSEIF nTest = 97
  215.    XSample_97(oDialog)
  216. ELSEIF nTest = 98
  217.    XSample_98()
  218. ELSEIF nTest = 99
  219.    XSample_99()
  220. ELSEIF nTest = 100
  221.    XSample_100()
  222. ELSEIF nTest = 101
  223.    XSample_101()
  224. ELSEIF nTest = 102
  225.    XSample_102()
  226. ENDIF
  227.  
  228. DC_ClearEvents()
  229.  
  230. RETURN nil
  231.  
  232. * ---------------------------- *
  233.  
  234. STATIC FUNCTION XSample_Header( nTest, oDlg )
  235.  
  236. nTest += 72
  237.  
  238. IF nTest = 73
  239.   RETURN "FindBrow 1"
  240. ELSEIF nTest = 74
  241.   RETURN "FindBrow 2"
  242. ELSEIF nTest = 75
  243.   RETURN "FindBrow 3"
  244. ELSEIF nTest = 76
  245.   RETURN 'GraphicDlg'
  246. ELSEIF nTest = 77
  247.   RETURN 'StaticScroll'
  248. ELSEIF nTest = 78
  249.   RETURN 'ScrnReport'
  250. ELSEIF nTest = 79
  251.   RETURN 'Hybrid #1'
  252. ELSEIF nTest = 80
  253.   RETURN 'Hybrid #2'
  254. ELSEIF nTest = 81
  255.   RETURN 'Row()/Col()'
  256. ELSEIF nTest = 82
  257.   RETURN 'GetCombo'
  258. ELSEIF nTest = 83
  259.   RETURN 'GraphicButt'
  260. ELSEIF nTest = 84
  261.   RETURN 'HelpLink'
  262. ELSEIF nTest = 85
  263.   RETURN 'SmallGets'
  264. ELSEIF nTest = 86
  265.   RETURN 'Persist 1'
  266. ELSEIF nTest = 87
  267.   RETURN 'Persist 2'
  268. ELSEIF nTest = 88
  269.   RETURN 'Design'
  270. ELSEIF nTest = 89
  271.   RETURN 'Handler'
  272. ELSEIF nTest = 90
  273.   RETURN 'Debugging'
  274. ELSEIF nTest = 91
  275.   RETURN 'ReSize'
  276. ELSEIF nTest = 92
  277.   RETURN 'Tree'
  278. ELSEIF nTest = 93
  279.   RETURN 'TreeMenu'
  280. ELSEIF nTest = 94
  281.   RETURN 'TreeBrowr'
  282. ELSEIF nTest = 95
  283.   RETURN 'PrintConcat'
  284. ELSEIF nTest = 96
  285.   RETURN 'SetParent'
  286. ELSEIF nTest = 97
  287.   RETURN 'FixedFonts'
  288. ELSEIF nTest = 98
  289.   RETURN 'JazzyEmail'
  290. ELSEIF nTest = 99
  291.   RETURN 'QuickBrow 1'
  292. ELSEIF nTest = 100
  293.   RETURN 'QuickBrow 2'
  294. ELSEIF nTest = 101
  295.   RETURN 'GRA Say..Get'
  296. ELSEIF nTest = 102
  297.   RETURN 'ColoredGets'
  298. ENDIF
  299.  
  300. RETURN ''
  301.  
  302. * ---------------------------- *
  303.  
  304. STATIC FUNCTION XSample_73
  305.  
  306. /*
  307. Demonstration of DC_FindBrowse() # 1
  308.  
  309. This is a generic find dialog for finding a record
  310. in a database.
  311. */
  312.  
  313. LOCAL aFields, aPres, aSort[6], aSaveSort
  314.  
  315. aSort[1] := GRA_CLR_WHITE // Sort Selected Color (Foreground)
  316. aSort[2] := GRA_CLR_RED   // Sort Selected Color (Background)
  317. aSort[3] := GRA_CLR_WHITE // Sort Unselected Color (Foreground)
  318. aSort[4] := GRA_CLR_DARKGRAY // Sort Unselected Color (Background)
  319. aSort[5] := BITMAP_RD_UP_RED  // Sort UP Bitmap
  320. aSort[6] := BITMAP_RD_DOWN_RED  // Sort DOWN Bitmap
  321.  
  322. #ifdef EXPRESS17
  323.   aSaveSort := DC_FindBrowseSort(aSort)
  324. #endif
  325.  
  326. IF !File('..\XDOC\EXPRESS.DBF')
  327.   DC_MsgBox({'Sorry.  The database required to show this feature',;
  328.              'is not included in the demonstration version', ;
  329.              'or the ..\XDOC\EXPRESS.DBF file does not exist'})
  330.   RETURN nil
  331. ENDIF
  332.  
  333. SET DEFA TO ..\XDOC
  334. USE EXPRESS VIA FOXCDX EXCLUSIVE ALIAS 'XDOC'
  335. SET INDEX TO EXPRESS.CDX
  336. OrdSetFocus('COMMAND')
  337. SET DEFA TO
  338.  
  339. aPres := ;
  340.   { { XBP_PP_COL_HA_FGCLR, GRA_CLR_WHITE },  ;
  341.     { XBP_PP_COL_HA_BGCLR, GRA_CLR_DARKGRAY }, ;
  342.     { XBP_PP_COL_DA_FGCLR, GRA_CLR_BLACK }, ;
  343.     { XBP_PP_COL_DA_BGCLR, GRA_CLR_WHITE } }
  344.  
  345. aFields := ;
  346.    { ; // field          Header             Width  Index       Prompt
  347.    { {||XDOC->type},     'Type',              8,   "TYPE",     'Type' } , ;
  348.    { {||XDOC->command},  'Command',           8,   'COMMAND',  'Command' }, ;
  349.    { {||XDOC->category}, 'Category',          8,   'CATEGORY', 'Category' }, ;
  350.    { {||XDOC->module},   'Module',            8,   'MODULE',   'Module' }, ;
  351.    { {||XDOC->SHORT},    'Short Description', 25,   nil,        nil } ;
  352.    }
  353.  
  354. DC_FindBrowse( aFields, nil, nil, nil, 85, 20, ;
  355.     'Find Record by AutoSeek (Click Right Mouse Button in Header to change Index)', ;
  356.     nil, nil, nil, nil, nil, nil, { aPres, { GRA_CLR_DARKGRAY, GRA_CLR_RED } }, ;
  357.     nil, nil, nil, .5 )
  358.  
  359. #ifdef EXPRESS17
  360.   DC_FindBrowseSort(aSaveSort)
  361. #endif
  362.  
  363. RETURN nil
  364. *** END OF EXAMPLE ***
  365.  
  366. * ---------------------------- *
  367.  
  368. STATIC FUNCTION XSample_74
  369.  
  370. /*
  371. Demonstration of DC_FindBrowse() # 2
  372.  
  373. This is a generic find dialog for finding an element in
  374. a Multidimensional array.
  375. */
  376.  
  377. LOCAL aData, nPointer := 1, aDirectory := Directory(), lOk
  378.  
  379. aData := ;
  380.    { ;  // element   Header   Width   Index   Prompt
  381.    {            1,   'Name',    12,     1,    'File Name' }, ;
  382.    {            2,   'Size',    12,     2,    'File Size' }, ;
  383.    {            3,   'Date',    12,     3,    'File Date' }, ;
  384.    {            4,   'Time',    12,     4,    'File Time' }  ;
  385.    }
  386.  
  387. lOk := DC_FindBrowse( aData, nil, nil, nil, 75, 20, ;
  388.     'Find Record by AutoSeek (Click Right Mouse Button in Header to change Index)', ;
  389.     .t., .t., .f., aDirectory, @nPointer )
  390.  
  391. IF lOk
  392.    DC_MsgBox({'You Selected File: ' + aDirectory[nPointer,1]})
  393. ENDIF
  394.  
  395. RETURN nil
  396. *** END OF EXAMPLE ***
  397.  
  398. * ---------------------------- *
  399.  
  400. STATIC FUNCTION XSample_75
  401.  
  402. /*
  403. Demonstration of DC_FindBrowse() # 3
  404.  
  405. This is a database picklist (pull-down style).
  406. */
  407.  
  408. LOCAL GetList := {}, cType, oType, cCommand, oCommand, cCategory, oCategory
  409.  
  410. IF !File('..\XDOC\EXPRESS.DBF')
  411.   DC_MsgBox({'Sorry.  The database required to show this feature',;
  412.              'is not included in the demonstration version', ;
  413.              'or the ..\XDOC\EXPRESS.DBF file does not exist'})
  414.   RETURN nil
  415. ENDIF
  416.  
  417. SET DEFA TO ..\XDOC
  418. USE EXPRESS VIA FOXCDX EXCLUSIVE ALIAS 'XDOC'
  419. SET INDEX TO EXPRESS.CDX
  420. OrdSetFocus('COMMAND')
  421. SET DEFA TO
  422.  
  423. cType := Space(20)
  424. @ 1,0 DCSAY 'Type'
  425. @ 2,0 DCGET cType POPUP {|c|_XSample75(1,oType,c)} GETSIZE 20
  426. @ 3,0 DCSTATIC XBPSTATIC_TYPE_RECESSEDBOX SIZE 22.5,6 ;
  427.    OBJECT oType EVAL {|o|o:hide()}
  428.  
  429. cCommand := Space(20)
  430. @ 1,25 DCSAY 'Command'
  431. @ 2,25 DCGET cCommand POPUP {|c|_XSample75(2,oCommand,c)} GETSIZE 20
  432. @ 3,25 DCSTATIC XBPSTATIC_TYPE_RECESSEDBOX SIZE 22.5,6 ;
  433.    OBJECT oCommand EVAL {|o|o:hide()}
  434.  
  435. cCategory := Space(20)
  436. @ 1,50 DCSAY 'Category'
  437. @ 2,50 DCGET cCategory POPUP {|c|_XSample75(3,oCategory,c)} GETSIZE 20
  438. @ 3,50 DCSTATIC XBPSTATIC_TYPE_RECESSEDBOX SIZE 22.5,6 ;
  439.    OBJECT oCategory EVAL {|o|o:hide()}
  440.  
  441. DCREAD GUI FIT ADDBUTTONS ;
  442.    SETAPPWINDOW ;
  443.    TITLE 'Using DC_FindBrowse() for a Database Pick-List (Pull-Down style)'
  444.  
  445. RETURN nil
  446. /* ----------------------------- */
  447.  
  448. STATIC FUNCTION _XSample75( nMode, oXbp, c )
  449.  
  450. LOCAL aFields
  451.  
  452. oXbp:show()
  453. IF nMode = 1
  454.   OrdSetFocus('TYPE')
  455.   aFields := { { {||XDOC->type}, 'Type', 180, nil, nil } }
  456. ELSEIF nMode = 2
  457.   OrdSetFocus('COMMAND')
  458.   aFields := { { {||XDOC->command}, 'Command', 180, nil, nil } }
  459. ELSEIF nMode = 3
  460.   OrdSetFocus('CATEGORY')
  461.   aFields := { { {||XDOC->category}, 'Category', 180, nil, nil } }
  462. ENDIF
  463. IF DC_FindBrowse( aFields, oXbp, 2, 2, ;
  464.     oXbp:currentSize()[1]-4, oXbp:currentSize()[2]-4, nil, .f., .f., .t. )
  465.    c := Eval(aFields[1,1])
  466. ENDIF
  467.  
  468. oXbp:hide()
  469.  
  470. RETURN c
  471. *** END OF EXAMPLE ***
  472.  
  473. * ----------------------------- *
  474.  
  475. STATIC FUNCTION XSample_76
  476.  
  477. /*
  478. Example of using DCGRA* commands for Dialogs
  479. */
  480.  
  481.  
  482. LOCAL GetList := {}, i, oStatic
  483.  
  484. @ 0,0 DCSTATIC XBPSTATIC_TYPE_RECESSEDBOX SIZE 80, 15 ;
  485.    OBJECT oStatic ;
  486.    PRESENTATION { { XBP_PP_FGCLR, GRA_CLR_WHITE }, ;
  487.                   { XBP_PP_BGCLR, GRA_CLR_WHITE } }
  488.  
  489. @ .5,3 DCGRASTRING ;
  490.        {'DCGRA* commands are useful when creating dialogs that require', ;
  491.         'a lot of text, images, lines, boxes or other graphic primitives.', ;
  492.         'These commands automatically handle locking of presentation space', ;
  493.         'and repainting of the graphic area' } ;
  494.        FONT '12.Arial Bold Italic' COLOR GRA_CLR_BLUE ROWSPACE 18 PARENT oStatic
  495.  
  496. @ 5,4 TO 10,76 DCGRABOX FILL GRA_OUTLINEFILL COLOR GRA_CLR_YELLOW PARENT oStatic
  497.  
  498. @ 6.2,15 DCGRAPROC {|o,c,r|_XSample76(o,c,r)} PARENT oStatic
  499.  
  500. FOR i := 1 TO 15
  501.   @ 10.5, i*4 TO 13.5, i*4 DCGRALINE COLOR i PARENT oStatic
  502.   @ 10.3 + (.22*i),4 TO 10.3 + (.22*i),56 DCGRALINE COLOR i PARENT oStatic
  503. NEXT
  504.  
  505. DCREAD GUI FIT ADDBUTTONS
  506.  
  507. RETURN nil
  508.  
  509. /* ---------------------- */
  510.  
  511. STATIC FUNCTION _XSample76( oPresSpace, nCol, nRow )
  512.  
  513. LOCAL aTarget, aSource, oBitMap, nResource, i, nSaveCol
  514.  
  515. nSaveCol := nCol
  516.  
  517. FOR nResource := 7110 TO 7119
  518.   oBitMap := XbpBitMap():new():create(oPresSpace)
  519.   oBitMap:load( NIL, nResource )
  520.   aTarget := {nCol,nRow,nCol+oBitmap:xSize,nRow+oBitmap:ySize}
  521.   aSource := {0,0,oBitmap:xSize,oBitmap:ySize}
  522.   nCol += oBitmap:xSize + 5
  523.   IF nResource = 7114
  524.     nRow -= 40
  525.     nCol := nSaveCol
  526.   ENDIF
  527.   oBitmap:draw( oPresSpace, aTarget, aSource, , GRA_BLT_BBO_IGNORE )
  528.   oBitmap:destroy()
  529. NEXT
  530.  
  531. RETURN nil
  532. *** END OF EXAMPLE ***
  533.  
  534. /* ---------------------------- */
  535.  
  536. STATIC FUNCTION XSample_77()
  537.  
  538. /*
  539. Scrolling the Static area of a Window
  540. */
  541.  
  542. LOCAL GetList := {}, oStatic1, oStatic2, oStatic3, nVertOffset := 0, ;
  543.       nHorizOffset := 0, nVert, nHoriz, i, j, oVertScroll, oHorizScroll, ;
  544.       lStartUp, GetOptions
  545.  
  546. @ 0,0 DCSTATIC TYPE XBPSTATIC_TYPE_RECESSEDBOX SIZE 60,20 ;
  547.    OBJECT oStatic1
  548.  
  549. @ .1,.5 DCSTATIC TYPE XBPSTATIC_TYPE_TEXT SIZE 59,19.8 ;
  550.    OBJECT oStatic2 PARENT oStatic1
  551.  
  552. @ 1,2 DCSTATIC TYPE XBPSTATIC_TYPE_TEXT SIZE 200,300 ;
  553.    OBJECT oStatic3 PARENT oStatic2
  554.  
  555. FOR i := 1 TO 100 STEP 3
  556.    @ i-1.5, 1 DCGRASTRING 'This is row ' + Alltrim(Str(i)) COLOR i%16 ;
  557.       FONT '14.Arial Bold' PARENT oStatic3
  558.    FOR j := 10 TO 200  STEP 25
  559.       @ i,j DCPUSHBUTTON CAPTION Alltrim(Str(i)) + ' - ' + Alltrim(Str(j)) ;
  560.          SIZE 15,1.2 ACTION {||MsgBox('testing')} PARENT oStatic3
  561.    NEXT
  562. NEXT
  563.  
  564. @ 0,60 DCSCROLLBAR DATA nVertOffset SIZE 3,20 ;
  565.        TYPE XBPSCROLL_VERTICAL RANGE 0,2000 ;
  566.        AUTOTRACK ;
  567.        OBJECT oVertScroll ;
  568.        SCROLL { |mp1,x,o| _XSample77_2(mp1,o,oStatic2,oStatic3,nVert,@nVertOffset,2) }
  569.  
  570. @ 20,0 DCSCROLLBAR DATA nHorizOffset SIZE 60,1 ;
  571.        TYPE XBPSCROLL_HORIZONTAL RANGE 0,1000 ;
  572.        AUTOTRACK ;
  573.        OBJECT oHorizScroll ;
  574.        SCROLL { |mp1,x,o| _XSample77_2(mp1,o,oStatic2,oStatic3,nHoriz,@nHorizOffset,1) }
  575.  
  576. lStartUp := .t.
  577. DCGETOPTIONS NOMINBUTTON
  578. DCREAD GUI FIT ADDBUTTONS ;
  579.    OPTIONS GetOptions ;
  580.    MODAL ;
  581.    TITLE 'Example of a Resizable, Scrollable Static Area' ;
  582.    EVAL {|o|nVert:=oStatic3:currentPos()[2], ;
  583.             nHoriz:=oStatic3:currentPos()[1], ;
  584.             o:reSize := {|a,b,x|_XSample77_1(a,b,x,oStatic1,oStatic2,oStatic3, ;
  585.                                          oHorizScroll, oVertScroll, @lStartUp )} }
  586.  
  587. RETURN nil
  588.  
  589. * --------------------------
  590.  
  591. STATIC FUNCTION _XSample77_1( aOldSize, aNewSize, oDlg, oStatic1, oStatic2, oStatic3, ;
  592.                               oHorizScroll, oVertScroll, lStartUp )
  593.  
  594. LOCAL nWidth  := aNewSize[1] - aOldSize[1]
  595. LOCAL nHeight := aNewSize[2] - aOldSize[2]
  596. IF lStartUp
  597.   lStartUp := .f.
  598.   RETURN nil
  599. ENDIF
  600. oStatic1:setSize( {oStatic1:currentSize()[1]+nWidth,oStatic1:currentSize()[2]+nHeight} )
  601. oStatic2:setSize( {oStatic2:currentSize()[1]+nWidth,oStatic2:currentSize()[2]+nHeight} )
  602. oStatic3:setSize( {oStatic3:currentSize()[1]+nWidth,oStatic3:currentSize()[2]+nHeight} )
  603. oHorizScroll:setSize( {oHorizScroll:currentSize()[1]+nWidth,oHorizScroll:currentSize()[2]} )
  604. oVertScroll:setSize( {oVertScroll:currentSize()[1],oVertScroll:currentSize()[2]+nHeight} )
  605. oVertScroll:setPos( {oVertScroll:currentPos()[1]+nWidth,oVertScroll:currentPos()[2]} )
  606.  
  607. RETURN nil
  608.  
  609. * --------------------------
  610.  
  611. STATIC FUNCTION _XSample77_2( a, oScroll, oStatic2, oStatic3, nStart, nOffset, nScroll )
  612.  
  613. LOCAL nEvent, mp1, mp2, oXbp
  614.  
  615. nEvent := DC_NextAppEvent(@mp1,@mp2,@oXbp)
  616. IF nEvent = xbeSB_Scroll
  617.   RETURN nil
  618. ENDIF
  619.  
  620. IF a[2] == XBPSB_NEXTPAGE
  621.   nOffset += oStatic2:currentSize()[nScroll]
  622.   oScroll:setData()
  623. ELSEIF a[2] == XBPSB_PREVPAGE
  624.   nOffset -= oStatic2:currentSize()[nScroll]
  625.   oScroll:setData()
  626. ELSE
  627.   nOffset := a[1]
  628. ENDIF
  629. IF nScroll = 2
  630.   oStatic3:setPos({oStatic3:currentPos()[1],nStart+nOffset})
  631. ELSE
  632.   oStatic3:setPos({nStart-nOffset,oStatic3:currentPos()[2]})
  633. ENDIF
  634.  
  635. RETURN nil
  636. *** END OF EXAMPLE ***
  637.  
  638.  
  639. /* ---------------------------- */
  640.  
  641. STATIC FUNCTION XSample_78()
  642.  
  643. /*
  644. Displaying a Report using DCGRA* commands in a scrollable Window
  645. */
  646.  
  647. LOCAL GetList := {}, oStatic1, oStatic2, oStatic3, nVertOffset := 0, ;
  648.       nHorizOffset := 0, nVert, nHoriz, i, j, oVertScroll, oHorizScroll, ;
  649.       nScrollRange, lStartUp, GetOptions, nEvent, mp1, mp2, oXbp, ;
  650.       oDialog
  651.  
  652. IF !File('..\XDOC\EXPRESS.DBF')
  653.   DC_MsgBox({'Sorry.  The database required to show this feature',;
  654.              'is not included in the demonstration version', ;
  655.              'or the ..\XDOC\EXPRESS.DBF file does not exist'})
  656.   RETURN nil
  657. ENDIF
  658.  
  659. SET DEFA TO ..\XDOC
  660. USE EXPRESS VIA FOXCDX EXCLUSIVE ALIAS 'XDOC'
  661. SET INDEX TO EXPRESS.CDX
  662. OrdSetFocus('MODULE')
  663. SET DEFA TO
  664.  
  665. @ 0,0 DCSTATIC TYPE XBPSTATIC_TYPE_RECESSEDBOX SIZE 60,20 ;
  666.    OBJECT oStatic1
  667.  
  668. @ .1,.5 DCSTATIC TYPE XBPSTATIC_TYPE_TEXT SIZE 59,19.8 ;
  669.    OBJECT oStatic2 PARENT oStatic1
  670.  
  671. @ 1,2 DCSTATIC TYPE XBPSTATIC_TYPE_TEXT SIZE 200,300 ;
  672.    OBJECT oStatic3 PARENT oStatic2 COLOR GRA_CLR_WHITE, GRA_CLR_WHITE
  673.  
  674. i := 1
  675. DC_SetScope(0,'FUNCTION')
  676. DC_SetScope(1,'FUNCTION')
  677. DC_DbGoTop()
  678. @ 1,1 DCGRASTRING 'GUI Function List (Module FUNCGUI)' ;
  679.    COLOR GRA_CLR_RED, GRA_CLR_BLACK ;
  680.    FONT '16.Arial Bold' PARENT oStatic3
  681. i += 2
  682. nScrollRange := 0
  683. DO WHILE !DC_Eof()
  684.    @ i,1 DCGRASTRING 'Function: ' COLOR GRA_CLR_BLUE ;
  685.       PARENT oStatic3 FONT '12.Courier New'
  686.    @ i,18 DCGRASTRING XDOC->command PARENT oStatic3 ;
  687.       FONT '12.Courier New Bold' COLOR GRA_CLR_YELLOW
  688.    @ i+1,5 DCGRASTRING XDOC->short PARENT oStatic3 ;
  689.       COLOR GRA_CLR_DARKPINK FONT '12.Arial'
  690.    i += 2
  691.    DC_DbSkip(1)
  692.    nScrollRange += 40
  693. ENDDO
  694.  
  695. @ 0,60 DCSCROLLBAR DATA nVertOffset SIZE 3,20 ;
  696.        TYPE XBPSCROLL_VERTICAL RANGE 0, nScrollRange ;
  697.        AUTOTRACK ;
  698.        OBJECT oVertScroll ;
  699.        SCROLL { |mp1,x,o| _XSample77_2(mp1,o,oStatic2,oStatic3,nVert,@nVertOffset,2) }
  700.  
  701. @ 20,0 DCSCROLLBAR DATA nHorizOffset SIZE 60,1 ;
  702.        TYPE XBPSCROLL_HORIZONTAL RANGE 0, 1000 ;
  703.        AUTOTRACK ;
  704.        OBJECT oHorizScroll ;
  705.        SCROLL { |mp1,x,o| _XSample77_2(mp1,o,oStatic2,oStatic3,nHoriz,@nHorizOffset,1) }
  706.  
  707. lStartUp := .t.
  708.  
  709. DCGETOPTIONS NOMINBUTTON AUTORESIZE
  710.  
  711. DCREAD GUI FIT ADDBUTTONS ;
  712.    MODAL ;
  713.    OPTIONS GetOptions ;
  714.    TITLE 'Example of a Scrollable Screen Report' ;
  715.    EVAL {|o|nVert:=oStatic3:currentPos()[2], ;
  716.             nHoriz:=oStatic3:currentPos()[1]}
  717.  
  718. RETURN nil
  719. *** END OF EXAMPLE ***
  720.  
  721. * ------------------------------
  722.  
  723. STATIC FUNCTION XSample_79()
  724. /*
  725. This is an example of a Hybrid of standard GETS and DCPUSHBUTTONs.
  726. By default DC* commands work with a variable named GetList which
  727. conflicts with text-based GETS.  The DC* GetList can be defined
  728. as any other variable by using #DEFINE DCGUI_GETLIST
  729. */
  730.  
  731. #define DCGUI_GETLIST  aMyGuiGetList  // ignore compiler warning
  732.  
  733. LOCAL cName, cCompany, cAddress, cState, cZip, cPhone, aMyGuiGetList := {}, ;
  734.       oCrt, oOldAppWindow, getList := {}
  735.  
  736. oCrt := XbpCrt():New ( AppDeskTop(), NIL, { 0, 0 }, 25, 80 )
  737. oCrt:FontWidth  := 8
  738. oCrt:FontHeight := 16
  739. oCrt:title := 'Hybrid example, Standards Gets and GUI buttons'
  740. oCrt:create()
  741. oCrt:presSpace()
  742. oCrt:maximize()
  743. oCrt:show()
  744. oOldAppWindow := SetAppWindow(oCrt)
  745. SET COLOR TO 'N/W,GR+/R,GR+/R,,GR+/R'
  746. CLS
  747. SET CURSOR ON
  748. STORE Space(20) TO cName, cCompany, cAddress, cPhone
  749. STORE Space(10) TO cZip, cState
  750.  
  751. @ 7,10 SAY '    Name' GET cName
  752. @ 8,10 SAY ' Company' GET cCompany
  753. @ 9,10 SAY ' Address' GET cAddress
  754. @10,10 SAY '   State' GET cState
  755. @11,10 SAY '     Zip' GET cZip
  756. @12,10 SAY '   Phone' GET cPhone
  757.  
  758. @ 14,10 DCPUSHBUTTON CAPTION 'Ok' ;
  759.   ACTION {||ReadKill(.t.)} ;
  760.   SIZE 10,2 PARENT oCrt
  761.  
  762. @ 14,22 DCPUSHBUTTON CAPTION 'Cancel' ;
  763.   ACTION {||_Keyboard(Chr(K_ESC))} ;
  764.   SIZE 10,2 PARENT oCrt
  765.  
  766. DCREAD GUI EXIT SAVE PARENT oCrt
  767. READ
  768.  
  769. oCrt:Destroy()
  770. DC_GetDestroy(aMyGuiGetList)
  771. SetAppWindow(oOldAppWindow)
  772.  
  773. #define DCGUI_GETLIST GetList // ignore compiler warning
  774.  
  775. RETURN nil
  776. *** END OF EXAMPLE ***
  777.  
  778. * ------------------------------
  779.  
  780. STATIC FUNCTION XSample_80()
  781.  
  782. /*
  783. This is an example of a hybrid application
  784. */
  785.  
  786. LOCAL GetList := {}, oCrt, oAppWindow := SetAppWindow()
  787.  
  788. // Create XbpCRT object
  789. oCrt := XbpCrt():New ( AppDeskTop(), NIL, {0,0}, 25, 80 )
  790. oCrt:FontWidth  := 8
  791. oCrt:FontHeight := 16
  792. oCrt:FontName   := 'Alaska Crt'
  793. oCrt:tasklist   := .T.
  794. oCrt:title      := 'Test Hybrid Application'
  795. oCrt:create()
  796. oCrt:presSpace()
  797. SetAppWindow(oCrt)
  798.  
  799. CLS
  800.  
  801. @ 2,10 SAY 'This is an example of a hybrid application that imbeds'
  802. @ 3,10 SAY 'a hybrid Menu into the Application window.'
  803.  
  804. @ 5,10 SAY 'The subroutines called by the hybrid menu will also be'
  805. @ 6,10 SAY 'imbedded in the Application window.'
  806.  
  807. @ 8,10 SAY 'Press any key to continue...'
  808. Inkey(0)
  809.  
  810. BEGIN SEQUENCE
  811.  
  812. IF !File('..\XDOC\EXPRESS.DBF')
  813.   DC_Gui(.f.)
  814.   DC_MsgBox({'Sorry.  The database required to show this feature',;
  815.              'is not included in the demonstration version', ;
  816.              'or the ..\XDOC\EXPRESS.DBF file does not exist'})
  817.   BREAK
  818. ENDIF
  819.  
  820. SET DEFA TO ..\XDOC
  821. USE EXPRESS VIA FOXCDX EXCLUSIVE ALIAS 'XDOC'
  822. SET INDEX TO EXPRESS.CDX
  823. OrdSetFocus('COMMAND')
  824. SET DEFA TO
  825.  
  826. _XSample_80()  // Load Menu
  827.  
  828. END SEQUENCE
  829.  
  830. SetAppWindow(oAppWindow)
  831. oCrt:Destroy()
  832.  
  833. RETURN nil
  834.  
  835. * ------------------------
  836.  
  837. STATIC FUNCTION _XSample_80()
  838.  
  839. LOCAL GetList := {}
  840. LOCAL oOldWindow := SetAppFocus()
  841. LOCAL oAppWindow := SetAppWindow()
  842. LOCAL nHeight := oAppWindow:currentSize()[2]
  843. LOCAL nWidth := oAppWindow:currentSize()[1]
  844. LOCAL cAlias := Alias()
  845. LOCAL nChoice, oStatic, GetOptions
  846.  
  847. @ 15,15 DCSTATIC TYPE XBPSTATIC_TYPE_RECESSEDBOX ;
  848.   OBJECT oStatic SIZE nWidth - 30, nHeight - 40 PIXEL
  849.  
  850. @ 0,0 TO 20, nWidth DCGRABOX FILL 1 ;
  851.   COLOR GRA_CLR_DARKGRAY PIXEL PARENT oStatic
  852.  
  853. @ nHeight-40-20,0 TO nHeight-40, nWidth DCGRABOX FILL 1 ;
  854.   COLOR GRA_CLR_DARKGRAY PIXEL PARENT oStatic
  855.  
  856. @ 3, 35 DCGRASTRING 'Main Menu' FONT '14.Arial Bold' COLOR GRA_CLR_RED ;
  857.   PARENT oStatic
  858.  
  859. @ 5,20 DCPUSHBUTTON CAPTION '~Browse the Database' SIZE 50,1.4 ;
  860.   ACTION {||nChoice:=1,DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)} ;
  861.   TOOLTIP 'Browse the XDOC Database' ;
  862.   FONT '10.Alaska Crt' ;
  863.   PARENT oStatic ;
  864.   ACCELKEY xbeK_ALT_B ;
  865.   TABSTOP
  866.  
  867. @ 7.2,20 DCPUSHBUTTON CAPTION '~Edit the Database' SIZE 50,1.4 ;
  868.   ACTION {||nChoice:=2,DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)} ;
  869.   TOOLTIP 'Edit the XDOC Database' ;
  870.   FONT '10.Alaska Crt' ;
  871.   PARENT oStatic ;
  872.   ACCELKEY xbeK_ALT_E ;
  873.   TABSTOP
  874.  
  875. @ 9.4,20 DCPUSHBUTTON CAPTION '~Print the Database' SIZE 50,1.4 ;
  876.   ACTION {||nChoice:=3,DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)} ;
  877.   TOOLTIP 'Print the XDOC Database Report' ;
  878.   FONT '10.Alaska Crt' ;
  879.   PARENT oStatic ;
  880.   ACCELKEY xbeK_ALT_P ;
  881.   TABSTOP
  882.  
  883. @11.6,20 DCPUSHBUTTON CAPTION '~Copy the Database' SIZE 50,1.4 ;
  884.   ACTION {||nChoice:=4,DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)} ;
  885.   TOOLTIP 'Copy the XDOC Database to another Directory' ;
  886.   FONT '10.Alaska Crt' ;
  887.   PARENT oStatic ;
  888.   ACCELKEY xbeK_ALT_C ;
  889.   TABSTOP
  890.  
  891. @13.8,20 DCPUSHBUTTON CAPTION 'e~Xit this Program' SIZE 50,1.4 ;
  892.   ACTION {||nChoice:=0,DC_ReadGuiEvent(DCGUI_EXIT_ABORT,GetList)} ;
  893.   TOOLTIP 'Exit the Program' ;
  894.   FONT '10.Alaska Crt' ;
  895.   PARENT oStatic ;
  896.   ACCELKEY xbeK_ALT_X ;
  897.   TABSTOP
  898.  
  899. DCGETOPTIONS ;
  900.   NOTITLEBAR ;
  901.   HIDE
  902.  
  903. nChoice := 1
  904.  
  905. DO WHILE nChoice > 0
  906.  
  907.   DCREAD GUI FIT SAVE ;
  908.     SETFOCUS oStatic ;
  909.     OPTIONS GetOptions ;
  910.     EVAL {|o|o:setParent(oAppWindow), ;
  911.              DC_CenterObject(o), ;
  912.              o:Show() }
  913.  
  914.     DO CASE
  915.  
  916.       CASE nChoice = 1
  917.          _XSample_80_1() // Browse
  918.  
  919.       CASE nChoice = 2   // Edit
  920.         CLS
  921.         @ 10,10 SAY 'This is the EDIT screen'
  922.         @ 12,10 SAY 'Press any key to continue...'
  923.         Inkey(0)
  924.  
  925.       CASE nChoice = 3   //  Print
  926.         CLS
  927.         @ 10,10 SAY 'This is the PRINT screen'
  928.         @ 12,10 SAY 'Press any key to continue...'
  929.         Inkey(0)
  930.  
  931.       CASE nChoice = 4   // Copy
  932.         CLS
  933.         @ 10,10 SAY 'This is the COPY screen'
  934.         @ 12,10 SAY 'Press any key to continue...'
  935.         Inkey(0)
  936.  
  937.     ENDCASE
  938.  
  939. ENDDO
  940.  
  941. RETURN nil
  942.  
  943. * ---------------------
  944.  
  945. STATIC FUNCTION _XSample_80_1()
  946.  
  947. LOCAL GetList := {}, GetOptions, oStatic, lOk
  948. LOCAL oOldWindow := SetAppFocus()
  949. LOCAL oAppWindow := SetAppWindow()
  950. LOCAL cOldTitle := oAppWindow:getTitle()
  951. LOCAL nHeight := oAppWindow:currentSize()[2]
  952. LOCAL nWidth := oAppWindow:currentSize()[1]
  953. LOCAL cAlias := Alias()
  954. LOCAL oBrowse, aBrowPres
  955.  
  956. aBrowPres := ;
  957.   { { XBP_PP_COL_HA_FGCLR, GRA_CLR_WHITE },    /*  Header FG Color  */     ;
  958.     { XBP_PP_COL_HA_BGCLR, GRA_CLR_DARKGRAY }, /*  Header BG Color  */     ;
  959.     { XBP_PP_COL_DA_ROWSEPARATOR, XBPCOL_SEP_DOTTED }, /* Row Sep  */      ;
  960.     { XBP_PP_COL_DA_COLSEPARATOR, XBPCOL_SEP_DOTTED }, /* Col Sep  */      ;
  961.     { XBP_PP_COL_DA_FGCLR, GRA_CLR_BLACK },       /* Row FG Color  */      ;
  962.     { XBP_PP_COL_DA_BGCLR, GRA_CLR_WHITE }        /* Row BG Color  */      ;
  963.     }
  964.  
  965. @ 15,15 DCSTATIC TYPE XBPSTATIC_TYPE_RECESSEDBOX ;
  966.   OBJECT oStatic SIZE nWidth - 30, nHeight - 40 PIXEL
  967.  
  968. @ 1,5 DCBROWSE oBrowse SIZE 80,15 ALIAS cAlias ;
  969.       PRESENTATION aBrowPres PARENT oStatic
  970.  
  971. DCBROWSECOL FIELD XDOC->command PARENT oBrowse HEADER 'Command'
  972. DCBROWSECOL FIELD XDOC->short PARENT oBrowse HEADER 'Short Description'
  973. DCBROWSECOL FIELD XDOC->module PARENT oBrowse HEADER 'Module'
  974. DCBROWSECOL FIELD XDOC->type PARENT oBrowse HEADER 'Type'
  975. DCBROWSECOL FIELD XDOC->category PARENT oBrowse HEADER 'Category'
  976.  
  977. @ 17,5 DCPUSHBUTTON CAPTION 'e~Xit' SIZE 9,1.2 ;
  978.    ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)} ;
  979.    ACCELKEY xbeK_ALT_X  PARENT oStatic
  980.  
  981. DCGETOPTIONS ;
  982.       NORESIZE ;
  983.       NOTITLEBAR ;
  984.       HIDE ;
  985.       WINDOWHEIGHT nHeight + 10 ;
  986.       WINDOWWIDTH nWidth + 10
  987.  
  988. DCREAD GUI ;
  989.       OPTIONS GetOptions ;
  990.       TO lOk ;
  991.       EVAL {|o|SetAppFocus(oBrowse:GetColumn(1)), ;
  992.                o:setParent(oAppWindow), ;
  993.                o:setPos({-5,-5}), ;
  994.                oBrowse:show(), ;
  995.                o:show() }
  996.  
  997. oAppWindow:setTitle(cOldTitle)
  998.  
  999. RETURN lOk
  1000. *** END OF EXAMPLE ***
  1001.  
  1002. * ------------------------------
  1003.  
  1004. STATIC FUNCTION XSample_81()
  1005.  
  1006. /*
  1007. This example uses the DCGUI_ROW and DCGUI_COL manifest constants to
  1008. emulate Row() and Col() in text mode screens.
  1009. */
  1010.  
  1011. LOCAL GetList := {}, aGets1[5], aGets2[5], i
  1012.  
  1013. AFILL(aGets1,Space(8))
  1014. AFILL(aGets2,Space(15))
  1015.  
  1016. @ 1,1 DCSAY ''
  1017. FOR i := 1 TO Len(aGets1)
  1018.   @ _Row(), _Col() DCSAY 'Get ' + Alltrim(Str(i)) GET aGets1[i] SAYRIGHT
  1019. NEXT
  1020.  
  1021. @ 3,1 DCSAY ''
  1022. FOR i := 1 TO Len(aGets2)
  1023.   @ DCGUI_ROW, DCGUI_COL DCGET aGets2[i]
  1024. NEXT
  1025.  
  1026. DCREAD GUI FIT ADDBUTTONS TITLE 'Row() and Col() emulation'
  1027.  
  1028. RETURN nil
  1029.  
  1030. * ---------------------
  1031.  
  1032. STATIC FUNCTION _Row()
  1033.  
  1034. RETURN DCGUI_ROW
  1035.  
  1036. * ---------------------
  1037.  
  1038. STATIC FUNCTION _Col()
  1039.  
  1040. RETURN DCGUI_COL + 10
  1041.  
  1042. *** END OF EXAMPLE ***
  1043.  
  1044. * ------------------------------
  1045.  
  1046. STATIC FUNCTION XSample_82()
  1047. /*
  1048. This is an example of using the COMBO clause of DCGET to create
  1049. a combo-box replacement for both a database and an array
  1050. picklist.
  1051. */
  1052.  
  1053. LOCAL GetList := {}, cCommand := Space(25), cFileName := Space(12), ;
  1054.       aDirectory := Directory('*.*'), GetOptions, aCaption
  1055.  
  1056. IF !File('..\XDOC\EXPRESS.DBF')
  1057.   DC_MsgBox({'Sorry.  The database required to show this feature',;
  1058.              'is not included in the demonstration version', ;
  1059.              'or the ..\XDOC\EXPRESS.DBF file does not exist'})
  1060.   RETURN nil
  1061. ENDIF
  1062.  
  1063. SET DEFA TO ..\XDOC
  1064. USE EXPRESS VIA FOXCDX EXCLUSIVE ALIAS 'XDOC'
  1065. SET INDEX TO EXPRESS.CDX
  1066. OrdSetFocus('COMMAND')
  1067. SET DEFA TO
  1068.  
  1069. aCaption := DC_GETPOPUPCAPTION( { '10.Marlett', 'u', 1 } ) // down arrow , imbedded
  1070.  
  1071. @ 1,1 DCSAY 'Command'
  1072. @ 2,1 DCGET cCommand ;
  1073.       COMBO HEIGHT 7 DATA 'XDOC' FIELD {||XDOC->command} ;
  1074.       HELPCODE 'dc_readgui()'
  1075.  
  1076. @ 1,38 DCSAY 'File Name'
  1077. @ 2,38 DCGET cFileName COMBO HEIGHT 7 DATA aDirectory ELEMENT 1
  1078.  
  1079. @ 10,1 DCSAY ''
  1080.  
  1081. DCGETOPTIONS HELPFILE '\EXPRESS\DOC\EXPRESS.HLP'
  1082.  
  1083. DCREAD GUI FIT ADDBUTTONS TITLE 'Get with COMBO clause' ;
  1084.    OPTIONS GetOptions
  1085.  
  1086. DC_GetPopupCaption(aCaption)
  1087.  
  1088. RETURN nil
  1089. *** END OF EXAMPLE ***
  1090.  
  1091. * ------------------------------
  1092.  
  1093. STATIC FUNCTION XSample_83()
  1094.  
  1095. /*
  1096. This is an example of using the GRAPHICS clause of  DCPUSHBUTTON
  1097. and DCGRA* commands to create Pushbuttons with graphics and
  1098. multiple lines of text.
  1099. */
  1100.  
  1101. LOCAL GetList := {}, oButton1, oButton2, oStatic
  1102.  
  1103. @ 1,1 DCPUSHBUTTON PIXEL ;
  1104.    SIZE 300,200 OBJECT oButton1 GRAPHICS ;
  1105.    ACTION {||DC_MsgBox('I been Pushed!'), ;
  1106.              oButton1:invalidateRect(), ;
  1107.              oButton2:invalidateRect()}
  1108.  
  1109. @ 4,4 TO 50,296 DCGRABOX PIXEL COLOR GRA_CLR_YELLOW FILL 1 PARENT oButton1
  1110.  
  1111. @ 150,4 TO 196,296 DCGRABOX PIXEL COLOR GRA_CLR_YELLOW FILL 1 PARENT oButton1
  1112.  
  1113. @ 80,50 DCGRASTRING {'Please Push Me!','I like it!'} ;
  1114.    PIXEL PARENT oButton1 COLOR GRA_CLR_RED ;
  1115.    FONT '18.Arial Bold'
  1116.  
  1117. @ 210,1 DCPUSHBUTTON PIXEL ;
  1118.    SIZE 300,200 OBJECT oButton2 GRAPHICS ;
  1119.    ACTION {||DC_MsgBox('I been Pushed Too!'), ;
  1120.              oButton1:invalidateRect(), ;
  1121.              oButton2:invalidateRect()}
  1122.  
  1123. @ 4,4 TO 50,296 DCGRABOX PIXEL COLOR GRA_CLR_GREEN FILL 1 PARENT oButton2
  1124.  
  1125. @ 150,4 TO 196,296 DCGRABOX PIXEL COLOR GRA_CLR_GREEN FILL 1 PARENT oButton2
  1126.  
  1127. @ 90,20 DCGRASTRING 'Please Push Me Too!' ;
  1128.    PIXEL PARENT oButton2 COLOR GRA_CLR_BLUE ;
  1129.    FONT '18.Arial Bold'
  1130.  
  1131. DCREAD GUI FIT ADDBUTTONS TITLE 'Push-Buttons with Graphics' ;
  1132.    EVAL {|o|SetAppWindow(o)}
  1133.  
  1134. RETURN nil
  1135. *** END OF EXAMPLE ***
  1136.  
  1137. * ------------------------------
  1138.  
  1139. STATIC FUNCTION XSample_84()
  1140.  
  1141. /*
  1142. This is an example of using the HELPCODE clause of  DC*
  1143. commands to create a context-specific link to a Windows
  1144. Help file.  The first 4 gets have a context-specific link.
  1145. The last get has no context specific link.  Pressing F1
  1146. when none of the first 4 gets has focus will cause the
  1147. general link (GETTING STARTED) to be invoked.
  1148. */
  1149.  
  1150. LOCAL GetList := {}, cCommand := Space(20), GetOptions, cHelpTip, bHelpBlock
  1151.  
  1152. cHelpTip := 'For HELP, Click here, then press F1;' + ;
  1153.             '  - OR - ; ' + ;
  1154.             'Double-Click the Left Mouse Button' ;
  1155.  
  1156. bHelpBlock := {|o|o:lbDblClick := {|a,b,o|PostAppEvent(xbeP_HelpRequest,a,b,o)} }
  1157.  
  1158. @ 1,1 DCSAY 'dc_readgui()' GET cCommand HELPCODE 'dc_readgui()' ;
  1159.   GETTOOLTIP cHelpTip GETEVAL bHelpBlock ;
  1160.   MESSAGE 'Press F1 for Context Help (dc_readgui())'
  1161.  
  1162. @ 3,1 DCSAY 'dc_printer()' GET cCommand HELPCODE 'dc_printer()' ;
  1163.   GETTOOLTIP cHelpTip GETEVAL bHelpBlock ;
  1164.   MESSAGE 'Press F1 for Context Help (dc_printer())'
  1165.  
  1166. @ 5,1 DCSAY '   dc_expl()' GET cCommand HELPCODE 'dc_expl()' ;
  1167.   GETTOOLTIP cHelpTip GETEVAL bHelpBlock ;
  1168.   MESSAGE 'Press F1 for Context Help (dc_expl())'
  1169.  
  1170. @ 7,1 DCSAY 'DCGETOPTIONS' GET cCommand HELPCODE 'DCGETOPTIONS' ;
  1171.   GETTOOLTIP cHelpTip GETEVAL bHelpBlock ;
  1172.   MESSAGE 'Press F1 for Context Help (DCGETOPTIONS)'
  1173.  
  1174. @ 9,1 DCSAY 'NON-CONTEXT' GET cCommand ;
  1175.   GETTOOLTIP cHelpTip GETEVAL bHelpBlock ;
  1176.   MESSAGE 'Press F1 for General Help (Getting Started)'
  1177.  
  1178. @11,1 DCMESSAGEBOX SIZE 60,1.5 COLOR GRA_CLR_BLUE, GRA_CLR_WHITE ;
  1179.    FONT '10,Arial Bold'
  1180.  
  1181. DCGETOPTIONS HELPFILE '\EXPRESS\DOC\EXPRESS.HLP' ;
  1182.    SAYRIGHTJUST ;
  1183.    SAYWIDTH 120 ;
  1184.    HELPCODE 'GETTINGSTARTED'
  1185.  
  1186. DCREAD GUI FIT ADDBUTTONS OPTIONS GetOptions ;
  1187.    TITLE 'Help Link Demonstration (Press F1)'
  1188.  
  1189. RETURN nil
  1190. *** END OF EXAMPLE ***
  1191.  
  1192. * --------------------
  1193.  
  1194. STATIC FUNCTION XSample_85( lSaveGets, lSaveGetList )
  1195.  
  1196. /*
  1197. This example shows how to squeeze a lot of Gets into a dialog.
  1198. It uses the ROWPIXELS and COLPIXELS clause and DCGRASTRING
  1199. instead of DCSAY for better performance and lower utilization
  1200. of resources.
  1201. */
  1202.  
  1203. LOCAL GetList := {}, GetOptions, aGets[80], i, j, n, ;
  1204.       oWait := DC_WaitOn(), aGetsRead, lBuildGets := .t.
  1205.  
  1206. DEFAULT lSaveGets := .f., lSaveGetList := .f.
  1207.  
  1208. IF lSaveGets
  1209.  
  1210.   @ -4,0 DCSAY ;
  1211.      'Enter data into various GETS then click on SAVE GETS.      '
  1212.   @ -3,0 DCSAY ;
  1213.         'Change the data in the GETS then Click on REST GETS.       '
  1214.  
  1215.   @ -1,30 DCPUSHBUTTON CAPTION '~Save Gets' ;
  1216.      SIZE 14,2 ;
  1217.      ACTION {|| MemoWrit('AGETS.VAR',Var2Bin(aGets)) }
  1218.  
  1219.   @ -1,45 DCPUSHBUTTON CAPTION '~Rest Gets' ;
  1220.      SIZE 14,2 ;
  1221.      ACTION {||aGetsRead := Bin2Var(MemoRead('AGETS.VAR')), ;
  1222.                AEval(aGetsRead,{|x,i|aGets[i]:=x}), ;
  1223.                DC_GetRefresh(GetList) }
  1224.  
  1225. ENDIF
  1226.  
  1227. IF lSaveGetList
  1228.  
  1229.   IF File('GETLIST.VAR')
  1230.  
  1231.     GetList := Bin2Var(MemoRead('GETLIST.VAR'))
  1232.     FOR i := 1 TO 80
  1233.        aGets[i] := i
  1234.     NEXT
  1235.     lBuildGets := .f.
  1236.  
  1237.   ELSE
  1238.  
  1239.     @ -5,0 DCSAY ;
  1240.        'Click on SAVE GETLIST to save the GetList Array to Disk.      '
  1241.     @ -4,0 DCSAY ;
  1242.        'Exit this dialog and Start it again to load Getlist from Disk.           '
  1243.  
  1244.     @ -1,30 DCPUSHBUTTON CAPTION '~Save GetList' ;
  1245.        SIZE 14,2 ;
  1246.        ACTION {|| MemoWrit('GETLIST.VAR',Var2Bin(GetList)), ;
  1247.                   DC_MsgBox({'Getlist saved to GETLIST.VAR', ;
  1248.                              'Now exit this dialog and come back in again.'}) }
  1249.   ENDIF
  1250.  
  1251. ENDIF
  1252.  
  1253. IF lBuildGets
  1254.  
  1255.   @ -1,0 DCPUSHBUTTON CAPTION '~Ok' ;
  1256.      SIZE 14,2 ;
  1257.      ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}
  1258.  
  1259.   @ -1,15 DCPUSHBUTTON CAPTION '~Cancel' ;
  1260.      SIZE 14,2 ;
  1261.      ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_ABORT,GetList)}
  1262.  
  1263.   n := 0
  1264.   FOR i := 1 TO 20
  1265.  
  1266.      FOR j := 1 TO 4
  1267.  
  1268.       n++
  1269.       aGets[n] := n
  1270.  
  1271.       @ i,((j-1)*25+2) DCGRASTRING 'Row ' + Alltrim(Str(i)) + ' Col ' + Alltrim(Str(j)) ;
  1272.         FONT '7.Helv' SIZE 12
  1273.  
  1274.       @ i+.4,((j-1)*25+13) DCGET aGets[n] ;
  1275.          GETFONT '8.Terminal' ;
  1276.          GETSIZE 6,.7 ;
  1277.          PICTURE '9999' ;
  1278.          TABSTOP
  1279.  
  1280.      NEXT
  1281.  
  1282.   NEXT
  1283.  
  1284. ENDIF
  1285.  
  1286. DCGETOPTIONS ;
  1287.    ROWPIXELS 9 ;
  1288.    COLPIXELS 5 ;
  1289.    HILITEGETS GRA_CLR_GREEN
  1290.  
  1291. DCREAD GUI ;
  1292.    FIT ;
  1293.    OPTIONS GetOptions ;
  1294.    TITLE 'Small Gets' ;
  1295.    EVAL {|o|DC_Impl(oWait), ;
  1296.             SetAppWindow(o),;
  1297.      IIF(!lBuildGets,DC_MsgBox('GetList restored from GETLIST.VAR'),nil)}
  1298.  
  1299. RETURN aGets
  1300. *** END OF EXAMPLE ***
  1301.  
  1302.  
  1303. * --------------------
  1304.  
  1305. STATIC FUNCTION XSample_86()
  1306.  
  1307. /*
  1308. This example shows how to Save and Restore an array of Gets
  1309. using Var2Bin() and Bin2Var.
  1310. */
  1311.  
  1312. RETURN XSample_85(.t.,.f.)  // Small Gets
  1313. *** END OF EXAMPLE ***
  1314.  
  1315.  
  1316. * --------------------
  1317.  
  1318. STATIC FUNCTION XSample_87()
  1319.  
  1320. /*
  1321. This example shows how to Save and Restore the GetList
  1322. using Var2Bin() and Bin2Var.
  1323. */
  1324.  
  1325. RETURN XSample_85(.f.,.t.)  // Small Gets
  1326. *** END OF EXAMPLE ***
  1327.  
  1328.  
  1329. * --------------------
  1330.  
  1331. STATIC FUNCTION XSample_88()
  1332.  
  1333. /*
  1334. This example shows how to save the Getlist, GetOptions and
  1335. application data using design mode.
  1336. */
  1337.  
  1338. LOCAL GetList := {}, GetOptions, aGets[10], lBuildGets := .t., aApp, ;
  1339.       oStatic
  1340.  
  1341. IF File('APP1.VAR')
  1342.  
  1343.   aApp := Bin2Var(MemoRead('APP1.VAR'))
  1344.   GetList    := aApp[1]
  1345.   GetOptions := aApp[2]
  1346.   aGets      := aApp[3]
  1347.   lBuildGets := .f.
  1348.  
  1349. ENDIF
  1350.  
  1351. IF lBuildGets
  1352.  
  1353.   AFill(aGets,Space(20))
  1354.  
  1355.   @ 1,1 DCSTATIC TYPE XBPSTATIC_TYPE_RECESSEDBOX SIZE 80, 20 ;
  1356.     OBJECT oStatic
  1357.  
  1358.   DCHOTKEY xbeK_ALT_D ACTION {||DC_GetDesign(GetList),.t.}
  1359.  
  1360.   @ 1,5 DCSAY ;
  1361.      'Click on "Save Application" to save the Application Arrays to disk.' ;
  1362.      SAYSIZE 55 PARENT oStatic
  1363.  
  1364.   @ 2,5 DCPUSHBUTTON CAPTION '~Ok' ;
  1365.      SIZE 15,1.2  PARENT oStatic ;
  1366.      ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}
  1367.  
  1368.   @ 2,23 DCPUSHBUTTON CAPTION '~Cancel' ;
  1369.      SIZE 15,1.2  PARENT oStatic ;
  1370.      ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_ABORT,GetList)}
  1371.  
  1372.   @ 2,41 DCPUSHBUTTON CAPTION '~Save Application' ;
  1373.      SIZE 15,1.2 PARENT oStatic ;
  1374.      ACTION {|| MemoWrit('APP1.VAR',Var2Bin({GetList,GetOptions,aGets})), ;
  1375.                 DC_MsgBox({'Getlist saved to APP1.VAR', ;
  1376.                            'Now exit this dialog and come back in again.'}) }
  1377.  
  1378.   @ 4,5 DCSAY '   Name' GET aGets[1] PARENT oStatic
  1379.   @ 6,5 DCSAY 'Address' GET aGets[2] PARENT oStatic
  1380.   @ 8,5 DCSAY '   City' GET aGets[3] PARENT oStatic
  1381.   @10,5 DCSAY '  State' GET aGets[4] PARENT oStatic
  1382.   @12,5 DCSAY '    ZIP' GET aGets[5] PARENT oStatic
  1383.   @14,5 DCSAY '  Phone' GET aGets[6] PARENT oStatic
  1384.  
  1385.   @ 4,45 DCSAY 'Memo   ' PARENT oStatic
  1386.   @ 5,45 DCMULTILINE aGets[7] SIZE 30,10 PARENT oStatic
  1387.  
  1388.   DCGETOPTIONS ;
  1389.      HILITEGETS GRA_CLR_YELLOW
  1390.  
  1391. ENDIF
  1392.  
  1393. DCREAD GUI ;
  1394.    MODAL ;
  1395.    _FIT lBuildGets ;
  1396.    OPTIONS GetOptions ;
  1397.    TITLE 'Design Mode, Press Alt-D to Drag Objects' ;
  1398.    EVAL {||IIF(!lBuildGets,DC_MsgBox('GetList restored from APP1.VAR'),nil)}
  1399.  
  1400. RETURN GetList
  1401. *** END OF EXAMPLE ***
  1402.  
  1403.  
  1404. * --------------------
  1405.  
  1406. STATIC FUNCTION XSample_89()
  1407.  
  1408. /*
  1409. This example shows how to use the HANDLER clause of DCREAD GUI
  1410. to control the behavior of a Dialog.
  1411. */
  1412.  
  1413. LOCAL GetList := {}, GetOptions, aApp[2]
  1414.  
  1415. aApp[1] := Date()-100
  1416. aApp[2] := 12345.67
  1417.  
  1418. @ 1,1 DCSAY '  Enter a Date' GET aApp[1] POPUP {|d|DC_PopDate(d)} ;
  1419.       SAYRIGHT
  1420. @ 2,1 DCSAY "Press F2 for Today's Date"
  1421.  
  1422. @ 4,1 DCSAY 'Enter a Number' GET aApp[2] POPUP {|n|DC_PopCalc(n)} ;
  1423.       SAYRIGHT PICT '99999.99'
  1424. @ 5,1 DCSAY 'Press F3 to Clear Entry'
  1425.  
  1426. @ 8,1 DCSAY 'Press F10 to EXIT' SAYSIZE 40 FONT '12.Helv Bold'
  1427.  
  1428. DCREAD GUI FIT ADDBUTTONS MODAL ;
  1429.    HANDLER XSample_89_Handler REFERENCE aApp
  1430.  
  1431. RETURN nil
  1432.  
  1433. /* ------------------------- */
  1434.  
  1435. STATIC FUNCTION ;
  1436.   XSample_89_Handler ( nEvent, mp1, mp2, oXbp, oDialog, GetList, aApp )
  1437.  
  1438. IF nEvent = xbeP_Keyboard .AND. mp1 == xbeK_F2
  1439.   aApp[1] := Date()
  1440.   DC_GetRefresh(GetList)
  1441. ELSEIF nEvent = xbeP_Keyboard .AND. mp1 == xbeK_F3
  1442.   aApp[2] := 0
  1443.   DC_GetRefresh(GetList)
  1444. ELSEIF nEvent = xbeP_Keyboard .AND. mp1 == xbeK_F10
  1445.   RETURN DCGUI_EXIT_OK
  1446. ENDIF
  1447.  
  1448. RETURN DCGUI_NONE
  1449. *** END OF EXAMPLE ***
  1450.  
  1451.  
  1452. * --------------------
  1453.  
  1454. STATIC FUNCTION XSample_90()
  1455.  
  1456. /*
  1457. This example shows how to use the HANDLER clause of DCREAD GUI
  1458. and DCQOUT / DCQQOUT commands for debugging.
  1459. */
  1460.  
  1461. LOCAL GetList := {}, aApp[2]
  1462.  
  1463. aApp[1] := Date()-100
  1464. aApp[2] := 12345.67
  1465.  
  1466. @ 1,1 DCSAY '  Enter a Date' GET aApp[1] POPUP {|d|DC_PopDate(d)} ;
  1467.       SAYRIGHT
  1468.  
  1469. @ 4,1 DCSAY 'Enter a Number' GET aApp[2] POPUP {|n|DC_PopCalc(n)} ;
  1470.       SAYRIGHT PICT '99999.99'
  1471.  
  1472. DCREAD GUI FIT MODAL ADDBUTTONS HANDLER XSample_90_Handler REFERENCE aApp
  1473.  
  1474. RETURN nil
  1475.  
  1476. /* ------------------------- */
  1477.  
  1478. STATIC FUNCTION ;
  1479.   XSample_90_Handler ( nEvent, mp1, mp2, oXbp, oDialog, GetList, aApp )
  1480.  
  1481. IF nEvent # xbeM_Motion
  1482.   DCQOUT DC_AppEventDefine(nEvent), mp1, mp2, aApp
  1483.   IF Valtype(oXbp) = 'O'
  1484.      DCQQOUT oXbp:ClassName()
  1485.   ENDIF
  1486. ENDIF
  1487.  
  1488. RETURN DCGUI_NONE
  1489. *** END OF EXAMPLE ***
  1490.  
  1491.  
  1492. * --------------------
  1493.  
  1494. STATIC FUNCTION XSample_91()
  1495.  
  1496. /*
  1497. This example shows how to resize objects on a dialog that
  1498. has been resized by the user.
  1499. */
  1500.  
  1501. LOCAL GetList := {}, cMemo1, cMemo2, oMemo1, oMemo2
  1502.  
  1503. cMemo1 := 'This is memo window 1'
  1504. cMemo2 := 'This is memo window 2'
  1505.  
  1506. @  1,1 DCMULTILINE cMemo1 OBJECT oMemo1 SIZE 70,10
  1507. @ 12,1 DCMULTILINE cMemo2 OBJECT oMemo2 SIZE 70,10
  1508.  
  1509. DCREAD GUI FIT ;
  1510.    TITLE 'Resize the dialog window and watch what happens to memo windows' ;
  1511.    EVAL {|o|o:resize := {|a,b,o|_XSample_91(o,oMemo1,oMemo2)} }
  1512.  
  1513. RETURN nil
  1514.  
  1515. * --------------------
  1516.  
  1517. STATIC FUNCTION _XSample_91( oDlg, oMemo1, oMemo2 )
  1518.  
  1519. LOCAL oDrawingArea := oDlg:drawingArea, nWidth, nHeight
  1520.  
  1521. nWidth := oDrawingArea:currentSize()[1]
  1522. nHeight := oDrawingArea:currentSize()[2]
  1523.  
  1524. oMemo1:setSize( { nWidth-30, (nHeight/2-40) } )
  1525. oMemo2:setSize( { nWidth-30, (nHeight/2-40) } )
  1526. oMemo1:setPos( { oMemo2:currentPos()[1], ;
  1527.    oMemo2:currentPos()[2] + oMemo2:currentSize()[2] + 20 } )
  1528.  
  1529. RETURN nil
  1530. *** END OF EXAMPLE ***
  1531.  
  1532.  
  1533. * --------------------
  1534.  
  1535. STATIC FUNCTION XSample_92()
  1536.  
  1537. /*
  1538. This example shows how to use the DCTREEROOT and DCTREEITEM
  1539. commands to build a tree system.
  1540. */
  1541.  
  1542. LOCAL GetList := {}, oTree, oSubTree1, oSubTree2, cSelected
  1543.  
  1544. @ 1,1 DCTREEROOT SIZE 30,10 OBJECT oTree  ;
  1545.   HASLINES ;
  1546.   HASBUTTONS ;
  1547.   ITEMSELECTED {|o| cSelected := o:caption, ;
  1548.                     DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}
  1549.  
  1550. DCTREEITEM CAPTION 'SubTree 1' PARENT oTree OBJECT oSubTree1
  1551.   DCTREEITEM CAPTION 'Sub-SubTree 1/1' PARENT oSubTree1
  1552.   DCTREEITEM CAPTION 'Sub-SubTree 1/2' PARENT oSubTree1
  1553.   DCTREEITEM CAPTION 'Sub-SubTree 1/3' PARENT oSubTree1
  1554.  
  1555. DCTREEITEM CAPTION 'SubTree 2' PARENT oTree OBJECT oSubTree2
  1556.   DCTREEITEM CAPTION 'Sub-SubTree 2/1' PARENT oSubTree2
  1557.   DCTREEITEM CAPTION 'Sub-SubTree 2/2' PARENT oSubTree2
  1558.   DCTREEITEM CAPTION 'Sub-SubTree 2/3' PARENT oSubTree2
  1559.  
  1560. DCREAD GUI FIT ADDBUTTONS MODAL
  1561.  
  1562. DC_MsgBox({'You Selected:',cSelected})
  1563.  
  1564. RETURN nil
  1565. *** END OF EXAMPLE ***
  1566.  
  1567. * --------------------
  1568.  
  1569. STATIC FUNCTION XSample_93()
  1570.  
  1571. /*
  1572. This example shows how to use the DCTREEROOT and DCTREEITEM
  1573. commands to build a tree menu system.
  1574. */
  1575.  
  1576. LOCAL GetList := {}, oMenu, oFileMenu, oPrintMenu, oEditMenu, ;
  1577.       cDocument := Space(60), cMemo := '', oMemo, oStatic1,  ;
  1578.       oStatic2, oMsgBox, cSaveDir := DC_CurPath()
  1579.  
  1580. @ 1,4 DCSAY '--- MAIN MENU ---      ' FONT '12.Arial Bold'
  1581.  
  1582. @ 2,1 DCSTATIC TYPE XBPSTATIC_TYPE_TEXT SIZE 25,11 OBJECT oStatic1 ;
  1583.   FONT '10.Arial Bold'
  1584.  
  1585. @ 0,0 DCTREEROOT SIZE 25,11 OBJECT oMenu ;
  1586.   HASLINES HASBUTTONS PARENT oStatic1 ;
  1587.   TOOLTIP 'Double-Click a main-menu item to expand/collapse sub-menu;' + ;
  1588.           'Double-Click a sub-menu item to select' ;
  1589.   EVAL {|o|o:keyboard := {|a,b,o|_TreeKeyboard(a,b,o,GetList)} }
  1590.  
  1591. DCTREEITEM CAPTION 'File' PARENT oMenu OBJECT oFileMenu ;
  1592.      MESSAGE 'These are File Options' INTO oMsgBox
  1593.  
  1594.   DCTREEITEM CAPTION 'Load a Document' PARENT oFileMenu ;
  1595.      ACTION {||_XSample_93(1,oMemo,@cDocument,@cMemo)} ;
  1596.      MESSAGE 'This will load a text file into the document Window' ;
  1597.        INTO oMsgBox
  1598.  
  1599.   DCTREEITEM CAPTION 'Save Document' PARENT oFileMenu ;
  1600.      ACTION {||_XSample_93(2,oMemo,@cDocument,@cMemo)} ;
  1601.      MESSAGE 'This will save the document in the Window to the text file' ;
  1602.        INTO oMsgBox
  1603.  
  1604. DCTREEITEM CAPTION 'Print' PARENT oMenu OBJECT oPrintMenu ;
  1605.      MESSAGE 'These are Printing Options' INTO oMsgBox
  1606.  
  1607.   DCTREEITEM CAPTION 'Preview File' PARENT oPrintMenu ;
  1608.      ACTION {||_XSample_93(3,oMemo,@cDocument,@cMemo)} ;
  1609.      MESSAGE 'This will display a text file in a Preview Window' ;
  1610.        INTO oMsgBox
  1611.  
  1612.   DCTREEITEM CAPTION 'Print File' PARENT oPrintMenu ;
  1613.      ACTION {||_XSample_93(4,oMemo,@cDocument,@cMemo)} ;
  1614.      MESSAGE 'This will Print a text file' INTO oMsgBox
  1615.  
  1616. DCTREEITEM CAPTION 'Edit' PARENT oMenu OBJECT oEditMenu ;
  1617.      MESSAGE 'These are Editing Options' INTO oMsgBox
  1618.  
  1619.   DCTREEITEM CAPTION 'Edit Document' PARENT oEditMenu ;
  1620.      ACTION {||_XSample_93(5,oMemo,@cDocument,@cMemo)} ;
  1621.      MESSAGE 'This will allow a loaded document to be edited' ;
  1622.        INTO oMsgBox
  1623.  
  1624.   DCTREEITEM CAPTION 'Check Spelling' PARENT oEditMenu ;
  1625.      ACTION {||_XSample_93(6,oMemo,@cDocument,@cMemo)} ;
  1626.      MESSAGE 'This will check spelling (only if you have sufficient funds)' ;
  1627.        INTO oMsgBox
  1628.  
  1629.   DCTREEITEM CAPTION 'Clean Slate' PARENT oEditMenu ;
  1630.      ACTION {||_XSample_93(7,oMemo,@cDocument,@cMemo)} ;
  1631.      MESSAGE 'This will clear the document editor window' ;
  1632.        INTO oMsgBox
  1633.  
  1634. DCTREEITEM CAPTION 'Exit Program' PARENT oMenu ;
  1635.    ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)} ;
  1636.    MESSAGE 'This will exit the program' INTO oMsgBox
  1637.  
  1638. @ 1,32 DCMULTILINE cMemo SIZE 60,12 OBJECT oMemo READONLY ;
  1639.   MESSAGE 'Edit your text in this Window' INTO oMsgBox
  1640.  
  1641. @ 14,1 DCSTATIC TYPE XBPSTATIC_TYPE_RECESSEDBOX SIZE 90,1.2 ;
  1642.    OBJECT oStatic2
  1643.  
  1644. @ .1,2 DCSTATIC TYPE XBPSTATIC_TYPE_TEXT SIZE 87,1 PARENT oStatic2 ;
  1645.    OBJECT oMsgBox FONT '12.Courier New Bold'
  1646.  
  1647. DCREAD GUI FIT ADDBUTTONS MODAL ;
  1648.    TITLE 'Tree View Menu Sample' ;
  1649.    EVAL {|o|SetAppWindow(o),SetAppFocus(oMenu)}
  1650.  
  1651. DC_ChDir(cSaveDir)
  1652.  
  1653. RETURN nil
  1654.  
  1655. * ----------------------
  1656.  
  1657. STATIC FUNCTION _XSample_93( nMode, oMemo, cDocument, cMemo )
  1658.  
  1659. LOCAL oDirs, oFiles, cDirectory, lOk, GetList := {}, oFileName
  1660.  
  1661. IF nMode = 1 // Open file
  1662.   @ 5,2 DCSAY 'Enter name of file to Edit'
  1663.   @ 6,2 DCGET cDocument GETSIZE 53 GETOBJECT oFileName
  1664.   @ 7.5,2 DCDIRTREE ;
  1665.       DIRS oDirs VAR cDirectory ;
  1666.       FILES oFiles VAR cDocument ;
  1667.       DATALINK {||oFileName:SetData(), DC_GetRefresh(GetList)} ;
  1668.       SIZE 50,6 ;
  1669.       EXT '*.*','*.TXT','*.DOC'
  1670.   DCREAD GUI FIT ADDBUTTONS TO lOk MODAL
  1671.   IF lOk
  1672.     cMemo := MemoRead(cDocument)
  1673.     oMemo:setData()
  1674.   ENDIF
  1675. ELSEIF nMode = 2  // Save file
  1676.   cMemo := oMemo:GetData()
  1677.   MemoWrit(cDocument,cMemo)
  1678. ELSEIF nMode = 3  // Preview file
  1679.   DC_PrintFile(cDocument,.t.)
  1680. ELSEIF nMode = 4  // Print file
  1681.   DC_PrintFile(cDocument,.f.)
  1682. ELSEIF nMode = 5  // edit
  1683.   oMemo:setEditable(.t.)
  1684.   SetAppFocus(oMemo)
  1685. ELSEIF nMode = 6 // check spelling
  1686.   DC_Winalert('Please deposit $1,000,000 to start spell check')
  1687. ELSEIF nMode = 7
  1688.   cMemo := ''
  1689.   oMemo:setData()
  1690. ENDIF
  1691. RETURN nil
  1692. *** END OF EXAMPLE ***
  1693.  
  1694. * --------------------
  1695.  
  1696. STATIC FUNCTION _TreeKeyboard( mp1, mp2, oTreeRoot, aGetList )
  1697.  
  1698. LOCAL oItem, bAction
  1699.  
  1700. IF mp1 == xbeK_ENTER
  1701.   oItem := oTreeRoot:getData()
  1702.   bAction := DC_GetBlock(aGetList[oItem:cargo[1],bGETLIST_ACTION])
  1703.   IF Valtype(bAction) = 'B'
  1704.     Eval(bAction,oItem)
  1705.   ELSEIF oItem:isExpanded()
  1706.     oItem:expand(.f.)
  1707.   ELSE
  1708.     oItem:expand(.t.)
  1709.   ENDIF
  1710. ENDIF
  1711.  
  1712. RETURN nil
  1713.  
  1714. * --------------------
  1715.  
  1716. STATIC FUNCTION XSample_94( aGetList, aGetOptions )
  1717.  
  1718. /*
  1719. This Example shows how to create an array viewer.  Array
  1720. sub-trees do not get created until they are expanded.
  1721. This saves load time and memory.
  1722. */
  1723.  
  1724. LOCAL aArray, oTannenBaum, GetList := {}, i, GetOptions, lWindows
  1725.  
  1726.  
  1727. lWindows := .f.
  1728.  
  1729. aArray := { 'This is a string', ;
  1730.        Date(), ;
  1731.        123456.78, ;
  1732.        .t., ;
  1733.        SetAppWindow(), ;
  1734.        aGetList, ;
  1735.        aGetOptions, ;
  1736.        nil, ;
  1737.        Directory('*.DB*'), ;
  1738.        {||Msgbox('I am a Code Block')} }
  1739.  
  1740. @ 1,1 DCTREEROOT OBJECT oTannenBaum SIZE 40,20 FONT '10.Courier' ;
  1741.    HASLINES HASBUTTONS
  1742.  
  1743. @ 21,1 DCCHECKBOX lWindows PROMPT 'Break out Arrays/Objects into Separate Windows'
  1744.  
  1745. FOR i := 1 TO Len(aArray)
  1746.   _XSample_94( 1, GetList, aArray[i], @oTannenBaum, @lWindows )
  1747. NEXT
  1748.  
  1749. DCGETOPTIONS NOBUSY
  1750.  
  1751. DCREAD GUI FIT ;
  1752.    OPTIONS GetOptions ;
  1753.    TITLE 'Array/Object Browser' ;
  1754.    EVAL {|o|SetAppWindow(o), o:resize := {||_XSample_94(3,,,oTannenBaum)}}
  1755.  
  1756. RETURN nil
  1757.  
  1758. * --------------------
  1759.  
  1760. STATIC FUNCTION _XSample_94( nMode, GetList, xData, oTree, lWindows, cCaption )
  1761.  
  1762. LOCAL i, oThread, GetOptions
  1763.  
  1764. IF nMode = 1
  1765.  
  1766.   IF Valtype(xData) = 'C'
  1767.      DCTREEITEM CAPTION xData PARENT oTree ;
  1768.        IMAGENORMAL ICON_CHARACTER ;
  1769.        IMAGEEXPANDED ICON_CHARACTER ;
  1770.        IMAGEMARKED ICON_CHARACTER
  1771.   ELSEIF Valtype(xData) = 'D'
  1772.      DCTREEITEM CAPTION DC_XtoC(xData) PARENT oTree ;
  1773.        IMAGENORMAL ICON_DATE ;
  1774.        IMAGEEXPANDED ICON_DATE ;
  1775.        IMAGEMARKED ICON_DATE
  1776.   ELSEIF Valtype(xData) = 'N'
  1777.      DCTREEITEM CAPTION DC_XtoC(xData) PARENT oTree ;
  1778.        IMAGENORMAL ICON_NUMERIC ;
  1779.        IMAGEEXPANDED ICON_NUMERIC ;
  1780.        IMAGEMARKED ICON_NUMERIC
  1781.   ELSEIF Valtype(xData) = 'L'
  1782.      DCTREEITEM CAPTION DC_XtoC(xData) PARENT oTree ;
  1783.        IMAGENORMAL ICON_LOGICAL ;
  1784.        IMAGEEXPANDED ICON_LOGICAL ;
  1785.        IMAGEMARKED ICON_LOGICAL
  1786.   ELSEIF Valtype(xData) = 'B'
  1787.      DCTREEITEM CAPTION DC_GetCodeBlockText(xData) PARENT oTree ;
  1788.        IMAGENORMAL ICON_CODEBLOCK ;
  1789.        IMAGEEXPANDED ICON_CODEBLOCK ;
  1790.        IMAGEMARKED ICON_CODEBLOCK
  1791.   ELSEIF Valtype(xData) = 'U'
  1792.      DCTREEITEM CAPTION 'Nil' PARENT oTree ;
  1793.        IMAGENORMAL ICON_NIL ;
  1794.        IMAGEEXPANDED ICON_NIL ;
  1795.        IMAGEMARKED ICON_NIL
  1796.   ELSEIF Valtype(xData) = 'O'
  1797.      cCaption := 'OBJECT:' + xData:ClassName()
  1798.      DCTREEITEM CAPTION cCaption ;
  1799.        PARENT oTree ;
  1800.        CARGO xData ;
  1801.        ACTION { |o| _XSample_94( 2,  nil, o:cargo[3], o, @lWindows, cCaption ) } ;
  1802.        IMAGENORMAL ICON_CLOSED_OBJECT ;
  1803.        IMAGEEXPANDED ICON_OPEN_OBJECT ;
  1804.        IMAGEMARKED ICON_CLOSED_OBJECT
  1805.   ELSEIF Valtype(xData) = 'A'
  1806.      cCaption := 'Array (' + Alltrim(Str(Len(xData))) + ')'
  1807.      DCTREEITEM CAPTION cCaption ;
  1808.        PARENT oTree ;
  1809.        CARGO xData ;
  1810.        ACTION { |o| _XSample_94( 2,  nil, o:cargo[3], o, @lWindows, cCaption ) } ;
  1811.        IMAGENORMAL ICON_CLOSED_ARRAY ;
  1812.        IMAGEEXPANDED ICON_OPEN_ARRAY ;
  1813.        IMAGEMARKED ICON_CLOSED_ARRAY
  1814.   ENDIF
  1815.  
  1816. ELSEIF nMode = 2 .AND. Valtype(xData) $ 'AO'
  1817.  
  1818.   GetList := {}
  1819.   IF Valtype(xData) = 'O'
  1820.     IF IsMethod(xData,'CHILDLIST')
  1821.       xData := xData:ChildList()
  1822.     ELSE
  1823.       RETURN nil
  1824.     ENDIF
  1825.   ENDIF
  1826.  
  1827.   IF lWindows
  1828.     oTree := nil
  1829.     @ 1,1 DCTREEROOT OBJECT oTree SIZE 50,15 FONT '10.Courier' ;
  1830.       HASLINES HASBUTTONS
  1831.   ENDIF
  1832.  
  1833.   FOR i := 1 TO Len(xData)
  1834.     _XSample_94( 1, GetList, xData[i], @oTree, @lWindows )
  1835.   NEXT
  1836.  
  1837.   IF !lWindows
  1838.     oTree:cargo[3] := nil
  1839.     DCREAD GUI EXIT PARENT oTree
  1840.     oTree:expand(.t.)
  1841.   ELSE
  1842.  
  1843.     oThread := Thread():new()
  1844.     oThread:Start( {||_XSample_94(4,GetList,,@oTree,,cCaption)} )
  1845.   ENDIF
  1846.  
  1847. ELSEIF nMode = 3
  1848.  
  1849.   oTree:setSize( { oTree:setParent():currentSize()[1]-30, ;
  1850.                    oTree:setParent():currentSize()[2]-70 } )
  1851.  
  1852. ELSEIF nMode = 4
  1853.  
  1854.    DCGETOPTIONS ;
  1855.      ORIGIN XBPDLG_ORIGIN_MOUSE ;
  1856.      NOBUSY ;
  1857.      HIDE
  1858.  
  1859.    DCREAD GUI FIT TITLE cCaption ;
  1860.      OPTIONS GetOptions ;
  1861.      EVAL {|o|o:resize := {||_XSample_94(5,,,@oTree)}, ;
  1862.               o:setPos({o:CurrentPos()[1],o:currentPos()[2]-o:currentSize()[2]} ), ;
  1863.               o:show() }
  1864.  
  1865. ELSEIF nMode = 5
  1866.  
  1867.   oTree:setSize( { oTree:setParent():currentSize()[1]-30, ;
  1868.                    oTree:setParent():currentSize()[2]-40 } )
  1869. ENDIF
  1870.  
  1871. RETURN nil
  1872.  
  1873. *** END OF EXAMPLE ***
  1874.  
  1875.  
  1876. * --------------------
  1877.  
  1878. STATIC FUNCTION XSample_95()
  1879.  
  1880. /*
  1881. This example shows how to print concatenated strings of
  1882. different fonts using DCPRINT SAY without coordinates.
  1883. */
  1884.  
  1885. LOCAL oPrinter, i
  1886.  
  1887. DCPRINT ON TO oPrinter PREVIEW HIDE
  1888.  
  1889. FOR i := 20 TO 50
  1890.  
  1891.   @ i,1+(i/5) DCPRINT SAY '8.Arial' PRINTER oPrinter FONT '8.Arial'
  1892.  
  1893.   DCPRINT SAY '10.Courier' PRINTER oPrinter FONT '10.Courier'
  1894.  
  1895.   DCPRINT SAY '12.Arial Bold' PRINTER oPrinter FONT '12.Arial Bold'
  1896.  
  1897.   DCPRINT SAY '10.Courier' PRINTER oPrinter FONT '10.Courier'
  1898.  
  1899.   DCPRINT SAY '8.Terminal Bold' PRINTER oPrinter FONT '8.Terminal Bold'
  1900.  
  1901.   DCPRINT SAY '6.Terminal' PRINTER oPrinter FONT '6.Terminal'
  1902.  
  1903. NEXT
  1904.  
  1905. DCPRINT OFF PRINTER oPrinter
  1906.  
  1907. RETURN nil
  1908. *** END OF EXAMPLE ***
  1909.  
  1910.  
  1911. * --------------------
  1912.  
  1913. STATIC FUNCTION XSample_96()
  1914.  
  1915. /*
  1916. This example shows how to use the DCSETPARENT command
  1917. to eliminate the need to use the PARENT clause on all
  1918. DC* commands.
  1919. */
  1920.  
  1921. LOCAL oTabPage1, oTabPage2, GetList := {}
  1922.  
  1923. @ 1,1 DCTABPAGE oTabPage1 CAPTION 'Page 1' SIZE 50,10
  1924.  
  1925. DCSETPARENT TO oTabPage1
  1926.  
  1927. @ 2,2 DCSAY 'This goes on Tab Page ONE'
  1928. @ 4,2 DCSAY 'This goes on Tab Page ONE too!'
  1929. @ 6,2 DCSAY 'This goes on Tab Page ONE also!'
  1930.  
  1931. DCSETPARENT TO
  1932.  
  1933. @ 0,0 DCTABPAGE oTabPage2 CAPTION 'Page 2' RELATIVE oTabPage1
  1934.  
  1935. DCSETPARENT TO oTabPage2
  1936.  
  1937. @ 2,2 DCSAY 'This goes on Tab Page TWO'
  1938. @ 4,2 DCSAY 'This goes on Tab Page TWO too!'
  1939. @ 6,2 DCSAY 'This goes on Tab Page TWO also!'
  1940.  
  1941. DCREAD GUI FIT ;
  1942.    MODAL ;
  1943.    ADDBUTTONS ;
  1944.    TITLE 'Example of DCSETPARENT command'
  1945.  
  1946. RETURN nil
  1947. *** END OF EXAMPLE ***
  1948.  
  1949.  
  1950. * --------------------
  1951.  
  1952. STATIC FUNCTION XSample_97()
  1953.  
  1954. /*
  1955. This example prints all FIXED fonts to help determine the proper
  1956. fonts to use for columnar reports.   Some printers give different
  1957. results for different fixed fonts, especially HP printers.
  1958. */
  1959.  
  1960. LOCAL oFont, aFontList, i, iMax, nRow, nPointSize, cCompoundName, ;
  1961.       aFonts := {}, lExact := Set(_SET_EXACT,.t.), oCrt, oPrinter, ;
  1962.       oScrn
  1963.  
  1964. DCPRINT ON TO oPrinter
  1965. IF Valtype(oPrinter) # 'O' .OR. !oPrinter:lActive
  1966.    RETURN nil
  1967. ENDIF
  1968.  
  1969. oCrt := XbpCrt():new(AppDeskTop()):create()
  1970. oCrt:hide()
  1971. oFont := XbpFont():new(oCrt:PresSpace())
  1972. aFontList := oFont:list()
  1973. oCrt:destroy()
  1974. iMax := Len( aFontList )
  1975. nRow := 5
  1976.  
  1977. oScrn := DC_WaitOn()
  1978.  
  1979. FOR i := 1 TO iMax
  1980.  
  1981.   IF Ascan( aFonts, aFontList[i]:compoundname ) > 0
  1982.     LOOP
  1983.   ENDIF
  1984.   AAdd( aFonts, aFontList[i]:compoundname )
  1985.   IF aFontList[i]:fixed
  1986.     oFont := aFontList[i]
  1987.     FOR nPointSize := 6 TO 14
  1988.       cCompoundName := Alltrim(Str(nPointSize)) + '.' + oFont:compoundname
  1989.       @ nRow++, 10 DCPRINT SAY cCompoundName FONT cCompoundName
  1990.     NEXT
  1991.   ENDIF
  1992.   IF nRow > 50
  1993.     DCPRINT EJECT
  1994.     nRow := 5
  1995.   ENDIF
  1996.  
  1997. NEXT
  1998. Set(_SET_EXACT,lExact)
  1999. oFont:destroy()
  2000. DC_Impl(oScrn)
  2001.  
  2002. DCPRINT OFF
  2003.  
  2004. DC_MsgBox('Fixed Fonts were sent to Printer!')
  2005.  
  2006. RETURN nil
  2007. *** END OF EXAMPLE ***
  2008.  
  2009.  
  2010. * --------------------
  2011.  
  2012. STATIC FUNCTION XSample_98()
  2013.  
  2014. /*
  2015. This example shows how to use an eXPress++ dialog to create
  2016. an email message for sending via Outlook.  This example
  2017. uses JazzAge 2.0 library and DLL for Active-X support.
  2018.  
  2019. See XOUTLOOK.PRG for Active-X wrappers.
  2020. */
  2021.  
  2022. LOCAL GetList := {}, cEmailAddress, cAttachment, cText, cSubject
  2023.  
  2024. cEmailAddress := Space(50)
  2025. cSubject := Space(50)
  2026. cAttachment := Space(50)
  2027. cText := ''
  2028.  
  2029. IF !IsFunction('SendMailToOutLook')
  2030.   DC_WinAlert('This sample is not available!')
  2031.   RETURN nil
  2032. ENDIF
  2033.  
  2034. @ 1,1 DCSAY '   Address' GET cEmailAddress GETSIZE 40 TABSTOP
  2035. @ 3,1 DCSAY '   Subject' GET cSubject TABSTOP
  2036. @ 5,1 DCSAY 'Attachment' GET cAttachment POPUP {|c|DC_PopFile(c)} TABSTOP
  2037. @ 7,1 DCSAY 'Text of Message'
  2038. @ 8,1 DCMULTILINE cText SIZE 75,10 TABSTOP
  2039.  
  2040. @ 1,60 DCPUSHBUTTON CAPTION 'Send' SIZE 9,1.2 ;
  2041.   ACTION {||SendMailToOutLook(Trim(cSubject), Trim(cText), ;
  2042.                    Alltrim(cAttachment), Alltrim(cEmailAddress) ), ;
  2043.                    DC_MsgBox('Message has been Sent!')} ;
  2044.   WHEN {||!Empty(cEmailAddress) .AND. !Empty(cSubject) } TABSTOP
  2045.  
  2046. DCREAD GUI FIT BUTTONS DCGUI_BUTTON_EXIT ;
  2047.    TITLE 'Send an E-Mail Message via OutLook' ;
  2048.    EVAL {|o|SetAppWindow(o)}
  2049.  
  2050. RETURN nil
  2051.  
  2052. * ----------------------
  2053.  
  2054. STATIC FUNCTION _XSample_98( cFileName )
  2055.  
  2056. LOCAL GetList := {}, oDirs, cDirectory, oFiles
  2057.  
  2058. cDirectory := DC_Curpath()
  2059.  
  2060. @ 1,1 DCDIRTREE ;
  2061.       DIRS oDirs VAR cDirectory ;
  2062.       FILES oFiles VAR cFileName ;
  2063.       DATALINK {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)} ;
  2064.       SIZE 50,12 ;
  2065.       EXT '*.*'
  2066.  
  2067. DCREAD GUI FIT ADDBUTTONS MODAL
  2068.  
  2069. RETURN cFileName
  2070. *** END OF EXAMPLE ***
  2071.  
  2072.  
  2073. * --------------------
  2074.  
  2075. STATIC FUNCTION XSample_99()
  2076.  
  2077. /*
  2078. This example shows how to use DCQUICKBROWSE for browsing
  2079. a database via the Data Access Chain.
  2080. */
  2081.  
  2082. LOCAL GetList := {}, oBrowse, aFields, aHeaders, aPres, nRecord
  2083.  
  2084. IF Val(Version(1)+'.'+Version(2)) < 1.3
  2085.   DC_WinAlert('Quick Browse not available in Version 1.2')
  2086.   RETURN nil
  2087. ENDIF
  2088.  
  2089. IF !File('..\XDOC\EXPRESS.DBF')
  2090.   DC_MsgBox({'Sorry.  The database required to show this feature',;
  2091.              'is not included in the demonstration version', ;
  2092.              'or the ..\XDOC\EXPRESS.DBF file does not exist'})
  2093.   RETURN nil
  2094. ENDIF
  2095.  
  2096. SET DEFA TO ..\XDOC
  2097. USE EXPRESS VIA FOXCDX EXCLUSIVE ALIAS 'XDOC'
  2098. SET INDEX TO EXPRESS.CDX
  2099. OrdSetFocus('COMMAND')
  2100. SET DEFA TO
  2101. nRecord := RecNo()
  2102.  
  2103. aFields := { 'XDOC->COMMAND', ;
  2104.              'XDOC->SHORT', ;
  2105.              'XDOC->TYPE', ;
  2106.              'XDOC->MODULE', ;
  2107.              'XDOC->SEE_ALSO'}
  2108.  
  2109. aHeaders := { 'Command','Short Description','Type','Module','See Also'}
  2110.  
  2111. @ 1,1 DCQUICKBROWSE ALIAS 'XDOC' SIZE 70,20 ;
  2112.    OBJECT oBrowse ;
  2113.    FIELDS aFields HEADERS aHeaders ;
  2114.    INTO nRecord ;
  2115.    STYLE XBP_STYLE_FANCY ;
  2116.    CURSORMODE XBPBRW_CURSOR_CELL ;
  2117.    COLOR GRA_CLR_BLUE, GRA_CLR_WHITE ;
  2118.    ITEMSELECTED {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}
  2119.  
  2120. DCREAD GUI FIT ADDBUTTONS ;
  2121.    MODAL ;
  2122.    TITLE 'Quick-Browsing a Database'
  2123.  
  2124. GO nRecord
  2125.  
  2126. DCMSGBOX RecNo(), XDOC->Command, XDOC->Short TIMEOUT 2
  2127.  
  2128. RETURN nil
  2129. *** END OF EXAMPLE ***
  2130.  
  2131. * --------------------
  2132.  
  2133. STATIC FUNCTION XSample_100()
  2134.  
  2135. /*
  2136. This example shows how to use DCQUICKBROWSE for browsing
  2137. an array via the Data Access Chain.
  2138. */
  2139.  
  2140. LOCAL GetList := {}, oBrowse, aDirectory := Directory(), aHeaders, ;
  2141.       aColumns, aColType, aColAlign, aColWidth
  2142.  
  2143. IF Val(Version(1)+'.'+Version(2)) < 1.3
  2144.   DC_WinAlert('Quick Browse not available in Version 1.2')
  2145.   RETURN nil
  2146. ENDIF
  2147.  
  2148. aColumns :=     { ;
  2149.       F_NAME          , ; // Display files as icons
  2150.       F_NAME          , ; // Display file names as text
  2151.       F_SIZE          , ;
  2152.       F_WRITE_DATE    , ;
  2153.       F_WRITE_TIME    , ;
  2154.       F_CREATION_DATE , ;
  2155.       F_CREATION_TIME   }
  2156.  
  2157. aHeaders :=     { ;
  2158.       " "             , ;
  2159.       "File name    " , ;
  2160.       "    File size" , ;
  2161.       "  Access date" , ;
  2162.       "  Access time" , ;
  2163.       "Creation date" , ;
  2164.       "Creation time"   }
  2165.  
  2166. aColType :=     { ;
  2167.       { 1, XBPCOL_TYPE_FILEMINIICON }, ;
  2168.       nil, ;
  2169.       nil, ;
  2170.       nil, ;
  2171.       nil, ;
  2172.       nil, ;
  2173.       nil  }
  2174.  
  2175. aColWidth :=    { ;
  2176.       20, ;
  2177.       175, ;
  2178.       150, ;
  2179.       150, ;
  2180.       150, ;
  2181.       150, ;
  2182.       150 }
  2183.  
  2184. aColAlign :=    { ;
  2185.    XBPALIGN_VCENTER + XBPALIGN_HCENTER, ;
  2186.    XBPALIGN_RIGHT + XBPALIGN_VCENTER, ;
  2187.    XBPALIGN_RIGHT + XBPALIGN_VCENTER, ;
  2188.    XBPALIGN_RIGHT + XBPALIGN_VCENTER, ;
  2189.    XBPALIGN_RIGHT + XBPALIGN_VCENTER, ;
  2190.    XBPALIGN_RIGHT + XBPALIGN_VCENTER, ;
  2191.    XBPALIGN_RIGHT + XBPALIGN_VCENTER  }
  2192.  
  2193. @ 1,1 DCQUICKBROWSE DATA aDirectory SIZE 90,20 ;
  2194.    OBJECT oBrowse ;
  2195.    COLUMNS aColumns ;
  2196.    FONT '10.Courier New' ;
  2197.    HEADERS aHeaders ;
  2198.    COLTYPE aColType ;
  2199.    COLWIDTH aColWidth ;
  2200.    COLALIGN aColAlign ;
  2201.    EVAL {|o|o:setRowHeight(25)}
  2202.  
  2203. DCREAD GUI FIT ADDBUTTONS ;
  2204.    MODAL ;
  2205.    TITLE 'Quick-Browsing an Array'
  2206.  
  2207. RETURN nil
  2208. *** END OF EXAMPLE ***
  2209.  
  2210. * --------------------
  2211.  
  2212. STATIC FUNCTION XSample_101()
  2213.  
  2214. /*
  2215. This example shows how to use the GRASTRING clause of
  2216. @..DCSAY..GET to create GraString() Says insteead of
  2217. XbpStatic() Says.  Saves Memory resources.
  2218. */
  2219.  
  2220. LOCAL GetList := {}, aGets[5], oStatic, GetOptions
  2221.  
  2222. AFill(aGets,Space(10))
  2223.  
  2224. @ 1,1 DCSTATIC TYPE XBPSTATIC_TYPE_RECESSEDBOX SIZE 35,13 OBJECT oStatic
  2225.  
  2226. @ 2,3 DCSAY 'This is Get1' GET aGets[1] PARENT oStatic TABSTOP
  2227. @ 4,3 DCSAY 'This is Get2' GET aGets[2] PARENT oStatic TABSTOP GRASTRING
  2228. @ 6,3 DCSAY 'This is Get3' GET aGets[3] PARENT oStatic TABSTOP GRASTRING
  2229. @ 8,3 DCSAY 'This is Get4' GET aGets[4] PARENT oStatic TABSTOP
  2230. @10,3 DCSAY 'This is Get5' GET aGets[5] PARENT oStatic TABSTOP GRASTRING
  2231.  
  2232. DCGETOPTIONS SAYRIGHTCENTER
  2233.  
  2234. DCREAD GUI FIT ADDBUTTONS ;
  2235.    OPTIONS GetOptions ;
  2236.    MODAL ;
  2237.    TITLE '@..SAY..GET w/GRASTRING'
  2238.  
  2239. RETURN nil
  2240. *** END OF EXAMPLE ***
  2241.  
  2242.  
  2243. * --------------------
  2244.  
  2245. STATIC FUNCTION XSample_102()
  2246.  
  2247. /*
  2248. This example shows how to create Colored GETs.  It uses DC_GetCargo()
  2249. to store away previous GET color.
  2250. */
  2251.  
  2252. LOCAL GetList := {}, aGets[15], aPres, i, aSelected
  2253.  
  2254. aSelected := { { XBP_PP_FGCLR, GRA_CLR_BLACK } , { XBP_PP_BGCLR, GRA_CLR_WHITE } }
  2255.  
  2256.  
  2257. FOR i := 1 TO 15
  2258.  
  2259.   aPres := { { XBP_PP_FGCLR, GRA_CLR_WHITE } , ;
  2260.              { XBP_PP_BGCLR, i } }
  2261.  
  2262.   aGets[i] := Pad('This is a colored GET',25)
  2263.  
  2264.   @ i, 1 DCSAY Alltrim(Str(aPres[1,2])) + ' / ' + Alltrim(Str(aPres[2,2])) ;
  2265.      GET aGets[i] GETPRES aPres ;
  2266.      GOTFOCUS {|a,b,o|DC_GetCargo(o,o:setPresParam(aSelected))} ;
  2267.      LOSTFOCUS {|a,b,o|o:setPresParam(DC_GetCargo(o))} ;
  2268.      TABSTOP SAYSIZE 5
  2269.  
  2270. NEXT
  2271.  
  2272. DCREAD GUI ;
  2273.    FIT ;
  2274.    ADDBUTTONS ;
  2275.    MODAL ;
  2276.    TITLE 'Colored Gets'
  2277.  
  2278. RETURN nil
  2279. *** END OF EXAMPLE ***
  2280.  
  2281.  
  2282.  
  2283.  
  2284.