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

  1. *-- PROGRAM FILE -------------------------------------------------------------
  2. * Application: eXPress++ Library
  3. *  Description: eXPress++ sample programs
  4. *    File Name: xsample5.prg
  5. *       Author: Roger Donnay          Tester:
  6. * Date created: 09/03/00              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 "inkey.CH"
  15. #INCLUDE "dcicon.CH"
  16. #INCLUDE "dcgrump.ch"
  17. #INCLUDE "dcbitmap.ch"
  18. #INCLUDE "dcgra.ch"
  19. #include "dcfields.ch"
  20. #INCLUDE "dccursor.CH"
  21. #INCLUDE "dcprint.CH"
  22. #include "font.ch"
  23.  
  24. #define CRLF              Chr(13) + Chr(10)
  25.  
  26.  
  27. FIELD areacode, exchange, number
  28.  
  29. FUNCTION X_Samples_5( oDialog )
  30.  
  31. LOCAL GetList := {}, nTest := 0, cMemo := '', oMemo, i, j, oDlg, ;
  32.       lDebugCreate := .f., lDebugEvent := .f., GetOptions, aApp[1], ;
  33.       cTitle, oDlgWindow, aCoords, oSourceFile, cSource
  34.  
  35. SET DEFA TO
  36. SET PATH TO ..\DATA
  37.  
  38. cTitle := 'eXPress++ Sample Programs (Set 5)'
  39. nTest := 0
  40. cMemo := ''
  41. lDebugEvent := .f.
  42. lDebugCreate := .f.
  43.  
  44. FOR i := 1 TO  5
  45.   FOR j := 1 TO 6
  46.     nTest++
  47.     @ j-1,1 + (i-1)*14 DCRADIO nTest             ;
  48.       VALUE nTest ;
  49.       PROMPT XSample_Header(nTest)               ;
  50.       ACTION {||XSample_Memo(nTest,oMemo,oSourceFile,@cSource)}  ;
  51.       COLOR XSample_Color(nTest)
  52.   NEXT j
  53. NEXT i
  54. nTest := 1
  55.  
  56. @ 2,73 DCPUSHBUTTON CAPTION 'Run Sample'  ;
  57.       SIZE 12, 1                               ;
  58.       ACTION {||XSample_Run(nTest,oDialog,lDebugCreate,lDebugEvent,GetList,GetOptions)}
  59.  
  60. @ 3,73 DCPUSHBUTTON CAPTION 'Print Source'  ;
  61.       SIZE 12, 1                               ;
  62.       ACTION {||XSample_Print(cSource)}
  63.  
  64.  
  65. @ 4,73 DCPUSHBUTTON CAPTION 'Exit' ;
  66.       SIZE 12, 1  ;
  67.       ACTION {||PostAppEvent(xbeP_Close,,,oDlg)}
  68.  
  69. @ 5,73 DCCHECKBOX lDebugEvent PROMPT 'Debug Events'
  70.  
  71. @ 6.3,5 DCSAY '' SAYSIZE 60 COLOR GRA_CLR_DARKBLUE ;
  72.       OBJECT oSourceFile FONT '8.Courier Bold'
  73.  
  74. @ 7,1 DCMULTILINE cMemo ;
  75.      OBJECT oMemo ;
  76.      SIZE 85,12 ;
  77.      FONT '8.Alaska Crt'
  78.  
  79. DCGETOPTIONS ;
  80.     ICON ICON_EXPRESS ;
  81.     NOBUSY ;
  82.     CASCADE
  83.  
  84. DCREAD GUI ;
  85.       OPTIONS GetOptions ;
  86.       EVAL {||XSample_Memo(nTest,oMemo,oSourceFile,@cSource)} ;
  87.       APPWINDOW oDialog ;
  88.       PARENT @oDlg ;
  89.       TITLE cTitle ;
  90.       FIT
  91.  
  92. CLOSE DATABASES
  93.  
  94. RETURN nil
  95.  
  96. * ---------------------------- *
  97.  
  98. STATIC FUNCTION XSample_Memo( nTest, oMemo, oSourceFile, cSource )
  99.  
  100. LOCAL cFunction, nFound, cSourceFile
  101.  
  102. cSource := ''
  103. nTest += 132
  104. cFunction := 'XSample_' + Alltrim(Str(nTest))
  105.  
  106. cSourceFile := 'XSAMPLE5.PRG'
  107. cSource := MemoRead(cSourceFile)
  108. IF Empty(cSource)
  109.   cSourceFile := '..\PRG\XSAMPLE5.PRG'
  110.   cSource := MemoRead(cSourceFile)
  111. ENDIF
  112. IF Empty(cSource)
  113.   cSource := 'XSAMPLE5.PRG cannot be found'
  114. ENDIF
  115.  
  116. nFound := AT('FUNCTION ' + cFunction,cSource)
  117. cSource := Substr(cSource,nFound)
  118. nFound := AT('*** END OF EXAMPLE ***',cSource)
  119. cSource := Substr(cSource,1,nFound+21)
  120.  
  121. IF !Empty(cSource)
  122.   oMemo:setData(cSource)
  123.   oSourceFile:setCaption(cSourceFile)
  124. ENDIF
  125. RETURN nil
  126.  
  127. * -------------------
  128.  
  129. STATIC FUNCTION XSample_Print( cSource )
  130.  
  131. LOCAL oPrinter, nLineCount := MLCount(cSource), i, cMemoLine, nRow
  132.  
  133. DCPRINT ON TO oPrinter PREVIEW FONT '10.Courier' NONSTOP HIDE
  134. IF Valtype(oPrinter) # 'O' .OR. !oPrinter:lActive
  135.   RETURN nil
  136. ENDIF
  137. nRow := 1
  138. FOR i := 1 TO nLineCount - 1
  139.   cMemoLine := MemoLine( cSource, nil, i )
  140.   @ nRow++,2 DCPRINT SAY cMemoLine PRINTER oPrinter
  141.   IF nRow > 60
  142.     DCPRINT EJECT
  143.     nRow := 1
  144.   ENDIF
  145. NEXT
  146. DCPRINT OFF
  147.  
  148. RETURN nil
  149.  
  150. * ---------------------------- *
  151.  
  152. STATIC FUNCTION XSample_Run( nTest, oDialog, lDebugCreate, lDebugEvent, ;
  153.                              GetList, GetOptions )
  154.  
  155. LOCAL nDebug := 0, lVer20, lVer15, lVer17, oThread
  156.  
  157. #ifdef EXPRESS20
  158.   lVer20 := .t.
  159. #else
  160.   lVer20 := .f.
  161. #endif
  162.  
  163. #ifdef EXPRESS17
  164.   lVer17 := .t.
  165. #else
  166.   lVer17 := .f.
  167. #endif
  168.  
  169. #ifdef EXPRESS15
  170.   lVer15 := .t.
  171. #else
  172.   lVer15 := .f.
  173. #endif
  174.  
  175.  
  176. DC_Gui(.t.)
  177.  
  178. nTest += 132
  179. IF lDebugCreate
  180.    nDebug += DCGUI_DEBUG_CREATE
  181. ENDIF
  182. IF lDebugEvent
  183.    nDebug += DCGUI_DEBUG_EVENTS
  184. ENDIF
  185. DC_ReadGuiDebug(nDebug)
  186. CLOSE ALL
  187. SET DEFA TO
  188.  
  189. IF nTest = 133
  190.    XSample_133()
  191. ELSEIF nTest = 134 .AND. ( lVer15 .OR. lVer17 .OR. lVer20 )
  192.    XSample_134()
  193. ELSEIF nTest = 135
  194.    XSample_135()
  195. ELSEIF nTest = 136 .AND. ( lVer15 .OR. lVer17 .OR. lVer20 )
  196.    XSample_136()
  197. ELSEIF nTest = 137 .AND. lVer20
  198.    XSample_137()
  199. ELSEIF nTest = 138 .AND. lVer20
  200.    XSample_138()
  201. ELSEIF nTest = 139 .AND. lVer20
  202.    XSample_139()
  203. ELSEIF nTest = 140 .AND. lVer20
  204.    XSample_140()
  205. ELSEIF nTest = 141 .AND. lVer20
  206.    XSample_141()
  207. ELSEIF nTest = 142 .AND. lVer20
  208.    XSample_142()
  209. ELSEIF nTest = 143
  210.    XSample_143()
  211. ELSEIF nTest = 144
  212.    XSample_144()
  213. ELSEIF nTest = 145 .AND. ( lVer15 .OR. lVer20 )
  214.    XSample_145()
  215. ELSEIF nTest = 146 .AND. lVer20
  216.    XSample_146()
  217. ELSEIF nTest = 147 .AND. lVer20
  218.    XSample_147(GetList)
  219. ELSEIF nTest = 148 .AND. lVer20
  220.    XSample_148(GetList)
  221. ELSEIF nTest = 149 .AND. lVer20
  222.    XSample_149()
  223. ELSEIF nTest = 150
  224.    XSample_150()
  225. ELSEIF nTest = 151
  226.    XSample_151()
  227. ELSEIF nTest = 152
  228.    XSample_152()
  229. ELSEIF nTest = 153
  230.    XSample_153()
  231. ELSEIF nTest = 154
  232.    XSample_154()
  233. ELSEIF nTest = 155
  234.    XSample_155()
  235. ELSEIF nTest = 156
  236.    XSample_156()
  237. ELSEIF nTest = 157
  238.    XSample_157()
  239. ELSEIF nTest = 158
  240.    XSample_158()
  241. ELSEIF nTest = 159 .AND. ( lVer17 .OR. lVer20 )
  242.    XSample_159()
  243. ELSEIF nTest = 160
  244.    XSample_160()
  245. ELSEIF nTest = 161
  246.    XSample_161()
  247. ELSEIF nTest = 162
  248.    XSample_162()
  249. ELSE
  250.    DC_WinAlert('This sample is available under eXPress++ 2.0 or later')
  251. ENDIF
  252.  
  253. DC_ClearEvents()
  254.  
  255. RETURN nil
  256.  
  257. * ---------------------------- *
  258.  
  259. STATIC FUNCTION XSample_Header( nTest )
  260.  
  261. nTest += 132
  262.  
  263. IF nTest = 133
  264.   RETURN "MergeGets 1"
  265. ELSEIF nTest = 134
  266.   RETURN "RGBColors"
  267. ELSEIF nTest = 135
  268.   RETURN "PresEditor"
  269. ELSEIF nTest = 136
  270.   RETURN "ColorPicker"
  271. ELSEIF nTest = 137
  272.   RETURN "Stack"
  273. ELSEIF nTest = 138
  274.   RETURN "FileGroup 1"
  275. ELSEIF nTest = 139
  276.   RETURN "FileGroup 2"
  277. ELSEIF nTest = 140
  278.   RETURN "FieldGroup 1"
  279. ELSEIF nTest = 141
  280.   RETURN "FieldGroup 2"
  281. ELSEIF nTest = 142
  282.   RETURN "CodeTables"
  283. ELSEIF nTest = 143
  284.   RETURN "DragDrop 2"
  285. ELSEIF nTest = 144
  286.   RETURN "MergeGets 2"
  287. ELSEIF nTest = 145
  288.   RETURN "WHENColor"
  289. ELSEIF nTest = 146
  290.   RETURN "QueryWizard"
  291. ELSEIF nTest = 147
  292.   RETURN "GetSource 1"
  293. ELSEIF nTest = 148
  294.   RETURN "GetSource 2"
  295. ELSEIF nTest = 149
  296.   RETURN "DBU"
  297. ELSEIF nTest = 150
  298.   RETURN "PrintScreen"
  299. ELSEIF nTest = 151
  300.   RETURN "GRASTRING"
  301. ELSEIF nTest = 152
  302.   RETURN "DataToolTips"
  303. ELSEIF nTest = 153
  304.   RETURN "RJustGets"
  305. ELSEIF nTest = 154
  306.   RETURN "RJustPrint"
  307. ELSEIF nTest = 155
  308.   RETURN "DynamicAddr"
  309. ELSEIF nTest = 156
  310.   RETURN "MessageInto"
  311. ELSEIF nTest = 157
  312.   RETURN 'MoveColumn'
  313. ELSEIF nTest = 158
  314.   RETURN 'DropBrowse'
  315. ELSEIF nTest = 159
  316.   RETURN 'StaticButton'
  317. ELSEIF nTest = 160
  318.   RETURN 'Ascend/Descend'
  319. ELSEIF nTest = 161
  320.   RETURN 'Print Align'
  321. ELSEIF nTest = 162
  322.   RETURN 'Print Buttons'
  323. ENDIF
  324.  
  325. RETURN ''
  326.  
  327. * ---------------------------- *
  328.  
  329. STATIC FUNCTION XSample_Color( nTest )
  330.  
  331. LOCAL lVer20
  332.  
  333. #ifdef EXPRESS20
  334.   lVer20 := .t.
  335. #else
  336.   lVer20 := .f.
  337. #endif
  338.  
  339. IF lVer20
  340.   RETURN GRA_CLR_BLACK
  341. ENDIF
  342.  
  343. nTest += 132
  344.  
  345. IF nTest >= 137 .AND. ;
  346.     AScan({144,150,151,152,153,154,155,156,157,158,159,160,161,162},nTest) == 0
  347.   RETURN GRA_CLR_DARKGRAY
  348. ENDIF
  349.  
  350. RETURN GRA_CLR_BLACK
  351.  
  352. * -----------------
  353.  
  354. STATIC FUNCTION XSample_133()
  355.  
  356. /* This example shows how to merge to dialogs into one
  357.    with a common GetList and a single event loop */
  358.  
  359. LOCAL GetList := {}, aGetList1, aGetList2, dDate1 := Date(), ;
  360.       dDate2 := Date() + 2, cName1 := Space(10), cName2 := Space(10), ;
  361.       oDlg1, oDlg2
  362.  
  363. @ 0,0 DCSAY 'Enter Date 1' GET dDate1 ;
  364.       GETTOOLTIP 'Enter a Valid Start Date'
  365. @ 1,0 DCSAY 'Enter Date 2' GET dDate2 ;
  366.       GETTOOLTIP 'Enter a Valid End Date'
  367.  
  368. DCREAD GUI FIT ADDBUTTONS EXIT PARENT @oDlg1 SAVE ;
  369.       TITLE 'Enter Date Information'
  370.  
  371. aGetList1 := GetList
  372.  
  373. GetList := {}
  374.  
  375. @ 0,0 DCSAY 'Enter Name 1' GET cName1 ;
  376.       GETTOOLTIP 'Enter a Valid Start Name'
  377. @ 1,0 DCSAY 'Enter Name 2' GET cName2 ;
  378.       GETTOOLTIP 'Enter a Valid End Name'
  379.  
  380. DCREAD GUI FIT EXIT PARENT @oDlg2 SAVE ;
  381.       TITLE 'Enter Name Information'
  382.  
  383. oDlg2:setPos( { oDlg1:currentPos()[1], ;
  384.                 oDlg1:currentPos()[2] + oDlg1:currentSize()[2]} )
  385.  
  386. aGetList2 := GetList
  387.  
  388. GetList := DC_MergeGetLists( aGetList1, aGetList2 )
  389.  
  390. DC_ReadGuiEventLoop( GetList )
  391.  
  392. oDlg1:destroy()
  393. oDlg2:destroy()
  394.  
  395. RETURN nil
  396. *** END OF EXAMPLE ***
  397.  
  398. * ---------------------------- *
  399.  
  400. STATIC FUNCTION XSample_134()
  401.  
  402. /* This example shows how to use RGB colors in dialogs. */
  403.  
  404. LOCAL GetList := {}
  405.  
  406. @ 0,0 DCPUSHBUTTON CAPTION 'RGB Test (DCSAY)' SIZE 30,2 ;
  407.       ACTION {||RGBSayTest()}
  408.  
  409. @ 3,0 DCPUSHBUTTON CAPTION 'RGB Test (DCGRASTRING)' SIZE 30,2 ;
  410.       ACTION {||RGBGraTest()}
  411.  
  412. DCREAD GUI FIT BUTTONS DCGUI_BUTTON_EXIT TITLE 'RGB Tests'
  413.  
  414. RETURN nil
  415.  
  416. * -------------
  417.  
  418. STATIC FUNCTION RGBSayTest()
  419.  
  420. LOCAL GetList := {}, nRow, nCol, nRed, nGreen, nBlue
  421.  
  422. nRow := 0
  423. nCol := 0
  424.  
  425. FOR nRed := 0 TO 255 STEP 55
  426.    FOR nGreen := 0 TO 255 STEP 55
  427.       FOR nBlue := 0 TO 255 STEP 55
  428.          @ nRow, nCol ;
  429.             DCSAY Strtran(Str(nRed,3)+'/'+Str(nGreen,3)+'/'+Str(nBlue,3),' ','0') ;
  430.                 COLOR {nRed,nGreen,nBlue}
  431.          nCol += 11
  432.          IF nCol > 70
  433.            nCol := 0
  434.            nRow++
  435.          ENDIF
  436.       NEXT
  437.    NEXT
  438. NEXT
  439.  
  440. @ nRow, nCol DCSAY '255/255/255' COLOR {255,255,255}
  441.  
  442. DCREAD GUI FIT TITLE 'RGB Color Test (DCSAY)' CLEAREVENTS
  443.  
  444. RETURN nil
  445.  
  446. * -------------------
  447.  
  448. STATIC FUNCTION RGBGraTest()
  449.  
  450. LOCAL GetList := {}, nRow, nCol, nRed, nGreen, nBlue
  451.  
  452. nRow := 1
  453. nCol := 0
  454.  
  455. @ 0,0 DCSAY ''
  456. FOR nRed := 0 TO 255 STEP 55
  457.    FOR nGreen := 0 TO 255 STEP 55
  458.       FOR nBlue := 0 TO 255 STEP 55
  459.          @ nRow, nCol ;
  460.             DCGRASTRING Strtran(Str(nRed,3)+'/'+Str(nGreen,3)+'/'+Str(nBlue,3),' ','0') ;
  461.                 COLOR {nRed,nGreen,nBlue}
  462.          nCol += 11
  463.          IF nCol > 70
  464.            nCol := 0
  465.            nRow++
  466.          ENDIF
  467.       NEXT
  468.    NEXT
  469. NEXT
  470.  
  471. @ nRow, nCol DCGRASTRING '255/255/255' COLOR {255,255,255}
  472. @ nRow, nCol + 8 DCSAY ''
  473.  
  474. DCREAD GUI FIT CLEAREVENTS MODAL ;
  475.    TITLE 'RGB Color Test (DCGRASTRING)'
  476.  
  477. RETURN nil
  478. *** END OF EXAMPLE ***
  479.  
  480. * ---------------------------- *
  481.  
  482. STATIC FUNCTION XSample_135()
  483.  
  484. /* This example shows how to use the presentation Parameters
  485.    editor to selection PP options */
  486.  
  487. LOCAL GetList := {}, aPres, aDir := Directory(), oBrowse, GetOptions
  488.  
  489. aPres := DC_PresEdit(DC_BrowPres())
  490.  
  491. @ 0,0 DCBROWSE oBrowse SIZE 50,10 DATA aDir PRESENTATION aPres
  492.  
  493. DCBROWSECOL ELEMENT 1 PARENT oBrowse HEADER 'File Name' WIDTH 10
  494. DCBROWSECOL ELEMENT 2 PARENT oBrowse HEADER 'File Size' WIDTH 10
  495. DCBROWSECOL ELEMENT 3 PARENT oBrowse HEADER 'File Date' WIDTH 10
  496. DCBROWSECOL ELEMENT 4 PARENT oBrowse HEADER 'File Time' WIDTH 10
  497.  
  498. DCGETOPTIONS PRESENTATION aPres
  499.  
  500. DCREAD GUI FIT ADDBUTTONS MODAL OPTIONS GetOptions ;
  501.    TITLE 'Presentation Example'
  502.  
  503. RETURN nil
  504. *** END OF EXAMPLE ***
  505.  
  506. * ---------------------------- *
  507.  
  508. STATIC FUNCTION XSample_136()
  509.  
  510. /* This example shows how to use the RGB Color Picker */
  511.  
  512. LOCAL GetList := {}, aRGBColor, GetOptions, oSay
  513.  
  514. aRGBColor := { {0,0,0}, {0,0,0} }
  515. SET WRAP ON
  516.  
  517. @ 0,0 DCSAY 'Red Foreground' GET aRGBColor[1,1] RANGE 0,255
  518. @ 1,0 DCSAY 'Green Foreground' GET aRGBColor[1,2] RANGE 0,255
  519. @ 2,0 DCSAY 'Blue Foreground' GET aRGBColor[1,3] RANGE 0,255
  520.  
  521. @ 4,0 DCSAY 'Red Background' GET aRGBColor[2,1] RANGE 0,255
  522. @ 5,0 DCSAY 'Green Background' GET aRGBColor[2,2] RANGE 0,255
  523. @ 6,0 DCSAY 'Blue Background' GET aRGBColor[2,3] RANGE 0,255
  524.  
  525. @ 8,0 DCPUSHBUTTON CAPTION 'Color Picker' SIZE 12,1.2 ;
  526.       ACTION {|a|a := DC_PopColor(aRGBColor,0,.t.), ;
  527.                  aRGBColor[1,1] := a[1,1], ;
  528.                  aRGBColor[1,2] := a[1,2], ;
  529.                  aRGBColor[1,3] := a[1,3], ;
  530.                  aRGBColor[2,1] := a[2,1], ;
  531.                  aRGBColor[2,2] := a[2,2], ;
  532.                  aRGBColor[2,3] := a[2,3], ;
  533.                 DC_GetRefresh(GetList) }
  534.  
  535. @11,0 DCSAY 'Compound Color' SAYSIZE 0 FONT '14.Arial Bold' ;
  536.       OBJECT oSay ;
  537.       WHEN {|o|o:setColorFG(GraMakeRGBColor(aRGBColor[1])), ;
  538.                o:setColorBG(GraMakeRGBColor(aRGBColor[2])), ;
  539.               .t.}
  540.  
  541. DCGETOPTIONS SAYRIGHT SAYWIDTH 120
  542. DCREAD GUI FIT ADDBUTTONS MODAL TITLE 'RGB Color Picker' ;
  543.    OPTIONS GetOptions EVAL {|o|SetAppWindow(o)}
  544.  
  545. RETURN nil
  546. *** END OF EXAMPLE ***
  547.  
  548. * ---------------------------- *
  549.  
  550. STATIC FUNCTION XSample_137()
  551. /* This example shows how the function DC_CallStack() is
  552.    integrated to work with your own editor */
  553.  
  554. LOCAL GetList := {}, GetOptions
  555.  
  556. @ 1,0 DCSAY 'When you click on "Call Stack", the source for this program will be'
  557. @ 2,0 DCSAY 'compiled into an .OBJ file.  In normal debugging situations, your'
  558. @ 3,0 DCSAY '.OBJ files will already exist.  A Call Stack window will be displayed.'
  559.  
  560. @ 5,0 DCSAY 'When the Call Stack is displayed, click on any function that starts'
  561. @ 6,0 DCSAY 'with an X.  This will create a file named DCPUBLIC.TXT from all the'
  562. @ 7,0 DCSAY '.OBJ files in the current directory and find the name of the .OBJ'
  563. @ 8,0 DCSAY 'that contains the selected function.  The .OBJ will then be scanned'
  564. @ 9,0 DCSAY 'to find the full-path name of the associated .PRG, then your editor'
  565. @10,0 DCSAY 'will be called with the name of the .PRG and the line number.'
  566.  
  567. @12,0 DCPUSHBUTTON CAPTION 'Call Stack' SIZE 12,2 ;
  568.       ACTION {||DC_Compile('XSAMPLE8'),DC_CallStack()}
  569. DCGETOPTIONS SAYFONT '10.Arial' SAYWIDTH 0
  570. DCREAD GUI FIT ADDBUTTONS MODAL TITLE 'Call Stack' ;
  571.    EVAL {|o|SetAppWindow(o)} ;
  572.    OPTIONS GetOptions
  573.  
  574. RETURN nil
  575. *** END OF EXAMPLE ***
  576.  
  577. * ---------------------------- *
  578.  
  579. FUNCTION XSample_138()
  580. /* This example shows how to use the File Dictionary to
  581.    open databases and indexes, set relations, etc.
  582.    This example opens the MYSTUFF file group */
  583.  
  584. DC_FileRest('MYSTUFF')
  585. DC_WorkTree()
  586. CLOSE ALL
  587.  
  588. RETURN nil
  589. *** END OF EXAMPLE ***
  590.  
  591. * ---------------------------- *
  592.  
  593. STATIC FUNCTION XSample_139()
  594.  /* This example opens a user-specified file group
  595.     and displays a work area tree or a browse */
  596.  
  597. LOCAL GetList := {}, cFileGroup := Space(10)
  598.  
  599. @ 1,0 DCSAY 'File Group to Open' GET cFileGroup PICT '@' ;
  600.       POPUP {|c|DC_FilePik(c)}
  601.  
  602. @ 3,0 DCPUSHBUTTON CAPTION 'Open' SIZE 10,2 ;
  603.       TOOLTIP 'Open Files and Display Work Area Tree' ;
  604.       ACTION {||dbCloseAll(), ;
  605.                 DC_FileRest(cFileGroup), ;
  606.                 DC_WorkTree() }
  607.  
  608. @ 3,12 DCPUSHBUTTON CAPTION 'Browse' SIZE 10,2 ;
  609.       TOOLTIP 'Open Files and Browse All Work Areas' ;
  610.       ACTION {||dbCloseAll(), ;
  611.                 DC_FileRest(cFileGroup), ;
  612.                 WorkBrowse() }
  613.  
  614. @ 3,24 DCPUSHBUTTON CAPTION 'Edit' SIZE 10,2 ;
  615.       TOOLTIP 'Edit File Group' ;
  616.       ACTION {||DC_FileEdit(cFileGroup)}
  617.  
  618. DCREAD GUI FIT ADDBUTTONS MODAL TITLE 'File Group Example #2' ;
  619.   EVAL {|o|SetAppWindow(o)}
  620.  
  621. CLOSE ALL
  622.  
  623. RETURN nil
  624.  
  625. * -------------
  626.  
  627. STATIC FUNCTION WorkBrowse()
  628.  
  629. LOCAL GetList := {}, GetOptions, aTabPage := {}, aBrowse := {}, i, ;
  630.       cAlias, nCount := 0, j
  631.  
  632. FOR i := 1 TO 255
  633.   cAlias := Alias(i)
  634.   IF !Empty(cAlias)
  635.     SELE (i)
  636.     GO TOP
  637.     nCount++
  638.     ASize(aTabPage,nCount)
  639.     ASize(aBrowse,nCount)
  640.     IF nCount = 1
  641.       @ 0,0 DCTABPAGE aTabPage[nCount] SIZE 90,20 CAPTION cAlias
  642.     ELSE
  643.       @ 0,0 DCTABPAGE aTabPage[nCount] RELATIVE aTabPage[nCount-1] ;
  644.             CAPTION cAlias
  645.     ENDIF
  646.  
  647.     @ 2,2 DCBROWSE aBrowse[nCount] SIZE 86, 17 ALIAS cAlias ;
  648.           PRESENTATION DC_BrowPres() PARENT aTabPage[nCount]
  649.     FOR j := 1 TO (cAlias)->(FCount())
  650.       DCBROWSECOL DATA &('{||' + cAlias + '->' + FieldName(j) + '}') ;
  651.          PARENT aBrowse[nCount] HEADER (cAlias)->(FieldName(j))
  652.     NEXT
  653.   ENDIF
  654. NEXT
  655.  
  656. DCGETOPTIONS BUSYMESSAGE 'Please wait while building dialog'
  657. DCREAD GUI FIT MODAL TITLE 'Browsing All Work Areas' ;
  658.    OPTIONS GetOptions CLEAREVENTS
  659.  
  660. RETURN nil
  661. *** END OF EXAMPLE ***
  662.  
  663. * ---------------------------- *
  664.  
  665. STATIC FUNCTION XSample_140()
  666. /* This example shows how to use the field dictionary to
  667.    set up Descriptors, Validations, Prompts, etc */
  668.  
  669. LOCAL aFields
  670.  
  671. USE COLLECT VIA DBFNTX
  672. DC_FieldEdit()
  673. aFields := DC_FieldLoad('COLLECT')
  674. DC_ArrayView(aFields)
  675.  
  676. RETURN nil
  677. *** END OF EXAMPLE ***
  678.  
  679. * ---------------------------- *
  680.  
  681. STATIC FUNCTION XSample_141()
  682. /* This example shows how to use the field dictionary to
  683.    display a data-driven browse and data-entry screen */
  684.  
  685. LOCAL GetList := {}, i, aFieldGroup, oBrowse, cAlias, aFieldOpt, ;
  686.       aFieldItems, oTabPage1, oTabPage2, oTabPage2Static, bGetSet, ;
  687.       bKeyBlock, bPopUp, GetOptions, bCompile
  688.  
  689. DC_FileRest('COLLECT')
  690. aFieldGroup := DC_FieldLoad('COLLECT')
  691. aFieldOpt := aFieldGroup[1]
  692. aFieldItems := aFieldGroup[2]
  693. cAlias := 'COLLECT'
  694.  
  695. @ 0,0 DCTABPAGE oTabPage1 SIZE 84,18 CAPTION 'Browse' ;
  696.       GOTFOCUS {||oBrowse:RefreshAll()}
  697.  
  698. @ 0,0 DCTABPAGE oTabPage2 RELATIVE oTabPage1 CAPTION 'Edit' ;
  699.       STATICAREA oTabPage2Static ;
  700.       GOTFOCUS {||DC_RecLock(), ;
  701.                   DC_GetRefresh(GetList)}
  702.  
  703. @ 2,2 DCBROWSE oBrowse SIZE 80,15 ALIAS 'COLLECT' ;
  704.    PRESENTATION DC_BrowPres() PARENT oTabPage1
  705.  
  706. FOR i := 1 TO Len(aFieldItems)
  707.  
  708.   bCompile := DC_GetBlock(aFieldItems[i,DCFLD_COMPILE])
  709.   IF Valtype(bCompile) = 'B' .AND. !Eval(bCompile)
  710.     LOOP
  711.   ENDIF
  712.  
  713.   DCBROWSECOL DATA &('{||' + cAlias + '->' + ;
  714.        aFieldItems[i,DCFLD_NAME] + '}') ;
  715.      PARENT oBrowse HEADER aFieldItems[i,DCFLD_DESC] ;
  716.      MESSAGE aFieldItems[i,DCFLD_PROMPT] ;
  717.      PROTECT aFieldItems[i,DCFLD_PROTECT] ;
  718.      WHEN aFieldItems[i,DCFLD_WHEN] ;
  719.      FONT aFieldItems[i,DCFLD_FONT] ;
  720.      HELPCODE aFieldItems[i,DCFLD_HELPCODE]
  721.  
  722.   IF aFieldItems[i,DCFLD_TYPE] = 'M'
  723.     bGetSet := 'MEMO'
  724.     bKeyBlock := {|a,b,o|o:undo()}
  725.     bPopUp := MemoBlock(i,cAlias,aFieldItems[i,DCFLD_DESC])
  726.   ELSE
  727.     bGetSet := DC_FieldWBlock(aFieldItems[i,DCFLD_NAME],cAlias)
  728.     bKeyBlock := nil
  729.     IF !Empty(aFieldItems[i,DCFLD_POPUP])
  730.       bPopUp := aFieldItems[i,DCFLD_POPUP]
  731.     ELSEIF aFieldItems[i,DCFLD_VALTYPE] $ 'TCVD' // table, choice, view, datapick
  732.       bPopUp := PopupBlock(i,aFieldItems)
  733.     ELSEIF aFieldItems[i,DCFLD_TYPE] = 'D'
  734.       bPopUp := {|d|DC_PopDate()}
  735.     ELSE
  736.       bPopUp := nil
  737.     ENDIF
  738.   ENDIF
  739.  
  740.   @ i-.5,2 DCSAY aFieldItems[i,DCFLD_DESC] ;
  741.      GET bGetSet ;
  742.      POPUP bPopUp ;
  743.      PARENT oTabPage2Static ;
  744.      KEYBLOCK bKeyBlock ;
  745.      PICTURE aFieldItems[i,DCFLD_PICT] ;
  746.      MESSAGE aFieldItems[i,DCFLD_PROMPT] ;
  747.      EDITPROTECT aFieldItems[i,DCFLD_PROTECT] ;
  748.      WHEN aFieldItems[i,DCFLD_WHEN] ;
  749.      VALID ValidBlock(i, aFieldItems, ;
  750.         aFieldItems[i,DCFLD_VALTYPE],aFieldItems[i,DCFLD_VALID],cAlias) ;
  751.      HELPCODE aFieldItems[i,DCFLD_HELPCODE] ;
  752.      GETFONT aFieldItems[i,DCFLD_FONT]
  753.  
  754. NEXT
  755.  
  756. @ 18,0 DCMESSAGEBOX TYPE XBPSTATIC_TYPE_RECESSEDBOX ;
  757.        FONT '12.Arial Bold' COLOR GRA_CLR_DARKBLUE ;
  758.        SIZE 84,1.2
  759.  
  760. DCGETOPTIONS SAYWIDTH 150 SAYRIGHT AUTORESIZE
  761. DCREAD GUI FIT ADDBUTTONS MODAL ;
  762.    TITLE aFieldOpt[DCFLDGROUP_DESC] ;
  763.    CLEAREVENTS ;
  764.    OPTIONS GetOptions ;
  765.    EVAL {|o|SetAppWindow(o)}
  766.  
  767. RETURN nil
  768.  
  769. * -----------------------------
  770.  
  771. STATIC FUNCTION MemoBlock( i, cAlias, cDesc )
  772.  
  773. RETURN {|c,x|x:=(cAlias)->(FieldGet(i)), ;
  774.           x:=DC_MemoBase(x,{,,,,,,,,,,,,,'Editing Memo: ' + cDesc}), ;
  775.           FieldPut(i,x),c}
  776.  
  777. * -----------------------------
  778.  
  779. STATIC FUNCTION PopUpBlock( i, aFieldItems )
  780.  
  781. RETURN {|c|DC_FieldValidate(@c, aFieldItems, i, .t. ),c}
  782.  
  783. * -----------------------------
  784.  
  785. STATIC FUNCTION ValidBlock( i, aFieldItems, cValtype, cFormula, cAlias )
  786.  
  787. IF Empty(cValtype)
  788.   RETURN cFormula
  789. ENDIF
  790.  
  791. RETURN {||DC_FieldValidate( (cAlias)->(FieldGet(i)), aFieldItems, i ) }
  792. *** END OF EXAMPLE ***
  793.  
  794. * ---------------------------- *
  795.  
  796. STATIC FUNCTION XSample_142()
  797. /* This example shows how to use code tables
  798.    in validations and PopUps */
  799.  
  800. LOCAL GetList := {}, cName := Space(25), cPosition := '  ', ;
  801.       cTeam := Space(10), GetOptions
  802.  
  803. @ 1,0 DCSAY 'Player Name' GET cName PROPER
  804.  
  805. @ 2,0 DCSAY '  Team Name' GET cTeam ;
  806.       POPUP {|c|DC_CodeGet('TEAMS',cTeam,,.t.)}
  807.  
  808. @ 3,0 DCSAY '   Position' GET cPosition ;
  809.       POPUP {|c|DC_CodeGet('BASEBALL',cPosition,,.t.)}
  810.  
  811. @ 5,0 DCPUSHBUTTON CAPTION "Edit Code Tables" SIZE 20,1.2  ;
  812.       ACTION {||DC_CodeEdit()}
  813.  
  814. DCGETOPTIONS TABSTOP SAYRIGHT SAYWIDTH 80
  815. DCREAD GUI FIT ADDBUTTONS MODAL TITLE 'Enter Player Information' ;
  816.    EVAL {|o|SetAppWindow(o)} ;
  817.    OPTIONS GetOptions
  818.  
  819. RETURN nil
  820. *** END OF EXAMPLE ***
  821.  
  822. * ---------------------------- *
  823.  
  824. STATIC FUNCTION XSample_143()
  825. /*
  826. Drag and Drop (database)
  827.  
  828. This sample demonstrates dragging a value from a field/record in
  829. a database browse to another record.  The value in the cell
  830. that is grabbed is copied to the same field of the new record.
  831. */
  832.  
  833. LOCAL GetList := {}, oBrowse
  834.  
  835. USE XTEST VIA 'DBFCDX' INDEX XTEST.CDX EXCLUSIVE
  836. OrdSetFocus(0)
  837.  
  838. @ 0,0 DCBROWSE oBrowse ALIAS 'XTEST' SIZE 45,10 ;
  839.       PRESENTATION DC_BrowPres()
  840. DCSETPARENT oBrowse
  841. DCBROWSECOL FIELD XTEST->date HEADER 'Date' Width 8
  842. DCBROWSECOL FIELD XTEST->time HEADER 'Time' Width 8
  843. DCBROWSECOL FIELD XTEST->tel_called HEADER 'Number Called' Width 10
  844.  
  845. DCREAD GUI ;
  846.    FIT ;
  847.    MODAL ;
  848.    BUTTONS DCGUI_BUTTON_EXIT ;
  849.    TITLE 'Drag a Value from one Row to another' ;
  850.    HANDLER _XSample_143 REFERENCE @oBrowse
  851.  
  852. RETURN nil
  853.  
  854. /* ------------------- */
  855.  
  856. STATIC FUNCTION ;
  857.   _XSample_143 ( nEvent, mp1, mp2, oXbp, oDlg, GetList, oBrowse )
  858.  
  859. STATIC lButtonDown := .f., nTopRow, nGrabRow, xValue, oCellGroup
  860.  
  861. LOCAL oColumn, nRowPos, nRecNo, nNewRecNo, i, lHitBottom := .f.
  862.  
  863. IF Valtype(oXbp) = 'O'
  864.  
  865.   /* -- Left button pressed in a cell -- */
  866.   IF nEvent = xbeM_LbDown .AND. oXbp:ClassName() = 'XbpCellGroup'
  867.  
  868.     nRowPos := Int((oXbp:currentSize()[2]-mp1[2]) / (oXbp:CellRect(1)[4]-oXbp:CellRect(1)[2]))
  869.     oBrowse:forcestable()
  870.     IF oBrowse:colpos == 1
  871.       xValue := XTEST->date
  872.     ELSEIF oBrowse:colpos == 2
  873.       xValue := XTEST->time
  874.     ELSE
  875.       xValue := XTEST->tel_called
  876.     ENDIF
  877.     nRecNo := OrdKeyNo()  // Get current record positioin
  878.     nTopRow := nRecNo - nRowPos
  879.     nGrabRow := nRecNo
  880.     oBrowse:setPointer( nil, POINTER_MOVE_1, 1)
  881.     lButtonDown := .t.
  882.     oCellGroup := oXbp
  883.  
  884.     /* -- Left button released in new cell -- */
  885.   ELSEIF nEvent = xbeM_LbUp .AND. oXbp:ClassName() = 'XbpCellGroup' .AND. ;
  886.          oXbp == oCellGroup
  887.  
  888.     nRowPos := Int((oXbp:currentSize()[2]-mp1[2]) / ;
  889.         (oXbp:CellRect(1)[4]-oXbp:CellRect(1)[2]))
  890.     nRecNo := OrdKeyNo()
  891.     nNewRecNo := nTopRow + nRowPos
  892.     IF nNewRecNo < nRecNo
  893.       FOR i := 1 TO ( nRecNo-nNewRecNo)
  894.         oBrowse:up()
  895.       NEXT
  896.     ELSE
  897.       FOR i := 1 TO ( nNewRecNo-nRecNo)
  898.         oBrowse:down()
  899.       NEXT
  900.     ENDIF
  901.     oBrowse:forceStable()
  902.     IF oBrowse:colpos == 1
  903.       XTEST->date := xValue
  904.     ELSEIF oBrowse:colpos == 2
  905.       XTEST->time := xValue
  906.     ELSE
  907.       XTEST->tel_called := xValue
  908.     ENDIF
  909.     oBrowse:refreshAll()
  910.     oBrowse:setPointer( nil, 1, 1 )
  911.     lButtonDown := .f.
  912.  
  913.   ELSEIF lButtonDown
  914.  
  915.     oBrowse:setPointer( nil, POINTER_MOVE_1, 1)
  916.  
  917.     /* -- Mouse moved in Bottom ScrollBar area -- */
  918.     IF nEvent = xbeM_Motion .AND. oXbp:ClassName() = 'XbpScrollbar' .AND. ;
  919.        oXbp:type = XBPSCROLL_HORIZONTAL
  920.       DO WHILE oBrowse:cargo[4] < Len(oBrowse:cargo[5])
  921.         IF oBrowse:RowPos+1 = oBrowse:RowCount
  922.            nTopRow++
  923.         ENDIF
  924.         oBrowse:down()
  925.         oBrowse:refreshAll()
  926.         nEvent := AppEvent( @mp1, @mp2, @oXbp, .1 )
  927.         IF nEvent = xbeM_LbUp
  928.            EXIT
  929.         ELSEIF nEvent = xbeP_None .OR. Valtype(oXbp) # 'O' .OR. oXbp:ClassName() = 'XbpScrollbar'
  930.            Sleep(7)
  931.            LOOP
  932.         ENDIF
  933.         EXIT
  934.       ENDDO
  935.     /* -- Mouse moved in Header area -- */
  936.     ELSEIF nEvent = xbeM_Motion .AND. oXbp:ClassName() = 'XbpCellGroup' .AND. ;
  937.            !(oXbp==oCellGroup) .AND. oXbp:setParent()==oCellGroup:setParent()
  938.       DO WHILE OrdKeyNo() > 1
  939.         IF oBrowse:RowPos = 1
  940.            nTopRow--
  941.         ENDIF
  942.         oBrowse:up()
  943.         oBrowse:refreshAll()
  944.         nEvent := AppEvent( @mp1, @mp2, @oXbp, .1 )
  945.         IF nEvent = xbeM_LbUp
  946.            EXIT
  947.         ELSEIF nEvent = xbeP_None .OR. Valtype(oXbp) # 'O' .OR. ;
  948.            (oXbp:ClassName() = 'XbpCellGroup' .AND. ;
  949.             !(oXbp==oCellGroup) .AND. oXbp:setParent()==oCellGroup:setParent())
  950.            Sleep(7)
  951.            LOOP
  952.         ENDIF
  953.         EXIT
  954.       ENDDO
  955.     ENDIF
  956.  
  957.   ENDIF
  958.  
  959. ENDIF
  960. IF nEvent = xbeM_LbUp
  961.    lButtonDown := .f.
  962. ENDIF
  963.  
  964. RETURN DCGUI_NONE
  965. *** END OF EXAMPLE ***
  966.  
  967. * ---------------------------- *
  968.  
  969. FUNCTION XSample_144()
  970.  
  971. /* This example demonstrates how to create a dialog that
  972.    builds objects and adds items to the GetList on demand
  973.    rather than all at once.  This improves performance
  974.    by creating the objects only when they are needed and
  975.    saves on Windows resources by destroying objects when
  976.    the tabpage loses focus.  The Gets on a Tab Page will
  977.    be created when the respective Tab Page is selected and
  978.    only if it is selected.  The Gets are destroyed and
  979.    removed from the GetList on all tab pages that are not
  980.    visible. */
  981.  
  982. LOCAL GetList := {}, aTabPages[8], aGets[8,20], i, j, aBuildGets[8], ;
  983.       GetOptions, bGotFocus
  984.  
  985. AFill(aBuildGets,.t.)
  986. FOR i := 1 TO 8
  987.   bGotFocus := BuildBlock(aTabPages,aBuildGets,i,GetList,aGets)
  988.   IF i = 1
  989.     @ 0,0 DCTABPAGE aTabPages[i] SIZE 80,23 ;
  990.           CAPTION 'Page ' + Alltrim(Str(i)) PREOFFSET 0 POSTOFFSET 90 ;
  991.           GOTFOCUS bGotFocus
  992.   ELSE
  993.     @ 0,0 DCTABPAGE aTabPages[i] RELATIVE aTabPages[i-1] ;
  994.           CAPTION 'Page ' + Alltrim(Str(i)) ;
  995.           GOTFOCUS bGotFocus
  996.   ENDIF
  997. NEXT
  998.  
  999. bGotFocus := BuildBlock(aTabPages,aBuildGets,1,GetList,aGets)
  1000.  
  1001. DCGETOPTIONS AUTORESIZE
  1002.  
  1003. DCREAD GUI FIT TITLE 'Gets are created "On Demand"' MODAL ;
  1004.    OPTIONS GetOptions EVAL bGotFocus
  1005.  
  1006. RETURN nil
  1007.  
  1008. * ------------------
  1009.  
  1010. STATIC FUNCTION BuildBlock( aTabPages, aBuildGets, i, GetList, aGets )
  1011.  
  1012. RETURN {||BuildGets(aTabPages,aBuildGets,i,GetList,aGets)}
  1013.  
  1014. * ------------------
  1015.  
  1016. STATIC FUNCTION BuildGets( aTabPages, aBuildGets, i, aGetList, aGets )
  1017.  
  1018. LOCAL j, GetOptions, GetList := {}
  1019.  
  1020. IF aBuildGets[i]
  1021.  
  1022.   aBuildGets[i] := .f.
  1023.   FOR j := 1 TO 20
  1024.     aGets[i,j] := Pad('This is the data in Get ' + ;
  1025.        Alltrim(Str(i)) + '/' + Alltrim(Str(j)),40)
  1026.     @ j+1, 5 DCSAY 'This is Say ' + ;
  1027.        Alltrim(Str(i)) + '/' + Alltrim(Str(j)) ;
  1028.        GET aGets[i,j] PARENT aTabPages[i] ;
  1029.        SAYSIZE 15
  1030.   NEXT
  1031.  
  1032.   #ifdef EXPRESS17
  1033.     aTabPages[i]:lockUpdate(.t.)
  1034.   #endif
  1035.   DCREAD GUI PARENT aTabPages[i] EXIT SAVE
  1036.   DC_MergeGetLists(aGetList,GetList)
  1037.   #ifdef EXPRESS17
  1038.     aTabPages[i]:lockUpdate(.f.)
  1039.   #endif
  1040.  
  1041. ENDIF
  1042.  
  1043. #ifdef EXPRESS17
  1044. FOR j := 1 TO Len(aTabPages)
  1045.   IF j # i .AND. !aBuildGets[j]
  1046.     aBuildGets[j] := .t.
  1047.     DC_GetDestroy( aGetList,aTabPages[j],.t.,.t.)
  1048.   ENDIF
  1049. NEXT
  1050. #endif
  1051.  
  1052. RETURN nil
  1053. *** END OF EXAMPLE ***
  1054.  
  1055. * ---------------------------- *
  1056.  
  1057. STATIC FUNCTION XSample_145()
  1058. /* This example shows how to use the DISABLEDCOLOR clause
  1059.    of DCGETOPTIONS to set the color of objects when are
  1060.    are disabled by the WHEN clause of DC* commands */
  1061.  
  1062. LOCAL GetList := {}, GetOptions, aGets[10], i
  1063.  
  1064. FOR i := 1 TO 10
  1065.    aGets[i] := Pad('This is GET ' + Alltrim(Str(i)),30)
  1066.    @ i,1 DCSAY 'This is Say ' + Alltrim(Str(i)) GET aGets[i] ;
  1067.          SAYSIZE 15 SAYRIGHT ;
  1068.          WHEN _Modulus(i)
  1069. NEXT
  1070.  
  1071. DCGETOPTIONS DISABLEDCOLOR { 50,100,0 }
  1072.  
  1073. DCREAD GUI FIT ADDBUTTONS TITLE 'WHEN Color' ;
  1074.    OPTIONS GetOptions ;
  1075.    EVAL {||SetTimerEvent(110,{||DC_GetRefresh(GetList)})}
  1076.  
  1077. SetTimerEvent(0)
  1078.  
  1079. RETURN nil
  1080.  
  1081. * ------------
  1082.  
  1083. FUNCTION _Modulus(i)
  1084.  
  1085. RETURN {||Int(Val(Str(Seconds())[9])) % i = 0}
  1086. *** END OF EXAMPLE ***
  1087.  
  1088. * ---------------------------- *
  1089.  
  1090. STATIC FUNCTION XSample_146( lExit )
  1091.  
  1092. /* This example shows how to use the Query Wizard to
  1093.    create complex logical conditions based on simple,
  1094.    easy-to-use pick lists of options */
  1095.  
  1096. LOCAL GetList := {}, GetOptions, oBrowse, cDataFilter := '', ;
  1097.       cIndexFilter := '', i, aStructure, oDialog
  1098.  
  1099. DEFAULT lExit := .f.
  1100.  
  1101. USE XTEST VIA 'DBFCDX'
  1102.  
  1103. @ 0,0 DCBROWSE oBrowse ALIAS 'XTEST' SIZE 80,10 ;
  1104.       PRESENTATION DC_BrowPres()
  1105.  
  1106. aStructure := dbStruct()
  1107. FOR i := 1 TO Len(aStructure)
  1108.   DCBROWSECOL DATA &('{||XTEST->'+aStructure[i,1]+'}') ;
  1109.     HEADER aStructure[i,1] WIDTH aStructure[i,3] ;
  1110.     PARENT oBrowse
  1111. NEXT
  1112.  
  1113. @ 11,0 DCSAY {||'Data Filter: ' + dbFilter()} SAYSIZE 80 ;
  1114.        COLOR GRA_CLR_BLUE
  1115.  
  1116. @ 12,0 DCSAY {||'Index Filter: ' + DC_IndexFilt()} SAYSIZE 80 ;
  1117.        COLOR GRA_CLR_BLUE
  1118.  
  1119. @ 13.5,0 DCPUSHBUTTON CAPTION '&Data Filter' SIZE 15,1.2 ;
  1120.        ACTION {||_SetFilter(@cDataFilter,GetList)}
  1121.  
  1122. @ 13.5,17 DCPUSHBUTTON CAPTION '&Index Filter' SIZE 15,1.2 ;
  1123.        ACTION {||_SetIndex(@cIndexFilter,GetList)}
  1124.  
  1125. @ 13.5,34 DCPUSHBUTTON CAPTION 'E&xit' SIZE 15,1.2 ;
  1126.        ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}
  1127.  
  1128. IF !lExit
  1129.   DCREAD GUI FIT MODAL TITLE 'Query Builder Example'
  1130.   CLOSE ALL
  1131. ENDIF
  1132.  
  1133. RETURN GetList
  1134.  
  1135. * -----------------
  1136.  
  1137. PROCEDURE _SetFilter( cQuery, GetList )
  1138.  
  1139. LOCAL bQuery
  1140.  
  1141. cQuery := DC_QueryBuild(cQuery)
  1142. IF !Empty(cQuery)
  1143.   bQuery := &('{||'+cQuery+'}')
  1144.   dbSetFilter(bQuery,cQuery)
  1145. ELSE
  1146.   SET FILTER TO
  1147. ENDIF
  1148. GO TOP
  1149. DC_GetRefresh(GetList)
  1150.  
  1151. RETURN
  1152.  
  1153. * -----------------
  1154.  
  1155. PROCEDURE _SetIndex( cQuery, GetList )
  1156.  
  1157. LOCAL bQuery
  1158.  
  1159. cQuery := DC_QueryBuild(cQuery)
  1160. IF !Empty(cQuery)
  1161.   bQuery := &('{||'+cQuery+'}')
  1162.   OrdCondSet( cQuery, bQuery )
  1163.   OrdCreate( 'XTEST.NTX', 'JUNK', 'AREACODE+EXCHANGE+NUMBER', ;
  1164.              {||AREACODE+EXCHANGE+NUMBER},.f.,.f. )
  1165. ELSE
  1166.   SET INDEX TO
  1167. ENDIF
  1168. GO TOP
  1169. DC_GetRefresh(GetList)
  1170.  
  1171. RETURN
  1172. *** END OF EXAMPLE ***
  1173.  
  1174. * ---------------------------- *
  1175.  
  1176. STATIC FUNCTION XSample_147()
  1177.  
  1178. /* This example shows how to use the DC_GetList2Source() function
  1179.    to write out command-based source code from the contents of
  1180.    a GetList.  In this example a call is made to XSample_146() to
  1181.    build a GetList. */
  1182.  
  1183. LOCAL lOk, cSource, GetList := {}, aGetList := XSample_146(.t.)
  1184.  
  1185. cSource := DC_GetList2Source(aGetList)
  1186. cSource += CRLF + 'DCREAD GUI FIT ADDBUTTONS TITLE "Test Browse"' + CRLF
  1187.  
  1188. @ 0,0 DCMULTILINE cSource SIZE 80,20 FONT '8.Courier New'
  1189.  
  1190. DCREAD GUI FIT ADDBUTTONS TO lOk ;
  1191.    TITLE 'Click OK to Interpret this code with DC_Interpret()'
  1192.  
  1193. IF lOk
  1194.   DC_Interpret(cSource)
  1195. ENDIF
  1196.  
  1197. CLOSE ALL
  1198. RETURN nil
  1199. *** END OF EXAMPLE ***
  1200.  
  1201. * ---------------------------- *
  1202.  
  1203. STATIC FUNCTION XSample_148( aGetList )
  1204.  
  1205. /* This example shows how to use the DC_GetList2Source() function
  1206.    to write out command-based source code from the contents of
  1207.    a GetList.  In this example, the GetList from this dialog is
  1208.    passed and will be converted to commands. */
  1209.  
  1210. LOCAL lOk, cSource, GetList := {}
  1211.  
  1212. cSource := DC_GetList2Source(aGetList)
  1213. cSource += CRLF + 'DCREAD GUI FIT ADDBUTTONS TITLE "Test Browse"' + CRLF
  1214.  
  1215. @ 0,0 DCMULTILINE cSource SIZE 90,20 FONT '10.Courier New'
  1216.  
  1217. DCREAD GUI FIT BUTTONS DCGUI_BUTTON_EXIT ;
  1218.    TITLE 'Command-based Source Code'
  1219.  
  1220. RETURN nil
  1221. *** END OF EXAMPLE ***
  1222.  
  1223. * ---------------------------- *
  1224.  
  1225. STATIC FUNCTION XSample_149()
  1226.  
  1227. /* This example shows how to use the DC_Dbu() function
  1228.    to invoke a Database Management Utility */
  1229.  
  1230. LOCAL oThread := Thread():new()
  1231. oThread:start({||DC_Dbu()})
  1232.  
  1233. RETURN nil
  1234. *** END OF EXAMPLE ***
  1235.  
  1236. * ---------------------------- *
  1237.  
  1238. STATIC FUNCTION XSample_150()
  1239.  
  1240. /* This example captures the current dialog to the
  1241.    ClipBoard and views the clipboard using the print previewer */
  1242.  
  1243. DC_Scrn2ClipBoard()
  1244. DC_PrintClipBoard(.t.)
  1245.  
  1246. RETURN nil
  1247. *** END OF EXAMPLE ***
  1248.  
  1249. * ---------------------------- *
  1250.  
  1251. STATIC FUNCTION XSample_151()
  1252.  
  1253. /* This example shows how to use the GRASTRING clause of
  1254.    DCSAY to produce a GraString() image instead of an
  1255.    XbpStatic() object.  Saves on resources.  The leftmost
  1256.    text is XbpStatic().  The rightmost text is GraString() */
  1257.  
  1258. LOCAL GetList := {}, oStatic, GetOptions
  1259.  
  1260. @ 0,0 DCSTATIC TYPE XBPSTATIC_TYPE_TEXT SIZE 90,25 OBJECT oStatic
  1261.  
  1262. DCSETPARENT TO oStatic
  1263.  
  1264. @ 1,0  DCSAY 'LEFTTOP_TEXT' SAYLEFTTOP ;
  1265.        COLOR GRA_CLR_WHITE, GRA_CLR_BLUE SAYSIZE 30
  1266. @ 1,35 DCSAY 'LEFTTOP_TEXT' GRASTRING SAYLEFTTOP ;
  1267.        COLOR GRA_CLR_WHITE, GRA_CLR_BLUE SAYSIZE 30
  1268.  
  1269. @ 3,0  DCSAY 'CENTER_TEXT_VERT' SAYVCENTER ;
  1270.        COLOR GRA_CLR_YELLOW, GRA_CLR_BLUE SAYSIZE 30
  1271. @ 3,35 DCSAY 'CENTER_TEXT_VERT' GRASTRING SAYVCENTER ;
  1272.        COLOR GRA_CLR_YELLOW, GRA_CLR_BLUE SAYSIZE 30
  1273.  
  1274. @ 5,0  DCSAY 'RIGHTBOTTOM_TEXT' SAYRIGHTBOTTOM ;
  1275.        COLOR GRA_CLR_GREEN, GRA_CLR_BLACK SAYSIZE 30
  1276. @ 5,35 DCSAY 'RIGHTBOTTOM_TEXT' GRASTRING SAYRIGHTBOTTOM ;
  1277.        COLOR GRA_CLR_GREEN, GRA_CLR_BLACK SAYSIZE 30
  1278.  
  1279. @ 7,0  DCSAY 'LEFTBOTTOM_TEXT' SAYLEFTBOTTOM ;
  1280.        COLOR GRA_CLR_GREEN, GRA_CLR_BLACK SAYSIZE 30
  1281. @ 7,35 DCSAY 'LEFTBOTTOM_TEXT' GRASTRING SAYLEFTBOTTOM ;
  1282.        COLOR GRA_CLR_GREEN, GRA_CLR_BLACK SAYSIZE 30
  1283.  
  1284. @ 9,0  DCSAY 'LEFTBOTTOM_TEXT' SAYLEFTBOTTOM SAYSIZE 0
  1285. @ 9,35 DCSAY 'LEFTBOTTOM_TEXT' GRASTRING SAYLEFTBOTTOM
  1286.  
  1287. @11,0  DCSAY 'CENTER_TEXT_HORIZ' SAYCENTER ;
  1288.        FONT '10.Courier New Bold' SAYSIZE 0
  1289. @11,35 DCSAY 'CENTER_TEXT_HORIZ' GRASTRING SAYCENTER ;
  1290.        FONT '10.Courier New Bold'
  1291.  
  1292. @13,0  DCSAY 'TOP_TEXT' SAYTOP FONT '24.Arial Bold' SAYSIZE 40,2.5 ;
  1293.        COLOR GRA_CLR_CYAN, GRA_CLR_BLACK
  1294. @13,45 DCSAY 'TOP_TEXT' GRASTRING SAYTOP FONT '24.Arial Bold' ;
  1295.        SAYSIZE 40,2.5 COLOR GRA_CLR_CYAN,GRA_CLR_BLACK
  1296.  
  1297. @16,0  DCSAY 'CENTER_VERT_HORIZ' SAYHVCENTER FONT '12.Arial Bold' ;
  1298.        SAYSIZE 40,1.7 COLOR GRA_CLR_YELLOW,GRA_CLR_GREEN
  1299. @16,45 DCSAY 'CENTER_VERT_HORIZ' GRASTRING SAYHVCENTER ;
  1300.        FONT '12.Arial Bold' SAYSIZE 40,1.7 COLOR GRA_CLR_YELLOW,GRA_CLR_GREEN
  1301.  
  1302. @19,0  DCSAY 'TOP' SAYTOP FONT '12.Arial Bold' SAYSIZE 40,2 ;
  1303.        COLOR GRA_CLR_YELLOW,GRA_CLR_GREEN
  1304. @19,45 DCSAY 'TOP' GRASTRING SAYTOP FONT '12.Arial Bold' SAYSIZE 40,2 ;
  1305.        COLOR GRA_CLR_YELLOW,GRA_CLR_GREEN
  1306.  
  1307. @22,0  DCSAY 'TOPLEFT' SAYLEFTTOP FONT '10.Arial Bold' SAYSIZE 40,1.5 ;
  1308.        COLOR GRA_CLR_YELLOW,GRA_CLR_RED
  1309. @22,45 DCSAY 'TOPLEFT' GRASTRING SAYLEFTTOP FONT '10.Arial Bold' ;
  1310.        SAYSIZE 40,1.5 COLOR GRA_CLR_YELLOW,GRA_CLR_RED
  1311.  
  1312. DCREAD GUI FIT ADDBUTTONS OPTIONS GetOptions MODAL
  1313.  
  1314. RETURN nil
  1315. *** END OF EXAMPLE ***
  1316.  
  1317. * ---------------------------- *
  1318.  
  1319. STATIC FUNCTION XSample_152()
  1320.  
  1321. /* This example shows how the DCBROWSECOL .. DATATOOLTIP clause
  1322.    can be used to expand the info in a cell */
  1323.  
  1324. LOCAL GetList := {}, oBrowse, lDataToolTips := .f., GetOptions
  1325.  
  1326. USE COLLECT VIA 'DBFNTX'
  1327.  
  1328. @ 0,0 DCBROWSE oBrowse SIZE 60,13 PRESENTATION DC_BrowPres() FIT
  1329.  
  1330. DCBROWSECOL FIELD COLLECT->descrip WIDTH 10 PARENT oBrowse ;
  1331.    TOOLTIP 'Description' HEADER "Description" DATATOOLTIP {||lDataToolTips}
  1332.  
  1333. DCBROWSECOL FIELD COLLECT->type PARENT oBrowse ;
  1334.    TOOLTIP 'Type' HEADER "Type"
  1335.  
  1336. DCBROWSECOL FIELD COLLECT->memo WIDTH 20 PARENT oBrowse ;
  1337.    TOOLTIP 'Memo' HEADER "Memo"  DATATOOLTIP {||lDataToolTips}
  1338.  
  1339. DCBROWSECOL FIELD COLLECT->bitmap1 WIDTH 7 PARENT oBrowse ;
  1340.    TOOLTIP 'BitMap 1' HEADER "BitMap 1"  ;
  1341.    DATATOOLTIP {||lDataToolTips} TIPBLOCK {||_XSample_152(COLLECT->bitmap1)}
  1342.  
  1343. DCBROWSECOL FIELD COLLECT->bitmap2 WIDTH 7 PARENT oBrowse ;
  1344.    TOOLTIP 'BitMap 1' HEADER "BitMap 2"  ;
  1345.    DATATOOLTIP {||lDataToolTips} TIPBLOCK {||_XSample_152(COLLECT->bitmap2)}
  1346.  
  1347. @ 14,0 DCCHECKBOX lDataToolTips PROMPT 'Show DataArea Tooltips'
  1348.  
  1349. DCGETOPTIONS TOOLTIPCOLOR GRA_CLR_BLACK, GRA_CLR_CYAN
  1350.  
  1351. DCREAD GUI FIT MODAL ADDBUTTONS TITLE 'Data Area ToolTips' ;
  1352.    OPTIONS GetOptions
  1353.  
  1354. CLOSE ALL
  1355.  
  1356. RETURN nil
  1357.  
  1358. * ---------------
  1359.  
  1360. STATIC FUNCTION _XSample_152(cBitMap)
  1361.  
  1362. STATIC oBitMap
  1363. LOCAL cPath := DC_Path(AppName(.t.))
  1364.  
  1365. IF Valtype(oBitMap) = 'O' .AND. oBitMap:status() > 0
  1366.   oBitMap:destroy()
  1367. ENDIF
  1368.  
  1369. oBitMap := XbpBitmap():new():create()
  1370. oBitMap:loadfile(cPath + '\' + cBitMap)
  1371.  
  1372. RETURN oBitMap
  1373.  
  1374. *** END OF EXAMPLE ***
  1375.  
  1376. * ---------------------------- *
  1377.  
  1378. STATIC FUNCTION XSample_153()
  1379.  
  1380. /* This example shows how to right justify a table of Gets */
  1381.  
  1382. LOCAL GetList := {}, aFields, aData, i, cType, nRow, cPict, nLen, ;
  1383.       aBackColor, nColPixels
  1384.  
  1385. USE COLLECT VIA DBFNTX
  1386.  
  1387. nColPixels := 7 // Default Pixels/Column
  1388. aFields := dbStruct()
  1389. aData := Array(Len(aFields))
  1390. nRow := 0
  1391.  
  1392. FOR i := 1 TO Len(aFields)
  1393.   aData[i] := FieldGet(i)
  1394.   cType := aFields[i,2]
  1395.   cPict := NIL
  1396.   nLen := aFields[i,3]
  1397.   IF cType = 'L'
  1398.     cPict := 'Y'
  1399.   ELSEIF cType = 'D'
  1400.     nLen := 10
  1401.   ENDIF
  1402.  
  1403.   IF cType # 'M'
  1404.      IF i%2 == 0
  1405.        aBackColor := { 200,200,200 }
  1406.      ELSE
  1407.        aBackColor := { 230,230,230 }
  1408.      ENDIF
  1409.      @ ++nRow,1 DCSAY aFields[i,1] COLOR GRA_CLR_BLACK, aBackColor SAYSIZE 60 SAYVCENTER
  1410.      @ nRow,60 - nLen - nLen/nColPixels DCGET aData[i] PICTURE cPict
  1411.   ENDIF
  1412.  
  1413. NEXT
  1414.  
  1415. DCREAD GUI FIT ADDBUTTONS MODAL TITLE 'Right-Justified GETs'
  1416.  
  1417. RETURN nil
  1418. *** END OF EXAMPLE ***
  1419.  
  1420. * ---------------------------- *
  1421.  
  1422. STATIC FUNCTION XSample_154()
  1423.  
  1424. LOCAL i := 0, oDrucker
  1425.  
  1426. DCPRINT ON TO oDrucker PREVIEW
  1427.  
  1428. DCPRINT FONT "10.Arial"
  1429.  
  1430. FOR i := 1 to 10
  1431.   // With 4 decimals and a comma Picture String
  1432.   @ i,20 DCRIGHTPRINT SAY i*456.7543  PICTURE "99,999.9999"
  1433. NEXT
  1434. @ 11,20 DCPRINT SAY "This is 11,20"
  1435.  
  1436. DCPRINT FONT "14.Modern"
  1437. FOR i := 1 to 10
  1438.   // Without any Picture String
  1439.   @ i,40 DCRIGHTPRINT SAY i*456.72
  1440. NEXT
  1441. @ 11,40 DCPRINT SAY "This is 11,40"
  1442.  
  1443. DCPRINT FONT "8.Arial"
  1444. FOR i := 1 to 10
  1445.   // With 3 decimals without comma as Picture String
  1446.   @ i,60 DCRIGHTPRINT SAY i*456.74  PICTURE "9999.999"
  1447. NEXT
  1448. @ 11,60 DCPRINT SAY "This is 11,60"
  1449.  
  1450. DCPRINT FONT "11.Modern Bold"
  1451. FOR i := 14 to 24
  1452.   // Print a Date
  1453.   @ i,20 DCRIGHTPRINT SAY date() + i
  1454. NEXT
  1455. @ 25,20 DCPRINT SAY "This is 25,20"
  1456.  
  1457. DCPRINT FONT "10.Courier New"
  1458. FOR i := 14 to 24
  1459.   // Print a string
  1460.   @ i,40 DCRIGHTPRINT SAY "This is a string " + Alltrim(Str(i))
  1461. NEXT
  1462. @ 25,40 DCPRINT SAY "This is 25,40"
  1463.  
  1464. DCPRINT OFF
  1465.  
  1466. RETURN nil
  1467. *** END OF EXAMPLE ***
  1468.  
  1469. * ---------------------------- *
  1470.  
  1471. STATIC FUNCTION XSample_155()
  1472.  
  1473. /* This example shows how to use code blocks for addressing
  1474.    of GETs dynamically */
  1475.  
  1476. LOCAL GetList[0], aDates[20], aFields, nCol, nRow, i
  1477.  
  1478. USE collect VIA 'DBFNTX'
  1479.  
  1480. nCol := 0
  1481. nRow := 0
  1482. FOR i := 1 TO 20
  1483.   aDates[i] := Date() + i
  1484.   @ {||nRow}, {||nCol} DCGET aDates[i] EVAL _PosBlock(@nCol,@nRow)
  1485. NEXT
  1486.  
  1487. aFields := Array(Fcount())
  1488.  
  1489. FOR i := 1 TO Len(aFields)
  1490.   aFields[i] := FieldGet(i)
  1491.   IF Valtype(aFields[i]) $ 'CDLN'
  1492.     @ {||nRow}, {||nCol} DCGET aFields[i] EVAL _PosBlock(@nCol,@nRow)
  1493.   ENDIF
  1494. NEXT
  1495.  
  1496. DCREAD GUI FIT MODAL TITLE 'Dynamic Addressing'
  1497.  
  1498. CLOSE ALL
  1499.  
  1500. RETURN nil
  1501.  
  1502. * --------------
  1503.  
  1504. STATIC FUNCTION _PosBlock(nCol,nRow)
  1505.  
  1506. RETURN {|o|nCol := o:currentPos()[1]+o:currentSize()[1], ;
  1507.            nCol := IIF( nCol>300,0,nCol+5 ), ;
  1508.            nRow := IIF( nCol==0, nRow-25, nRow )}
  1509.  
  1510. RETURN nil
  1511. *** END OF EXAMPLE ***
  1512.  
  1513. * ---------------------------- *
  1514.  
  1515. STATIC FUNCTION XSample_156()
  1516.  
  1517. /* This example shows how to use the MESSAGEINTO clause of
  1518.    DCGETOPTIONS to use any object as a message receptacle
  1519.    for displaying custom messages such as multi-line messages,
  1520.    bitmaps, etc. */
  1521.  
  1522. LOCAL i, GetList[0], aDates[4], cMsg := '', GetOptions, oMsgBox
  1523.  
  1524. FOR i := 1 TO 4
  1525.   aDates[i] := Date()+i
  1526. NEXT
  1527.  
  1528. @ 1,1 DCGET aDates[1] ;
  1529.       VALID {||aDates[1] > Date()} ;
  1530.       MESSAGE "Enter the the FIRST date ;This must be later than today's date"
  1531.  
  1532. @ 2,1 DCGET aDates[2] ;
  1533.       VALID {||aDates[2] > aDates[1]} ;
  1534.       MESSAGE "Enter the SECOND date ;This must be later than the FIRST date"
  1535.  
  1536. @ 3,1 DCGET aDates[3] ;
  1537.       VALID {||aDates[3] > aDates[2]} ;
  1538.       MESSAGE "Enter the THIRD date ;This must be later than the SECOND date"
  1539.  
  1540. @ 4,1 DCGET aDates[4] ;
  1541.       VALID {||aDates[4] > aDates[3]} ;
  1542.       MESSAGE "Enter the FOURTH date ;This must be later than the THIRD date"
  1543.  
  1544. @ 6,1 DCMULTILINE cMsg COLOR GRA_CLR_WHITE, GRA_CLR_BLUE ;
  1545.       OBJECT oMsgBox SIZE 50,3 EDITPROTECT {||.t.} ;
  1546.       NOHSCROLL NOVSCROLL FONT '10.Courier Bold'
  1547.  
  1548. DCGETOPTIONS ;
  1549.    MESSAGEINTO {|c|c:=Strtran(c,';',Chr(13)+Chr(10)),oMsgBox:setData(c)}
  1550.  
  1551. DCREAD GUI FIT ADDBUTTONS OPTIONS GetOptions TITLE 'MESSAGEINTO clause' ;
  1552.        MODAL
  1553.  
  1554. RETURN nil
  1555. *** END OF EXAMPLE ***
  1556.  
  1557. * ---------------------------- *
  1558.  
  1559. STATIC FUNCTION XSample_157()
  1560.  
  1561. /* This example shows how to move browse columns */
  1562.  
  1563. LOCAL GetList[0], oBrowse, aDir := Directory(), i
  1564.  
  1565. @ 0,0 DCBROWSE oBrowse DATA aDir SIZE 80,10 PRESENTATION DC_BrowPres()
  1566. FOR i := 1 TO 10
  1567.   DCBROWSECOL ELEMENT i HEADER Alltrim(Str(i)) WIDTH 5 PARENT oBrowse
  1568. NEXT
  1569.  
  1570. @ 12, 0 DCPUSHBUTTON CAPTION '<-Left' ;
  1571.    SIZE 10,1.2 ;
  1572.    ACTION {||MoveColumn(1,oBrowse),DC_GetRefresh(GetList)} ;
  1573.    FONT '8.Courier' ;
  1574.    WHEN {||oBrowse:colPos > 1}
  1575.  
  1576. @ 12,12 DCPUSHBUTTON CAPTION 'Right->' ;
  1577.    SIZE 10,1.2  ;
  1578.    ACTION {||MoveColumn(2,oBrowse),DC_GetRefresh(GetList)} ;
  1579.    FONT '8.Courier' ;
  1580.    WHEN {||oBrowse:colPos < 10}
  1581.  
  1582. DCREAD GUI FIT BUTTONS DCGUI_BUTTON_EXIT ;
  1583.    TITLE 'Moving a Browse Column' MODAL
  1584.  
  1585. RETURN nil
  1586.  
  1587. * --------------
  1588.  
  1589. STATIC FUNCTION MoveColumn( nMode, oBrowse )
  1590.  
  1591. LOCAL oColumn, nPos
  1592.  
  1593. nPos := oBrowse:colPos
  1594. oColumn := oBrowse:getColumn(nPos)
  1595. oBrowse:delColumn(nPos)
  1596. IF nMode = 1
  1597.   oBrowse:insColumn(nPos-1,oColumn)
  1598.   oBrowse:left()
  1599. ELSE
  1600.   oBrowse:insColumn(nPos+1,oColumn)
  1601.   oBrowse:right()
  1602. ENDIF
  1603. oBrowse:forceStable()
  1604. RETURN nil
  1605. *** END OF EXAMPLE ***
  1606.  
  1607. * ---------------------------- *
  1608.  
  1609. STATIC FUNCTION XSample_158()
  1610.  
  1611. /* This example shows how to create a drop-down browse
  1612.    from a POPUP button on a GET */
  1613.  
  1614. LOCAL GetList[0], cFile1, cFile2, cFile3, bPopUp, oStatic, nPopKey
  1615.  
  1616. STORE Space(30) TO cFile1, cFile2, cFile3
  1617.  
  1618. bPopUp := {|c,oGet|_PickFile(c,oGet,oStatic)}
  1619.  
  1620. @ 0,0 DCSTATIC TYPE XBPSTATIC_TYPE_RECESSEDBOX SIZE 80,15 ;
  1621.       OBJECT oStatic
  1622.  
  1623. DCSETPARENT oStatic
  1624.  
  1625. @ 1,1 DCSAY 'File Name 1' GET cFile1 POPUP bPopUp SAYSIZE 0
  1626.  
  1627. @ 3,1 DCSAY 'File Name 2' GET cFile2 POPUP bPopUp SAYSIZE 0
  1628.  
  1629. @ 5,1 DCSAY 'File Name 3' GET cFile3 POPUP bPopUp SAYSIZE 0
  1630.  
  1631. nPopKey := DC_SetPopKey(xbeK_SH_DOWN)
  1632.  
  1633. DCREAD GUI FIT ADDBUTTONS TITLE 'Enter File Names' ;
  1634.    SETAPPWINDOW MODAL
  1635.  
  1636. DC_SetPopKey(nPopKey)
  1637.  
  1638. RETURN nil
  1639.  
  1640. * ------------
  1641.  
  1642. STATIC FUNCTION _PickFile( cFileName, oGet, oStatic )
  1643.  
  1644. LOCAL GetList[0], aDirectory, oBrowse, nPointer := 1, lStatus, ;
  1645.       GetOptions, aPos
  1646.  
  1647. aDirectory := Directory()
  1648.  
  1649. aPos := DC_CalcAbsolutePosition({0,0},oGet)
  1650.  
  1651. @ oGet:currentPos()[2]-113,oGet:currentPos()[1] ;
  1652.       DCBROWSE oBrowse ;
  1653.       SIZE 350,113 ;
  1654.       PIXEL ;
  1655.       DATA aDirectory ;
  1656.       PRESENTATION DC_BrowPres() ;
  1657.       NOHSCROLL ;
  1658.       FIT ;
  1659.       POINTER nPointer ;
  1660.       INVISIBLE ;
  1661.       ITEMSELECTED {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}
  1662.  
  1663. aDirectory := Directory()
  1664.  
  1665. DCBROWSECOL ELEMENT 1 WIDTH 10 PARENT oBrowse
  1666. DCBROWSECOL ELEMENT 2 WIDTH 6 PARENT oBrowse
  1667. DCBROWSECOL ELEMENT 3 WIDTH 6 PARENT oBrowse
  1668. DCBROWSECOL ELEMENT 4 WIDTH 6 PARENT oBrowse
  1669.  
  1670. DCGETOPTIONS NOTRANSLATE
  1671.  
  1672. DCREAD GUI ;
  1673.    MODAL ;
  1674.    OPTIONS GetOptions ;
  1675.    HANDLER _pickHandler ;
  1676.    PARENT oStatic ;
  1677.    TO lStatus ;
  1678.    EVAL {||SetAppFocus(oBrowse:getColumn(1))}
  1679.  
  1680. oBrowse:destroy()
  1681.  
  1682. IF lStatus
  1683.   RETURN aDirectory[nPointer,1]
  1684. ENDIF
  1685.  
  1686. RETURN cFileName
  1687.  
  1688. * -----------
  1689.  
  1690. STATIC FUNCTION _pickHandler( nEvent, mp1, mp2, oXbp )
  1691.  
  1692. IF nEvent == xbeM_LbDown .AND. ;
  1693.       !(oXbp:isDerivedFrom('XbpCellGroup') .OR. ;
  1694.         oXbp:isDerivedFrom('XbpScrollBar'))
  1695.   RETURN DCGUI_EXIT_ABORT
  1696. ENDIF
  1697.  
  1698. RETURN DCGUI_NONE
  1699.  
  1700. *** END OF EXAMPLE ***
  1701.  
  1702. * ---------------------------- *
  1703.  
  1704. STATIC FUNCTION XSample_159()
  1705. /* This example shows how to make STATIC style pushbuttons
  1706.    (a nice touch for touch-screen applications) */
  1707.  
  1708. LOCAL GetList[0], oButton1, oButton2, lEnabled := .t., lHidden := .f., ;
  1709.       aRegion
  1710.  
  1711. USE COLLECT VIA DBFNTX
  1712.  
  1713. @ 0,0 DCPUSHBUTTON ;
  1714.       STATIC ;
  1715.       ACTION {||DC_DbSkip(1), ;
  1716.                 IIF( Eof(),DC_DbGoTop(),nil),DC_GetRefresh(GetList)} ;
  1717.       OBJECT oButton1 ;
  1718.       SIZE 200,200 ;
  1719.       PIXEL ;
  1720.       FANCY ;
  1721.       COLOR GRA_CLR_BLACK, XBPSYSCLR_TRANSPARENT ;
  1722.       FOCUSCOLOR nil, GRA_CLR_RED ;
  1723.       BITMAP BITMAP_EXPRESS_BACKGROUND1 ;
  1724.       WHEN {||lEnabled} ;
  1725.       HIDE {||lHidden}
  1726.  
  1727. DCSETPARENT TO oButton1
  1728.  
  1729. @ 10,10 DCSAY 'Press;here;to;go;to;the;Next;Record' ;
  1730.       OPTIONS XBPSTATIC_TEXT_WORDBREAK ;
  1731.       PIXEL ;
  1732.       COLOR GRA_CLR_BROWN ;
  1733.       FONT '11.Arial Bold' ;
  1734.       SAYSIZE 70,170
  1735.  
  1736. @ 5,95 DCSTATIC TYPE XBPSTATIC_TYPE_RECESSEDBOX ;
  1737.       SIZE 5,190 ;
  1738.       PIXEL
  1739.  
  1740. @ 5,110 DCSAY 'Record:' PIXEL SAYSIZE 0
  1741. @ 30,110 DCSAY {||Alltrim(Str(RecNo()))} ;
  1742.       SAYSIZE 80,50 ;
  1743.       SAYCOLOR GRA_CLR_DARKPINK ;
  1744.       FONT '32.Arial Bold' PIXEL
  1745.  
  1746. @ 120,110 DCSTATIC TYPE XBPSTATIC_TYPE_BITMAP ;
  1747.       PIXEL ;
  1748.       CAPTION { BITMAP_NEXT_1, BITMAP_NEXT_2 }
  1749.  
  1750. DCSETPARENT TO
  1751.  
  1752. @ 0,220 DCPUSHBUTTON ;
  1753.       STATIC ;
  1754.       ACTION {||msgbox('Ugh')} ;
  1755.       SIZE 100,100 ;
  1756.       REGION DC_RegionArray( DCGUI_REGION_DIAMOND, 100 ) ;
  1757.       PIXEL ;
  1758.       FANCY ;
  1759.       BITMAP 'smileyneutral.jpg',nil,nil,'smileyflash.jpg' ;
  1760.       FLASH 2,10 ;
  1761.       WHEN {||lEnabled} ;
  1762.       HIDE {||lHidden}
  1763.  
  1764. @ 105,220 DCPUSHBUTTON ;
  1765.       STATIC ;
  1766.       ACTION {||msgbox('Ugh')} ;
  1767.       SIZE 100,100 ;
  1768.       PIXEL ;
  1769.       FANCY ;
  1770.       BITMAP "smileyup.jpg",'smileydown.jpg','smileyneutral.jpg' ;
  1771.       WHEN {||lEnabled} ;
  1772.       HIDE {||lHidden}
  1773.  
  1774. @ 0,330 DCPUSHBUTTON ;
  1775.       STATIC ;
  1776.       ACTION {||msgbox('Ugh')} ;
  1777.       SIZE 100,100 ;
  1778.       REGION DC_RegionArray( DCGUI_REGION_ELLIPSE, 100 ) ;
  1779.       PIXEL ;
  1780.       FANCY ;
  1781.       BITMAP 'smileyup.jpg','smileydown.jpg','smileyneutral.jpg' ;
  1782.       WHEN {||lEnabled} ;
  1783.       HIDE {||lHidden}
  1784.  
  1785. @ 105,330 DCPUSHBUTTON ;
  1786.       STATIC ;
  1787.       ACTION {||msgbox('Ugh')} ;
  1788.       SIZE 100,100 ;
  1789.       PIXEL ;
  1790.       REGION DC_RegionArray( DCGUI_REGION_OCTAGON, 100 ) ;
  1791.       FANCY ;
  1792.       BITMAP "smileyup.jpg",'smileydown.jpg','smileyneutral.jpg' ;
  1793.       WHEN {||lEnabled} ;
  1794.       HIDE {||lHidden}
  1795.  
  1796.  
  1797. @ 210,0 DCPUSHBUTTON ;
  1798.       PIXEL ;
  1799.       SIZE 90,30 ;
  1800.       CAPTION {||IIF(lEnabled,'Disable','Enable')} ;
  1801.       ACTION {||lEnabled := !lEnabled, DC_GetRefresh(GetList)}
  1802.  
  1803. @ 210,100 DCPUSHBUTTON ;
  1804.       PIXEL ;
  1805.       SIZE 90,30 ;
  1806.       CAPTION {||IIF(lHidden,'Show','Hide')} ;
  1807.       ACTION {||lHidden := !lHidden, DC_GetRefresh(GetList)}
  1808.  
  1809. DCREAD GUI FIT BUTTONS DCGUI_BUTTON_EXIT MODAL ;
  1810.    TITLE 'Static Button' SETAPPWINDOW
  1811.  
  1812. RETURN nil
  1813. *** END OF EXAMPLE ***
  1814.  
  1815. * ---------------------------- *
  1816.  
  1817. STATIC FUNCTION XSample_160()
  1818.  
  1819. /* This example shows how to use the DESCENDING feature of
  1820.    @..DCBROWSE.  Click the mouse in the header area of the
  1821.    browse.  Each successive click will toggle from ascending
  1822.    to descending.  No special indexes required. */
  1823.  
  1824. LOCAL GetList[0], oBrowse, GetOptions
  1825.  
  1826. IF !File('..\XDOC\EXPRESS.DBF')
  1827.   DC_MsgBox({'Sorry.  The database required to show this feature',;
  1828.              'is not included in the demonstration version', ;
  1829.              'or the ..\XDOC\EXPRESS.DBF file does not exist'})
  1830.   RETURN nil
  1831. ENDIF
  1832.  
  1833. SET DEFA TO ..\XDOC
  1834. USE EXPRESS VIA FOXCDX SHARED ALIAS 'XDOC'
  1835. SET INDEX TO EXPRESS.CDX
  1836. OrdSetFocus('COMMAND')
  1837. SET DEFA TO
  1838.  
  1839. @ 1,0 DCBROWSE oBrowse ALIAS 'XDOC' SIZE 90, 20 ;
  1840.      SORTSCOLOR GRA_CLR_WHITE, GRA_CLR_RED ;
  1841.      SORTUCOLOR GRA_CLR_WHITE, GRA_CLR_DARKGRAY ;
  1842.      SORTUPBITMAP BITMAP_RD_UP_RED  ;
  1843.      SORTDOWNBITMAP BITMAP_RD_DOWN_RED ;
  1844.      FIT ;
  1845.      PRESENTATION DC_BrowPres() ;
  1846.      NOHORIZSCROLL
  1847.  
  1848. DCBROWSECOL DATA {||XDOC->command} HEADER 'Command' ;
  1849.    PARENT oBrowse ;
  1850.    SORT {||OrdSetFocus('COMMAND')} LEFTBUTTON ;
  1851.        _DEFAULT OrdSetFocus()=='COMMAND'
  1852.  
  1853. DCBROWSECOL DATA {||XDOC->short} HEADER 'Short' ;
  1854.    PARENT oBrowse WIDTH 25
  1855.  
  1856. DCBROWSECOL DATA {||XDOC->type} HEADER 'Type' ;
  1857.    PARENT oBrowse ;
  1858.    SORT {||OrdSetFocus('TYPE')} LEFTBUTTON ;
  1859.        _DEFAULT OrdSetFocus()=='TYPE'
  1860.  
  1861. DCBROWSECOL DATA {||XDOC->module} HEADER 'Module' ;
  1862.    PARENT oBrowse ;
  1863.    SORT {||OrdSetFocus('MODULE')} LEFTBUTTON ;
  1864.       _DEFAULT OrdSetFocus()=='MODULE' ;
  1865.    WIDTH 10
  1866.  
  1867. DCGETOPTIONS AUTORESIZE
  1868.  
  1869. DCREAD GUI FIT ;
  1870.    MODAL ;
  1871.    OPTIONS GetOptions ;
  1872.    TITLE 'eXPress++ Help File - Ascend/Descend Example'
  1873.  
  1874. RETURN nil
  1875. *** END OF EXAMPLE ***
  1876.  
  1877. * ---------------------------- *
  1878.  
  1879. STATIC FUNCTION XSample_161()
  1880.  
  1881. /* This example shows how to use the ALIGN feature of
  1882.    DCPRINT SAY and how to print double-line boxes */
  1883.  
  1884. LOCAL oPrinter, aAttrVertical[GRA_AS_COUNT]
  1885.  
  1886. aAttrVertical[ GRA_AS_ANGLE ] := { 0, 1 }
  1887.  
  1888. DCPRINT ON TO oPrinter PREVIEW NONSTOP SIZE 66,132 COPYLOOP ;
  1889.       ZOOMFACTOR 1.5
  1890.  
  1891. IF Valtype(oPrinter) # 'O'
  1892.   RETURN nil
  1893. ENDIF
  1894.  
  1895. @ 0,30,50,30 DCPRINT LINE
  1896.  
  1897. @ 1,30 DCPRINT SAY 'Align Text Right' FONT '10.Courier New' ;
  1898.        ALIGN DCPRINT_ALIGN_RIGHT
  1899.  
  1900. @ 3,30 DCPRINT SAY 'Align Text VCenter / HCenter' ;
  1901.        FONT '12.Arial' ALIGN DCPRINT_ALIGN_VCENTER + DCPRINT_ALIGN_HCENTER
  1902.  
  1903. @ 5,30 DCPRINT SAY 'Align Text Left' FONT '12.Courier New Bold'
  1904.  
  1905. @ 7,30 DCPRINT SAY 'Align Text Left' FONT '14.Arial Bold Italic'
  1906.  
  1907. DCPRINT FONT '16.Arial Italic Underscore'
  1908. @ 9,30 DCPRINT SAY 'Align Text HCenter (Outlined)' ;
  1909.         ALIGN DCPRINT_ALIGN_HCENTER ;
  1910.         OUTLINE
  1911.  
  1912. DCPRINT FONT '18.Arial Bold Italic'
  1913. @ 11,30 DCPRINT SAY 'Align Text Left'
  1914.  
  1915. DCPRINT FONT '12.Courier New Bold Italic'
  1916. @ 13,30 DCPRINT SAY 'Align Text Left'
  1917.  
  1918. DCPRINT FONT '14.Courier New Bold Italic Underscore'
  1919. @ 15,30 DCPRINT SAY 'Align Text Left'
  1920.  
  1921. DCPRINT FONT '8.Terminal'
  1922. @ 17,30 DCPRINT SAY 'Align Text H-Center' ALIGN DCPRINT_ALIGN_HCENTER
  1923.  
  1924. DCPRINT FONT '10.Times Roman'
  1925. @ 19,30 DCPRINT SAY 'Align Text HCenter' ALIGN DCPRINT_ALIGN_HCENTER
  1926.  
  1927. DCPRINT FONT '8.Terminal'
  1928. @ 21,30 DCPRINT SAY 'Align Text Right' ALIGN DCPRINT_ALIGN_RIGHT
  1929.  
  1930. PrintBox( 39,32,45,80 )
  1931.  
  1932. @ 38,0,38,70 DCPRINT LINE
  1933.  
  1934. @37,33 DCPRINT SAY 'Horizontal Text'  FONT '12.Courier New Bold' ;
  1935.  
  1936. @37,30 DCPRINT SAY 'Vertical Text (Outlined)'  FONT '12.Courier New Bold' ;
  1937.        ATTRIBUTE aAttrVertical OUTLINE
  1938.  
  1939. DCPRINT OFF
  1940.  
  1941. RETURN nil
  1942.  
  1943. * --------------
  1944.  
  1945. STATIC FUNCTION PrintBox( nSrow, nScol, nErow, nEcol )
  1946.  
  1947. @ nSrow,nScol,nErow,nEcol DCPRINT BOX
  1948. @ nSrow+.1,nScol+.3,nErow-.1,nEcol-.3 DCPRINT BOX
  1949.  
  1950. RETURN nil
  1951. *** END OF EXAMPLE ***
  1952.  
  1953. * ---------------------------- *
  1954.  
  1955. STATIC FUNCTION XSample_162()
  1956. /* This example shows how to replace the print buttons on
  1957.    the print preview window with custom captions and sizes */
  1958.  
  1959. LOCAL oPrinter, aButtons[9], nPage, nLine
  1960.  
  1961. aButtons[DCPRINT_BUTTON_PRINT] := { 60,nil,{ BITMAP_PRINT_1, BITMAP_PRINT_2} }
  1962. // aButtons[DCPRINT_BUTTON_FIND] := { 60,nil,{ BITMAP_FIND_1, BITMAP_FIND_1} }
  1963.  
  1964. DCPRINT ON PREVIEW BUTTONS aButtons // FINDBUTTON
  1965.  
  1966. FOR nPage := 1 TO 3
  1967.   @ 2,10 DCPRINT SAY 'This is Page ' + Alltrim(Str(nPage)) ;
  1968.     FONT '12.Arial Bold'
  1969.   FOR nLine := 5 TO 20
  1970.     @ nLine,10 DCPRINT SAY 'This is Line ' + Alltrim(Str(nLine))
  1971.   NEXT
  1972.   IF nPage < 3
  1973.     DCPRINT EJECT
  1974.   ENDIF
  1975. NEXT
  1976.  
  1977. DCPRINT OFF
  1978.  
  1979. RETURN nil
  1980. *** END OF EXAMPLE ***
  1981.  
  1982. * ----------------
  1983.  
  1984. #ifndef EXPRESS20
  1985. FUNCTION DC_CallStack()
  1986. RETURN nil
  1987. #endif
  1988.  
  1989. * ----------------
  1990.  
  1991. #ifndef EXPRESS20
  1992. FUNCTION DC_FileRest()
  1993. RETURN nil
  1994. #endif
  1995.  
  1996. * ----------------
  1997.  
  1998. #ifndef EXPRESS20
  1999. FUNCTION DC_FileEdit()
  2000. RETURN nil
  2001. #endif
  2002.  
  2003. * ----------------
  2004.  
  2005. #ifndef EXPRESS20
  2006. FUNCTION DC_FilePik()
  2007. RETURN nil
  2008. #endif
  2009.  
  2010. * ----------------
  2011.  
  2012. #ifndef EXPRESS20
  2013. FUNCTION DC_FieldEdit()
  2014. RETURN nil
  2015. #endif
  2016.  
  2017. * ----------------
  2018.  
  2019. #ifndef EXPRESS20
  2020. FUNCTION DC_FieldLoad()
  2021. RETURN nil
  2022. #endif
  2023.  
  2024. * ----------------
  2025.  
  2026. #ifndef EXPRESS20
  2027. FUNCTION DC_FieldValidate()
  2028. RETURN nil
  2029. #endif
  2030.  
  2031. * ----------------
  2032.  
  2033. #ifndef EXPRESS20
  2034. FUNCTION DC_MemoBase()
  2035. RETURN nil
  2036. #endif
  2037.  
  2038. * ----------------
  2039.  
  2040. #ifndef EXPRESS20
  2041. FUNCTION DC_CodeGet()
  2042. RETURN nil
  2043. #endif
  2044.  
  2045. * ----------------
  2046.  
  2047. #ifndef EXPRESS20
  2048. FUNCTION DC_CodeEdit()
  2049. RETURN nil
  2050. #endif
  2051.  
  2052. * ----------------
  2053.  
  2054. #ifndef EXPRESS20
  2055. FUNCTION DC_QueryBuild()
  2056. RETURN nil
  2057. #endif
  2058.  
  2059. * ----------------
  2060.  
  2061. #ifdef EXPRESS13
  2062. FUNCTION GraMakeRGBColor()
  2063. RETURN nil
  2064. #endif
  2065.  
  2066. * ----------------
  2067.  
  2068. #ifndef EXPRESS20
  2069. FUNCTION DC_GetList2Source()
  2070. RETURN nil
  2071. #endif
  2072.  
  2073. * ----------------
  2074.  
  2075. #ifndef EXPRESS20
  2076. FUNCTION DC_Dbu()
  2077. RETURN nil
  2078. #endif
  2079.  
  2080.