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

  1. *-- PROGRAM FILE -------------------------------------------------------------
  2. *  Application: eXPress++ Library
  3. *  Description: eXPress++ sample programs
  4. *    File Name: xsample1.prg
  5. *       Author: Roger Donnay          Tester:
  6. * Date created: 11/04/98              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 "dcmsg.CH"
  19. #INCLUDE "font.ch"
  20. #INCLUDE "dcprint.CH"
  21.  
  22. #define lMDIApp       aApp[1]
  23.  
  24. FUNCTION X_Samples_1( oDialog )
  25.  
  26. LOCAL GetList := {}, i, j, GetOptions, nTest, cMemo, oMemo, aApp[1], ;
  27.       lDebugEvent, lDebugCreate, oDlg, oDlgWindow, cTitle, aCoords, ;
  28.       oSourceFile, cSource
  29.  
  30. cTitle := 'eXPress++ Sample Programs (Set 1)'
  31. nTest := 0
  32. cMemo := ''
  33. lDebugEvent := .f.
  34. lDebugCreate := .f.
  35.  
  36. SET DEFA TO
  37. SET PATH TO ..\DATA
  38.  
  39. FOR i := 1 TO  6
  40.   FOR j := 1 TO 7
  41.     nTest++
  42.     @ j-1,1 + (i-1)*12 DCRADIO nTest               ;
  43.       VALUE nTest ;
  44.       PROMPT XSample_Header(nTest)               ;
  45.       ACTION {||XSample_Memo(nTest,oMemo,oSourceFile,@cSource)} ;
  46.       COLOR GRA_CLR_BLACK, GRA_CLR_BACKGROUND
  47.   NEXT j
  48. NEXT i
  49. nTest := 1
  50.  
  51. @ 3,73 DCPUSHBUTTON CAPTION 'Run Sample'  ;
  52.       SIZE 12, 1                               ;
  53.       TOOLTIP 'Run the selected sample program' ;
  54.       ACTION {||XSample_Run(nTest,oDialog,lDebugCreate,lDebugEvent)}
  55.  
  56. @ 4,73 DCPUSHBUTTON CAPTION 'Print Source'  ;
  57.       SIZE 12, 1                               ;
  58.       ACTION {||XSample_Print(cSource)}
  59.  
  60. @ 5,73 DCPUSHBUTTON CAPTION 'Exit' ;
  61.       SIZE 12, 1  ;
  62.       ACTION {||PostAppEvent(xbeP_Close,,,oDlg)}
  63.  
  64. @ 6,73 DCCHECKBOX lDebugEvent PROMPT 'Debug Events'
  65.  
  66. @ 7.3,5 DCSAY '' SAYSIZE 60 COLOR GRA_CLR_DARKBLUE ;
  67.       OBJECT oSourceFile FONT '8.Courier Bold'
  68.  
  69. @ 8,1 DCMULTILINE cMemo ;
  70.      OBJECT oMemo ;
  71.      SIZE 85,11 ;
  72.      FONT '8.Alaska Crt'
  73.  
  74. DCGETOPTIONS ;
  75.    ICON ICON_EXPRESS ;
  76.    CASCADE
  77.  
  78. DCREAD GUI ;
  79.       OPTIONS GetOptions ;
  80.       EVAL {|o|XSample_Memo(nTest,oMemo,oSourceFile,@cSource)} ;
  81.       APPWINDOW oDialog ;
  82.       PARENT @oDlg ;
  83.       TITLE cTitle ;
  84.       FIT
  85.  
  86. CLOSE DATABASES
  87.  
  88. RETURN nil
  89.  
  90. * ----------------------------
  91.  
  92. STATIC FUNCTION XSample_Memo( nTest, oMemo, oSourceFile, cSource )
  93.  
  94. LOCAL cFunction, nFound, cSourceFile
  95.  
  96. cSource := ''
  97. cFunction := 'XSample_' + Alltrim(Str(nTest))
  98.  
  99. cSourceFile := 'XSAMPLE1.PRG'
  100. cSource := MemoRead(cSourceFile)
  101. IF Empty(cSource)
  102.   cSourceFile := '..\PRG\XSAMPLE1.PRG'
  103.   cSource := MemoRead(cSourceFile)
  104. ENDIF
  105. IF Empty(cSource)
  106.   cSource := 'XSAMPLE1.PRG cannot be found'
  107. ENDIF
  108.  
  109. nFound := AT('FUNCTION ' + cFunction,cSource)
  110. cSource := Substr(cSource,nFound)
  111. nFound := AT('*** END OF EXAMPLE ***',cSource)
  112. cSource := Substr(cSource,1,nFound+21)
  113.  
  114. IF !Empty(cSource)
  115.   oMemo:setData(cSource)
  116.   oSourceFile:setCaption(cSourceFile)
  117. ENDIF
  118. RETURN nil
  119.  
  120. * -------------------
  121.  
  122. STATIC FUNCTION XSample_Print( cSource )
  123.  
  124. LOCAL oPrinter, nLineCount := MLCount(cSource), i, cMemoLine, nRow
  125.  
  126. DCPRINT ON TO oPrinter PREVIEW FONT '10.Courier' NONSTOP HIDE
  127. IF Valtype(oPrinter) # 'O' .OR. !oPrinter:lActive
  128.   RETURN nil
  129. ENDIF
  130. nRow := 1
  131. FOR i := 1 TO nLineCount - 1
  132.   cMemoLine := MemoLine( cSource, nil, i )
  133.   @ nRow++,2 DCPRINT SAY cMemoLine PRINTER oPrinter
  134.   IF nRow > 60
  135.     DCPRINT EJECT
  136.     nRow := 1
  137.   ENDIF
  138. NEXT
  139. DCPRINT OFF
  140.  
  141. RETURN nil
  142.  
  143. * -----------------------
  144.  
  145. STATIC FUNCTION XSample_Run( nTest, oDialog, lDebugCreate, lDebugEvent )
  146.  
  147. LOCAL nDebug := 0
  148.  
  149. DC_Gui(.t.)
  150.  
  151. IF lDebugCreate
  152.    nDebug += DCGUI_DEBUG_CREATE
  153. ENDIF
  154. IF lDebugEvent
  155.    nDebug += DCGUI_DEBUG_EVENTS
  156. ENDIF
  157. DC_ReadGuiDebug(nDebug)
  158. CLOSE ALL
  159. SET DEFA TO
  160.  
  161. IF nTest = 1
  162.    XSample_1()
  163. ELSEIF nTest = 2
  164.    XSample_2()
  165. ELSEIF nTest = 3
  166.    XSample_3()
  167. ELSEIF nTest = 4
  168.    XSample_4()
  169. ELSEIF nTest = 5
  170.    XSample_5()
  171. ELSEIF nTest = 6
  172.    XSample_6()
  173. ELSEIF nTest = 7
  174.    XSample_7()
  175. ELSEIF nTest = 8
  176.    XSample_8()
  177. ELSEIF nTest = 9
  178.    XSample_9()
  179. ELSEIF nTest = 10
  180.    XSample_10()
  181. ELSEIF nTest = 11
  182.    XSample_11()
  183. ELSEIF nTest = 12
  184.    XSample_12()
  185. ELSEIF nTest = 13
  186.    XSample_13()
  187. ELSEIF nTest = 14
  188.    XSample_14()
  189. ELSEIF nTest = 15
  190.    XSample_15()
  191. ELSEIF nTest = 16
  192.    XSample_16()
  193. ELSEIF nTest = 17
  194.    XSample_17()
  195. ELSEIF nTest = 18
  196.    XSample_18()
  197. ELSEIF nTest = 19
  198.    XSample_19()
  199. ELSEIF nTest = 20
  200.    XSample_20()
  201. ELSEIF nTest = 21
  202.    XSample_21()
  203. ELSEIF nTest = 22
  204.    XSample_22()
  205. ELSEIF nTest = 23
  206.    XSample_23()
  207. ELSEIF nTest = 24
  208.    XSample_24()
  209. ELSEIF nTest = 25
  210.    XSample_25()
  211. ELSEIF nTest = 26
  212.    XSample_26()
  213. ELSEIF nTest = 27
  214.    XSample_27()
  215. ELSEIF nTest = 28
  216.    XSample_28()
  217. ELSEIF nTest = 29
  218.    XSample_29()
  219. ELSEIF nTest = 30
  220.    XSample_30()
  221. ELSEIF nTest = 31
  222.    XSample_31()
  223. ELSEIF nTest = 32
  224.    XSample_32()
  225. ELSEIF nTest = 33
  226.    XSample_33()
  227. ELSEIF nTest = 34
  228.    XSample_34()
  229. ELSEIF nTest = 35
  230.    XSample_35()
  231. ELSEIF nTest = 36
  232.    XSample_36()
  233. ELSEIF nTest = 37
  234.    XSample_37()
  235. ELSEIF nTest = 38
  236.    XSample_38()
  237. ELSEIF nTest = 39
  238.    XSample_39()
  239. ELSEIF nTest = 40
  240.    XSample_40()
  241. ELSEIF nTest = 41
  242.    XSample_41()
  243. ELSEIF nTest = 42
  244.    XSample_42()
  245. ENDIF
  246.  
  247. DC_ClearEvents()
  248.  
  249. RETURN nil
  250.  
  251. /* ---------------------------- */
  252.  
  253. STATIC FUNCTION XSample_Header( nTest, oDlg )
  254.  
  255. IF nTest = 1
  256.   RETURN "EnterKey"
  257. ELSEIF nTest = 2
  258.   RETURN 'TextBased'
  259. ELSEIF nTest = 3
  260.   RETURN 'PxlBased'
  261. ELSEIF nTest = 4
  262.   RETURN 'AutoSize'
  263. ELSEIF nTest = 5
  264.   RETURN 'FixedSize'
  265. ELSEIF nTest = 6
  266.   RETURN 'PushButt'
  267. ELSEIF nTest = 7
  268.   RETURN 'DataBrow'
  269. ELSEIF nTest = 8
  270.   RETURN 'PickList'
  271. ELSEIF nTest = 9
  272.   RETURN 'Menu'
  273. ELSEIF nTest = 10
  274.   RETURN 'CellEdit'
  275. ELSEIF nTest = 11
  276.   RETURN 'HotKeys'
  277. ELSEIF nTest = 12
  278.   RETURN 'BitMap'
  279. ELSEIF nTest = 13
  280.   RETURN 'AppEdit'
  281. ELSEIF nTest = 14
  282.   RETURN 'Progress'
  283. ELSEIF nTest = 15
  284.   RETURN 'ScrollBar'
  285. ELSEIF nTest = 16
  286.   RETURN 'StaticBox'
  287. ELSEIF nTest = 17
  288.   RETURN 'TabPages'
  289. ELSEIF nTest = 18
  290.   RETURN 'UserDlg'
  291. ELSEIF nTest = 19
  292.   RETURN 'ArrayBrow'
  293. ELSEIF nTest = 20
  294.   RETURN 'UDC'
  295. ELSEIF nTest = 21
  296.   RETURN 'TabStops'
  297. ELSEIF nTest = 22
  298.   RETURN 'Tooltip/Msg'
  299. ELSEIF nTest = 23
  300.   RETURN 'Graph'
  301. ELSEIF nTest = 24
  302.   RETURN 'Scopes'
  303. ELSEIF nTest = 25
  304.   RETURN '@..SAY'
  305. ELSEIF nTest = 26
  306.   RETURN 'Protect'
  307. ELSEIF nTest = 27
  308.   RETURN 'MDI #1'
  309. ELSEIF nTest = 28
  310.   RETURN 'MDI #2'
  311. ELSEIF nTest = 29
  312.   RETURN 'WHEN'
  313. ELSEIF nTest = 30
  314.   RETURN 'HIDE'
  315. ELSEIF nTest = 31
  316.   RETURN 'POPUP'
  317. ELSEIF nTest = 32
  318.   RETURN 'EVAL'
  319. ELSEIF nTest = 33
  320.   RETURN 'ID'
  321. ELSEIF nTest = 34
  322.   RETURN 'RELATIVE'
  323. ELSEIF nTest = 35
  324.   RETURN 'CARGO'
  325. ELSEIF nTest = 36
  326.   RETURN 'Gets w/Valid'
  327. ELSEIF nTest = 37
  328.   RETURN 'FieldGETS'
  329. ELSEIF nTest = 38
  330.   RETURN 'ScrollingGETS'
  331. ELSEIF nTest = 39
  332.   RETURN 'Working'
  333. ELSEIF nTest = 40
  334.   RETURN 'Printing'
  335. ELSEIF nTest = 41
  336.   RETURN 'Preview'
  337. ELSEIF nTest = 42
  338.   RETURN 'Cascading'
  339. ENDIF
  340.  
  341. RETURN ''
  342.  
  343. //* ---------------------------- */
  344.  
  345. STATIC FUNCTION XSample_1( )
  346.  
  347. /*
  348. @ SAY..GET (EXITS with ENTER KEY)
  349.  
  350. This sample demonstrates a single @ DCSAY..GET with automatic sizing
  351. of the dialog window to the objects and exit when the ENTER key is hit.
  352. The window is NON-MODAL.
  353. */
  354.  
  355.    LOCAL GetList := {}, GetOptions, cName := Space(20)
  356.  
  357.    @ 1,1 DCSAY 'Enter Name' GET cName PROPER SAYRIGHT
  358.  
  359.    DCGETOPTIONS NOTASKLIST
  360.  
  361.    DCREAD GUI ;
  362.       TITLE 'ENTER Key Demo' ;
  363.       FIT ;
  364.       MODAL ;
  365.       ENTEREXIT ;
  366.       OPTIONS GetOptions
  367.  
  368. DC_MsgBox(cName)
  369.  
  370. RETURN nil
  371. *** END OF EXAMPLE ***
  372.  
  373. /* --------------------------- */
  374.  
  375. STATIC FUNCTION XSample_2
  376.  
  377. /*
  378. @ SAY..GETS (TEXT-BASED)
  379.  
  380. This sample demonstrates several @ DCSAY..GETs with automatic sizing
  381. of the dialog window to the objects and an additional set of buttons
  382. for OK and CANCEL.  The window is MODAL.  Coordinates are TEXT-based.
  383. Dialog window has a recessed border and cannot be resized (fixed).
  384. */
  385.  
  386.    LOCAL GetList := {}, dDate := Date(), nNumber := 12345.67, ;
  387.          cString := 'This is a string', lLogical := .t., GetOptions
  388.  
  389.    SET DATE FORMAT TO 'mm/dd/yyyy'
  390.    @ 1,1 DCSAY 'Enter a Date' GET dDate PICTURE '99/99/9999' ;
  391.          SAYRIGHT GETSIZE 13
  392.    @ 3,1 DCSAY 'Enter a Number' GET nNumber SAYRIGHT
  393.    @ 5,1 DCSAY 'Enter a String' GET cString SAYRIGHT
  394.    @ 7,1 DCSAY 'Enter Yes or No' GET lLogical PICTURE 'Y' SAYRIGHT
  395.  
  396.    DCGETOPTIONS ;
  397.       SAYWIDTH 120 ;
  398.       WINDOWHEIGHT 300 ;
  399.       WINDOWWIDTH 400  ;
  400.       BORDER XBPDLG_RECESSEDBORDERTHICK_FIXED ;
  401.       TITLE 'Data Entry' // Store options to GetOptions
  402.  
  403.    DCREAD GUI ;
  404.       MODAL ;
  405.       TITLE 'Text-Based GETs' ;
  406.       BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL ;
  407.       OPTIONS GetOptions
  408.  
  409. RETURN nil
  410. *** END OF EXAMPLE ***
  411.  
  412. /* --------------------------- */
  413.  
  414. STATIC FUNCTION XSample_3
  415.  
  416. /*
  417. @ SAY..GETS (PIXEL BASED)
  418.  
  419. This sample demonstrates several @ DCSAY..GETs with automatic sizing
  420. of the dialog window to the objects and an additional set of buttons
  421. for OK and CANCEL.  The window is MODAL.  Coordinates are PIXEL-based.
  422. */
  423.  
  424.    LOCAL GetList := {}, dDate := Date(), nNumber := 12345.67, ;
  425.          cString := 'This is a string', lLogical := .t., GetOptions
  426.  
  427.    SET DATE FORMAT TO 'mm/dd/yyyy'
  428.    @ 10,1 DCSAY 'Enter a Date' GET dDate PICTURE '99/99/9999' ;
  429.           SAYRIGHT GETSIZE 100
  430.    @ 30,1 DCSAY 'Enter a Number' GET nNumber SAYRIGHT
  431.    @ 50,1 DCSAY 'Enter a String' GET cString SAYRIGHT
  432.    @ 70,1 DCSAY 'Enter Yes or No' GET lLogical PICTURE 'Y' SAYRIGHT
  433.  
  434.    DCGETOPTIONS ;
  435.       WINDOWHEIGHT 300 ;
  436.       WINDOWWIDTH 400  ;
  437.       SAYWIDTH 120 ;
  438.       PIXEL ;
  439.       TITLE 'Data Entry' // Store options to GetOptions
  440.  
  441.    DCREAD GUI ;
  442.       TITLE 'Pixel-Based GETs' ;
  443.       BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL ;
  444.       MODAL ;
  445.       OPTIONS GetOptions
  446.  
  447. RETURN nil
  448. *** END OF EXAMPLE ***
  449.  
  450. /* --------------------------- */
  451.  
  452. STATIC FUNCTION XSample_4
  453.  
  454. /*
  455. @ SAY..GETS, AUTOMATIC SIZING OF DIALOG
  456.  
  457. This sample demonstrates several @ DCSAY..GETs with automatic sizing
  458. of the dialog window to the objects and an additional set of buttons
  459. for OK and CANCEL.  The window is Non-Modal with no title bar.
  460. Coordinates are TEXT-based.  The DATE field has a pop-up calendar
  461. attached.  The NUMERIC field can be accessed only when the date is
  462. not today.
  463. */
  464.  
  465.    LOCAL GetList := {}, dDate := Date(), nNumber := 12345.67, ;
  466.          cString := 'This is a string', lLogical := .t., GetOptions
  467.  
  468.    SET DATE FORMAT TO 'mm/dd/yyyy'
  469.    @ 1,1 DCSAY '       Enter a Date' GET dDate PICTURE '99/99/9999' ;
  470.          POPUP {|d|DC_PopDate(d)} SAYRIGHT
  471.    @ 2,1 DCSAY '     Enter a Number' GET nNumber SAYRIGHT ;
  472.          RANGE 100,1000 WHEN {||dDate#Date()}
  473.    @ 3,1 DCSAY '     Enter a String' GET cString SAYRIGHT
  474.    @ 4,1 DCSAY 'Enter Yes or No' GET lLogical PICTURE 'Y' SAYRIGHT
  475.  
  476.    DCGETOPTIONS ;
  477.       NOTITLEBAR
  478.  
  479.    DCREAD GUI ;
  480.       MODAL ;
  481.       FIT ;
  482.       OPTIONS GetOptions ;
  483.       BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
  484.  
  485. RETURN nil
  486. *** END OF EXAMPLE ***
  487.  
  488. /* --------------------------- */
  489.  
  490. STATIC FUNCTION XSample_5
  491.  
  492. /*
  493. RADIO BUTTONs, CHECKBOX, FIXED SIZED DIALOG
  494.  
  495. This sample demonstrates three DCRADIO button objects and a DCCHECKBOX
  496. object with FIXED sizing of the dialog window .  The window is MODAL.
  497. Coordinates are both TEXT-based and PIXEL-based.  The Radiobutton
  498. objects are attached to a DCGROUP as the parent.  The Radiobutton group
  499. is HIDDEN and SHOWN by clicking the Checkbox.  A DCSTATIC text box
  500. is used to display the value chosen by the Radio Buttons.
  501. */
  502.  
  503.    LOCAL GetList := {}, cRadio := '', lCheck := .f., oRadioGroup, ;
  504.          GetOptions, oStatic
  505.  
  506.    @ 1,1 DCCHECKBOX lCheck                    ;
  507.       PROMPT 'Hide Radio Buttons'
  508.  
  509.    @ 3.2, 1 DCSTATIC XBPSTATIC_TYPE_TEXT      ;
  510.       SIZE 30, 1.5                            ;
  511.       OBJECT oStatic                          ;
  512.       COLOR GRA_CLR_DARKBLUE, GRA_CLR_WHITE   ;
  513.       FONT '16.Helv'
  514.  
  515.    @ 6,1 DCGROUP oRadioGroup                  ;
  516.       SIZE 20, 5                              ;
  517.       CAPTION 'Choose an Option'              ;
  518.       HIDE {||lCheck}
  519.  
  520.    @  15,10 DCRADIO cRadio                    ;
  521.       VALUE 'This is Option 1'                ;
  522.       PROMPT 'Option 1'                       ;
  523.       PARENT oRadioGroup                      ;
  524.       ACTION {||oStatic:SetCaption(cRadio)}   ;
  525.       PIXEL
  526.  
  527.    @  35,10 DCRADIO cRadio                    ;
  528.       VALUE 'This is Option 2'                ;
  529.       PROMPT 'Option 2'                       ;
  530.       PARENT oRadioGroup                      ;
  531.       ACTION {||oStatic:SetCaption(cRadio)}   ;
  532.       PIXEL
  533.  
  534.    @  55,10 DCRADIO cRadio                    ;
  535.       VALUE 'This is Option 3'                ;
  536.       PROMPT 'Option 3'                       ;
  537.       PARENT oRadioGroup                      ;
  538.       ACTION {||oStatic:SetCaption(cRadio)}   ;
  539.       PIXEL
  540.  
  541.    DCGET OPTIONS                              ;
  542.       WINDOW HEIGHT 300                       ;
  543.       WINDOW WIDTH 240
  544.  
  545.    DCREAD GUI ;
  546.       TITLE 'Fixed-Size Dialog' ;
  547.       BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL ;
  548.       MODAL ;
  549.       OPTIONS GetOptions
  550.  
  551. ReTURN nil
  552. *** END OF EXAMPLE ***
  553.  
  554. /* --------------------------- */
  555.  
  556. STATIC FUNCTION XSample_6
  557.  
  558. /*
  559. PUSHBUTTON
  560.  
  561. This sample demonstrates different DCPUSHBUTTON styles with
  562. Text captions, Code-block captions, and BitMap captions.
  563. */
  564.  
  565. LOCAL GetList := {}, cCaption, nBitMap
  566.  
  567. @ 1,1 DCPUSHBUTTON       ;
  568.    CAPTION BITMAP_TOP_1  ;
  569.    ACCELKEY xbeK_ALT_T   ;
  570.    SIZE 9, 1             ;
  571.    ACTION {||DC_msgbox('Go to Top of File')}
  572.  
  573. @ 1,11 DCSAY 'The caption on this button is a Bitmap in the .EXE'
  574.  
  575. cCaption := "-$$$-"
  576. @ 3,1 DCPUSHBUTTON       ;
  577.    CAPTION {||cCaption}  ;
  578.    ACCELKEY xbeK_ALT_P   ;
  579.    SIZE 9, 1             ;
  580.    ACTION {||cCaption := IIF( cCaption='-$$$-','<###>','-$$$-' ), DC_GetRefresh(GetList)}
  581.  
  582. @ 3,11 DCSAY 'The caption on this button is a code block'
  583.  
  584. @ 5,1 DCPUSHBUTTON       ;
  585.    CAPTION '~Next'       ;
  586.    ACCELKEY xbeK_ALT_N   ;
  587.    SIZE 9, 1             ;
  588.    ACTION {||DC_msgbox('Go to the Next Record')}
  589.  
  590. @ 5,11 DCSAY 'The caption on this button is text'
  591.  
  592. nBitMap := BITMAP_BOTTOM_1
  593. @ 7,1 DCPUSHBUTTON       ;
  594.    CAPTION {||nBitMap}  ;
  595.    ACCELKEY xbeK_ALT_P   ;
  596.    SIZE 9, 1             ;
  597.    ACTION {||nBitMap := ;
  598.              IIF( nBitMap=BITMAP_BOTTOM_1,BITMAP_BOTTOM_2,BITMAP_BOTTOM_1 ), ;
  599.              DC_GetRefresh(GetList)}
  600.  
  601. @ 7,11 DCSAY 'The caption on this button is a code block'
  602.  
  603. DCREAD GUI ;
  604.    MODAL ;
  605.    TITLE 'Pushbutton Styles' ;
  606.    FIT ;
  607.    BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
  608.  
  609. ReTURN nil
  610. *** END OF EXAMPLE ***
  611.  
  612. /* -------------------------------- */
  613.  
  614. STATIC FUNCTION XSample_7
  615.  
  616. /*
  617. BROWSE (DATABASE)
  618.  
  619. This sample demonstrates a browse of a database with a toolbar at the top
  620. containing pushbuttons for navigation of the browse.
  621. */
  622.  
  623. LOCAL GetList := {}, aPres, oBrowse, oToolBar, aColors, bColor, GetOptions
  624.  
  625. USE COLLECT VIA DBFNTX NEW SHARED
  626.  
  627. aColors := { {GRA_CLR_WHITE,GRA_CLR_DARKRED}, ;
  628.              {GRA_CLR_WHITE,GRA_CLR_DARKBLUE}, ;
  629.              {GRA_CLR_BLACK,GRA_CLR_DARKGREEN} }
  630.  
  631. bColor := {||aColors[COLLECT->for_sale+1]}
  632.  
  633. aPres := ;
  634.   { { XBP_PP_COL_HA_FGCLR, GRA_CLR_WHITE },    /*  Header FG Color  */     ;
  635.     { XBP_PP_COL_HA_BGCLR, GRA_CLR_DARKGRAY }, /*  Header BG Color  */     ;
  636.     { XBP_PP_COL_FA_FGCLR, GRA_CLR_YELLOW },   /*  Footer FG Color  */     ;
  637.     { XBP_PP_COL_FA_BGCLR, GRA_CLR_DARKGRAY }, /*  Footer BG Color  */     ;
  638.     { XBP_PP_COL_DA_ROWSEPARATOR, XBPCOL_SEP_DOTTED },  /* Row Sep  */     ;
  639.     { XBP_PP_COL_DA_COLSEPARATOR, XBPCOL_SEP_DOTTED },  /* Col Sep  */     ;
  640.     { XBP_PP_COL_DA_ROWHEIGHT, 20 },                  /* Row Height */     ;
  641.     { XBP_PP_COL_DA_CELLHEIGHT, 20 }  }              /* Cell Height */
  642.  
  643. /* ----- Create ToolBar ----- */
  644.  
  645. @ 1,1 DCTOOLBAR oToolBar                               ;
  646.    SIZE 77, 1.5
  647.  
  648. DCADDBUTTON CAPTION 'Top'                              ;
  649.    SIZE 9                                              ;
  650.    ACTION {||dbGoTop(), DC_GetRefresh(GetList)}        ;
  651.    WHEN {||!DC_TestBof()}                              ;
  652.    PARENT oToolBar                                     ;
  653.    TOOLTIP 'Go to top of file'
  654.  
  655. DCADDBUTTON CAPTION 'Previous'                         ;
  656.    SIZE 9                                              ;
  657.    ACTION {||dbSkip(-1), DC_GetRefresh(GetList)}       ;
  658.    WHEN {||!DC_TestBof()}                              ;
  659.    PARENT oToolBar                                     ;
  660.    TOOLTIP 'Skip to previous record in file'
  661.  
  662. DCADDBUTTON CAPTION 'Next'                             ;
  663.    SIZE 9                                              ;
  664.    ACTION {||dbSkip(1), DC_GetRefresh(GetList)}        ;
  665.    WHEN {||!DC_TestEof()}                              ;
  666.    PARENT oToolBar                                     ;
  667.    TOOLTIP 'Skip to next record in file'
  668.  
  669. DCADDBUTTON CAPTION 'Bottom'                           ;
  670.    SIZE 9                                              ;
  671.    ACTION {||dbGoBottom(), DC_GetRefresh(GetList)}     ;
  672.    WHEN {||!DC_TestEof()}                              ;
  673.    PARENT oToolBar                                     ;
  674.    TOOLTIP 'Go to Bottom of file'
  675.  
  676.  
  677. /* ----- Create browse ----- */
  678.  
  679. @ 3,1 DCBROWSE oBrowse ALIAS 'COLLECT'                 ;
  680.    SIZE 77,11.8                                        ;
  681.    EDIT xbeBRW_ItemSelected MODE DCGUI_BROWSE_EDITDOWN ;
  682.    PRESENTATION aPres
  683.  
  684. DCBROWSECOL FIELD COLLECT->descrip ;
  685.   HEADER "Description" PARENT oBrowse FOOTER '1'
  686.  
  687. DCBROWSECOL FIELD COLLECT->type ;
  688.   HEADER "Type" PARENT oBrowse FOOTER '2'
  689.  
  690. DCBROWSECOL FIELD COLLECT->sub_type ;
  691.   HEADER "SubType" PARENT oBrowse FOOTER '3'
  692.  
  693. DCBROWSECOL FIELD COLLECT->location ;
  694.   HEADER "Location" PARENT oBrowse FOOTER '4'
  695.  
  696. DCBROWSECOL DATA {|a|a:={'Yes','No','Not Sure'},a[COLLECT->for_sale+1]} ;
  697.   HEADER "For Sale?" PARENT oBrowse ;
  698.   EVAL { |o| o:colorBlock := bColor } FOOTER '5'
  699.  
  700. DCBROWSECOL FIELD COLLECT->date_orig ;
  701.   HEADER "Orig Date" PARENT oBrowse FOOTER '6'
  702.  
  703. DCBROWSECOL FIELD COLLECT->date_acqu ;
  704.   HEADER "Acqu Date" PARENT oBrowse FOOTER '7'
  705.  
  706. DCBROWSECOL FIELD COLLECT->orig_price ;
  707.   HEADER "Acqu Price" PARENT oBrowse FOOTER '8'
  708.  
  709. DCBROWSECOL FIELD COLLECT->appr_value ;
  710.   HEADER "Appr Value" PARENT oBrowse FOOTER '9'
  711.  
  712. DCBROWSECOL FIELD COLLECT->condition ;
  713.   HEADER "Condition" PARENT oBrowse FOOTER '10'
  714.  
  715. DCBROWSECOL DATA {||IIF(COLLECT->original,'Yes','No')} ;
  716.   HEADER "Orig Owner?" PARENT oBrowse FOOTER '11'
  717.  
  718. DCBROWSECOL FIELD COLLECT->comments ;
  719.   HEADER "Comments" PARENT oBrowse ;
  720.   WHEN {||.f.} FOOTER '12'
  721.  
  722. DCGETOPTIONS TABSTOP
  723.  
  724. DCREAD GUI ;
  725.    OPTIONS GetOptions ;
  726.    MODAL ;
  727.    TITLE 'Database Browse Demo' ;
  728.    FIT ;
  729.    BUTTONS DCGUI_BUTTON_EXIT ;
  730.    CLEAREVENTS
  731.  
  732. CLOSE ALL
  733.  
  734. ReTURN nil
  735. *** END OF EXAMPLE ***
  736.  
  737. /* --------------------------- */
  738.  
  739. STATIC FUNCTION XSample_8
  740.  
  741. /*
  742. PICK-LIST  (MASTER DIALOG/SUB DIALOG)
  743.  
  744. This example will display a list of fields in the "Available Fields"
  745. selection, allow the operator to select a set of fields, then display
  746. a Browse of the database for the fields selected.  The example shows
  747. how to use DCREAD GUI to create a master dialog and a sub dialog.
  748. */
  749.  
  750. LOCAL GetList := {}, GetOptions, cAlias, aListField, ;
  751.       aPickField, oBrowse, oDialog
  752.  
  753. USE COLLECT VIA DBFNTX NEW SHARED
  754.  
  755. cAlias := 'COLLECT'
  756. aListField := Array(FCount())
  757. AFields(aListField)
  758. aPickField := { aListField[1], aListField[2] }
  759. ADel(aListField,1)
  760. ADel(aListField,1)
  761. ASize(aListField,Len(aListField)-2)
  762.  
  763. @ 2,3 DCPICKLIST aPickField LIST aListField ;
  764.    CAPTION "Available Fields", "Selected Fields" ;
  765.    SIZE 35,12 ;
  766.    COPYITEMS ;
  767.    DATALINK {||BrowseCollect(cAlias,oDialog,@oBrowse,@aPickField)}
  768.  
  769. DCGET OPTIONS ;
  770.    WINDOW HEIGHT 360 ;
  771.    WINDOW WIDTH 600
  772.  
  773. DCREAD GUI ;
  774.    MODAL ;
  775.    TITLE "Picklist Demo" ;
  776.    OPTIONS GetOptions ;
  777.    PARENT @oDialog ;
  778.    BUTTONS DCGUI_BUTTON_CANCEL
  779.  
  780. CLOSE ALL
  781.  
  782. RETURN nil
  783.  
  784. /* --------------------- */
  785.  
  786. STATIC FUNCTION BrowseCollect ( cAlias, oDialog, oBrowse, aPickField )
  787.  
  788. LOCAL GetList := {}, i, aChildList
  789.  
  790. IF Valtype(oBrowse) = 'O'
  791.   oBrowse:Destroy()
  792. ENDIF
  793.  
  794. oBrowse := nil
  795.  
  796. IF Empty(aPickField)
  797.   RETURN nil
  798. ENDIF
  799.  
  800. @ 2,40 DCBROWSE oBrowse DATA cAlias SIZE 39,12 PARENT oDialog:drawingArea
  801.  
  802. SELECT collect
  803. FOR i := 1 TO Len(aPickField)
  804.   DCBROWSECOL DATA &('{||COLLECT->'+aPickField[i]+'}') ;
  805.     HEADER aPickField[i] PARENT oBrowse
  806. NEXT
  807.  
  808. DCREAD GUI ;
  809.    MODAL ;
  810.    PARENT oDialog ;
  811.    EXIT
  812.  
  813. ReTURN nil
  814. *** END OF EXAMPLE ***
  815.  
  816. /* --------------------------- */
  817.  
  818. STATIC FUNCTION XSample_9
  819.  
  820. /*
  821. MENU WITH SUB=MENUS
  822.  
  823. This example displays a dialogue box with a Multi-line edit
  824. and a menu with 3 submenus:  File, Edit, Util.
  825.  
  826. A set of pushbuttons allow for adding an item to the menu
  827. on the fly.
  828. */
  829.  
  830. LOCAL GetList := {}, oFileMenu, oMenuBar, oEditMenu, oMemo, oUtilMenu, ;
  831.       cMemo, nIndex, oDlg, oMsgBox, lCheckItem :=.t., nCheckIndex, ;
  832.       oExitMenu
  833.  
  834. USE COLLECT VIA DBFNTX NEW SHARED
  835.  
  836. cMemo := COLLECT->memo
  837.  
  838. @ 0,0 DCMULTILINE cMemo SIZE 70,7 FONT "10.Courier Bold"
  839.  
  840. @ 8,0 DCPUSHBUTTON CAPTION 'Add Menu Item' SIZE 14,1.2 ;
  841.    ACTION {||_XSample9(oUtilMenu,.t.,@nIndex,oDlg, ;
  842.                        DC_GetRefresh(GetList))} ;
  843.    WHEN {||Empty(nIndex)}
  844.  
  845. @ 8,16 DCPUSHBUTTON CAPTION 'Delete Menu Item' SIZE 14,1.2 ;
  846.    ACTION {||_XSample9(oUtilMenu,.f.,@nIndex,oDlg, ;
  847.                        DC_GetRefresh(GetList))} ;
  848.    WHEN {||!Empty(nIndex)}
  849.  
  850. /* ---- Menu ---- */
  851.  
  852. DCMENUBAR oMenuBar
  853.  
  854. DCSUBMENU oFileMenu PROMPT "&File" PARENT oMenuBar ;
  855.           MESSAGE 'These are FILE selections' INTO oMsgBox
  856.  
  857. DCMENUITEM "&Open a File" PARENT oFileMenu ;
  858.             MESSAGE 'This selection opens a New File' ;
  859.                INTO oMsgBox ;
  860.             ACTION {||DC_Msgbox('OpenFile')}
  861.  
  862. DCMENUITEM "&Close File" PARENT oFileMenu ;
  863.             MESSAGE 'This selection closes the currently selected file' ;
  864.                INTO oMsgBox ;
  865.             ACTION {||DC_Msgbox('CloseFile')}
  866.  
  867. DCMENUITEM "&Pack File" PARENT oFileMenu ;
  868.             MESSAGE 'This selection permanently removes deleted records' ;
  869.                INTO oMsgBox ;
  870.             ACTION {||DC_Msgbox('Packfile')}
  871.  
  872. DCSUBMENU oEditMenu PROMPT "&Edit" PARENT oMenuBar ;
  873.           MESSAGE 'These are EDIT selections' INTO oMsgBox
  874.  
  875. DCMENUITEM BITMAP_NEXT_1 PARENT oEditMenu ;
  876.             ACTION {||dbSkip(), ;
  877.                       cMemo := COLLECT->memo,;
  878.                       DC_GetRefresh(GetList)} ;
  879.             ACCELKEY xbeK_ALT_N ;
  880.             WHEN {||!Eof()} ;
  881.             MESSAGE 'Go to the NEXT record' INTO oMsgBox
  882.  
  883. DCMENUITEM BITMAP_PREVIOUS_1 PARENT oEditMenu ;
  884.             ACTION {||dbSkip(-1), ;
  885.                       cMemo := COLLECT->memo,;
  886.                       DC_GetRefresh(GetList)} ;
  887.             ACCELKEY xbeK_ALT_P ;
  888.             WHEN {||!Bof()} ;
  889.             MESSAGE 'Go to the PREVIOUS record' INTO oMsgBox
  890.  
  891. DCMENUITEM BITMAP_TOP_1 PARENT oEditMenu ;
  892.             ACTION {||dbGoTop(), ;
  893.                       cMemo := COLLECT->memo,;
  894.                       DC_GetRefresh(GetList)} ;
  895.             ACCELKEY xbeK_ALT_T ;
  896.             MESSAGE 'Go the the TOP of the file' INTO oMsgBox
  897.  
  898. DCMENUITEM BITMAP_BOTTOM_1 PARENT oEditMenu ;
  899.             ACTION {||dbGoBottom(), ;
  900.                       cMemo := COLLECT->memo, ;
  901.                       DC_GetRefresh(GetList)} ;
  902.             ACCELKEY xbeK_ALT_B ;
  903.             MESSAGE 'Go to the BOTTOM of the file' INTO oMsgBox
  904.  
  905. DCSUBMENU oUtilMenu PROMPT "&Util" PARENT oMenuBar ;
  906.           MESSAGE 'These are UTILITIES' INTO oMsgBox
  907.  
  908. DCMENUITEM "&Copy File" PARENT oUtilMenu ;
  909.             ACTION {||DC_Msgbox('CopyFile')} ;
  910.             MESSAGE 'Copy a file' INTO oMsgBox
  911.  
  912. DCMENUITEM "&Move File" PARENT oUtilMenu ;
  913.             ACTION {||Msgbox('MoveFile')} ;
  914.             MESSAGE 'Move a file' INTO oMsgBox
  915.  
  916. DCMENUITEM "Toggle Check" PARENT oUtilMenu ;
  917.             INDEX nCheckIndex ;
  918.             CHECKED ;
  919.             ACTION {||lCheckItem := !lCheckItem, ;
  920.                     oUtilMenu:CheckItem(nCheckIndex,lCheckItem)} ;
  921.             MESSAGE 'Click here to Toggle Check Mark' INTO oMsgBox
  922.  
  923. DCSUBMENU oExitMenu PROMPT "E~xit" PARENT oMenuBar ;
  924.           MESSAGE 'This will EXIT the Menu Demo' INTO oMsgBox ;
  925.           ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}
  926.  
  927. @ 10,0 DCMESSAGEBOX OBJECT oMsgBox SIZE 70,1.5 FONT '10.Arial Bold'
  928.  
  929. DCREAD GUI ;
  930.    TITLE 'Menu Demo' ;
  931.    FIT ;
  932.    MODAL ;
  933.    EVAL {|o|SetAppWindow(o)} ;
  934.    PARENT @oDlg ;
  935.    BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
  936.  
  937. CLOSE ALL
  938.  
  939. RETURN nil
  940.  
  941. /* --------------------------- */
  942.  
  943. STATIC FUNCTION _XSample9( oUtilMenu, lAddItem, nIndex, oDlg )
  944.  
  945. LOCAL GetList := {}
  946.  
  947. IF lAddItem .AND. Empty(nIndex)
  948.  
  949.   DCMENUITEM "New Menu Item" PARENT oUtilMenu ;
  950.               ACTION {||Msgbox('New Menu Item')} ;
  951.               INDEX nIndex
  952.  
  953.   DCREAD GUI EXIT PARENT oDlg
  954.   DC_MsgBox('"New Menu Item" was added to Utilities Menu')
  955.  
  956. ELSEIF !Empty(nIndex)
  957.   oUtilMenu:delItem(nIndex)
  958.   DC_MsgBox('"New Menu Item" was deleted from Utilities Menu')
  959.   nIndex := nil
  960.  
  961. ENDIF
  962.  
  963. RETURN nil
  964. *** END OF EXAMPLE ***
  965.  
  966.  
  967. /* --------------------------- */
  968.  
  969. STATIC FUNCTION XSample_10
  970.  
  971. /*
  972. CELL-EDITING in a BROWSE
  973.  
  974. This example shows how to enable editing of data within the
  975. cells of the browse display.  The EDITOR clause of the
  976. DCBROWSECOL command defines the ID of the object to use as
  977. the cell-editor.
  978.  
  979. */
  980.  
  981. LOCAL GetList := {}, oBrowse, oBrowBox, oMsgBox, aType, xNIL
  982.  
  983. USE COLLECT VIA DBFNTX NEW SHARED
  984. DC_GetPopUpCaption({nil,BITMAP_PICKLIST,1})
  985.  
  986. @  2,2 DCSTATIC XBPSTATIC_TYPE_RECESSEDBOX SIZE 78,12 ;
  987.    OBJECT oBrowBox
  988.  
  989. @ .1,.5 DCBROWSE oBrowse PARENT oBrowBox ALIAS 'COLLECT' ;
  990.    SIZE 77,11.8 ;
  991.    FREEZELEFT { 1 } ;
  992.    EDIT xbeBRW_ItemSelected MODE DCGUI_BROWSE_EDITACROSSDOWN ;
  993.    DELETE xbeK_DEL ;
  994.    INSERT xbeK_INS ;
  995.    PRESENTATION DC_BrowPres()
  996.  
  997. DCBROWSECOL FIELD COLLECT->descrip ;
  998.   WIDTH 8 ;
  999.   MESSAGE 'This is the description of the article' ;
  1000.   HEADER "Description" PARENT oBrowse
  1001.  
  1002. DCBROWSECOL FIELD COLLECT->type ;
  1003.   WIDTH 6 ;
  1004.   MESSAGE 'This is the Type-Class of the article' ;
  1005.   HEADER "Type" PARENT oBrowse ;
  1006.   EDITOR 'TYPE'
  1007.  
  1008. DCBROWSECOL FIELD COLLECT->date_orig ;
  1009.   HEADER "Orig Date" PARENT oBrowse ;
  1010.   MESSAGE 'This is the date the article was created or discovered' ;
  1011.   WIDTH 6 ;
  1012.   EDITOR 'ORIGINAL_DATE'
  1013.  
  1014. DCBROWSECOL FIELD COLLECT->date_acqu ;
  1015.   HEADER "Acqu Date" PARENT oBrowse ;
  1016.   MESSAGE 'This is the date the article was acquired' ;
  1017.   WIDTH 6 ;
  1018.   EDITOR 'ACQUIRED_DATE'
  1019.  
  1020. DCBROWSECOL FIELD COLLECT->orig_price ;
  1021.   HEADER "Acqu Price" PARENT oBrowse ;
  1022.   MESSAGE 'This is the original price paid for the article' ;
  1023.   WIDTH 6 ;
  1024.   EDITOR 'ORIGINAL_PRICE'
  1025.  
  1026. DCBROWSECOL FIELD COLLECT->appr_value ;
  1027.   HEADER "Appr Value" PARENT oBrowse ;
  1028.   MESSAGE 'This is the current appraised value of the article' ;
  1029.   WIDTH 6 ;
  1030.   EDITOR 'APPRAISED_VALUE'
  1031.  
  1032. DCBROWSECOL FIELD COLLECT->memo ;
  1033.   HEADER "Memo" PARENT oBrowse ;
  1034.   MESSAGE 'This is general info about how the article was acquired' ;
  1035.   WIDTH 24 ;
  1036.   EDITOR 'BROWSEEDIT_MEMO' EXITKEY xbeK_F10
  1037.  
  1038. aType := { 'HollyWood','Sports','Star-Trek','Comics','Books','Other' }
  1039.  
  1040. @  nil, nil DCCOMBOBOX xNIL LIST aType SIZE 12,6 ;
  1041.    TYPE XBPCOMBO_DROPDOWN ;
  1042.    MESSAGE 'Enter the TYPE of article' ;
  1043.    ID 'TYPE'
  1044.  
  1045. @  nil,nil DCMULTILINE xNIL SIZE 20,5 ;
  1046.    FONT "10.Courier" ;
  1047.    MESSAGE 'Press the F10 Key to Exit and Save' ;
  1048.    ID 'BROWSEEDIT_MEMO'
  1049.  
  1050. @  nil, nil DCGET xNIL PICT '99/99/9999' ;
  1051.    POPUP {|d|DC_PopDate(d)} ;
  1052.    MESSAGE 'Enter the Date that article was created or discovered' ;
  1053.    GETID 'ORIGINAL_DATE'
  1054.  
  1055. @  nil, nil DCGET xNIL PICT '99/99/9999' ;
  1056.    POPUP {|d|DC_PopDate(d)} ;
  1057.    MESSAGE 'Enter the Date that article was acquired' ;
  1058.    GETID 'ACQUIRED_DATE'
  1059.  
  1060. /*
  1061. @  nil, nil DCGET xNIL PICT '@K 9999.99'  ;
  1062.    POPUP {|n|DC_PopCalc(n)} ;
  1063.    MESSAGE 'Enter the Price paid for article' ;
  1064.    GETID 'ORIGINAL_PRICE'
  1065. */
  1066.  
  1067. @  nil, nil DCSPINBUTTON xNIL SIZE 10,1 ID 'ORIGINAL_PRICE' LIMITS 1,5
  1068.  
  1069. @  nil, nil DCGET xNIL PICT '@K 9999.99'  ;
  1070.    POPUP {|n|DC_PopCalc(n)} ;
  1071.    MESSAGE 'Enter the Current appraised value of article' ;
  1072.    GETID 'APPRAISED_VALUE'
  1073.  
  1074. @  15,2 DCMESSAGEBOX OBJECT oMsgBox SIZE 78,1.2 ;
  1075.    FONT '12.Helv'
  1076.  
  1077. DCREAD GUI ;
  1078.    FIT ;
  1079.    MODAL ;
  1080.    BUTTONS DCGUI_BUTTON_EXIT ;
  1081.    TITLE 'Example of Browse Cell-Editing (double-click on a cell)'
  1082.  
  1083. IF Flock()
  1084.   CLOSE
  1085. ENDIF
  1086.  
  1087. RETURN nil
  1088. *** END OF EXAMPLE ***
  1089.  
  1090. /* --------------------------- */
  1091.  
  1092. STATIC FUNCTION XSample_11
  1093.  
  1094. /*
  1095. HOT-KEYS
  1096.  
  1097. This example shows hot to use the DCHOTKEY command to select
  1098. a radio-button by pressing an ALT-<letter> hot key.
  1099. */
  1100.  
  1101.   LOCAL GetList := {}, GetOptions, cOption, oRadio1, oRadio2, ;
  1102.         oRadio3, oRadio4
  1103.  
  1104.   cOption := 'P'
  1105.  
  1106.   @ 1,2 DCRADIO cOption PROMPT 'Save to &Dictionary' VALUE 'D' ;
  1107.     OBJECT oRadio1
  1108.  
  1109.   @ 2,2 DCRADIO cOption PROMPT '&Save to Source Code' VALUE 'S' ;
  1110.     OBJECT oRadio2
  1111.  
  1112.   @ 3,2 DCRADIO cOption PROMPT 'Make a &Backup file' VALUE 'B' ;
  1113.     OBJECT oRadio3
  1114.  
  1115.   @ 4,2 DCRADIO cOption PROMPT '&Pack the File' VALUE 'P' ;
  1116.     OBJECT oRadio4
  1117.  
  1118.   DCHOTKEY xbeK_ALT_D ACTION {||SetAppFocus(oRadio1), ;
  1119.                                    oRadio2:SetData(.f.), ;
  1120.                                    oRadio3:SetData(.f.), ;
  1121.                                    oRadio4:SetData(.f.), ;
  1122.                                    oRadio1:SetData(.t.), ;
  1123.                                    cOption := 'D' }
  1124.  
  1125.   DCHOTKEY xbeK_ALT_S ACTION {||SetAppFocus(oRadio2), ;
  1126.                                    oRadio1:SetData(.f.), ;
  1127.                                    oRadio3:SetData(.f.), ;
  1128.                                    oRadio4:SetData(.f.), ;
  1129.                                    oRadio2:SetData(.t.), ;
  1130.                                    cOption := 'S' }
  1131.  
  1132.   DCHOTKEY xbeK_ALT_B ACTION {||SetAppFocus(oRadio3), ;
  1133.                                    oRadio1:SetData(.f.), ;
  1134.                                    oRadio2:SetData(.f.), ;
  1135.                                    oRadio4:SetData(.f.), ;
  1136.                                    oRadio3:SetData(.t.), ;
  1137.                                    cOption := 'B' }
  1138.  
  1139.   DCHOTKEY xbeK_ALT_P ACTION {||SetAppFocus(oRadio4), ;
  1140.                                    oRadio1:SetData(.f.), ;
  1141.                                    oRadio2:SetData(.f.), ;
  1142.                                    oRadio3:SetData(.f.), ;
  1143.                                    oRadio4:SetData(.t.), ;
  1144.                                    cOption := 'P' }
  1145.  
  1146.   DCREAD GUI ;
  1147.     TITLE 'Hot-Key Demo';
  1148.     FIT ;
  1149.     MODAL ;
  1150.     BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
  1151.  
  1152.   DC_MsgBox({cOption})
  1153.  
  1154. RETURN nil
  1155. *** END OF EXAMPLE ***
  1156.  
  1157. /* --------------------------- */
  1158.  
  1159. STATIC FUNCTION XSample_12
  1160.  
  1161. /*
  1162. BIT-MAP
  1163.  
  1164. This sample will display a sequence of Bit-Maps that are stored in
  1165. a database.
  1166. */
  1167.  
  1168. LOCAL GetList := {}, oClipPhoto, oBitMap, nBitMap, lPlayBack
  1169.  
  1170. @  4,10 DCSTATIC XBPSTATIC_TYPE_RAISEDBOX SIZE 50,10 ;
  1171.    OBJECT oClipPhoto
  1172.  
  1173. nBitMap := BITMAP_EXPRESS
  1174. DCBITMAP nBitMap PARENT oClipPhoto AUTOSCALE OBJECT oBitMap
  1175. lPlayBack := .f.
  1176.  
  1177. @ 4,65 DCPUSHBUTTON CAPTION 'PlayBack' SIZE 9,2 ;
  1178.        TOOLTIP 'Play Back all BitMaps in IMAGES.DBF' ;
  1179.        ACTION {||lPlayBack := .t., ;
  1180.                  DisplayImages(oClipPhoto,oBitMap,@lPlayBack,GetList) }
  1181.  
  1182. @ 7,65 DCPUSHBUTTON CAPTION 'Stop' SIZE 9,2 ;
  1183.        TOOLTIP 'Stop the Play Back' ;
  1184.        WHEN {||lPlayBack} ;
  1185.        ACTION {||lPlayBack := .f.}
  1186.  
  1187. DCREAD GUI ;
  1188.    FIT ;
  1189.    MODAL ;
  1190.    BUTTONS DCGUI_BUTTON_OK ;
  1191.    TITLE 'BitMap Demo'
  1192.  
  1193. RETURN nil
  1194.  
  1195. /* ------------------- */
  1196.  
  1197. STATIC FUNCTION DisplayImages( oClipPhoto, oBitMap, lPlayBack, GetList )
  1198.  
  1199. LOCAL nSeconds, lClearBox := .t., nSaveArea := Select(), cBmpDb, ;
  1200.       nEvent, oXbp, mp1, mp2, cAlaskaDrive, lOk
  1201.  
  1202. IF !lPlayBack
  1203.   RETURN nil
  1204. ENDIF
  1205.  
  1206. cBmpDb := '\ALASKA\XPPW32\SOURCE\SAMPLES\DATA\BMPDB.DBF'
  1207. IF !File(cBmpDb)
  1208.   cAlaskaDrive := SubStr(GetEnv('XPPRESOURCE'),1,2)
  1209.   cBmpDb := Strtran(cBmpDb,'C:',cAlaskaDrive)
  1210. ENDIF
  1211. lOk := .t.
  1212.  
  1213. IF !File(cBmpDb)
  1214.   GetList := {}
  1215.   @ 1,1 DCSAY ;
  1216.    "Can't find Bitmap database, Enter path and file name" ;
  1217.    SAYSIZE 50
  1218.   cBmpDb := Pad(cBmpDb,60)
  1219.   @ 2,1 DCGET cBmpDb
  1220.   DCREAD GUI ;
  1221.    FIT ;
  1222.    MODAL ;
  1223.    ADDBUTTONS TO lOk ;
  1224.    ENTEREXIT
  1225.   cBmpDb := Alltrim(cBmpDb)
  1226. ENDIF
  1227.  
  1228. DC_GetWhen(GetList)
  1229. IF lOk .AND. File(cBmpDb)
  1230.   USE (cBmpDb) NEW VIA foxcdx
  1231.   nEvent := xbeP_None
  1232.   DO WHILE lPlayBack .AND. nEvent # xbeP_Close
  1233.     oBitMap:setBuffer(FIELD->BITMAP,XBPBMP_FORMAT_WIN3X)
  1234.     DC_BitMapDraw( oClipPhoto, oBitMap, lClearBox )
  1235.     lClearBox := .f.
  1236.     IF Eof()
  1237.       DbGoTop()
  1238.     ELSE
  1239.       DbSkip(1)
  1240.     ENDIF
  1241.     Sleep(0.1)
  1242.     nEvent := AppEvent( @mp1, @mp2, @oXbp, .01 )
  1243.     IF Valtype(oXbp) = 'O'
  1244.       IF nEvent = xbeM_Motion .AND. mp1 == NIL
  1245.          LOOP
  1246.       ENDIF
  1247.       oXbp:handleEvent( nEvent, mp1, mp2, oXbp )
  1248.     ENDIF
  1249.   ENDDO
  1250.   CLOSE
  1251. ENDIF
  1252.  
  1253. RETURN nil
  1254. *** END OF EXAMPLE ***
  1255.  
  1256. /* --------------------------- */
  1257.  
  1258. STATIC FUNCTION XSample_13
  1259.  
  1260. /*
  1261. APPLICATION EDIT
  1262.  
  1263. This sample uses DCAPPEDIT and DCAPPFIELD to create an Application Edit
  1264. FOR a database.
  1265. */
  1266.  
  1267.  LOCAL GetList := {}, oStatic, oAppEdit
  1268.  
  1269.  USE COLLECT VIA DBFNTX NEW SHARED
  1270.  
  1271.  @  0,0 DCSTATIC XBPSTATIC_TYPE_RAISEDBOX SIZE 78,18.5 ;
  1272.     OBJECT oStatic
  1273.  
  1274.  DCAPPEDIT INTO oAppEdit STYLE 3D POSITION 0,0 PARENT oStatic
  1275.  
  1276.  DCAPPFIELD COLLECT->descrip INTO oAppEdit ;
  1277.    CAPTION 'Description' ;
  1278.    COLOR GRA_CLR_BLUE
  1279.  
  1280.  DCAPPFIELD COLLECT->type INTO oAppEdit  ;
  1281.    CAPTION 'Type'       ;
  1282.    COLOR GRA_CLR_BLUE
  1283.  
  1284.  DCAPPFIELD COLLECT->sub_type INTO oAppEdit  ;
  1285.    CAPTION 'Sub-Type' ;
  1286.    COLOR GRA_CLR_BLUE
  1287.  
  1288.  DCAPPFIELD COLLECT->location INTO oAppEdit  ;
  1289.    CAPTION 'Location' ;
  1290.    COLOR GRA_CLR_BLUE
  1291.  
  1292.  DCAPPFIELD COLLECT->date_orig INTO oAppEdit  ;
  1293.    CAPTION 'Date of Origin' ;
  1294.    COLOR GRA_CLR_BLUE
  1295.  
  1296.  DCAPPFIELD COLLECT->date_acqu INTO oAppEdit  ;
  1297.    CAPTION 'Acquired Date' ;
  1298.    COLOR GRA_CLR_BLUE
  1299.  
  1300.  DCAPPFIELD COLLECT->appr_value INTO oAppEdit  ;
  1301.    CAPTION 'Appraised Value' ;
  1302.    COLOR GRA_CLR_BLUE
  1303.  
  1304.  DCAPPFIELD COLLECT->for_sale INTO oAppEdit  ;
  1305.    CAPTION 'For Sale?' ;
  1306.    COLOR GRA_CLR_BLUE
  1307.  
  1308.  DCAPPFIELD COLLECT->condition INTO oAppEdit  ;
  1309.    CAPTION 'Condition' ;
  1310.    COLOR GRA_CLR_BLUE
  1311.  
  1312.  DCAPPFIELD COLLECT->bitmap1 INTO oAppEdit  ;
  1313.    CAPTION 'Bit Map File #1' ;
  1314.    COLOR GRA_CLR_BLUE
  1315.  
  1316.  DCAPPFIELD COLLECT->bitmap2 INTO oAppEdit  ;
  1317.    CAPTION 'Bit Map File #2' ;
  1318.    COLOR GRA_CLR_BLUE
  1319.  
  1320.  DCAPPFIELD COLLECT->comments INTO oAppEdit  ;
  1321.    CAPTION 'Comments' ;
  1322.    COLOR GRA_CLR_BLUE
  1323.  
  1324.  DCAPPFIELD COLLECT->memo INTO oAppEdit  ;
  1325.    CAPTION 'How was this item acquired?' ;
  1326.    COLOR GRA_CLR_BLUE ;
  1327.    WIDTH 60
  1328.  
  1329.  DCREAD GUI ;
  1330.    TITLE 'Application Edit Demo' ;
  1331.    FIT ;
  1332.    MODAL ;
  1333.    BUTTONS DCGUI_BUTTON_EXIT
  1334.  
  1335. RETURN nil
  1336. *** END OF EXAMPLE ***
  1337.  
  1338. /* --------------------------- */
  1339.  
  1340. STATIC FUNCTION XSample_14
  1341. /*
  1342. PROGRESS BAR
  1343.  
  1344. This example demonstrates a progress bar that is displayed
  1345. while copying records from a database.   The CANCEL button
  1346. can be used to cancel the copy while in progress.
  1347. */
  1348.  
  1349. LOCAL Getlist := {}, oProgress, oDialog, lOk := .t., oButton, ;
  1350.       nEvent, mp1, mp2, oXbp
  1351.  
  1352. IF !File('..\XDOC\EXPRESS.DBF')
  1353.   DC_MsgBox({'Sorry.  The database required to show this feature',;
  1354.              'is not included in the demonstration version', ;
  1355.              'or the ..\XDOC\EXPRESS.DBF file does not exist'})
  1356.   RETURN nil
  1357. ENDIF
  1358.  
  1359. USE ..\XDOC\EXPRESS VIA FOXCDX ALIAS XDOC
  1360.  
  1361. @ 2,5 DCSAY 'Exporting Data to JUNK.DBF'
  1362.  
  1363. @ 4,5 DCPROGRESS oProgress ;
  1364.        SIZE 55,1.5 ;
  1365.        PERCENT ;
  1366.        EVERY 5 ;
  1367.        MAXCOUNT RecCount() COLOR GRA_CLR_BLUE
  1368.  
  1369. @ 4,65 DCPUSHBUTTON  CAPTION '&Cancel' ;
  1370.   ACTION {||lOk:=.f.} OBJECT oButton ;
  1371.   SIZE 8,1.5
  1372.  
  1373. DCREAD GUI ;
  1374.    TITLE 'My Test Dialog' ;
  1375.    PARENT @oDialog ;
  1376.    FIT ;
  1377.    EXIT ;
  1378.    MODAL
  1379.  
  1380. oDialog:show()
  1381.  
  1382. COPY TO junk WHILE _Progress( oProgress, @lOk )
  1383.  
  1384. oButton:SetCaption('&Ok')
  1385. DC_AppEvent( @lOk )
  1386.  
  1387. IF !lOk
  1388.   FErase('JUNK.DBF')
  1389. ENDIF
  1390.  
  1391. oDialog:Destroy()
  1392. CLOSE ALL
  1393.  
  1394. RETURN nil
  1395.  
  1396. /* ----------------- */
  1397.  
  1398. STATIC FUNCTION _Progress ( oProgress, lOk )
  1399.  
  1400. LOCAL nMaxCount := RecCount()
  1401.  
  1402. DC_GetProgress( oProgress, RecNo() )
  1403. DC_AppEvent( @lOk, 0, .01 )
  1404.  
  1405. RETURN lOk
  1406. *** END OF EXAMPLE ***     p
  1407.  
  1408. /* --------------------------- */
  1409.  
  1410. STATIC FUNCTION XSample_15
  1411.  
  1412. /*
  1413. SCROLL-BARS
  1414.  
  1415. This example uses three scrollbars to change the RED, GREEN
  1416. and BLUE colors and display the result in a box.
  1417. */
  1418.  
  1419.  LOCAL nRed := 50, nGreen := 100, nBlue := 150, GetList := {}, oColorBox
  1420.  
  1421.  @ 2, 44 DCSAY 'R' SAYSIZE 2
  1422.  @ 3, 43 DCSCROLLBAR DATA nRed SIZE 3,7 ;
  1423.          TYPE XBPSCROLL_VERTICAL RANGE 0,255 ;
  1424.          SCROLL { |a,x,o| nRed := a[1], ;
  1425.            o:SetData(), RGB(nRed,nGreen,nBlue,oColorBox) }
  1426.  
  1427.  @ 2, 48 DCSAY 'G' SAYSIZE 2
  1428.  @ 3, 47 DCSCROLLBAR DATA nGreen SIZE 3,7 ;
  1429.          TYPE XBPSCROLL_VERTICAL RANGE 0,255 ;
  1430.          SCROLL { |a,x,o| nGreen := a[1], ;
  1431.            o:SetData(), RGB(nRed,nGreen,nBlue,oColorBox) }
  1432.  
  1433.  @ 2, 52 DCSAY 'B' SAYSIZE 2
  1434.  @ 3, 51 DCSCROLLBAR DATA nBlue  SIZE 3,7 ;
  1435.          TYPE XBPSCROLL_VERTICAL RANGE 0,255 ;
  1436.          SCROLL { |a,x,o| nBlue := a[1], ;
  1437.            o:SetData(), RGB(nRed,nGreen,nBlue,oColorBox) }
  1438.  
  1439.  @ 11, 40 DCSTATIC XBPSTATIC_TYPE_RAISEDBOX SIZE 20,2 ;
  1440.          OBJECT oColorBox ;
  1441.          EVAL {|o|o:paint := {||RGB(nRed,nGreen,nBlue,oColorBox)} }
  1442.  
  1443.  DCREAD GUI ;
  1444.    TITLE 'Scroll-bar Demo' ;
  1445.    FIT ;
  1446.    MODAL ;
  1447.    BUTTONS DCGUI_BUTTON_EXIT ;
  1448.    EVAL {||RGB(nRed,nGreen,nBlue,oColorBox)}
  1449.  
  1450.  RETURN nil
  1451.  
  1452.  /* ---------------- */
  1453.  
  1454.  STATIC FUNCTION RGB( nRed, nGreen, nBlue, oColorBox )
  1455.  
  1456.  LOCAL aAttr := Array(GRA_AA_COUNT)  // area attributes
  1457.  LOCAL nMax, aOldAttr, aOldRGB, oPS
  1458.  
  1459.  oPS   := oColorBox:LockPS()
  1460.  nMax  := oPS:maxColorIndex()  // max colors
  1461.  
  1462.  // Set new RGB color and draw box
  1463.  aAttr[ GRA_AA_COLOR  ] := nMax
  1464.  aOldAttr := oPS:setAttrArea( aAttr )
  1465.  aOldRGB  := oPS:setColorIndex( nMax, {nRed,nGreen,nBlue} )
  1466.  GraBox( oPS, {0,0}, {200,200}, GRA_FILL )
  1467.  oPS:setAttrArea( aOldAttr )
  1468.  oPS:setColorIndex( nMax, aOldRGB )
  1469.  oColorBox:unlockPS( oPS )
  1470.  
  1471.  RETURN nil
  1472.  *** END OF EXAMPLE ***
  1473.  
  1474. /* --------------------------- */
  1475.  
  1476. STATIC FUNCTION XSample_16
  1477.  
  1478. /*
  1479. STATIC BOXES
  1480.  
  1481. This example shows how to create different styles of STATIC boxes
  1482. using the DCSTATIC command.
  1483. */
  1484.  
  1485. LOCAL GetList := {}, oStatic1, oStatic2
  1486.  
  1487. @ 0,0 DCSTATIC XBPSTATIC_TYPE_RECESSEDBOX SIZE 20,4 ;
  1488.    OBJECT oStatic1
  1489.  
  1490. @ 6,0 DCSTATIC XBPSTATIC_TYPE_RAISEDBOX SIZE 20,4 ;
  1491.    OBJECT oStatic2
  1492.  
  1493. @ 2,1 DCSTATIC XBPSTATIC_TYPE_TEXT SIZE 15,1 ;
  1494.    CAPTION 'This is Recessed' PARENT oStatic1
  1495.  
  1496. @ 2,1 DCSTATIC XBPSTATIC_TYPE_TEXT SIZE 15,1 ;
  1497.    CAPTION 'This is Raised' PARENT oStatic2
  1498.  
  1499. DCREAD GUI ;
  1500.    TITLE 'Static Demo' ;
  1501.    FIT ;
  1502.    MODAL ;
  1503.    BUTTONS DCGUI_BUTTON_EXIT
  1504.  
  1505. RETURN nil
  1506. *** END OF EXAMPLE ***
  1507.  
  1508. /* --------------------------- */
  1509.  
  1510. STATIC FUNCTION XSample_17
  1511.  
  1512. /*
  1513. TAB-PAGES
  1514.  
  1515. This is an example of Tab-Pages using the DCTABPAGE command.  Note
  1516. that the second and third tab-pages do not require sizing when they
  1517. are created RELATIVE to the previous tab-page.
  1518. */
  1519.  
  1520. LOCAL oTabPage1, oTabPage2, oTabPage3, oTabPage4, cDesc := Space(30),;
  1521.       aType := {'Star-Trek','Hollywood','Sports','Other'},;
  1522.       cType := Space(15), dDateOrig := Date(), dDateAcqu := Date(),;
  1523.       nOrigPrice := 0, nApprValue := 0, cMemo := '', ;
  1524.       GetList := {}, oSubTabPage1, oSubTabPage2, oSubTabPage3
  1525.  
  1526. /* ---- Tab Page #1 ---- */
  1527.  
  1528. @  0,0 DCTABPAGE oTabPage1 CAPTION 'Collection' ;
  1529.    SIZE 72,15 PREOFFSET 0 POSTOFFSET 85
  1530.  
  1531. @  3,2  DCSAY "Description" GET cDesc SAYRIGHT PARENT oTabPage1
  1532.  
  1533. @  5,10  DCSAY "Type" PARENT oTabPage1 SAYSIZE 8
  1534.  
  1535. @  6,10 DCCOMBOBOX cType LIST aType SIZE 12,6 PARENT oTabPage1
  1536.  
  1537.  
  1538. /* ---- Tab Page #2 ---- */
  1539.  
  1540. @  0,0 DCTABPAGE oTabPage2 CAPTION 'Financial' ;
  1541.    RELATIVE oTabPage1
  1542.  
  1543. @  4,2 DCSAY "  Original Date" GET dDateOrig  PICT '99/99/9999' ;
  1544.    PARENT oTabPage2 SAYRIGHT
  1545.  
  1546. @  6,2 DCSAY "  Acquired Date" GET dDateAcqu  PICT '99/99/9999' ;
  1547.    PARENT oTabPage2 SAYRIGHT
  1548.  
  1549. @  8,2 DCSAY " Acquired Price" GET nOrigPrice PICT '9999.99'  ;
  1550.    PARENT oTabPage2 SAYRIGHT
  1551.  
  1552. @ 10,2 DCSAY "Appraised Value" GET nApprValue PICT '9999.99'  ;
  1553.    PARENT oTabPage2 SAYRIGHT
  1554.  
  1555. /* ---- Tab Page #3 ---- */
  1556.  
  1557. @  0,0 DCTABPAGE oTabPage3 CAPTION 'Memo' ;
  1558.    RELATIVE oTabPage2
  1559.  
  1560. @  5,2 DCMULTILINE cMemo PARENT oTabPage3 SIZE 65,8 ;
  1561.    FONT "10.Courier Bold"
  1562.  
  1563. /* ---- Tab Page #4 ---- */
  1564.  
  1565. @  0,0 DCTABPAGE oTabPage4 CAPTION 'Sub-Tabs' ;
  1566.    RELATIVE oTabPage3
  1567.  
  1568. @  2,5 DCTABPAGE oSubTabPage1 CAPTION 'Tab1' ;
  1569.    SIZE 50,10 PREOFFSET 0 POSTOFFSET 85 ;
  1570.    PARENT oTabPage4
  1571.  
  1572. @  3,10 DCSAY 'Sub-Page 1' FONT '12.Helv' PARENT oSubTabPage1 ;
  1573.    SAYSIZE 30,2
  1574.  
  1575. @  0,0 DCTABPAGE oSubTabPage2 CAPTION 'Tab2' ;
  1576.    RELATIVE oSubTabPage1 PARENT oTabPage4
  1577.  
  1578. @  3,10 DCSAY 'Sub-Page 2' FONT '12.Helv' PARENT oSubTabPage2 ;
  1579.    SAYSIZE 30,2
  1580.  
  1581. @  0,0 DCTABPAGE oSubTabPage3 CAPTION 'Tab3' ;
  1582.    RELATIVE oSubTabPage2 PARENT oTabPage4
  1583.  
  1584. @  3,10 DCSAY 'Sub-Page 3' FONT '12.Helv' PARENT oSubTabPage3 ;
  1585.    SAYSIZE 30,2
  1586.  
  1587. DCREAD GUI ;
  1588.    TITLE 'Tab-Page Demo' ;
  1589.    FIT ;
  1590.    MODAL ;
  1591.    BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
  1592.  
  1593. CLOSE
  1594.  
  1595. RETURN nil
  1596. *** END OF EXAMPLE ***
  1597.  
  1598. /* --------------------------- */
  1599.  
  1600. STATIC FUNCTION XSample_18
  1601.  
  1602. /*
  1603. USER-CREATED DIALOGUE
  1604.  
  1605. This is an example of using eXPress++ commands with a previously-created
  1606. dialog window.   In this example, the dialog window is an XbpDialog() class.
  1607. */
  1608.  
  1609. LOCAL oTabPage1, oTabPage2, oTabPage3, cDesc := Space(30),;
  1610.       aType := {'Star-Trek','Hollywood','Sports','Other'},;
  1611.       cType := Space(15), dDateOrig := Date(), dDateAcqu := Date(),;
  1612.       nOrigPrice := 0, nApprValue := 0, cMemo := '', ;
  1613.       GetList := {}, oDialog, oSaveApp := SetAppWindow()
  1614.  
  1615. oDialog := XbpDialog():New( AppDeskTop(),AppDeskTop(), { 100, 100 }, { 600, 420 },,.t. )
  1616. oDialog:Title      := "eXPress Sample - User Created Dialogue"
  1617. IF Valtype(DC_IconDefault())='N'
  1618.   oDialog:icon := DC_IconDefault()
  1619. ENDIF
  1620. oDialog:Create()
  1621.  
  1622. SetAppWindow(oDialog)
  1623.  
  1624. /* ---- Tab Page #1 ---- */
  1625.  
  1626. @  3,3 DCTABPAGE oTabPage1 CAPTION 'Collection' ;
  1627.    SIZE 72,13 PREOFFSET 0 POSTOFFSET 85
  1628.  
  1629. @  3,2  DCSAY "Description" GET cDesc SAYRIGHT PARENT oTabPage1
  1630.  
  1631. @  5,10  DCSAY "Type" PARENT oTabPage1 SAYSIZE 8
  1632.  
  1633. @  6,10 DCCOMBOBOX cType LIST aType SIZE 12,6 PARENT oTabPage1
  1634.  
  1635.  
  1636. /* ---- Tab Page #2 ---- */
  1637.  
  1638. @  0,0 DCTABPAGE oTabPage2 CAPTION 'Financial' ;
  1639.    RELATIVE oTabPage1
  1640.  
  1641. @  4,2 DCSAY "  Original Date" GET dDateOrig  PICT '99/99/9999' ;
  1642.    PARENT oTabPage2 SAYRIGHT
  1643.  
  1644. @  6,2 DCSAY "  Acquired Date" GET dDateAcqu  PICT '99/99/9999' ;
  1645.    PARENT oTabPage2 SAYRIGHT
  1646.  
  1647. @  8,2 DCSAY " Acquired Price" GET nOrigPrice PICT '9999.99'  ;
  1648.    PARENT oTabPage2 SAYRIGHT
  1649.  
  1650. @ 10,2 DCSAY "Appraised Value" GET nApprValue PICT '9999.99'  ;
  1651.    PARENT oTabPage2 SAYRIGHT
  1652.  
  1653. /* ---- Tab Page #3 ---- */
  1654.  
  1655. @  0,0 DCTABPAGE oTabPage3 CAPTION 'Memo' ;
  1656.    RELATIVE oTabPage2
  1657.  
  1658. @  2,2 DCMULTILINE cMemo PARENT oTabPage3 SIZE 65,8 ;
  1659.    FONT "10.Courier Bold"
  1660.  
  1661. DCREAD GUI ;
  1662.    TITLE 'User-Created Dialog' ;
  1663.    MODAL ;
  1664.    BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL ;
  1665.    PARENT oDialog
  1666.  
  1667. oDialog:Destroy()
  1668. SetAppWindow( oSaveApp )
  1669.  
  1670. RETURN nil
  1671. *** END OF EXAMPLE ***
  1672.  
  1673. /* --------------------------- */
  1674.  
  1675. STATIC FUNCTION XSample_19
  1676.  
  1677. /*  ARRAY BROWSER WITH COLORS
  1678.  
  1679.  This example demonstrates how to control the color of cells in
  1680.  an array browser using DCBROWSE.  In this example, the color of
  1681.  the SIZE cells is dependent on the size of the file.  The
  1682.  function DC_GETCOLARRAY() is used as a pointer into the array
  1683.  being browsed.
  1684.  
  1685. */
  1686.  
  1687. LOCAL GetList := {}, cFileName, oFileName, aDirectory, i, ;
  1688.       nPointer, oDirectory, aColors, bColor, GetOptions
  1689.  
  1690. cFileName := Space(30)
  1691.  
  1692. @ 2,2 DCGET cFileName GETSIZE 43 GETOBJECT oFileName
  1693.  
  1694. aDirectory := Directory()
  1695. FOR i := 1 TO Len(aDirectory)
  1696.   ASize(aDirectory[i],5)
  1697.   aDirectory[i,5] := .f.
  1698. NEXT
  1699. ASort(aDirectory,,,{|a,b|a[1]<b[1]})
  1700.  
  1701. @ 3.5,2 DCBROWSE oDirectory DATA aDirectory ;
  1702.       SIZE 60,12 ;
  1703.       FONT '10.Helv Bold' ;
  1704.       PRESENTATION DC_BrowPres() ;
  1705.       POINTER nPointer ;
  1706.       DATALINK {|a,b,o|cFileName:=aDirectory[nPointer,1],oFileName:SetData()} ;
  1707.       EVAL {|o|o:keyboard := {|nKey,x,oBrowse|_TabColumns(nKey,oBrowse)}} ;
  1708.       OPTIMIZE ;
  1709.       FIT ;
  1710.       NOHSCROLL ;
  1711.       MARK 5 ;
  1712.       MKCOLOR 5, GRA_CLR_WHITE, GRA_CLR_BLUE
  1713.  
  1714. aColors := { {GRA_CLR_WHITE,GRA_CLR_DARKRED}, ;
  1715.              {GRA_CLR_WHITE,GRA_CLR_DARKBLUE}, ;
  1716.              {GRA_CLR_BLACK,GRA_CLR_DARKGREEN}, ;
  1717.              {GRA_CLR_BLACK,GRA_CLR_YELLOW} }
  1718.  
  1719. bColor := {| nSize, nCase | nSize := DC_GetColArray(2,oDirectory),;
  1720.               nCase := DC_PickCase(nSize,'>=',;
  1721.                           {1000000,100000,10000,0}, ;
  1722.                           {      1,     2,    3,4} ), aColors[nCase] }
  1723.  
  1724. DCBROWSECOL ELEMENT 1 WIDTH 10 HEADER "Name" PARENT oDirectory
  1725.  
  1726. DCBROWSECOL ELEMENT 2 WIDTH 7 HEADER "Size" PARENT oDirectory ;
  1727.   EVAL { |o|o:colorBlock := bColor }
  1728.  
  1729. DCBROWSECOL ELEMENT 3 WIDTH 8 HEADER "Date" PARENT oDirectory
  1730.  
  1731. DCBROWSECOL ELEMENT 4 WIDTH 6 HEADER "Time" PARENT oDirectory
  1732.  
  1733. DCBROWSECOL ELEMENT 5 WIDTH 4 HEADER "Marked" PARENT oDirectory
  1734.  
  1735. DCGETOPTIONS NOMINBUTTON NOMAXBUTTON NORESIZE TABSTOP
  1736.  
  1737. DCREAD GUI ;
  1738.    OPTIONS GetOptions ;
  1739.    FIT ;
  1740.    MODAL ;
  1741.    BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL ;
  1742.    TITLE 'Array Browse of Directory'
  1743.  
  1744. RETURN nil
  1745.  
  1746. * ------------
  1747.  
  1748. STATIC FUNCTION _TabColumns(nKey,oDirectory)
  1749.  
  1750. IF nKey == xbeK_TAB
  1751.   IF oDirectory:colPos < oDirectory:colCount
  1752.     oDirectory:right()
  1753.   ELSE
  1754.     oDirectory:firstcol()
  1755.   ENDIF
  1756.   oDirectory:forceStable()
  1757. ENDIF
  1758. RETURN nil
  1759. *** END OF EXAMPLE ***
  1760.  
  1761. * ------------------------
  1762.  
  1763. STATIC FUNCTION XSample_20
  1764. /*
  1765.  
  1766. USER-DEFINED COMMAND
  1767.  
  1768. In this example, a custom command named @..FILEVIEW can be used
  1769. to view an ASCII file.  The command is used with DCREAD GUI and
  1770. can be mixed with any other UDC commands or DC* commands.
  1771. */
  1772.  
  1773. #define MYGETLIST_FILEVIEW      GETLIST_USER + 1
  1774.  
  1775. #command  @ <nRow>,<nCol> FILEVIEW <(cFile)>    ;
  1776.                 [SIZE <nWidth> [,<nHeight>]]    ;
  1777.                 [PARENT <oParent>]              ;
  1778.                 [PRESENTATION <aPres>]          ;
  1779.                 [OBJECT <oCustom>]              ;
  1780.                 [COLOR <ncFgC> [,<ncBgC>] ]     ;
  1781.                 [FONT <cFont>]                  ;
  1782.                 [MESSAGE <cMessage>]            ;
  1783.                 [HELPCODE <cHelpCode>]          ;
  1784.                 [TOOLTIP <cToolTip>]            ;
  1785.                 [<p:PIXEL>]                     ;
  1786.                 [TITLE <cTitle>]                ;
  1787.                 [RELATIVE <oRel>]               ;
  1788.                 [ID <cId>]                      ;
  1789.                 [ACCELKEY <nAccel>]             ;
  1790.   =>                                            ;
  1791.    AADD( GetList,                                       ;
  1792.     { MYGETLIST_FILEVIEW,   /* nGETLIST_TYPE         */ ;
  1793.       nil,                  /* nGETLIST_SUBTYPE      */ ;
  1794.       nil,                  /* cGETLIST_CAPTION      */ ;
  1795.       nil,                  /* bGETLIST_VAR          */ ;
  1796.       <nRow>,               /* nGETLIST_STARTROW     */ ;
  1797.       <nCol>,               /* nGETLIST_STARTCOL     */ ;
  1798.       nil,                  /* nGETLIST_ENDROW       */ ;
  1799.       nil,                  /* nGETLIST_ENDCOL       */ ;
  1800.       <nWidth>,             /* nGETLIST_WIDTH        */ ;
  1801.       <nHeight>,            /* nGETLIST_HEIGHT       */ ;
  1802.       <cFont>,              /* cGETLIST_FONT         */ ;
  1803.       nil,                  /* cGETLIST_PICTURE      */ ;
  1804.       nil,                  /* bGETLIST_WHEN         */ ;
  1805.       nil,                  /* bGETLIST_VALID        */ ;
  1806.       <cToolTip>,           /* cGETLIST_TOOLTIP      */ ;
  1807.       nil,                  /* xGETLIST_CARGO        */ ;
  1808.       <aPres>,              /* aGETLIST_PRESENTATION */ ;
  1809.       nil,                  /* bGETLIST_ACTION       */ ;
  1810.       nil,                  /* oGETLIST_OBJECT       */ ;
  1811.       nil,                  /* xGETLIST_ORIGVALUE    */ ;
  1812.       <(cFile)>,            /* xGETLIST_OPTIONS      */ ;
  1813.       [{<ncFgC>,<ncBgC>}],  /* aGETLIST_COLOR        */ ;
  1814.       <cMessage>,           /* cGETLIST_MESSAGE      */ ;
  1815.       <cHelpCode>,          /* cGETLIST_HELPCODE     */ ;
  1816.       nil,                  /* cGETLIST_VARNAME      */ ;
  1817.       nil,                  /* bGETLIST_READVAR      */ ;
  1818.       nil,                  /* bGETLIST_DELIMVAR     */ ;
  1819.       [{DC_GetAnchorCB(@<oCustom>,'O'),                 ;
  1820.         <(oCustom)>,'O'}],  /* bGETLIST_GROUP        */ ;
  1821.       nil,                  /* nGETLIST_POINTER      */ ;
  1822.       [{DC_GetAnchorCB(@<oParent>,'O'),                 ;
  1823.          <(oParent)>,'O'}], /* bGETLIST_PARENT       */ ;
  1824.       {|a|MyFileViewer(a)}, /* bGETLIST_REFVAR       */ ;
  1825.       nil,                  /* lGETLIST_READONLY     */ ;
  1826.       <.p.>,                /* lGETLIST_PIXEL        */ ;
  1827.       nil,                  /* nGETLIST_CURSOR       */ ;
  1828.       nil,                  /* bGETLIST_EVAL         */ ;
  1829.       [{DC_GetAnchorCb(@<oRel>,'O'),                    ;
  1830.          <(oRel)>,'O'}],    /* bGETLIST_RELATIVE     */ ;
  1831.       nil,                  /* xGETLIST_OPTIONS2     */ ;
  1832.       nil,                  /* xGETLIST_OPTIONS3     */ ;
  1833.       nil,                  /* xGETLIST_OPTIONS4     */ ;
  1834.       nil,                  /* xGETLIST_OPTIONS5     */ ;
  1835.       nil,                  /* xGETLIST_OPTIONS6     */ ;
  1836.       nil,                  /* xGETLIST_OPTIONS7     */ ;
  1837.       nil,                  /* xGETLIST_OPTIONS8     */ ;
  1838.       nil,                  /* xGETLIST_OPTIONS9     */ ;
  1839.       nil,                  /* cGETLIST_LEVEL        */ ;
  1840.       <cTitle>,             /* cGETLIST_TITLE        */ ;
  1841.       nil,                  /* cGETLIST_ACCESS       */ ;
  1842.       nil,                  /* bGETLIST_COMPILE      */ ;
  1843.       <cId>,                /* cGETLIST_ID           */ ;
  1844.       nil,                  /* dGETLIST_REVDATE      */ ;
  1845.       nil,                  /* cGETLIST_REVTIME      */ ;
  1846.       nil,                  /* cGETLIST_REVUSER      */ ;
  1847.       nil,                  /* bGETLIST_HIDE         */ ;
  1848.       <nAccel>,             /* nGETLIST_ACCELKEY     */ ;
  1849.     } )
  1850.  
  1851.  
  1852. LOCAL GetList := {}
  1853.  
  1854. @ 1,0 DCSAY "This is my README.TXT file"
  1855.  
  1856. @ 3,0 FILEVIEW \express\readme.txt SIZE 60,10
  1857.  
  1858. DCREAD GUI ;
  1859.    TITLE 'User-Defined Command Demo' ;
  1860.    FIT ;
  1861.    MODAL ;
  1862.    BUTTONS DCGUI_BUTTON_OK
  1863.  
  1864. RETURN nil
  1865.  
  1866. /* ----------------------- */
  1867.  
  1868. STATIC FUNCTION MyFileViewer ( aParams )
  1869.  
  1870. LOCAL oXbp, aGetList, nPointer, oParent, aPos, aSize, aPres, lVisible, ;
  1871.       cFileName, cMemo, bAnchor
  1872.  
  1873. aGetList    := aParams[1]
  1874. nPointer    := aParams[2]
  1875. oParent     := aParams[3]
  1876. aPos        := aParams[4]
  1877. aSize       := aParams[5]
  1878. aPres       := aParams[6]
  1879. lVisible    := aParams[7]
  1880.  
  1881. oXbp      := XbpMLE():new( oParent, , aPos, aSize, aPres, lVisible )
  1882.  
  1883. cFileName := aGetList[nPointer,xGETLIST_OPTIONS]
  1884.  
  1885. IF Valtype(cFileName) = 'C' .AND. File(cFileName)
  1886.   cMemo := MemoRead(cFilename)
  1887.   aGetList[nPointer,xGETLIST_CARGO] := cMemo
  1888. ELSE
  1889.   cMemo := 'File: ' + cFileName + ' not found.'
  1890. ENDIF
  1891.  
  1892. bAnchor := AnchorCb(@cMemo)
  1893.  
  1894. IF Valtype(aGetList[nPointer,cGETLIST_FONT])='C'
  1895.   oXbp:SetFontCompoundName(aGetList[nPointer,cGETLIST_FONT])
  1896. ENDIF
  1897.  
  1898. oXbp:clipSiblings := .T.
  1899. oXbp:datalink := bAnchor
  1900. oXbp:create()
  1901. oXbp:SetData()
  1902.  
  1903. RETURN oXbp
  1904. *** END OF EXAMPLE ***
  1905.  
  1906. * -------------------------
  1907.  
  1908. STATIC FUNCTION XSample_21
  1909.  
  1910. /* TAB-STOPS
  1911.  
  1912. In this example, TABSTOP and TABGROUP clauses are used to allow
  1913. the user to navigate through the Dialog elements via the Tab-Key
  1914. and the cursor keys.  The ENTER or SPACE bar key selects the object.
  1915. */
  1916.  
  1917.   LOCAL GetList := {}, GetOptions, cOption1, cOption2, oGroup1, ;
  1918.         oGroup2
  1919.  
  1920.   cOption1 := 'P'
  1921.  
  1922.   @ 1,2 DCGROUP oGroup1 CAPTION 'Utilities' SIZE 28,6
  1923.  
  1924.   @ 1,2 DCRADIO cOption1 PROMPT 'Save to &Dictionary' VALUE 'D' ;
  1925.     TABGROUP XBP_BEGIN_GROUP ;
  1926.     PARENT oGroup1 ;
  1927.     TABSTOP
  1928.  
  1929.   @ 2,2 DCRADIO cOption1 PROMPT '&Save to Source Code' VALUE 'S' ;
  1930.     PARENT oGroup1 ;
  1931.     TABGROUP XBP_WITHIN_GROUP
  1932.  
  1933.   @ 3,2 DCRADIO cOption1 PROMPT 'Make a &Backup file' VALUE 'B' ;
  1934.     PARENT oGroup1 ;
  1935.     TABGROUP XBP_WITHIN_GROUP
  1936.  
  1937.   @ 4,2 DCRADIO cOption1 PROMPT '&Pack the File' VALUE 'P' ;
  1938.     PARENT oGroup1 ;
  1939.     TABGROUP XBP_END_GROUP
  1940.  
  1941.   cOption2 := 'E'
  1942.  
  1943.   @ 1,35 DCGROUP oGroup2 CAPTION 'Condition' SIZE 25,6
  1944.  
  1945.   @ 1,2 DCRADIO cOption2 PROMPT 'Mint' VALUE 'M' ;
  1946.     TABGROUP XBP_BEGIN_GROUP ;
  1947.     PARENT oGroup2 ;
  1948.     TABSTOP
  1949.  
  1950.   @ 2,2 DCRADIO cOption2 PROMPT 'Excellent' VALUE 'E' ;
  1951.     PARENT oGroup2 ;
  1952.     TABGROUP XBP_WITHIN_GROUP
  1953.  
  1954.   @ 3,2 DCRADIO cOption2 PROMPT 'Good' VALUE 'G' ;
  1955.     PARENT oGroup2 ;
  1956.     TABGROUP XBP_WITHIN_GROUP
  1957.  
  1958.   @ 4,2 DCRADIO cOption2 PROMPT 'Fair' VALUE 'F' ;
  1959.     PARENT oGroup2 ;
  1960.     TABGROUP XBP_END_GROUP
  1961.  
  1962.   @ 8,1 DCSAY 'Use TAB key to select Group'
  1963.   @ 9,1 DCSAY 'Use Up/Down arrow keys then ENTER or SPACE to select Radio Button'
  1964.  
  1965.   DCREAD GUI ;
  1966.      FIT ;
  1967.      MODAL ;
  1968.      TITLE 'Tab-Stop Demo' ;
  1969.      BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
  1970.  
  1971. RETURN nil
  1972. *** END OF EXAMPLE ***
  1973.  
  1974. * ---------------------
  1975.  
  1976. STATIC FUNCTION XSample_22
  1977.  
  1978. /* MESSAGE BOX
  1979.  
  1980. This sample shows how to attach messages and ToolTips to an object
  1981. and display the message in a message box area when the object is
  1982. in focus.
  1983.  
  1984. */
  1985.  
  1986. LOCAL GetList := {}, cName := Space(40), cAddress1 := Space(40), ;
  1987.       cAddress2 := Space(40), GetOptions, cPhone := Space(20), ;
  1988.       oMsgBox1, oMsgBox2
  1989.  
  1990. @ 0,0 DCSAY '  Name' GET cName ;
  1991.   GETTOOLTIP 'Enter the Last Name,;First Name,;and Middle Initial' ;
  1992.   MESSAGE 'Enter a complete name in following format: Last, First, MI' ;
  1993.           INTO oMsgBox1
  1994.  
  1995. @ 2,0 DCSAY 'Street' GET cAddress1 ;
  1996.   GETTOOLTIP 'Street Address' ;
  1997.   MESSAGE 'Enter the Street Address' INTO oMsgBox1
  1998.  
  1999. @ 4,0 DCSAY '  City' GET cAddress2 ;
  2000.   GETTOOLTIP 'City/State/Country/Zip' ;
  2001.   MESSAGE 'Enter the City, State, Country and Zip Code' ;
  2002.           INTO oMsgBox1
  2003.  
  2004. @ 6,0 DCSAY ' Phone' GET cPhone ;
  2005.   GETTOOLTIP 'Area/Exchange/Number' ;
  2006.   MESSAGE 'Enter the complete phone number with Area Code' ;
  2007.           INTO oMsgBox2
  2008.  
  2009. @ 8,0 DCMESSAGEBOX  ;
  2010.   OBJECT oMsgBox1 ;
  2011.   FONT '10.Helv';
  2012.   COLOR GRA_CLR_DARKBLUE, GRA_CLR_WHITE ;
  2013.   SIZE 60,1.5 ;
  2014.   TYPE XBPSTATIC_TYPE_RECESSEDBOX
  2015.  
  2016. @ 9.5,0 DCMESSAGEBOX  ;
  2017.   OBJECT oMsgBox2 ;
  2018.   FONT '10.Helv';
  2019.   COLOR GRA_CLR_DARKRED, GRA_CLR_WHITE ;
  2020.   SIZE 60,1.5 ;
  2021.   TYPE XBPSTATIC_TYPE_RECESSEDBOX
  2022.  
  2023. DCGETOPTIONS SAYRIGHTJUST ;
  2024.    TOOLTIPCOLOR GRA_CLR_BLACK, GRA_CLR_YELLOW
  2025.  
  2026. DCREAD GUI ;
  2027.    TITLE 'Message Boxes and Tooltips' ;
  2028.    FIT ;
  2029.    BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL ;
  2030.    OPTIONS GetOptions
  2031.  
  2032. ReTURN nil
  2033. *** END OF EXAMPLE ***
  2034.  
  2035. /* --------------------------- */
  2036.  
  2037. STATIC FUNCTION XSample_23
  2038.  
  2039. /*  GRAPH
  2040. This example shows how to put a graph on a TabPage
  2041. */
  2042.  
  2043. LOCAL GetList := {}, oTabPage1, oTabPage2, oBrowse, oStatic
  2044.  
  2045. LOCAL y
  2046. // The following data is retrieved from several linked databases
  2047. LOCAL mTik := "PAR", nMonth, nYear
  2048. LOCAL mName := "Parata Analytics Research"
  2049. LOCAL mTitle := "Price History"
  2050. LOCAL aTMP := ;
  2051.     { 59.81, 60.31, 69.94, 80.50, 69.00, 75.75, 66.25, 57.63, 64.38, 62.88, ;
  2052.       68.75, 65.56, 66.88, 51.75, 50.13, 50.25, 44.25, 45.13, 48.75, 43.88, ;
  2053.       47.13, 33.50, 36.88, 34.00, 31.50, 30.00, 34.50, 34.38, 41.75, 46.50, ;
  2054.       44.13, 39.25, 45.25, 43.75, 41.50, 40.50, 38.75, 33.00, 30.63, 29.88, ;
  2055.       28.00, 27.25, 24.75, 24.75, 24.13, 24.00, 22.16, 22.25, 20.00, 22.00, ;
  2056.       22.50, 23.75, 21.13, 22.00, 21.63, 19.38, 17.88, 16.38, 17.13, 15.63, ;
  2057.       15.75, 14.44, 14.19, 12.38, 12.75, 11.75, 11.38, 12.75 }
  2058.  
  2059. LOCAL aData := {}, aBrowData := {}
  2060.  
  2061. nYear := 1993
  2062. nMonth := 1
  2063. FOR Y = LEN(aTMP) TO 1 STEP -1
  2064.   aAdd(aData,aTmp[y])
  2065.   aAdd(aBrowData,{aTmp[y],nMonth,nYear})
  2066.   nMonth++
  2067.   IF nMonth = 13
  2068.     nMonth := 1
  2069.     nYear++
  2070.   ENDIF
  2071. NEXT Y
  2072.  
  2073. /* --- Tab Page 1 --- */
  2074.  
  2075. @ 0,0 DCTABPAGE oTabPage1 SIZE 88,20 CAPTION 'Browse'
  2076.  
  2077. @ 2,30 DCSAY mName SAYFONT '12.Helv' PARENT oTabPage1 SAYSIZE 50
  2078.  
  2079. @ 3.5,3 DCBROWSE oBrowse DATA aBrowData PARENT oTabPage1 ;
  2080.         SIZE 35,15.5
  2081.  
  2082. DCBROWSECOL ELEMENT 1 HEADER "Price" WIDTH 8 PARENT oBrowse
  2083. DCBROWSECOL ELEMENT 2 HEADER "Month" WIDTH 5 PARENT oBrowse
  2084. DCBROWSECOL ELEMENT 3 HEADER "Year" WIDTH 6 PARENT oBrowse
  2085.  
  2086. /* --- Tab Page 2 --- */
  2087.  
  2088. @ 0,0 DCTABPAGE oTabPage2 RELATIVE oTabPage1 CAPTION 'Graph'
  2089.  
  2090. @ 2,1 DCSTATIC TYPE XBPSTATIC_TYPE_RECESSEDBOX SIZE 86,17 ;
  2091.       OBJECT oStatic PARENT oTabPage2 ;
  2092.       EVAL {|| _PresSpace(oStatic,aData) }
  2093.  
  2094. DCREAD GUI ;
  2095.    TITLE 'Graph on a TabPage' ;
  2096.    FIT ;
  2097.    BUTTONS DCGUI_BUTTON_EXIT
  2098.  
  2099. RETURN(NIL)
  2100.  
  2101. /* ---------------------- */
  2102.  
  2103. STATIC FUNCTION _PresSpace( oStatic, aData )
  2104.  
  2105. LOCAL oPS, oDevice
  2106.  
  2107. oPS := XbpPresSpace():new()         // Create a PS
  2108. oDevice := oStatic:winDevice()      // Get the device context
  2109. oPS:create( oDevice )               // Link device context to PS
  2110. oPS:SetViewPort( { 0, 0, 570, 300 } )
  2111.  
  2112. //Define :paint code block
  2113. oStatic:paint := {|mp1,mp2,obj| mp1 := LinChart( oPS, aData) }
  2114.  
  2115. RETURN nil
  2116.  
  2117. /* ------------------------ */
  2118.  
  2119. STATIC FUNCTION LinChart(oPS,aDATA)
  2120.  
  2121.    LOCAL aAttr,i,nX,nY1,y,oFont
  2122.    LOCAL hi := -9999, lo := 9999 , nXdivs := 6
  2123.    LOCAL ylinc,ylinc1,yinc,xinc,yinc1,nYdivs,yval,xval
  2124.    LOCAL nX0   := 50, nY0   := 30      // origins
  2125.    LOCAL xlen := 580, ylen := 330      // Relative max. values for x and y
  2126.    LOCAL xbeg, xend, xAvg
  2127.  
  2128.    xbeg := get_beg(aData)
  2129.    xend := get_end(aData)
  2130.    xAvg := get_avg(aData,xbeg,xend)
  2131.    nXdivs := 6
  2132.  
  2133.    FOR Y = xbeg to xend
  2134.       hi := if(aData[Y] > 5*xavg,hi,max(hi,aData[Y]))
  2135.       lo := if(aData[Y] > 0,min(lo,aData[Y]),0)
  2136.    NEXT Y
  2137.  
  2138.    hi := hi * 1.1
  2139.    lo := if(lo*.9 < 0, 0, lo*.9)
  2140.    Ylinc := (hi-lo)/10
  2141.    nYDivs := int((hi-lo)/Ylinc)
  2142.    YINC := ylen/(HI-lo)
  2143.    XINC := xlen/72
  2144.  
  2145.    aAttr := ARRAY( GRA_AM_COUNT )
  2146.    aAttr [ GRA_AM_COLOR ] := GRA_CLR_DARKBLUE
  2147.    aAttr [ GRA_AM_SYMBOL ] := GRA_MARKSYM_PLUS
  2148.    GraSetAttrMarker( oPS, aAttr )
  2149.  
  2150.    aAttr := ARRAY( GRA_AL_COUNT )
  2151.    aAttr [ GRA_AL_WIDTH ]  := GRA_LINEWIDTH_NORMAL
  2152.    aAttr [ GRA_AL_COLOR ] := GRA_CLR_DARKBLUE
  2153.    aAttr [ GRA_AL_TYPE ]  := GRA_LINETYPE_SOLID
  2154.    GraSetAttrLine( oPS, aAttr )
  2155.  
  2156.    aAttr := ARRAY( GRA_AS_COUNT )
  2157.    aAttr [ GRA_AS_COLOR ] := GRA_CLR_DARKBLUE
  2158.    aAttr [ GRA_AS_HORIZALIGN ] := GRA_HALIGN_LEFT
  2159.    aAttr [ GRA_AS_VERTALIGN ]  := GRA_VALIGN_HALF
  2160.    GraSetAttrString( oPS, aAttr )
  2161.  
  2162.    // Draw x and y axis
  2163.    GraLine( oPS, {nX0, nY0}, {nX0+xlen, nY0} )
  2164.    GraLine( oPS, {nX0, nY0}, {nX0      , nY0+ylen} )
  2165.    GraLine( oPS, {nX0, nY0+ylen}, {nX0+xlen, nY0+ylen} )
  2166.    GraLine( oPS, {nX0+xlen, nY0}, {nX0+xlen, nY0+ylen} )
  2167.  
  2168.    // Draw vertical scale
  2169.    for y = 0 to nYdivs
  2170.       GraMarker  ( oPS, { nX0   , nY0+((ylen/10)*y)} )
  2171.       IF lo+(ylinc*nYdivs) >= 1000
  2172.          GraStringAt( oPS, { nX0-35, nY0+((ylen/10)*y) }, Str(lo+(ylinc*y),6,0) )
  2173.       ELSE
  2174.          GraStringAt( oPS, { nX0-35, nY0+((ylen/10)*y) }, Str(lo+(ylinc*y),6,2) )
  2175.       ENDIF
  2176.    next y
  2177.  
  2178.    aAttr [ GRA_AS_COLOR ] := GRA_CLR_DARKBLUE
  2179.    GraSetAttrString( oPS, aAttr )
  2180.    GraStringAt( oPS, { nX0-35, nY0+((ylen/10)*y) }, "Price" )
  2181.  
  2182.    aAttr [ GRA_AS_COLOR ] := GRA_CLR_DARKBLUE
  2183.    aAttr [ GRA_AS_HORIZALIGN ] := GRA_HALIGN_CENTER
  2184.    aAttr [ GRA_AS_VERTALIGN ]  := GRA_VALIGN_BOTTOM
  2185.    GraSetAttrString( oPS, aAttr )
  2186.  
  2187.    GraStringAt( oPS, { nX0 + (xlen/2-20), nY0 + ylen +30 }, "Parata" )
  2188.  
  2189.    // Draw horizontal scale
  2190.    FOR i := 1 TO nXdivs
  2191.       nX := nX0 + ( i*(xlen/nXdivs) )
  2192.       GraMarker  ( oPS, { nX, nY0 } )
  2193.       GraStringAt( oPS, { nX-((xlen/nXdivs)/2+10), nY0-20 }, ;
  2194.          str(year(date())-6+i))
  2195.    NEXT i
  2196.  
  2197.    // Draw line
  2198.    FOR y := xbeg+1 TO min(xend,72)
  2199.       yval := if(aData[y] <= hi, (aData[Y]-lo)*YINC,(hi-lo)*YINC)
  2200.       IF yval > 0
  2201.          xval := (y*xinc)
  2202.          nY1 := nY0+((aData[y-1]-lo)*yinc)
  2203.          GraLine( oPS, {nX0+xval-xinc, nY1}, {(nX0+xval), nY0+yval} )
  2204.       ENDIF
  2205.    NEXT
  2206.  
  2207. RETURN NIL
  2208.  
  2209.  
  2210. /* ---------------------- */
  2211.  
  2212. STATIC FUNCTION GET_END(aArray)
  2213.  
  2214.    local xend
  2215.    xend := len(aArray)
  2216.    do while empty(aArray[XEND]) .and. xend > 1
  2217.       xend--
  2218.    enddo
  2219.  
  2220. return(xend)
  2221.  
  2222. /* ----------------------- */
  2223.  
  2224. STATIC FUNCTION GET_beg(aArray)
  2225.  
  2226.    local xbeg,last
  2227.    last := len(aArray)
  2228.    xbeg := 1
  2229.    do while empty(aArray[Xbeg]) .and. xbeg < last
  2230.       xbeg++
  2231.    enddo
  2232.  
  2233. return(xbeg)
  2234.  
  2235. /* --------------------- */
  2236.  
  2237. STATIC FUNCTION GET_avg(aArray,xbeg,xend)
  2238.  
  2239.    local x
  2240.    local xavg := 0
  2241.    for x = xbeg to xend
  2242.       xavg := xavg + aArray[x]
  2243.    next
  2244.    xavg := z(xavg,(xend-xbeg+1))
  2245.  
  2246. return(xavg)
  2247.  
  2248. /* ---------------------- */
  2249.  
  2250. STATIC FUNCTION Z(cl_num1,cl_num2)
  2251.  
  2252.    LOCAL RET_VAL := 0
  2253.    IF cl_num2 <> 0 .and. cl_num2 <> nil
  2254.       RET_VAL := (cl_num1/cl_num2)
  2255.    ENDIF
  2256.  
  2257. return (RET_VAL)
  2258.  
  2259. *** END OF EXAMPLE ***
  2260.  
  2261. /* --------------------------- */
  2262.  
  2263. STATIC FUNCTION XSample_24
  2264.  
  2265. /*
  2266.  This example shows how to use DC_SETSCOPE() and the SCOPE
  2267.  clause of DCBROWSE to create scoped browses.  In this
  2268.  example the range of records displayed is DC_G thru DC_K.
  2269. */
  2270.  
  2271.  LOCAL GetList := {}, oBrowse, aPres, cScopeTop, cScopeBot, oScopeTop, ;
  2272.        oScopeBot, nRowCount
  2273.  
  2274.  IF !File('..\XDOC\EXPRESS.DBF')
  2275.    DC_MsgBox({'Sorry.  The database required to show this feature',;
  2276.               'is not included in the demonstration version.'})
  2277.    RETURN nil
  2278.  ENDIF
  2279.  
  2280.  SET DEFA TO ..\XDOC
  2281.  USE EXPRESS VIA FOXCDX ALIAS XDOC EXCLUSIVE
  2282.  SET INDEX TO EXPRESS.CDX
  2283.  
  2284.  OrdSetFocus('COMMAND')
  2285.  DC_KeyStat(.t.)
  2286.  
  2287.  DC_SETSCOPE(0,'DC_G')
  2288.  DC_SETSCOPE(1,'DC_K')
  2289.  
  2290.  DC_DbGoTop()
  2291.  
  2292.  aPres := ;
  2293.   { { XBP_PP_COL_HA_FGCLR, GRA_CLR_WHITE },    /*  Header FG Color  */ ;
  2294.     { XBP_PP_COL_HA_BGCLR, GRA_CLR_DARKGRAY }, /*  Header BG Color  */ ;
  2295.     { XBP_PP_COL_DA_ROWSEPARATOR, XBPCOL_SEP_DOTTED }, /* Row Sep  */  ;
  2296.     { XBP_PP_COL_DA_COLSEPARATOR, XBPCOL_SEP_DOTTED }  /* Col Sep  */  ;
  2297.   }
  2298.  
  2299.  cScopeTop := Pad('DC_G',10)
  2300.  cScopeBot := Pad('DC_K',10)
  2301.  
  2302.  @ 1,1 DCSAY 'Scope Top' GET cScopeTop PICT '@!' SAYRIGHT ;
  2303.    VALID {||DC_SetScope(0,Alltrim(cScopeTop)),;
  2304.             oBrowse:RefreshAll(),;
  2305.             SetAppFocus(oBrowse),.t.} ;
  2306.    GETOBJECT oScopeTop
  2307.  
  2308.  @ 1,25 DCSAY 'Scope Bottom' GET cScopeBot PICT '@!'  SAYRIGHT ;
  2309.    VALID {||DC_SetScope(1,Alltrim(cScopeBot)),;
  2310.             oBrowse:RefreshAll(),;
  2311.             SetAppFocus(oBrowse),.t.} ;
  2312.    GETOBJECT oScopeBot
  2313.  
  2314.  @ 1, 65 DCPUSHBUTTON CAPTION 'Clear ~Scope' SIZE 10,1.5 ;
  2315.    ACCELKEY xbeK_ALT_S ;
  2316.    ACTION {||DC_ClrScope(), ;
  2317.              cScopeTop := Space(10), ;
  2318.              oScopeTop:setData(), ;
  2319.              cScopeBot := Space(10), ;
  2320.              oScopeBot:setData(), ;
  2321.              oBrowse:RefreshAll(),;
  2322.              SetAppFocus(oBrowse)}
  2323.  
  2324.  @ 3,1 DCBROWSE oBrowse ALIAS 'XDOC' ;
  2325.    SIZE 77,11.8 ;
  2326.    FREEZELEFT {1} ;
  2327.    SCOPE ;
  2328.    PRESENTATION aPres ;
  2329.    COLOR {|aColor|aColor := IIF( OrdKeyNo() % 2 = 0, ;
  2330.               { GRA_CLR_BLUE,GRA_CLR_WHITE }, ;
  2331.               { GRA_CLR_RED,GRA_CLR_WHITE } ), ;
  2332.               aColor }
  2333.  
  2334.  DCBROWSECOL FIELD XDOC->command ;
  2335.    HEADER "Command" PARENT oBrowse
  2336.  
  2337.  DCBROWSECOL FIELD XDOC->type  ;
  2338.    HEADER "Type" PARENT oBrowse
  2339.  
  2340.  DCBROWSECOL FIELD XDOC->short ;
  2341.    HEADER "Short Description" PARENT oBrowse
  2342.  
  2343.  DCBROWSECOL FIELD XDOC->module ;
  2344.    HEADER "Module" PARENT oBrowse ;
  2345.  
  2346.  DCBROWSECOL FIELD XDOC->category ;
  2347.    HEADER "Category" PARENT oBrowse
  2348.  
  2349.  DCBROWSECOL FIELD XDOC->see_also ;
  2350.    HEADER "See Also" PARENT oBrowse
  2351.  
  2352.  DCREAD GUI ;
  2353.    TITLE 'Scoping Demo' ;
  2354.    FIT ;
  2355.    BUTTONS DCGUI_BUTTON_EXIT ;
  2356.    TITLE 'Scoping Demo'
  2357.  
  2358.  ReTURN nil
  2359. *** END OF EXAMPLE ***
  2360.  
  2361. /* --------------------------- */
  2362.  
  2363. STATIC FUNCTION XSample_25
  2364.  
  2365. /* This example shows how to write a bunch of @SAYS on a dialog
  2366.    using the EXIT clause of DCREAD GUI */
  2367.  
  2368.    LOCAL GetList := {}, oDlg
  2369.  
  2370.    @ 0,0 DCSAY "Please wait while we go off and do something else." ;
  2371.      SAYFONT '10.Helv' SAYSIZE 0
  2372.  
  2373.    @ 2,0 DCSAY "Don't worry, we'll come back and clear this screen" ;
  2374.      SAYFONT '10.Helv' SAYSIZE 0
  2375.  
  2376.    @ 4,0 DCSAY "when we are done.  You will be shelled out to DOS." ;
  2377.      SAYFONT '10.Helv' SAYSIZE 0
  2378.  
  2379.    @ 6,0 DCSAY 'Type EXIT at the DOS prompt to return' FONT '10.Helv' ;
  2380.      COLOR COLOR GRA_CLR_DARKBLUE, GRA_CLR_WHITE SAYSIZE 0
  2381.  
  2382.    DCREAD GUI FIT PARENT @oDlg EXIT TITLE "@..SAYs Demo"
  2383.  
  2384.    oDlg:SetPos({100,100})
  2385.  
  2386.    IF Upper(AppName()) # 'XANON.EXE'
  2387.      RunShell('/C COMMAND')
  2388.    ELSE
  2389.      DC_WinAlert('Shell to DOS is disabled in this version!  Duh?')
  2390.    ENDIF
  2391.  
  2392.    oDlg:destroy()
  2393.  
  2394. ReTURN nil
  2395. *** END OF EXAMPLE ***
  2396.  
  2397.  
  2398. /* --------------------------- */
  2399.  
  2400. STATIC FUNCTION XSample_26
  2401.  
  2402. /* PROTECTED FIELDS
  2403.  
  2404.   This example demonstrates how to protect a set of data fields
  2405.   from being edited based on a condition
  2406.  
  2407. */
  2408.  
  2409.    #define cDesc_26        aSample26[1]
  2410.    #define nForSale_26     aSample26[2]
  2411.    #define nOrigPrice_26   aSample26[3]
  2412.    #define nCurrValue_26   aSample26[4]
  2413.    #define lOriginal_26    aSample26[5]
  2414.  
  2415.    LOCAL GetList := {}, aSample26[10], lEditMode, oToolBar, oDesc, ;
  2416.          aForSale, GetOptions
  2417.  
  2418.    USE COLLECT VIA DBFNTX NEW SHARED
  2419.  
  2420.    _LoadFields26( aSample26, GetList )
  2421.  
  2422.    aForSale := { 'Not for Sale','For Sale','Not Sure' }
  2423.  
  2424.    lEditMode := .f.
  2425.    @ 4,1 DCSAY 'Description' GET cDesc_26 ;
  2426.      SAYSIZE 12 ;
  2427.      SAYRIGHT ;
  2428.      GETSIZE 30 ;
  2429.      GETOBJECT oDesc ;
  2430.      SAYRIGHT EDITPROTECT {||!lEditMode}
  2431.  
  2432.    @ 6,4 DCCHECKBOX lOriginal_26 PROMPT 'Original Owner' ;
  2433.       EDITPROTECT {||!lEditMode}
  2434.  
  2435.    @ 8,4 DC3STATE nForSale_26 PROMPT aForSale ;
  2436.      SIZE 12 ;
  2437.      EDITPROTECT {||!lEditMode}
  2438.  
  2439.    @10,1 DCSAY 'Original Price' GET nOrigPrice_26 ;
  2440.      PICT '9999.99' ;
  2441.      SAYSIZE 12 ;
  2442.      SAYRIGHT ;
  2443.      EDITPROTECT {||!lEditMode}
  2444.  
  2445.    @12,1 DCSAY 'Current Value' GET nCurrValue_26 ;
  2446.      PICT '9999.99' ;
  2447.      SAYSIZE 12 ;
  2448.      SAYRIGHT ;
  2449.      EDITPROTECT {||!lEditMode}
  2450.  
  2451.    @ 0,0 DCTOOLBAR oToolBar SIZE 40,1.5 TYPE XBPSTATIC_TYPE_TEXT
  2452.  
  2453.    DCADDBUTTON CAPTION 'Prev' PARENT oToolBar SIZE 9 ;
  2454.       ACTION {||dbSkip(-1),_LoadFields26(aSample26,GetList)} ;
  2455.       WHEN {||!lEditMode}
  2456.  
  2457.    DCADDBUTTON CAPTION 'Next' PARENT oToolBar SIZE 9 ;
  2458.       ACTION {||dbSkip(),_LoadFields26(aSample26,GetList)} ;
  2459.       WHEN {||!lEditMode}
  2460.  
  2461.    DCADDBUTTON CAPTION 'Edit' PARENT oToolBar SIZE 9 ;
  2462.       ACTION {||lEditMode := .t., SetAppFocus(oDesc), ;
  2463.                 DC_GetRefresh(GetList)} ;
  2464.       ID 'EDIT_BUTTON' ;
  2465.       WHEN {||!lEditMode}
  2466.  
  2467.    DCADDBUTTON CAPTION 'Save' PARENT oToolBar SIZE 9 ;
  2468.       ACTION {||lEditMode := .f.,_SaveFields26(aSample26,GetList), ;
  2469.                 SetAppFocus(DC_GetObject(GetList,'EDIT_BUTTON'))} ;
  2470.       WHEN {||lEditMode}
  2471.  
  2472.    DCGETOPTIONS TABSTOP
  2473.  
  2474.    DCREAD GUI ;
  2475.       OPTIONS GetOptions ;
  2476.       TITLE 'Protected Fields Demo' ;
  2477.       FIT ;
  2478.       BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL ;
  2479.       MODAL ;
  2480.       SETFOCUS 'EDIT_BUTTON'
  2481.  
  2482.    CLOSE ALL
  2483.  
  2484.   RETURN nil
  2485.  
  2486.   /* ----------------------- */
  2487.  
  2488.   STATIC FUNCTION _LoadFields26( aSample26, GetList )
  2489.  
  2490.   cDesc_26      := COLLECT->descrip
  2491.   nForSale_26   := COLLECT->for_sale
  2492.   lOriginal_26  := COLLECT->original
  2493.   nOrigPrice_26 := COLLECT->orig_price
  2494.   nCurrValue_26 := COLLECT->appr_value
  2495.  
  2496.   DC_GetRefresh(GetList)
  2497.   DC_GetOrigSet(GetList)
  2498.  
  2499.   RETURN nil
  2500.  
  2501.   /* ------------------------ */
  2502.  
  2503.   STATIC FUNCTION _SaveFields26( aSample26, GetList )
  2504.  
  2505.   IF dbRLock()
  2506.      REPL COLLECT->descrip WITH cDesc_26
  2507.      REPL COLLECT->original WITH lOriginal_26
  2508.      REPL COLLECT->for_sale WITH nForSale_26
  2509.      REPL COLLECT->orig_price WITH nOrigPrice_26
  2510.      REPL COLLECT->appr_value WITH nCurrValue_26
  2511.      dbCommit()
  2512.      dbUnlock()
  2513.   ENDIF
  2514.   DC_GetOrigSet(GetList)
  2515.   DC_GetRefresh(GetList)
  2516.  
  2517.   RETURN nil
  2518.  
  2519. *** END OF EXAMPLE ***
  2520.  
  2521.  
  2522. /* --------------------------- */
  2523.  
  2524. STATIC FUNCTION XSample_27
  2525.  
  2526.  /*  MDI WINDOWS #1
  2527.  
  2528.  This example shows how to create MDI windows using the automatic
  2529.  dialog creator feature of DCREAD GUI.  If no PARENT clause is
  2530.  used, a dialog window is automatically created.  The DEMO1 and
  2531.  and DEMO3 programs are then launched in the created dialog
  2532.  window.
  2533.  
  2534.  */
  2535.  
  2536.  LOCAL GetList := {}, GetOptions
  2537.  
  2538.  DCGETOPTIONS ;
  2539.    WINDOWHEIGHT 480 ;
  2540.    WINDOWWIDTH 640 ;
  2541.    BITMAP BITMAP_PICKLIST
  2542.  
  2543.  DCREAD GUI ;
  2544.    TITLE "MDI Demo #1" ;
  2545.    OPTIONS GetOptions ;
  2546.    EVAL {|o|_XSample_27(o)}
  2547.  
  2548.  RETURN nil
  2549.  
  2550.  /* -------------------- */
  2551.  
  2552.  STATIC FUNCTION _XSample_27( oDialog )
  2553.  
  2554.  LOCAL oThread1, oThread2
  2555.  
  2556.  oThread1 := Thread():new()
  2557.  oThread1:Start({||XDemo_1(oDialog,.t.)})
  2558.  
  2559.  oThread2 := Thread():new()
  2560.  oThread2:Start({||XDemo_3(oDialog,.t.)})
  2561.  
  2562.  RETURN nil
  2563. *** END OF EXAMPLE ***
  2564.  
  2565. /* --------------------------- */
  2566.  
  2567. STATIC FUNCTION XSample_28
  2568.  
  2569.  /*  MDI WINDOWS #2  */
  2570.  
  2571.  LOCAL GetList := {}, GetOptions, oToolBar, oDlg, drawingArea, ;
  2572.        oXbp, nEvent, mp1, mp2, oApp := SetAppWindow(), oMenuBar, ;
  2573.        oMenuFile, oStatusBar
  2574.  
  2575.  DCSTATUSBAR oStatusBar WIDTH 80 ALIGN DCGUI_ALIGN_RIGHT ;
  2576.    TYPE XBPSTATIC_TYPE_TEXT
  2577.  
  2578.  @ 0,0 DCTOOLBAR oToolBar SIZE 80,500 BUTTONSIZE 80,25 ;
  2579.       TYPE XBPSTATIC_TYPE_TEXT PARENT oStatusBar PIXEL
  2580.  
  2581.  DCADDBUTTON CAPTION 'Gets 1' ;
  2582.    TOOLTIP 'Launch Test 1 routine' ;
  2583.    PARENT oToolBar ;
  2584.    ACTION {|o|o:=Thread():new(),o:start({||_XSample28_1(oDlg:drawingArea)})}
  2585.  
  2586.  DCADDBUTTON CAPTION 'Gets 2' ;
  2587.    TOOLTIP 'Launch Test 2 routine' ;
  2588.    PARENT oToolBar ;
  2589.    ACTION {|o|o:=Thread():new(),o:start({||_XSample28_2(oDlg:drawingArea)})}
  2590.  
  2591.  DCADDBUTTON CAPTION 'MLE' ;
  2592.    TOOLTIP 'Launch Test 3 routine' ;
  2593.    PARENT oToolBar ;
  2594.    ACTION {|o|o:=Thread():new(),o:start({||_XSample28_3(oDlg:drawingArea)})}
  2595.  
  2596.  DCADDBUTTON CAPTION 'CRT' ;
  2597.    TOOLTIP 'Launch Test 4 routine' ;
  2598.    PARENT oToolBar ;
  2599.    ACTION {|o|o:=Thread():new(),o:start({||_XSample28_4(oDlg:drawingArea)})}
  2600.  
  2601.  DCADDBUTTON CAPTION 'Exit' ;
  2602.    PARENT oToolBar ;
  2603.    ACTION {||PostAppEvent(xbeP_Close,nil,nil,oXbp)}
  2604.  
  2605.  DCMENUBAR oMenuBar
  2606.  
  2607.  DCSUBMENU oMenuFile PROMPT 'File' PARENT oMenuBar
  2608.  
  2609.  DCMENUITEM 'Test 1' PARENT oMenuFile ;
  2610.    ACTION {|o|o:=Thread():new(),o:start({||_XSample28_1(oDlg:drawingArea)})}
  2611.  
  2612.  DCMENUITEM 'Test 2' PARENT oMenuFile ;
  2613.    ACTION {|o|o:=Thread():new(),o:start({||_XSample28_2(oDlg:drawingArea)})}
  2614.  
  2615.  DCMENUITEM 'Test 3' PARENT oMenuFile ;
  2616.    ACTION {|o|o:=Thread():new(),o:start({||_XSample28_3(oDlg:drawingArea)})}
  2617.  
  2618.  DCMENUITEM 'Test 4' PARENT oMenuFile ;
  2619.    ACTION {||_XSample28_4(oDlg:drawingArea)}
  2620.  
  2621.  
  2622.  DCMENUITEM SEPARATOR PARENT oMenuFile
  2623.  
  2624.  DCMENUITEM 'Exit' PARENT oMenuFile ;
  2625.    ACTION {||PostAppEvent(xbeP_Close,nil,nil,oDlg)}
  2626.  
  2627.  DCGETOPTIONS ;
  2628.    WINDOWHEIGHT 520 ;
  2629.    WINDOWWIDTH 700
  2630.  
  2631.  DCREAD GUI ;
  2632.    TITLE ;
  2633.     'MDI Demo - Click Each button several times to open multiple windows' ;
  2634.    PARENT @oDlg ;
  2635.    OPTIONS GetOptions ;
  2636.    EVAL {||SetAppWindow(oDlg)}
  2637.  
  2638.  SetAppWindow(oApp)
  2639.  
  2640.  RETURN nil
  2641.  
  2642.  /* -------------------------- */
  2643.  
  2644.  STATIC FUNCTION _XSample28_1 ( oAppWindow )
  2645.  
  2646.  LOCAL Getlist := {}, cTest1 := Space(20), cTest2 := Space(20), ;
  2647.        cTest3 := Space(20), cTest4 := Space(20)
  2648.  
  2649.  @ 1,1 DCSAY 'Testing 1' GET cTest1
  2650.  @ 2,1 DCSAY 'Testing 2' GET cTest2
  2651.  @ 3,1 DCSAY 'Testing 3' GET cTest3
  2652.  @ 4,1 DCSAY 'Testing 4' GET cTest4
  2653.  
  2654.  DCREAD GUI ;
  2655.    TITLE 'MDI Demo 1' ;
  2656.    APPWINDOW oAppWindow ;
  2657.    FIT
  2658.  
  2659.  RETURN GetList
  2660.  
  2661.  /* ------------------ */
  2662.  
  2663.  STATIC FUNCTION _XSample28_2 ( oAppWindow )
  2664.  
  2665.  LOCAL Getlist := {}, dDate1 := Date(), dDate2 := Date()+7, ;
  2666.        cTime1 := Time(), cTime2 := Time()
  2667.  
  2668.  @ 1,1 DCSAY 'Start Date' GET dDate1 POPUP {|d|DC_PopDate(d)}
  2669.  @ 2,1 DCSAY '  End Date' GET dDate2 POPUP {|d|DC_PopDate(d)}
  2670.  @ 3,1 DCSAY 'Start Time' GET cTime1 PICT '99:99:99'
  2671.  @ 4,1 DCSAY '  End Time' GET cTime2 PICT '99:99:99'
  2672.  
  2673.  DCREAD GUI ;
  2674.    TITLE 'MDI Demo 2' ;
  2675.    APPWINDOW oAppWindow ;
  2676.    FIT ;
  2677.    BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
  2678.  
  2679.  RETURN GetList
  2680.  
  2681.  /* ------------------ */
  2682.  
  2683.  STATIC FUNCTION _XSample28_3 ( oAppWindow )
  2684.  
  2685.  LOCAL GetList := {}, cMemo := ''
  2686.  
  2687.  @ 1,1 DCMULTILINE cMemo SIZE 30,7
  2688.  
  2689.  DCREAD GUI ;
  2690.    TITLE 'MDI Demo 3' ;
  2691.    APPWINDOW oAppWindow ;
  2692.    FIT ;
  2693.    BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
  2694.  
  2695.  RETURN nil
  2696.  
  2697.  /* ------------------ */
  2698.  
  2699.  STATIC FUNCTION _XSample28_4 ( oAppWindow )
  2700.  
  2701.  LOCAL GetList := {}, oCrt, oStatic
  2702.  
  2703.  @ 1,1 DCSTATIC TYPE XBPSTATIC_TYPE_RAISEDBOX SIZE 69,11.2 ;
  2704.     OBJECT oStatic
  2705.  
  2706.  @ 0,0 DCAPPCRT oCrt SIZE 25,80 ;
  2707.       PARENT oStatic ;
  2708.       CAPTION 'Crt Demo Window' BORDER XBPDLG_NO_BORDER ;
  2709.       FONT 'Terminal' FONTSIZE 6,10 ;
  2710.       ACTION {||DC_Gui(.f.),_XSample28_4_Crt(),DC_Gui(.t.),oStatic:Destroy()}
  2711.  
  2712.  DCREAD GUI ;
  2713.    TITLE 'MDI Demo 4' ;
  2714.    APPWINDOW oAppWindow ;
  2715.    FIT
  2716.  
  2717.  RETURN nil
  2718.  
  2719. /* --------------------- */
  2720.  
  2721.  STATIC FUNCTION _XSample28_4_Crt( )
  2722.  
  2723.  LOCAL aDir
  2724.  
  2725.  CLS
  2726.  @ 2,10 SAY 'This is an Achoice of the directory using the XbpCrt() Class'
  2727.  
  2728.  aDir := Directory()
  2729.  aDir := DC_Aconvert( aDir )
  2730.  
  2731.  DC_AChoice (  10, 10, 20, 35, aDir[1],,,,,,{.t.} )
  2732.  
  2733.  RETURN nil
  2734.  
  2735. *** END OF EXAMPLE ***
  2736.  
  2737. /* --------------------------- */
  2738.  
  2739. STATIC FUNCTION XSample_29
  2740.  
  2741. /* WHEN clause
  2742.  
  2743. This example demonstrates how to use the WHEN clause to
  2744. disable or enable GETS
  2745.  
  2746. */
  2747.  
  2748. LOCAL GetList := {}, oDlg, oGroup, nGroup, dDate := Date(), ;
  2749.       cTime := Time(), cName := Space(15), cStreet := Space(20), ;
  2750.       cCity := Space(25), cState := Space(10), cZip := Space(10), ;
  2751.       cVoice := Space(12), cFax := Space(12), cEmail := Space(30), ;
  2752.       GetOptions, aPres
  2753.  
  2754. aPres := { { XBP_PP_DISABLED_FGCLR, GRA_CLR_WHITE }, ;
  2755.            { XBP_PP_DISABLED_BGCLR, GRA_CLR_BLUE } }
  2756.  
  2757. nGroup := 1
  2758. @ 4,2 DCGROUP oGroup CAPTION 'Pick a Group to Edit' SIZE 30,10
  2759.  
  2760. @ 3,5 DCRADIO nGroup       ;
  2761.   VALUE 1                  ;
  2762.   PARENT oGroup            ;
  2763.   PROMPT 'Date and Time'   ;
  2764.   ACTION {||DC_GetRefresh(GetList)}
  2765.  
  2766. @ 4,5 DCRADIO nGroup       ;
  2767.   VALUE 2                  ;
  2768.   PARENT oGroup            ;
  2769.   PROMPT 'Name and Address'   ;
  2770.   ACTION {||DC_GetRefresh(GetList)}
  2771.  
  2772. @ 5,5 DCRADIO nGroup       ;
  2773.   VALUE 3                  ;
  2774.   PARENT oGroup            ;
  2775.   PROMPT 'Telephone Numbers'   ;
  2776.   ACTION {||DC_GetRefresh(GetList)}
  2777.  
  2778. @ 3,40 DCSAY 'Date' GET dDate SAYSIZE 8 SAYRIGHT ;
  2779.    WHEN {||nGroup = 1}
  2780.  
  2781. @ 4,40 DCSAY 'Time' GET cTime SAYSIZE 8 SAYRIGHT ;
  2782.    WHEN {||nGroup = 1}  GETPRES aPres
  2783.  
  2784. @ 6,40 DCSAY 'Name' GET cName SAYSIZE 8 SAYRIGHT ;
  2785.    WHEN {||nGroup = 2}  GETPRES aPres
  2786.  
  2787. @ 7,40 DCSAY 'Street' GET cStreet SAYSIZE 8 SAYRIGHT ;
  2788.    WHEN {||nGroup = 2}  GETPRES aPres
  2789.  
  2790. @ 8,40 DCSAY 'City' GET cCity SAYSIZE 8 SAYRIGHT ;
  2791.    WHEN {||nGroup = 2}  GETPRES aPres
  2792.  
  2793. @ 9,40 DCSAY 'State' GET cState SAYSIZE 8 SAYRIGHT ;
  2794.    WHEN {||nGroup = 2}  GETPRES aPres
  2795.  
  2796. @10,40 DCSAY 'Zip' GET cZip SAYSIZE 8 SAYRIGHT ;
  2797.    WHEN {||nGroup = 2}  GETPRES aPres
  2798.  
  2799. @12,40 DCSAY 'Voice' GET cVoice PICT '999-999-9999' ;
  2800.        SAYSIZE 8 SAYRIGHT WHEN {||nGroup = 3}  GETPRES aPres
  2801.  
  2802. @13,40 DCSAY 'Fax' GET cFax PICT '999-999-9999' ;
  2803.        SAYSIZE 8 SAYRIGHT WHEN {||nGroup = 3}  GETPRES aPres
  2804.  
  2805. @14,40 DCSAY 'E-Mail' GET cEmail PICT '@!' ;
  2806.        SAYSIZE 8 SAYRIGHT WHEN {||nGroup = 3}  GETPRES aPres
  2807.  
  2808. DCGETOPTIONS PRESENTATION aPres
  2809.  
  2810. DCREAD GUI ;
  2811.    OPTIONS GetOptions ;
  2812.    TITLE "WHEN Clause Demo" ;
  2813.    FIT ;
  2814.    BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
  2815.  
  2816. RETURN nil
  2817. *** END OF EXAMPLE ***
  2818.  
  2819.  
  2820. /* --------------------------- */
  2821.  
  2822. STATIC FUNCTION XSample_30
  2823.  
  2824. /* HIDE clause
  2825.  
  2826. This example demonstrates how to use the HIDE clause to
  2827. display or hide GETS
  2828.  
  2829. */
  2830.  
  2831. LOCAL GetList := {}, oDlg, oGroup, nGroup, dDate := Date(), ;
  2832.       cTime := Time(), cName := Space(15), cStreet := Space(20), ;
  2833.       cCity := Space(20), cState := Space(10), cZip := Space(10), ;
  2834.       cVoice := Space(12), cFax := Space(12), cEmail := Space(20), ;
  2835.       oDateGroup, oTelGroup, oNameGroup
  2836.  
  2837. nGroup := 1
  2838.  
  2839. @ 4,2 DCGROUP oGroup CAPTION 'Pick a Group to Edit' SIZE 30,10
  2840.  
  2841. @ 3,5 DCRADIO nGroup       ;
  2842.   VALUE 1                  ;
  2843.   PARENT oGroup            ;
  2844.   PROMPT 'Date and Time'   ;
  2845.   ACTION {||DC_GetRefresh(GetList)}
  2846.  
  2847. @ 4,5 DCRADIO nGroup       ;
  2848.   VALUE 2                  ;
  2849.   PARENT oGroup            ;
  2850.   PROMPT 'Name and Address'   ;
  2851.   ACTION {||DC_GetRefresh(GetList)}
  2852.  
  2853. @ 5,5 DCRADIO nGroup       ;
  2854.   VALUE 3                  ;
  2855.   PARENT oGroup            ;
  2856.   PROMPT 'Telephone Numbers'   ;
  2857.   ACTION {||DC_GetRefresh(GetList)}
  2858.  
  2859. @ 4,45 DCGROUP oDateGroup CAPTION 'Date/Time' SIZE 40,10 ;
  2860.   HIDE {|| nGroup # 1}
  2861.  
  2862. @ 2,1 DCSAY 'Date' GET dDate SAYSIZE 8 SAYRIGHT ;
  2863.   PARENT oDateGroup
  2864.  
  2865. @ 4,1 DCSAY 'Time' GET cTime SAYSIZE 8 SAYRIGHT ;
  2866.   PARENT oDateGroup
  2867.  
  2868. @ 4,45 DCGROUP oNameGroup CAPTION 'Name/Address' SIZE 40,10 ;
  2869.   HIDE {|| nGroup # 2}
  2870.  
  2871. @ 2,1 DCSAY 'Name' GET cName PARENT oNameGroup ;
  2872.   SAYSIZE 8 SAYRIGHT
  2873.  
  2874. @ 4,1 DCSAY 'Street' GET cStreet PARENT oNameGroup ;
  2875.   SAYSIZE 8 SAYRIGHT
  2876.  
  2877. @ 5,1 DCSAY 'City' GET cCity PARENT oNameGroup ;
  2878.   SAYSIZE 8 SAYRIGHT
  2879.  
  2880. @ 6,1 DCSAY 'State' GET cState PARENT oNameGroup ;
  2881.   SAYSIZE 8 SAYRIGHT
  2882.  
  2883. @ 7,1 DCSAY 'Zip' GET cZip PARENT oNameGroup ;
  2884.   SAYSIZE 8 SAYRIGHT
  2885.  
  2886. @ 4,45 DCGROUP oTelGroup CAPTION 'Telephone/E-Mail' SIZE 40,10 ;
  2887.   HIDE {|| nGroup # 3}
  2888.  
  2889. @ 2,1 DCSAY 'Voice' GET cVoice PICT '999-999-9999' PARENT oTelGroup ;
  2890.   SAYSIZE 8 SAYRIGHT
  2891.  
  2892. @ 4,1 DCSAY 'Fax' GET cFax PICT '999-999-9999' PARENT oTelGroup ;
  2893.   SAYSIZE 8 SAYRIGHT
  2894.  
  2895. @ 5,1 DCSAY 'E-Mail' GET cEmail PICT '@!' PARENT oTelGroup ;
  2896.   SAYSIZE 8 SAYRIGHT
  2897.  
  2898. DCREAD GUI ;
  2899.    TITLE 'HIDE Clause Demo' ;
  2900.    FIT ;
  2901.    BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
  2902.  
  2903. RETURN nil
  2904. *** END OF EXAMPLE ***
  2905.  
  2906.  
  2907. /* --------------------------- */
  2908.  
  2909. STATIC FUNCTION XSample_31
  2910.  
  2911. /*
  2912. POPUP Clause
  2913.  
  2914. This sample demonstrates how to use the POPUP Clause on @ DCSAY..GETs.
  2915. In this example the POPUP clause is used on date fields to pop up a
  2916. calendar and on numeric fields to pop up a Calculator.
  2917.  
  2918. */
  2919.  
  2920.    LOCAL GetList := {}, dDate1 := Date(), dDate2 := Date()+7, ;
  2921.          nNumber := 12345.67
  2922.  
  2923.    SET DATE FORMAT TO 'mm/dd/yyyy'
  2924.  
  2925.    @  1,1 DCSAY 'Enter Start Date' GET dDate1 PICTURE '99/99/9999' ;
  2926.           SAYRIGHT POPUP {|d|DC_PopDate(d)}
  2927.  
  2928.    @  2,1 DCSAY 'Enter Start Date' GET dDate2 PICTURE '99/99/9999' ;
  2929.           SAYRIGHT POPUP {|d|DC_PopDate(d)}
  2930.  
  2931.    @  4,1 DCSAY 'Enter a Number' GET nNumber SAYRIGHT ;
  2932.           POPUP {|n|DC_PopCalc(n)}
  2933.  
  2934.    DCREAD GUI ;
  2935.       TITLE 'POPUP Clause Demo' ;
  2936.       FIT ;
  2937.       BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL ;
  2938.       MODAL
  2939.  
  2940.   RETURN nil
  2941. *** END OF EXAMPLE ***
  2942.  
  2943. /* --------------------------- */
  2944.  
  2945. STATIC FUNCTION XSample_32
  2946.  
  2947. /* The EVAL Clause
  2948.  
  2949.  This example demonstrates how to use the EVAL clause to
  2950.  evaluate a code block immediately after a Get-List object is
  2951.  created.  The EVAL clause is intended to allow the ability
  2952.  to use iVars and Methods of a class which are not supported
  2953.  by command clauses.
  2954. */
  2955.  
  2956.  LOCAL GetList := {}, cMemo, oMemo, oMenuMemo, oMsgBox
  2957.  
  2958.  cMemo := 'This is my memo'
  2959.  
  2960.  @  1,2 DCMULTILINE cMemo SIZE 78,8 ;
  2961.  FONT "10.Courier" ;
  2962.  OBJECT oMemo ;
  2963.  MESSAGE 'Click the right button for MENU' ;
  2964.  EVAL { |o| o:RbDown  := { |x,y,z| oMenuMemo:PopUp ( z, x, 2 , ;
  2965.             XBPMENU_PU_DEFAULT + XBPMENU_PU_MOUSE_RBDOWN  ) } }
  2966.  
  2967.  @ 10,2 DCMESSAGEBOX SIZE 78
  2968.  
  2969.  DCSUBMENU oMenuMemo PROMPT "&Memo" PARENT oMemo
  2970.  
  2971.  DCMENUITEM "~Delete" PARENT oMenuMemo ACTION {||oMemo:deleteMarked()}
  2972.  
  2973.  DCMENUITEM "~Cut" PARENT oMenuMemo ACTION {||oMemo:cutMarked()}
  2974.  
  2975.  DCMENUITEM "C~opy" PARENT oMenuMemo ACTION {||oMemo:copyMarked()}
  2976.  
  2977.  DCMENUITEM "~Paste" PARENT oMenuMemo ACTION {||oMemo:pasteMarked()}
  2978.  
  2979.  DCMENUITEM "~Undo" PARENT oMenuMemo ACTION {||oMemo:undo()}
  2980.  
  2981.  DCREAD GUI ;
  2982.    TITLE 'EVAL Clause Demo' ;
  2983.    FIT ;
  2984.    BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
  2985.  
  2986.  
  2987. RETURN nil
  2988. *** END OF EXAMPLE ***
  2989.  
  2990.  
  2991. /* --------------------------- */
  2992.  
  2993. STATIC FUNCTION XSample_33
  2994.  
  2995. /* ID
  2996.  
  2997.  This example demonstrates how to assign an ID to a GetList item
  2998.  and how to extract information about the item via the ID tag.
  2999.  
  3000. */
  3001.  
  3002.    LOCAL GetList := {}, dDate := Date(), nNumber := 12345.67, ;
  3003.          cString := 'This is a string', lLogical := .t., GetOptions
  3004.  
  3005.    SET DATE FORMAT TO 'mm/dd/yyyy'
  3006.  
  3007.    @ 1,1 DCSAY '       Enter a Date' GET dDate PICTURE '99/99/9999' ;
  3008.          SAYRIGHT ;
  3009.          SAYID 'SAY_DATE' ;
  3010.          GETID 'GET_DATE'
  3011.  
  3012.    @ 3,1 DCSAY '     Enter a Number' GET nNumber SAYRIGHT ;
  3013.          SAYID 'SAY_NUMBER' ;
  3014.          GETID 'GET_NUMBER'
  3015.  
  3016.    @ 5,1 DCPUSHBUTTON CAPTION 'Date+' SIZE 9,1.2 ;
  3017.          ID 'DATE_PLUS' ;
  3018.          ACTION {|o| o := DC_GetObject(GetList,'GET_DATE'), ;
  3019.                      dDate++, o:setData() }
  3020.  
  3021.    @ 5,12 DCPUSHBUTTON CAPTION 'Date-' SIZE 9,1.2 ;
  3022.          ID 'DATE_MINUS' ;
  3023.          ACTION {|o| o := DC_GetObject(GetList,'GET_DATE'), ;
  3024.                      dDate--, o:setData() }
  3025.  
  3026.    @ 5,25 DCPUSHBUTTON CAPTION 'Number+' SIZE 9,1.2 ;
  3027.          ID 'NUMBER_PLUS' ;
  3028.          ACTION {|o| o := DC_GetObject(GetList,'GET_NUMBER'), ;
  3029.                      nNumber++, o:setData() }
  3030.  
  3031.    @ 5,36 DCPUSHBUTTON CAPTION 'Number-' SIZE 9,1.2 ;
  3032.          ID 'NUMBER_MINUS' ;
  3033.          ACTION {|o| o := DC_GetObject(GetList,'GET_NUMBER'), ;
  3034.                      nNumber--, o:setData() }
  3035.  
  3036.    DCREAD GUI ;
  3037.       TITLE 'ID Clause Demo' ;
  3038.       FIT ;
  3039.       BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL ;
  3040.       MODAL
  3041.  
  3042. RETURN nil
  3043. *** END OF EXAMPLE ***
  3044.  
  3045. /* --------------------------- */
  3046.  
  3047. STATIC FUNCTION XSample_34
  3048.  
  3049. /* RELATIVE coordinates
  3050.  
  3051.  This example shows how to use the RELATIVE clause to use display
  3052.  coordinates which are relative to a sibling object.  Relative
  3053.  addressing is useful when designing complicated screens in
  3054.  which a large group of objects may be moved together by simply
  3055.  moving a single object in the source code.
  3056. */
  3057.  
  3058. LOCAL GetList := {}, oDlg, nRow := 6, nCol := 10, nTest, oTest
  3059.  
  3060. @ 2,1 DCSAY '   Start Row' GET nRow PICT '99' ;
  3061.        VALID {||_Relative34( nRow, nCol, GetList, oDlg )}
  3062.  
  3063. @ 3,1 DCSAY 'Start Column' GET nCol PICT '99' ;
  3064.        VALID {||_Relative34( nRow, nCol, GetList, oDlg )}
  3065.  
  3066. @ 6,10 DCRADIO nTest PROMPT 'Radio Button 1' VALUE 1 ;
  3067.        OBJECT oTest GROUP 'RADIO'
  3068.  
  3069. @ 1, 0 DCRADIO nTest PROMPT 'Radio Button 2' VALUE 2 ;
  3070.        RELATIVE oTest GROUP 'RADIO'
  3071.  
  3072. @ 2, 0 DCRADIO nTest PROMPT 'Radio Button 3' VALUE 3 ;
  3073.        RELATIVE oTest GROUP 'RADIO'
  3074.  
  3075. @ 3, 0 DCRADIO nTest PROMPT 'Radio Button 4' VALUE 4 ;
  3076.        RELATIVE oTest GROUP 'RADIO'
  3077.  
  3078. @ 4, 0 DCRADIO nTest PROMPT 'Radio Button 5' VALUE 5 ;
  3079.        RELATIVE oTest GROUP 'RADIO'
  3080.  
  3081. @ 5, 0 DCRADIO nTest PROMPT 'Radio Button 6' VALUE 6 ;
  3082.        RELATIVE oTest GROUP 'RADIO'
  3083.  
  3084. @ 6, 0 DCRADIO nTest PROMPT 'Radio Button 7' VALUE 7 ;
  3085.        RELATIVE oTest GROUP 'RADIO'
  3086.  
  3087. @ 7, 0 DCRADIO nTest PROMPT 'Radio Button 8' VALUE 8 ;
  3088.        RELATIVE oTest GROUP 'RADIO'
  3089.  
  3090. @17,70 DCSAY '' // establish size of window
  3091.  
  3092. DCREAD GUI ;
  3093.    TITLE 'RELATIVE Addressing Demo' ;
  3094.    PARENT @oDlg ;
  3095.    FIT ;
  3096.    BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
  3097.  
  3098. RETURN nil
  3099.  
  3100. /* --------------------------- */
  3101.  
  3102. STATIC FUNCTION _Relative34( nRow, nCol, GetList, oDlg )
  3103.  
  3104. DC_GetDestroy( GetList, 'RADIO', .t. ) // kill all the radio buttons
  3105.  
  3106. GetList[5,nGETLIST_STARTROW] := nRow  //  Start radio button is 5th get
  3107. GetList[5,nGETLIST_STARTCOL] := nCol
  3108.  
  3109. DCREAD GUI ;
  3110.   EXIT ;
  3111.   PARENT oDlg ;
  3112.   GROUP 'RADIO'
  3113.  
  3114. RETURN .t.
  3115. *** END OF EXAMPLE ***
  3116.  
  3117. /* --------------------------- */
  3118.  
  3119. STATIC FUNCTION XSample_35
  3120.  
  3121. /* CARGO
  3122.  
  3123. This example shows how to access cargo which is attached to a
  3124. Getlist item via the CARGO clause.  The :cargo slot is used by
  3125. eXPress++ as a container for a variety of information depending
  3126. on the type of object.  The container is an array of at least
  3127. 3 elements:
  3128.  
  3129.  [1]  - The Get number
  3130.  [2]  - A pointer to the GetList array
  3131.  [3]  - User cargo
  3132.  
  3133. */
  3134.  
  3135.  LOCAL GetList := {}, oDlg, cMemo
  3136.  
  3137.  cMemo := 'This is my memo.' + Chr(13)+Chr(10) + ;
  3138.           'Click on TEST to check if contents have been edited.'
  3139.  
  3140.  @ 1,1 DCMULTILINE cMemo SIZE 40,8 ;
  3141.    CARGO cMemo ;
  3142.    ID 'MYMEMO'
  3143.  
  3144.  @ 10,1 DCPUSHBUTTON CAPTION 'Test' SIZE 9,1.2 ;
  3145.    ACTION {|o|o := DC_GetObject(GetList,'MYMEMO'), ;
  3146.               IIF( !( o:cargo[3] + Chr(0) = cMemo ), ;
  3147.                DC_MsgBox('Memo Contents have been changed!'), ;
  3148.                DC_MsgBox('Memo Contents have NOT been changed!') ) }
  3149.  
  3150.  DCREAD GUI ;
  3151.    TITLE 'CARGO Demo' ;
  3152.    FIT ;
  3153.    BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
  3154.  
  3155. RETURN nil
  3156. *** END OF EXAMPLE ***
  3157.  
  3158. /* --------------------------- */
  3159.  
  3160. STATIC FUNCTION XSample_36
  3161.  
  3162. /*  GETS with VALID clause
  3163.  
  3164. This example demonstrates the VALID clause when used with
  3165. @ DCSAY..GET commands.
  3166.  
  3167. */
  3168.  
  3169. LOCAL GetList := {}, dStartDate := Date(), dEndDate := Date()+7
  3170.  
  3171. SET DATE FORMAT TO 'mm/dd/yyyy'
  3172.  
  3173. @ 1,1 DCSAY "Start Date" GET dStartDate ;
  3174.   POPUP {|d|DC_PopDate(d)} ;
  3175.   VALID {|o,x| x := dStartDate > dEndDate,  ;
  3176.     IIF( x, DC_WinAlert('Start Date cannot be later than end date'), ;
  3177.          nil), !x }
  3178.  
  3179. @ 3,1 DCSAY "  End Date" GET dEndDate ;
  3180.   POPUP {|d|DC_PopDate(d)} ;
  3181.   VALID {|o,x| x :=  dEndDate < dStartDate, ;
  3182.     IIF( x, DC_WinAlert('End Date cannot be earlier than start date'), ;
  3183.          nil), !x }
  3184.  
  3185. DCREAD GUI ;
  3186.    TITLE 'GETs with VALID Demo' ;
  3187.    FIT ;
  3188.    MODAL ;
  3189.    BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL  ;
  3190.    EVAL {|o|SetAppWindow(o)}
  3191.  
  3192. RETURN nil
  3193. *** END OF EXAMPLE ***
  3194.  
  3195. /* --------------------------- */
  3196.  
  3197. STATIC FUNCTION XSample_37
  3198.  
  3199.  /* This example shows @ DCSAY..GETs which do direct edits into a
  3200.     database.  The GET variable is a code-block that automatically
  3201.     handles locking/unlocking and macros.  In this example, all screen
  3202.     dialog is data-driven. */
  3203.  
  3204.  LOCAL GetList := {}, aData, i, bBlock, bValid, bWhen
  3205.  
  3206.  CLOSE ALL
  3207.  USE COLLECT NEW EXCL VIA DBFNTX
  3208.  
  3209.  aData := { { 1, 1, 'Description', 'COLLECT->descrip', '@!', ;
  3210.                     '!Empty(COLLECT->descrip)', '.T.' }, ;
  3211.             { 3, 1, 'Original Price', 'COLLECT->orig_price', '9999.99', ;
  3212.                     '.T.','.T.'}, ;
  3213.             { 5, 1, 'Date Acquired', 'COLLECT->date_acqu', '', ;
  3214.                     '.T.', '.T.' } }
  3215.  
  3216.  FOR i := 1 TO Len(aData)
  3217.  
  3218.    bBlock := _XSample37(aData[i,4],1)
  3219.    bValid := _XSample37(aData[i,6],2)
  3220.    bWhen  := _XSample37(aData[i,7],2)
  3221.  
  3222.    @ aData[i,1], aData[i,2] DCSAY aData[i,3] GET bBlock ;
  3223.      PICTURE aData[i,5] ;
  3224.      VALID bValid ;
  3225.      WHEN bWhen ;
  3226.      SAYRIGHT ;
  3227.      SAYSIZE 15
  3228.  
  3229.  NEXT
  3230.  
  3231.  DCREAD GUI ;
  3232.    TITLE 'Data-Driven GETs Demo' ;
  3233.    FIT ADDBUTTONS
  3234.  
  3235. RETURN nil
  3236.  
  3237. /* -------------------- */
  3238.  
  3239. STATIC FUNCTION _XSample37( xValue, nMode )
  3240.  
  3241. IF nMode = 1 // Field Anchor
  3242.   RETURN {|x|IIF(x==nil,&(xValue),IIF(dbRLock(),&(xValue):=x,nil)), ;
  3243.              IIF(!(x==nil),dbUnlock(),nil),&(xValue) }
  3244. ENDIF
  3245.  
  3246. RETURN {||&(xValue)}  // VALID or WHEN Anchor
  3247.  
  3248. *** END OF EXAMPLE ***
  3249.  
  3250. /* --------------------------- */
  3251.  
  3252. STATIC FUNCTION XSample_38()
  3253.  
  3254. /* This example shows "Scrolling" @ DCSAY..GETs.  Moving the
  3255.    scrollbars will scroll the GETS in the window.  Moving to a
  3256.    GET which is outside the window area will scroll the GETS
  3257.    up or down.  Resizing the window will resize the GET area. */
  3258.  
  3259.  LOCAL GetList := {}, i, bFieldName, nCount := 1, oStatic, ;
  3260.        nVertOffset := 0, nHorizOffset := 0, oVertScroll, ;
  3261.        oHorizScroll, oDlg, oCurrGet, bGotFocus
  3262.  
  3263.  CLOSE ALL
  3264.  USE COLLECT NEW EXCL VIA DBFNTX
  3265.  bGotFocus := {|a,b,o|_XSample38_3(o,oStatic,@nVertOffset, ;
  3266.                       @nHorizOffset,oVertScroll,oHorizScroll), ;
  3267.                       oCurrGet:=o}
  3268.  
  3269.  @ 1,1 DCSTATIC XBPSTATIC_TYPE_RECESSEDBOX SIZE 50,8 ;
  3270.    OBJECT oStatic
  3271.  
  3272.  @ 1, 51.2 DCSCROLLBAR DATA nVertOffSet SIZE 3,8 ;
  3273.    TYPE XBPSCROLL_VERTICAL RANGE 0,FCount() ;
  3274.    AUTOTRACK ;
  3275.    OBJECT oVertScroll ;
  3276.    SCROLL { |a,x,o| nVertOffset := a[1]*20, ;
  3277.             _XSample38_2(oStatic,nVertOffSet,nHorizOffset) }
  3278.  
  3279.  @ 9.1, 1 DCSCROLLBAR DATA nHorizOffSet SIZE 50,1 ;
  3280.    TYPE XBPSCROLL_HORIZONTAL RANGE 0,200 ;
  3281.    AUTOTRACK ;
  3282.    OBJECT oHorizScroll ;
  3283.    SCROLL { |a,x,o| nHorizOffset := a[1], ;
  3284.            IIF( a[2]==XBPSB_ENDSCROLL, ;
  3285.                 _XSample38_2(oStatic,nVertOffSet,nHorizOffset),nil)}
  3286.  
  3287.  FOR i := 1 TO FCount()
  3288.    IF Type(FieldName(i)) # 'M'
  3289.      bFieldName := _XSample38_1('COLLECT->'+FieldName(i))
  3290.      @ nCount,1 DCSAY FieldName(i) GET bFieldName ;
  3291.        SAYRIGHT ;
  3292.        SAYSIZE 15 ;
  3293.        SAYEVAL {|o|o:cargo[3]:=o:currentPos()} ;
  3294.        GETEVAL {|o|o:cargo[3]:=o:currentPos()} ;
  3295.        PARENT oStatic ;
  3296.        GOTFOCUS bGotFocus
  3297.    ENDIF
  3298.    nCount++
  3299.  NEXT
  3300.  
  3301.  DCREAD GUI ;
  3302.    PARENT @oDlg ;
  3303.    TITLE 'Scrolling GETS Demo' ;
  3304.    FIT ;
  3305.    MODAL ;
  3306.    ADDBUTTONS ;
  3307.    EVAL { || oDlg:reSize := ;
  3308.          {||_XSample38_4(oDlg,oStatic,oVertScroll,oHorizScroll), ;
  3309.             Eval(bGotFocus,nil,nil,oCurrGet)}}
  3310.  
  3311. Sleep(100)
  3312.  
  3313. RETURN nil
  3314.  
  3315. /* ------------------- */
  3316.  
  3317. STATIC FUNCTION _XSample38_1( c )
  3318.  
  3319. RETURN {|x|IIF(x==nil,&(c),&(c):=x)}
  3320.  
  3321. /* ----------------------- */
  3322.  
  3323. STATIC FUNCTION _XSample38_2( oStatic, nVertOffset, nHorizOffset )
  3324.  
  3325. LOCAL aChildren := oStatic:ChildList(), i, aCargo, nRow, nCol
  3326.  
  3327. FOR i := 1 TO LEN(aChildren)
  3328.   aCargo := aChildren[i]:cargo[3]   // user cargo is always :cargo[3]
  3329.   nCol := aCargo[1]
  3330.   nRow := aCargo[2]
  3331.   aChildren[i]:setPos({nCol-nHorizOffset,nRow+nVertOffset})
  3332. NEXT
  3333.  
  3334. RETURN nil
  3335.  
  3336. /* ----------------------- */
  3337.  
  3338. STATIC FUNCTION _XSample38_3( oXbp, oStatic, nVertOffset, nHorizOffset, ;
  3339.                               oVertScroll, oHorizScroll )
  3340. IF Valtype(oXbp) = 'U'
  3341.   RETURN nil
  3342. ENDIF
  3343.  
  3344. DO WHILE oXbp:currentPos()[2] < 0
  3345.   nVertOffset += 20
  3346.   _XSample38_2( oStatic, nVertOffset, nHorizOffset )
  3347. ENDDO
  3348. DO WHILE oXbp:currentPos()[2] > oStatic:currentSize()[2]-20
  3349.   nVertOffset -= 20
  3350.   _XSample38_2( oStatic, nVertOffset, nHorizOffset )
  3351. ENDDO
  3352. oVertScroll:setData(nVertOffset)
  3353.  
  3354. RETURN nil
  3355.  
  3356. /* ----------------------- */
  3357.  
  3358. STATIC FUNCTION _XSample38_4( oDlg, oStatic, oVertScroll, oHorizScroll )
  3359.  
  3360. oStatic:setSize({oDlg:currentSize()[1]-50, ;
  3361.                  oDlg:currentSize()[2]-120})
  3362.  
  3363. oVertScroll:setPos({oStatic:currentSize()[1] + 12, ;
  3364.                     oVertScroll:currentPos()[2]})
  3365.  
  3366. oVertScroll:setSize({oVertScroll:currentSize()[1], ;
  3367.                      oStatic:currentSize()[2]})
  3368.  
  3369. oHorizScroll:setSize({oStatic:currentSize()[1], ;
  3370.                       oHorizScroll:currentSize()[2]})
  3371.  
  3372. RETURN nil
  3373.  
  3374. *** END OF EXAMPLE ***
  3375.  
  3376. /* --------------------------- */
  3377.  
  3378. STATIC FUNCTION XSample_39
  3379.  
  3380. /* This example shows how to use DC_WaitOn() to display a
  3381.    "work in progress"  dialog while an action is in
  3382.    progress */
  3383.  
  3384.  LOCAL cDialog
  3385.  
  3386.  USE ..\XDOC\EXPRESS VIA FOXCDX ALIAS XDOC EXCLUSIVE
  3387.  
  3388.  cDialog := DC_WaitOn('Please wait while copying file')
  3389.  COPY TO JUNK
  3390.  Ferase('JUNK.*')
  3391.  DC_Impl(cDialog)
  3392.  
  3393. RETURN nil
  3394. *** END OF EXAMPLE ***
  3395.  
  3396. /* --------------------------- */
  3397.  
  3398. STATIC FUNCTION XSample_40 ( lPreview )
  3399.  
  3400. /* This example shows how printing can be accomplished using
  3401.    simple Clipper-style print commands. */
  3402.  
  3403. LOCAL aFor_Sale, oPrinter, i, nLineCount, cMemo, cMemoLine, cScrn
  3404.  
  3405. lPreview := IIF(Valtype(lPreview)='L',lPreview,.f.)
  3406.  
  3407. CLOSE ALL
  3408. USE COLLECT EXCL VIA DBFNTX
  3409.  
  3410. IF !lPreview
  3411.   GOTO 3
  3412. ENDIF
  3413.  
  3414. aFor_Sale := { 'No','Yes','Not Sure' }
  3415.  
  3416. BEGIN SEQUENCE
  3417.  
  3418. IF lPreview
  3419.   DCPRINT ON SIZE 60,100 TO oPrinter FONT '12.Courier New' PREVIEW HIDE
  3420. ELSE
  3421.   DCPRINT ON SIZE 60,100 TO oPrinter FONT '12.Courier New'
  3422. ENDIF
  3423.  
  3424. IF Valtype(oPrinter) # 'O' .OR. !oPrinter:lActive
  3425.   BREAK
  3426. ENDIF
  3427.  
  3428. IF !lPreview
  3429.   cScrn := DC_WaitOn()
  3430. ENDIF
  3431.  
  3432. DO WHILE !Eof() .AND. DC_PrinterOk(oPrinter)
  3433.  
  3434.    DCPRINT SIZE 66,80
  3435.  
  3436.    @ 2,2,20,35 DCPRINT BITMAP COLLECT->bitmap1 PRINTER oPrinter ;
  3437.       AUTOSCALE CENTER
  3438.  
  3439.    @ 2,37,20,70 DCPRINT BITMAP COLLECT->bitmap2 PRINTER oPrinter ;
  3440.       AUTOSCALE CENTER
  3441.  
  3442.    DCPRINT FONT '12.Courier New' PRINTER oPrinter
  3443.  
  3444.    @ 23, 5, 38, 65 DCPRINT BOX PRINTER oPrinter
  3445.  
  3446.    @ 24,7 DCPRINT SAY '    Description:' PRINTER oPrinter
  3447.    @ 25,7 DCPRINT SAY '           Type:' PRINTER oPrinter
  3448.    @ 26,7 DCPRINT SAY '       Sub-Type:' PRINTER oPrinter
  3449.    @ 27,7 DCPRINT SAY '      Condition:' PRINTER oPrinter
  3450.    @ 28,7 DCPRINT SAY '       Location:' PRINTER oPrinter
  3451.    @ 29,7 DCPRINT SAY '      For Sale?:' PRINTER oPrinter
  3452.    @ 30,7 DCPRINT SAY '  Original Date:' PRINTER oPrinter
  3453.    @ 31,7 DCPRINT SAY '  Acquired Date:' PRINTER oPrinter
  3454.    @ 32,7 DCPRINT SAY ' Original Price:' PRINTER oPrinter
  3455.    @ 33,7 DCPRINT SAY 'Appraised Value:' PRINTER oPrinter
  3456.    @ 34,7 DCPRINT SAY '       Comments:' PRINTER oPrinter
  3457.    @ 35,7 DCPRINT SAY '      Bit Map 1:' PRINTER oPrinter
  3458.    @ 36,7 DCPRINT SAY '      Bit Map 2:' PRINTER oPrinter
  3459.  
  3460.    DCPRINT FONT '14.Courier New' PRINTER oPrinter
  3461.  
  3462.    @ 24,25 DCPRINT SAY COLLECT->descrip   PRINTER oPrinter
  3463.    @ 25,25 DCPRINT SAY COLLECT->type      PRINTER oPrinter
  3464.    @ 26,25 DCPRINT SAY COLLECT->sub_type  PRINTER oPrinter
  3465.    @ 27,25 DCPRINT SAY COLLECT->condition PRINTER oPrinter
  3466.    @ 28,25 DCPRINT SAY COLLECT->location  PRINTER oPrinter
  3467.    @ 29,25 DCPRINT SAY aFor_Sale[COLLECT->for_sale+1]  PRINTER oPrinter
  3468.    @ 30,25 DCPRINT SAY COLLECT->date_orig PRINTER oPrinter
  3469.    @ 31,25 DCPRINT SAY COLLECT->date_acqu  PRINTER oPrinter
  3470.    @ 32,25 DCPRINT SAY COLLECT->orig_price PRINTER oPrinter
  3471.    @ 33,25 DCPRINT SAY COLLECT->appr_value PRINTER oPrinter
  3472.    @ 34,25 DCPRINT SAY COLLECT->comments  PRINTER oPrinter
  3473.    @ 35,25 DCPRINT SAY COLLECT->bitmap1   PRINTER oPrinter
  3474.    @ 36,25 DCPRINT SAY COLLECT->bitmap2   PRINTER oPrinter
  3475.  
  3476.    DCPRINT FONT '16.Arial'  PRINTER oPrinter
  3477.  
  3478.    DCPRINT SIZE 40,80
  3479.  
  3480.    cMemo := Alltrim(COLLECT->memo)
  3481.    nLineCount := MLCount(cMemo)
  3482.    FOR i := 1 TO nLineCount - 1
  3483.       cMemoLine := MemoLine( cMemo, nil, i )
  3484.       @ 25+i,7 DCPRINT SAY cMemoLine PRINTER oPrinter
  3485.    NEXT
  3486.  
  3487.    SKIP
  3488.  
  3489.    IF !Eof()
  3490.       DCPRINT EJECT
  3491.    ENDIF
  3492.  
  3493. ENDDO
  3494.  
  3495.  
  3496. IF !lPreview
  3497.   DC_Impl(cScrn)
  3498. ENDIF
  3499.  
  3500. DCPRINT OFF PRINTER oPrinter
  3501.  
  3502. END SEQUENCE
  3503.  
  3504. RETURN nil
  3505. *** END OF EXAMPLE ***
  3506.  
  3507. /* --------------------------- */
  3508.  
  3509. STATIC FUNCTION XSample_41
  3510.  
  3511. /* This example shows how print preview can be accomplished using
  3512.    the same code as that used for printing. */
  3513.  
  3514. RETURN XSample_40( .T. )
  3515.  
  3516. *** END OF EXAMPLE ***
  3517.  
  3518. /* --------------------------- */
  3519.  
  3520. STATIC FUNCTION XSample_42()
  3521.  
  3522. /* This example show how to use the CASCADE clause of DCGETOPTIONS
  3523.    to create cascaded windows. */
  3524.  
  3525. LOCAL GetList := {}, GetOptions
  3526.  
  3527. @ 10,10 DCPUSHBUTTON PROMPT 'New Window' ;
  3528.   SIZE 30,3 ;
  3529.   FONT '12.Arial Bold' ;
  3530.   ACTION {|o|o:=Thread():new(),o:Start({||XSample_42()}) }
  3531.  
  3532. DCGETOPTIONS ;
  3533.    CASCADE
  3534.  
  3535. DCREAD GUI OPTIONS GetOptions FIT ADDBUTTONS
  3536.  
  3537. RETURN nil
  3538.  
  3539. /* ------------------- */
  3540.  
  3541. STATIC FUNCTION _XSample42 ( xData, nElement )
  3542.  
  3543. LOCAL cData := DC_XtoC( xData ), cPrefix
  3544.  
  3545. DO CASE
  3546.   CASE nElement = 2
  3547.     cPrefix := 'File Size: '
  3548.   CASE nElement = 3
  3549.     cPrefix := 'File Date: '
  3550.   CASE nElement = 4
  3551.     cPrefix := 'File Time: '
  3552.   CASE nElement = 7
  3553.     cPrefix := 'Creation Date: '
  3554.   CASE nElement = 8
  3555.     cPrefix := 'Creation Time: '
  3556.   OTHERWISE
  3557.     cPrefix := ''
  3558. ENDCASE
  3559.  
  3560. RETURN cPrefix + cData
  3561. *** END OF EXAMPLE ***
  3562.  
  3563.  
  3564.  
  3565.