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

  1. *-- PROGRAM FILE -------------------------------------------------------------
  2. * Application: eXPress++ Library
  3. *  Description: eXPress++ sample programs
  4. *    File Name: xsample4.prg
  5. *       Author: Roger Donnay          Tester:
  6. * Date created: 01/01/00              Date updated: 11/07/2001
  7. *    Copyright: (c) 2001 by DONNAY Software Designs
  8. *-----------------------------------------------------------------------------
  9.  
  10. #include "DCDIALOG.CH"
  11. #include "SET.CH"
  12. #include "XBP.CH"
  13. #include "APPEVENT.CH"
  14. #INCLUDE "inkey.CH"
  15. #INCLUDE "dcicon.CH"
  16. #INCLUDE "dcgrump.ch"
  17. #INCLUDE "dcbitmap.ch"
  18. #include "font.ch"
  19. #INCLUDE "dcprint.CH"
  20.  
  21. #define VK_NUMLOCK        0x90
  22. #define VK_SCROLL         0x91
  23. #define VK_CAPITAL        0x14
  24. #define APPKEY_PRESSED    2
  25. #define CRLF              Chr(13)+Chr(10)
  26.  
  27. FUNCTION X_Samples_4( oDialog )
  28.  
  29. LOCAL GetList := {}, nTest := 0, cMemo := '', oMemo, i, j, oDlg, ;
  30.       lDebugCreate := .f., lDebugEvent := .f., GetOptions, aApp[1], ;
  31.       cTitle, oDlgWindow, aCoords, oSourceFile, cSource
  32.  
  33. SET DEFA TO
  34. SET PATH TO ..\DATA
  35.  
  36. cTitle := 'eXPress++ Sample Programs (Set 4)'
  37. nTest := 0
  38. cMemo := ''
  39. lDebugEvent := .f.
  40. lDebugCreate := .f.
  41.  
  42. FOR i := 1 TO  5
  43.   FOR j := 1 TO 6
  44.     nTest++
  45.     @ j-1,1 + (i-1)*14 DCRADIO nTest             ;
  46.       VALUE _Value(nTest)                        ;
  47.       PROMPT XSample_Header(nTest)               ;
  48.       ACTION {||XSample_Memo(nTest,oMemo,oSourceFile,@cSource)}  ;
  49.       COLOR XSample_Color(nTest)
  50.   NEXT j
  51. NEXT i
  52. nTest := 1
  53.  
  54. @ 2,73 DCPUSHBUTTON CAPTION 'Run Sample'  ;
  55.       SIZE 12, 1                               ;
  56.       ACTION {||XSample_Run(nTest,oDialog,lDebugCreate,lDebugEvent,GetList,GetOptions)}
  57.  
  58. @ 3,73 DCPUSHBUTTON CAPTION 'Print Source'  ;
  59.       SIZE 12, 1                               ;
  60.       ACTION {||XSample_Print(cSource)}
  61.  
  62. @ 4,73 DCPUSHBUTTON CAPTION 'Exit' ;
  63.       SIZE 12, 1  ;
  64.       ACTION {||PostAppEvent(xbeP_Close,,,oDlg)}
  65.  
  66. @ 5,73 DCCHECKBOX lDebugEvent PROMPT 'Debug Events'
  67.  
  68. @ 6.3,5 DCSAY '' SAYSIZE 60 COLOR GRA_CLR_DARKBLUE ;
  69.       OBJECT oSourceFile FONT '8.Courier Bold'
  70.  
  71. @ 7,1 DCMULTILINE cMemo ;
  72.      OBJECT oMemo ;
  73.      SIZE 85,12 ;
  74.      FONT '8.Alaska Crt'
  75.  
  76. DCGETOPTIONS ;
  77.    ICON ICON_EXPRESS ;
  78.    NOBUSY ;
  79.    CASCADE
  80.  
  81. DCREAD GUI ;
  82.       OPTIONS GetOptions ;
  83.       EVAL {||XSample_Memo(nTest,oMemo,oSourceFile,@cSource)} ;
  84.       APPWINDOW oDialog ;
  85.       PARENT @oDlg ;
  86.       TITLE cTitle ;
  87.       FIT
  88.  
  89. CLOSE DATABASES
  90.  
  91. RETURN nil
  92.  
  93. * ---------------------------- *
  94.  
  95. STATIC FUNCTION _Value( nTest )
  96.  
  97. RETURN nTest
  98.  
  99. * ---------------------------- *
  100.  
  101. STATIC FUNCTION XSample_Memo( nTest, oMemo, oSourceFile, cSource )
  102.  
  103. LOCAL cFunction, nFound, cSourceFile
  104.  
  105. cSource := ''
  106. nTest += 102
  107. cFunction := 'XSample_' + Alltrim(Str(nTest))
  108.  
  109. cSourceFile := 'XSAMPLE4.PRG'
  110. cSource := MemoRead(cSourceFile)
  111. IF Empty(cSource)
  112.   cSourceFile := '..\PRG\XSAMPLE4.PRG'
  113.   cSource := MemoRead(cSourceFile)
  114. ENDIF
  115. IF Empty(cSource)
  116.   cSource := 'XSAMPLE4.PRG cannot be found'
  117. ENDIF
  118.  
  119. nFound := AT('FUNCTION ' + cFunction,cSource)
  120. cSource := Substr(cSource,nFound)
  121. nFound := AT('*** END OF EXAMPLE ***',cSource)
  122. cSource := Substr(cSource,1,nFound+21)
  123.  
  124. IF !Empty(cSource)
  125.   oMemo:setData(cSource)
  126.   oSourceFile:setCaption(cSourceFile)
  127. ENDIF
  128. RETURN nil
  129.  
  130. * -------------------
  131.  
  132. STATIC FUNCTION XSample_Print( cSource )
  133.  
  134. LOCAL oPrinter, nLineCount := MLCount(cSource), i, cMemoLine, nRow
  135.  
  136. DCPRINT ON TO oPrinter PREVIEW FONT '10.Courier' NONSTOP HIDE
  137. IF Valtype(oPrinter) # 'O' .OR. !oPrinter:lActive
  138.   RETURN nil
  139. ENDIF
  140. nRow := 1
  141. FOR i := 1 TO nLineCount - 1
  142.   cMemoLine := MemoLine( cSource, nil, i )
  143.   @ nRow++,2 DCPRINT SAY cMemoLine PRINTER oPrinter
  144.   IF nRow > 60
  145.     DCPRINT EJECT
  146.     nRow := 1
  147.   ENDIF
  148. NEXT
  149. DCPRINT OFF
  150.  
  151. RETURN nil
  152.  
  153. * ---------------------------- *
  154.  
  155. STATIC FUNCTION XSample_Run( nTest, oDialog, lDebugCreate, lDebugEvent, ;
  156.                              GetList, GetOptions )
  157.  
  158. LOCAL nDebug := 0, lVer20, oThread
  159.  
  160. #ifdef EXPRESS20
  161.   lVer20 := .t.
  162. #else
  163.   lVer20 := .f.
  164. #endif
  165.  
  166. DC_Gui(.t.)
  167.  
  168. nTest += 102
  169. IF lDebugCreate
  170.    nDebug += DCGUI_DEBUG_CREATE
  171. ENDIF
  172. IF lDebugEvent
  173.    nDebug += DCGUI_DEBUG_EVENTS
  174. ENDIF
  175. DC_ReadGuiDebug(nDebug)
  176. CLOSE ALL
  177. SET DEFA TO
  178.  
  179. IF nTest = 103 .AND. lVer20
  180.    XSample_103()
  181. ELSEIF nTest = 104 .AND. lVer20
  182.    XSample_104()
  183. ELSEIF nTest = 105 .AND. lVer20
  184.    XSample_105()
  185. ELSEIF nTest = 106 .AND. lVer20
  186.    XSample_106()
  187. ELSEIF nTest = 107 .AND. lVer20
  188.    XSample_107()
  189. ELSEIF nTest = 108 .AND. lVer20
  190.    XSample_108()
  191. ELSEIF nTest = 109 .AND. lVer20
  192.    XSample_109()
  193. ELSEIF nTest = 110 .AND. lVer20
  194.    XSample_110()
  195. ELSEIF nTest = 111 .AND. lVer20
  196.    XSample_111()
  197. ELSEIF nTest = 112 .AND. lVer20
  198.    XSample_112()
  199. ELSEIF nTest = 113 .AND. lVer20
  200.    XSample_113()
  201. ELSEIF nTest = 114 .AND. lVer20
  202.    XSample_114()
  203. ELSEIF nTest = 115 .AND. lVer20
  204.    XSample_115()
  205. ELSEIF nTest = 116 .AND. lVer20
  206.    XSample_116()
  207. ELSEIF nTest = 117 .AND. lVer20
  208.    XSample_117()
  209. ELSEIF nTest = 118 .AND. lVer20
  210.    XSample_118()
  211. ELSEIF nTest = 119 .AND. lVer20
  212.    XSample_119()
  213. ELSEIF nTest = 120
  214.    XSample_120()
  215. ELSEIF nTest = 121
  216.    XSample_121()
  217. ELSEIF nTest = 122 .AND. lVer20
  218.    XSample_122()
  219. ELSEIF nTest = 123
  220.    oThread := Thread():new()
  221.    oThread:start( {||XSample_123()} )
  222. ELSEIF nTest = 124 .AND. lVer20
  223.    XSample_124()
  224. ELSEIF nTest = 125
  225.    XSample_125()
  226. ELSEIF nTest = 126
  227.    XSample_126()
  228. ELSEIF nTest = 127
  229.    XSample_127()
  230. ELSEIF nTest = 128
  231.    XSample_128()
  232. ELSEIF nTest = 129
  233.    XSample_129()
  234. ELSEIF nTest = 130
  235.    XSample_130()
  236. ELSEIF nTest = 131
  237.    XSample_131()
  238. ELSEIF nTest = 132
  239.    XSample_132()
  240. ELSE
  241.    DC_WinAlert('This sample is available under eXPress++ 2.0 or later')
  242. ENDIF
  243.  
  244. DC_ClearEvents()
  245.  
  246. RETURN nil
  247.  
  248. * ---------------------------- *
  249.  
  250. STATIC FUNCTION XSample_Header( nTest )
  251.  
  252. nTest += 102
  253.  
  254. IF nTest = 103
  255.   RETURN "DotPrompt 1"
  256. ELSEIF nTest = 104
  257.   RETURN "DotPrompt 2"
  258. ELSEIF nTest = 105
  259.   RETURN "DotPrompt 3"
  260. ELSEIF nTest = 106
  261.   RETURN "Intepret 1"
  262. ELSEIF nTest = 107
  263.   RETURN "Intepret 2"
  264. ELSEIF nTest = 108
  265.   RETURN "Intepret 3"
  266. ELSEIF nTest = 109
  267.   RETURN "Intepret 4"
  268. ELSEIF nTest = 110
  269.   RETURN "ComplRun 1"
  270. ELSEIF nTest = 111
  271.   RETURN "ComplRun 2"
  272. ELSEIF nTest = 112
  273.   RETURN "ComplRun 3"
  274. ELSEIF nTest = 113
  275.   RETURN "Pre-Proc 1"
  276. ELSEIF nTest = 114
  277.   RETURN "Pre-Proc 2"
  278. ELSEIF nTest = 115
  279.   RETURN "Pre-Proc 3"
  280. ELSEIF nTest = 116
  281.   RETURN "ProgramMgr"
  282. ELSEIF nTest = 117
  283.   RETURN "Menu 1"
  284. ELSEIF nTest = 118
  285.   RETURN "Menu 2"
  286. ELSEIF nTest = 119
  287.   RETURN "MenuEditor"
  288. ELSEIF nTest = 120
  289.   RETURN "GUIMenuTo"
  290. ELSEIF nTest = 121
  291.   RETURN "StatusBars"
  292. ELSEIF nTest = 122
  293.   RETURN "WorkTree"
  294. ELSEIF nTest = 123
  295.   RETURN "ShortCut"
  296. ELSEIF nTest = 124
  297.   RETURN "Design 1"
  298. ELSEIF nTest = 125
  299.   RETURN "GETFonts"
  300. ELSEIF nTest = 126
  301.   RETURN "GrumpBrow"
  302. ELSEIF nTest = 127
  303.   RETURN 'HiddenDialog'
  304. ELSEIF nTest = 128
  305.   RETURN 'ToggleCells'
  306. ELSEIF nTest = 129
  307.   RETURN 'OneToMany 1'
  308. ELSEIF nTest = 130
  309.   RETURN 'OneToMany 2'
  310. ELSEIF nTest = 131
  311.   RETURN 'OneToMany 3'
  312. ELSEIF nTest = 132
  313.   RETURN 'StaticScroll'
  314. ENDIF
  315.  
  316. RETURN ''
  317.  
  318. * ---------------------------- *
  319.  
  320. STATIC FUNCTION XSample_Color( nTest )
  321.  
  322. LOCAL lVer20
  323.  
  324. #ifdef EXPRESS20
  325.   lVer20 := .t.
  326. #else
  327.   lVer20 := .f.
  328. #endif
  329.  
  330. IF lVer20
  331.   RETURN GRA_CLR_BLACK
  332. ENDIF
  333.  
  334. nTest += 102
  335.  
  336. IF nTest <= 119 .OR. nTest = 122 .OR. nTest = 124 .OR. nTest = 125
  337.   RETURN GRA_CLR_DARKGRAY
  338. ENDIF
  339.  
  340. RETURN GRA_CLR_BLACK
  341.  
  342. * ---------------------------- *
  343.  
  344. STATIC FUNCTION XSample_103
  345.  
  346. /*
  347. Demonstration of DC_Dot() # 1
  348. */
  349.  
  350. DC_Gui(.f.)
  351. DC_Do('DC_Dot()')
  352. DC_Gui(.t.)
  353.  
  354. RETURN nil
  355. *** END OF EXAMPLE ***
  356.  
  357. * ---------------------------- *
  358.  
  359. STATIC FUNCTION XSample_104
  360.  
  361. /*
  362. Demonstration of DC_Dot() # 2
  363. */
  364.  
  365. LOCAL GetList := {}, oBrowse
  366.  
  367. USE COLLECT ALIAS 'XCOLLECT' VIA DBFNTX
  368.  
  369. @ 1,0 DCSAY 'Press ALT_D for Dot Prompt' SAYSIZE 0 ;
  370.       COLOR GRA_CLR_BLUE FONT '12.Arial Bold'
  371.  
  372. @ 3,0 DCBROWSE oBrowse ALIAS 'XCOLLECT' SIZE 60,10
  373. DCBROWSECOL FIELD XCOLLECT->descrip HEADER 'Description' PARENT oBrowse
  374. DCBROWSECOL FIELD XCOLLECT->type HEADER 'Type' PARENT oBrowse
  375. DCBROWSECOL FIELD XCOLLECT->sub_type HEADER 'Sub-Type' PARENT oBrowse
  376.  
  377. DCREAD GUI FIT BUTTONS DCGUI_BUTTON_OK  ;
  378.    TITLE 'DC_Dot() Sample 2' MODAL
  379.  
  380. RETURN nil
  381. *** END OF EXAMPLE ***
  382.  
  383. * ---------------------------- *
  384.  
  385. STATIC FUNCTION XSample_105
  386.  
  387. /*
  388. Demonstration of DC_Dot() # 3
  389. */
  390.  
  391. LOCAL GetList := {}, oBrowse
  392.  
  393. USE COLLECT ALIAS 'XCOLLECT' VIA DBFNTX
  394.  
  395. @ 1,0 DCBROWSE oBrowse ALIAS 'XCOLLECT' SIZE 60,10
  396.  
  397. DCBROWSECOL FIELD XCOLLECT->descrip HEADER 'Description' ;
  398.    PARENT oBrowse WIDTH 20
  399.  
  400. DCBROWSECOL FIELD XCOLLECT->type HEADER 'Type' ;
  401.    PARENT oBrowse WIDTH 10
  402.  
  403. DCBROWSECOL FIELD XCOLLECT->sub_type HEADER 'Sub-Type' ;
  404.    PARENT oBrowse WIDTH 10
  405.  
  406. @ 12,0 DCPUSHBUTTON CAPTION '&Ok' SIZE 9,1.2 ;
  407.    ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}
  408.  
  409. @ 12,11 DCPUSHBUTTON CAPTION '&Dot' SIZE 9,1.2 ;
  410.    ACTION {||DC_Do('DC_Dot()')}
  411.  
  412. DCREAD GUI FIT TITLE 'DC_Dot() Sample 3' MODAL
  413.  
  414. RETURN nil
  415. *** END OF EXAMPLE ***
  416.  
  417. * ---------------------------- *
  418.  
  419. STATIC FUNCTION XSample_106
  420.  
  421. /*
  422. Demonstration of Interpreter # 1
  423. This example builds a dialog using eXPress++ commands
  424. */
  425.  
  426. LOCAL oAppWindow := SetAppWindow(DC_QoutWindow())
  427.  
  428. ERASE XSample.TXT
  429. TEXT TO FILE XSample.TXT
  430.  
  431. SET ECHO ON
  432. USE COLLECT ALIAS 'XCOLLECT' VIA DBFNTX
  433.  
  434. @ 1,0 DCBROWSE oBrowse ALIAS 'XCOLLECT' SIZE 60,10 ;
  435.    PRESENTATION DC_BrowPres()
  436.  
  437. DCBROWSECOL FIELD XCOLLECT->descrip HEADER 'Description' ;
  438.    PARENT oBrowse WIDTH 20
  439.  
  440. DCBROWSECOL FIELD XCOLLECT->type HEADER 'Type' ;
  441.    PARENT oBrowse WIDTH 10
  442.  
  443. DCBROWSECOL FIELD XCOLLECT->sub_type HEADER 'Sub-Type' ;
  444.    PARENT oBrowse WIDTH 10
  445.  
  446. @ 12,0 DCPUSHBUTTON CAPTION '&Ok' SIZE 9,1.2 ;
  447.    ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}
  448.  
  449. @ 12,11 DCPUSHBUTTON CAPTION '&Dot' SIZE 9,1.2 ;
  450.    ACTION {||DC_Do('DC_Dot()')}
  451.  
  452. DCREAD GUI FIT TITLE 'DC_Interpret() Sample 1' MODAL
  453.  
  454. ENDTEXT
  455.  
  456. DC_Interpret(MemoRead('XSample.TXT'))
  457.  
  458. SetAppWindow(oAppWindow)
  459.  
  460. RETURN nil
  461. *** END OF EXAMPLE ***
  462.  
  463.  
  464. * ---------------------------- *
  465.  
  466. STATIC FUNCTION XSample_107
  467.  
  468. /*
  469. Demonstration of Interpreter # 2
  470. This example builds a dialog window using Xbase++ parts
  471. */
  472.  
  473. LOCAL oAppWindow := SetAppWindow(DC_QoutWindow())
  474.  
  475. ERASE XSample.TXT
  476. TEXT TO FILE XSample.TXT
  477.  
  478. oDlg := XbpDialog():New(AppDeskTop(),,{50,50},{300,300})
  479. oDlg:title := 'DC_Interpret() Sample 2'
  480. oDlg:create()
  481. oButton := XbpPushButton():new(oDlg:drawingArea,,{50,50},{100,25})
  482. oButton:caption := 'Test'
  483. oButton:activate := {||MsgBox('This is a Test')}
  484. oButton:create()
  485. DC_AppEvent()
  486. oDlg:Destroy()
  487.  
  488. ENDTEXT
  489.  
  490. DC_Interpret(MemoRead('XSample.TXT'))
  491.  
  492. SetAppWindow(oAppWindow)
  493.  
  494. RETURN nil
  495. *** END OF EXAMPLE ***
  496.  
  497.  
  498. * ---------------------------- *
  499.  
  500. STATIC FUNCTION XSample_108
  501.  
  502. /*
  503. Demonstration of Interpreter # 3
  504. This example runs any program entered into a memo box.
  505. */
  506.  
  507. LOCAL GetList := {}, cInterpret
  508.  
  509. cInterpret := "DCMSGBOX 'This is a test' TIMEOUT 2" + Chr(13)+Chr(10)
  510.  
  511. @ 1,0 DCSAY 'Enter command(s) to Interpret' SAYSIZE 0 ;
  512.    COLOR GRA_CLR_BLUE FONT '12.Arial Bold'
  513.  
  514. @ 2,0 DCMULTILINE cInterpret SIZE 60,5 ;
  515.    FONT '10.Courier New' COMPATIBLE
  516.  
  517. @ 8,0 DCPUSHBUTTON CAPTION '&Exit' SIZE 10,1.2 ;
  518.    ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}
  519.  
  520. @ 8,12 DCPUSHBUTTON CAPTION '&Interpret' SIZE 10,1.2 ;
  521.    TOOLTIP 'Run this program' ;
  522.    ACTION {||DC_GetRefresh(GetList), ;
  523.              DC_Interpret(cInterpret) }
  524.  
  525. DCREAD GUI FIT MODAL TITLE 'DC_Interpret() Sample #3'
  526.  
  527. RETURN nil
  528. *** END OF EXAMPLE ***
  529.  
  530. * ---------------------------- *
  531.  
  532. STATIC FUNCTION XSample_109
  533.  
  534. /*
  535. Demonstration of Interpreter # 4
  536. This example runs any program entered into a memo box.
  537. */
  538.  
  539. LOCAL oAppWindow := SetAppWindow(DC_QoutWindow()), oAppFocus
  540.  
  541. oAppFocus := SetAppFocus(oAppWindow)
  542.  
  543. ERASE XSample.TXT
  544. TEXT TO FILE XSample.TXT
  545.  
  546. GUI OFF
  547. CLS
  548. FOR i := 1 TO 20
  549.   ? 'This is number', i
  550. NEXT
  551. WAIT
  552.  
  553. CLS
  554. CLOSE ALL
  555. USE COLLECT VIA DBFNTX
  556. DO WHILE !Eof()
  557.   ? descrip, type, sub_type
  558.   SKIP
  559. ENDDO
  560. WAIT
  561. CLS
  562.  
  563. ENDTEXT
  564.  
  565. DC_Interpret(MemoRead('XSAMPLE.TXT'))
  566.  
  567. SetAppWindow(oAppWindow)
  568. SetAppFocus(oAppFocus)
  569.  
  570. GUI ON
  571. DCMSGBOX 'Done!'
  572.  
  573. RETURN nil
  574. *** END OF EXAMPLE ***
  575.  
  576. * ---------------------------- *
  577.  
  578. STATIC FUNCTION XSample_110
  579.  
  580. /*
  581. Demonstration of Compile and Run # 1
  582. This example will compile and run a pre-defined
  583. program dynamically.
  584. */
  585.  
  586. LOCAL lOk, oAppWindow := SetAppWindow(DC_QoutWindow())
  587.  
  588. ERASE XSample.PRG
  589. TEXT TO FILE XSample.PRG
  590.  
  591. #include "dcdialog.ch"
  592. FUNCTION XSample_Run
  593.  
  594. LOCAL GetList := {}
  595. @ 0,0 DCSAY 'This dialog was created by saving some text' SAYSIZE 0
  596. @ 1,0 DCSAY 'to a file named XSAMPLE.PRG, then compiling' SAYSIZE 0
  597. @ 2,0 DCSAY 'it to XSAMPLE.OBJ with DC_COMPILE(), then' SAYSIZE 0
  598. @ 3,0 DCSAY 'loading the compiled object dynamically with' SAYSIZE 0
  599. @ 4,0 DCSAY 'DC_OBJLOAD() and running the function XSAMPLE_RUN()' SAYSIZE 0
  600.  
  601. DCREAD GUI FIT BUTTONS DCGUI_BUTTON_OK MODAL ;
  602.    TITLE 'Compile/Run Example' TO lOk
  603.  
  604. RETURN lOk
  605.  
  606. ENDTEXT
  607.  
  608. SetAppWindow(oAppWindow)
  609.  
  610. IF DC_Compile('XSAMPLE.PRG')
  611.   IF DC_ObjLoad('XSAMPLE')
  612.     lOk := DC_Do('XSample_Run()')
  613.     DC_MsgBox({lOk})
  614.   ELSE
  615.     DC_WinAlert('Cannot create XSAMPLE.DLL')
  616.   ENDIF
  617. ELSE
  618.   DC_WinAlert('Cannot not compile XSAMPLE.PRG')
  619. ENDIF
  620.  
  621. RETURN nil
  622. *** END OF EXAMPLE ***
  623.  
  624. * ---------------------------- *
  625.  
  626. STATIC FUNCTION XSample_111
  627.  
  628. /*
  629. Demonstration of Compile and Run # 2
  630. This example will compile and run a user-defined
  631. program dynamically.
  632. */
  633.  
  634. LOCAL GetList := {}, cFunction, cSource
  635.  
  636. cFunction := Pad('Testing()',30)
  637. cSource := ;
  638.  '#include "dcdialog.ch"' + CRLF + ;
  639.  'FUNCTION Testing()' + CRLF + ;
  640.  '' + CRLF + ;
  641.  'LOCAL GetList := {}, dDate := Date()' + CRLF + ;
  642.  '@ 0,0 DCSAY "Enter Date" GET dDate POPUP {|d|DC_PopDate(d)}' + CRLF + ;
  643.  'DCREAD GUI FIT ADDBUTTONS ENTEREXIT MODAL TITLE "Testing"' + CRLF + ;
  644.  '' + CRLF + ;
  645.  'RETURN dDate' + CRLF
  646.  
  647. @ 1,0 DCSAY 'Function to Execute' GET cFunction SAYSIZE 0
  648. @ 2,0 DCSAY 'Source Code:'
  649. @ 3,0 DCMULTILINE cSource SIZE 80,15 FONT '8.Courier'
  650.  
  651. @20,0 DCPUSHBUTTON CAPTION 'Exit' SIZE 10,1.2 ;
  652.       ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}
  653.  
  654. @20,12 DCPUSHBUTTON CAPTION 'Compile/Run' SIZE 10,1.2 ;
  655.       ACTION {||_XSample_111( cSource, cFunction ) }
  656.  
  657. DCREAD GUI FIT MODAL TITLE 'Compile/Run Example #2'
  658.  
  659. RETURN nil
  660.  
  661. * ------------------
  662.  
  663. STATIC FUNCTION _XSample_111( cSource, cFunction )
  664.  
  665. LOCAL xReturn
  666.  
  667. MemoWrit( 'XSAMPLE.PRG', cSource )
  668. IF DC_Compile('XSAMPLE.PRG')
  669.   IF DC_ObjLoad('XSAMPLE')
  670.     xReturn := DC_Do(Alltrim(cFunction))
  671.     DC_MsgBox({xReturn})
  672.   ELSE
  673.     DC_WinAlert('Cannot create XSAMPLE.DLL')
  674.   ENDIF
  675. ELSE
  676.   DC_WinAlert('Cannot not compile XSAMPLE.PRG')
  677. ENDIF
  678.  
  679. RETURN nil
  680. *** END OF EXAMPLE ***
  681.  
  682. * ---------------------------- *
  683.  
  684. STATIC FUNCTION XSample_112
  685.  
  686. /*
  687. Demonstration of Compile and Run # 2
  688. This example will show how to use the XPP and OBJ commands
  689. at the dot prompt
  690. */
  691.  
  692. LOCAL lOk, GetList := {}, oDlg
  693.  
  694. ERASE XSample.PRG
  695. TEXT TO FILE XSample.PRG
  696.  
  697. #include "dcdialog.ch"
  698. FUNCTION XSample_Run
  699.  
  700. LOCAL GetList := {}
  701. @ 0,0 DCSAY 'This dialog was created by saving some text' SAYSIZE 0
  702. @ 1,0 DCSAY 'to a file named XSAMPLE.PRG, then compiling' SAYSIZE 0
  703. @ 2,0 DCSAY 'it to XSAMPLE.OBJ with the XPP command, then' SAYSIZE 0
  704. @ 3,0 DCSAY 'loading the compiled object dynamically with' SAYSIZE 0
  705. @ 4,0 DCSAY 'OBJ command and running the function XSAMPLE_RUN()' SAYSIZE 0
  706.  
  707. DCREAD GUI FIT BUTTONS DCGUI_BUTTON_OK MODAL ;
  708.    TITLE 'Compile/Run Example' TO lOk
  709.  
  710. RETURN lOk
  711. ENDTEXT
  712.  
  713. @ 2,0 DCSAY 'Enter the following commands at the Dot Prompt:' SAYSIZE 0
  714. @ 4,0 DCSAY '. XPP XSAMPLE' FONT '10.Courier Bold' SAYSIZE 0
  715. @ 5,0 DCSAY '. OBJ XSAMPLE' FONT '10.Courier Bold' SAYSIZE 0
  716. @ 6,0 DCSAY '. XSample_Run()' FONT '10.Courier Bold' SAYSIZE 0
  717. @ 7,0 DCSAY '. EXIT' FONT '10.Courier Bold' SAYSIZE 0
  718.  
  719. DCREAD GUI FIT PARENT @oDlg EXIT EVAL {|o|o:setPos({0,0})} ;
  720.    TITLE 'Instructions!!'
  721.  
  722. DC_Do('DC_Dot()')
  723.  
  724. oDlg:destroy()
  725.  
  726. RETURN nil
  727. *** END OF EXAMPLE ***
  728.  
  729. * ---------------------------- *
  730.  
  731. STATIC FUNCTION XSample_113
  732.  
  733. /*
  734. Demonstration of Runtime Pre-Processor # 1
  735. This example will pre-process a set of commands
  736. to their equivalent functions by using the
  737. DC_TRANSLATE() function.
  738. */
  739.  
  740. LOCAL GetList := {}, cText := '', cCrLf := Chr(13)+Chr(10), ;
  741.       aCommands, i, j, aTokens, aFunctions, nRow, nFunction, ;
  742.       nCommands
  743.  
  744. cText += 'USE COLLECT NEW VIA DBFNTX' + cCrLf
  745. cText += 'SET INDEX TO COLLECT1, COLLECT2' + cCrLf
  746. cText += 'GO TOP' + cCrLf
  747. cText += 'DO WHILE !Eof() .AND. Inkey() # K_ESC' + cCrLf
  748. cText += '  ? COLLECT->descrip, COLLECT->type' + cCrLf
  749. cText += '  SKIP' + cCrLf
  750. cText += 'ENDDO' + cCrLf
  751.  
  752. aCommands := DC_TokenArray( cText, cCrLf )
  753. nCommands := Len(aCommands) - 1
  754.  
  755. aFunctions := DC_Translate(cText)
  756.  
  757. @ 0,1 DCSAY 'Commands (Input):' FONT '12.Courier Bold' SAYSIZE 0
  758. FOR nRow := 1 TO nCommands
  759.   @ nRow,1 DCSAY aCommands[nRow] SAYSIZE 95 FONT '8.Courier New Bold' ;
  760.     COLOR GRA_CLR_BLUE, GRA_CLR_WHITE
  761. NEXT
  762.  
  763. @ nRow,1 DCSAY 'Functions (Output):' FONT '12.Courier Bold' ;
  764.    SAYSIZE 0
  765. nRow++
  766. nFunction := 1
  767. FOR nFunction := 1 TO Len(aFunctions)
  768.   aTokens := DC_TokenArray(aFunctions[nFunction], cCrLf)
  769.   FOR j := 1 TO Len(aTokens)
  770.     @ nRow, 1 DCSAY aTokens[j] SAYSIZE 95 FONT '8.Courier New Bold' ;
  771.       COLOR GRA_CLR_BLUE, GRA_CLR_WHITE
  772.     nRow++
  773.   NEXT j
  774. NEXT nFunction
  775.  
  776. DCREAD GUI FIT BUTTONS DCGUI_BUTTON_OK MODAL ;
  777.    TITLE 'Run-time Pre-Processor Example #1 (DC_Translate())'
  778.  
  779. RETURN nil
  780. *** END OF EXAMPLE ***
  781.  
  782. * ---------------------------- *
  783.  
  784. STATIC FUNCTION XSample_114
  785.  
  786. /*
  787. Demonstration of Runtime Pre-Processor # 2
  788. */
  789.  
  790. LOCAL GetList := {}, cCommand, oOutput, cStatements, cOutput, ;
  791.       GetOptions, cCrLf := Chr(13)+Chr(10)
  792.  
  793. cStatements := '#include "BOX.CH"' + cCrLf + '#define HANDLE 1234567'
  794. cOutput := ''
  795. cCommand := Pad('? B_DOUBLE, B_SINGLE, HANDLE',200)
  796. @ 1,0 DCSAY 'Enter Preprocessor Statements:'
  797. @ 2,0 DCMULTILINE cStatements SIZE 80, 4 FONT '8.Courier'
  798. @ 6,0 DCSAY 'Enter a Command to Pre-Process:'
  799. @ 7,0 DCGET cCommand GETSIZE 80 ;
  800.       LOSTFOCUS {||_XSample_114(cStatements,cCommand,oOutput)}
  801. @ 8,0 DCSAY 'Pre-Processed Output:'
  802. @ 9,0 DCMULTILINE cOutput SIZE 80,8 EDITPROTECT {||.t.} ;
  803.       FONT '8.Courier New' OBJECT oOutput
  804. @18,0 DCPUSHBUTTON CAPTION '&Exit' SIZE 10,1.2 ;
  805.       ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,Getlist)}
  806. @18,12 DCPUSHBUTTON CAPTION '&Translate' SIZE 10,1.2 ;
  807.       ACTION {||_XSample_114(cStatements,cCommand,oOutput)}
  808. DCGETOPTIONS HILITEGETS GRA_CLR_RED SAYLEFTBOTTOM
  809. DCREAD GUI FIT MODAL TITLE 'Run-time Pre-Processor Example #2' ;
  810.       OPTIONS GetOptions
  811.  
  812. RETURN nil
  813.  
  814. * -----------------
  815.  
  816. STATIC FUNCTION _XSample_114( cStatements, cCommand, oOutput )
  817.  
  818. LOCAL nFunction, aTokens, j, cFunctions := '', aFunctions, ;
  819.       cCrLf := Chr(13)+Chr(10)
  820.  
  821. aFunctions := DC_Translate(cStatements + cCrlf + cCommand )
  822.  
  823. nFunction := 1
  824. FOR nFunction := 1 TO Len(aFunctions)
  825.   aTokens := DC_TokenArray(aFunctions[nFunction], cCrLf)
  826.   FOR j := 1 TO Len(aTokens)
  827.     IF !Empty(aTokens[j]) .AND. Left(aTokens[j],1) # '#'
  828.       cFunctions += aTokens[j] + cCrLf
  829.     ENDIF
  830.   NEXT j
  831. NEXT nFunction
  832.  
  833. oOutput:setData(cFunctions)
  834.  
  835. RETURN nil
  836. *** END OF EXAMPLE ***
  837.  
  838. * ---------------------------- *
  839.  
  840. STATIC FUNCTION XSample_115
  841.  
  842. /*
  843. Demonstration of Runtime Pre-Processor # 3
  844. Not completed!
  845. */
  846.  
  847. RETURN nil
  848. *** END OF EXAMPLE ***
  849.  
  850. * ---------------------------- *
  851.  
  852. STATIC FUNCTION XSample_116
  853.  
  854. /*
  855. Run the Program Manager.  This is a program
  856. dictionary for incorporating interpretive
  857. programs into an application.
  858. */
  859.  
  860. LOCAL GetList := {}, cProgram := Space(10)
  861.  
  862. @ 0,0 DCSAY 'Enter Program to Run' GET cProgram SAYSIZE 0 ;
  863.    POPUP {|c|DC_ProgPick(c)}
  864.  
  865. @ 2,0 DCPUSHBUTTON CAPTION '&Exit' SIZE 9,1.2 ;
  866.       ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}
  867.  
  868. @ 2,11 DCPUSHBUTTON CAPTION '&Manager' SIZE 9,1.2 ;
  869.       TOOLTIP 'Run the Program Manager' ;
  870.       ACTION {||DC_ProgMaint()}
  871.  
  872. @ 2,22 DCPUSHBUTTON CAPTION '&Run' SIZE 9,1.2 ;
  873.       TOOLTIP 'Run the Selected Program' ;
  874.       ACTION {||DC_Program(cProgram)} WHEN {||!Empty(cProgram)}
  875.  
  876. DCREAD GUI FIT MODAL TITLE 'Program Manager Example'
  877.  
  878. RETURN nil
  879. *** END OF EXAMPLE ***
  880.  
  881. * ---------------------------- *
  882.  
  883. STATIC FUNCTION XSample_117
  884.  
  885. /*
  886. Demonstration of Runtime Menu system # 1
  887. */
  888.  
  889. LOCAL GetList := {}, oDialog, cMenu, oMemo, cMemo := ''
  890.  
  891. @ 1,1 DCSAY 'This example will load a menu from the Menu Dictionary' ;
  892.       SAYSIZE 0 FONT '12.Arial'
  893. @ 2,1 DCSAY 'and write eXPress++ source code into the below memo.' ;
  894.       SAYSIZE 0 FONT '12.Arial'
  895.  
  896. @ 3,1 DCMULTILINE cMemo SIZE 90,15 OBJECT oMemo ;
  897.       FONT '8.Courier New'
  898. @19,1 DCPUSHBUTTON CAPTION '&Exit' SIZE 12,1.2 ;
  899.       ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}
  900.  
  901. @19,16 DCPUSHBUTTON CAPTION '&Pick Menu' SIZE 12,1.2 ;
  902.       ACTION {||cMenu := nil, _XSample_117(@cMenu,oMemo)}
  903.  
  904. @19,31 DCPUSHBUTTON CAPTION '&Menu Editor' SIZE 12,1.2 ;
  905.       ACTION {||DC_MenuEdit(@cMenu),_XSample_117(@cMenu,oMemo)}
  906.  
  907. DCREAD GUI FIT MODAL
  908.  
  909. RETURN nil
  910.  
  911. * ---------------
  912.  
  913. STATIC FUNCTION _XSample_117( cMenu, oMemo, lPick )
  914.  
  915. LOCAL aMenu, cSource
  916. aMenu := DC_MenuLoad(@cMenu)
  917. IF Valtype(aMenu) = 'A'
  918.   cSource := DC_MenuSource(aMenu)
  919.   oMemo:setData(cSource)
  920. ENDIF
  921. RETURN nil
  922. *** END OF EXAMPLE ***
  923.  
  924. * ---------------------------- *
  925.  
  926. STATIC FUNCTION XSample_118
  927.  
  928. /*
  929. Demonstration of Runtime Menu system # 2
  930. */
  931. LOCAL GetList := {}, oDialog
  932.  
  933. @ 0,1 DCSAY ''
  934. @ 2,1 DCSAY 'This example will install a menu at the top of this dialog' ;
  935.       SAYSIZE 0 FONT '12.Arial'
  936. @ 3,1 DCSAY 'window.  Select menu to install by clicking on Menu Button' ;
  937.       SAYSIZE 0 FONT '12.Arial'
  938.  
  939. @ 5,1 DCPUSHBUTTON CAPTION '&Exit' SIZE 9,1.2 ;
  940.       ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}
  941.  
  942. @ 5,12 DCPUSHBUTTON CAPTION '&Menu' SIZE 9,1.2 ;
  943.       ACTION {||_XSample_118(oDialog)}
  944.  
  945. DCREAD GUI FIT MODAL PARENT @oDialog
  946.  
  947. RETURN nil
  948.  
  949. * ---------------
  950.  
  951. STATIC FUNCTION _XSample_118( oDialog )
  952.  
  953. LOCAL aMenu
  954. aMenu := DC_MenuCompile(DC_MenuLoad())
  955. IF Valtype(aMenu) = 'A'
  956.   DC_MenuOSys( aMenu, oDialog )
  957. ENDIF
  958. RETURN nil
  959. *** END OF EXAMPLE ***
  960.  
  961. * ---------------------------- *
  962.  
  963. STATIC FUNCTION XSample_119
  964.  
  965. /*
  966. Run the Menu Editor/Manager.  This is a menu
  967. dictionary for incorporating data-driven menus
  968. into an application.
  969. */
  970.  
  971. LOCAL GetList := {}, cMenu := Space(10)
  972.  
  973. @ 0,0 DCSAY 'Enter Menu to Run' GET cMenu SAYSIZE 0 ;
  974.       POPUP {|c|DC_MenuPick(c)}
  975.  
  976. @ 2,0 DCPUSHBUTTON CAPTION '&Exit' SIZE 9,1.2 ;
  977.       ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}
  978.  
  979. @ 2,11 DCPUSHBUTTON CAPTION '&Manager' SIZE 9,1.2 ;
  980.       TOOLTIP 'Run the Menu Editor/Manager' ;
  981.       ACTION {||DC_MenuEdit(cMenu)}
  982.  
  983. @ 2,22 DCPUSHBUTTON CAPTION '&Run' SIZE 9,1.2 ;
  984.       TOOLTIP 'Run the Selected Menu' ;
  985.       ACTION {||DC_MenuRun(cMenu)} WHEN {||!Empty(cMenu)}
  986.  
  987. DCREAD GUI FIT MODAL TITLE 'Menu Editor/Manager Example'
  988.  
  989. RETURN nil
  990. *** END OF EXAMPLE ***
  991.  
  992.  
  993. STATIC FUNCTION XSample_120()
  994.  
  995. /* This sample shows how to make a GUI replacement
  996.    for MENU TO style menus that has a better
  997.    look and feel */
  998.  
  999. LOCAL GetList := {}, aButtons, GetOptions, i, oStatic, oMsgBoxStatic, ;
  1000.       oMsgBoxText, nTabGroup, nChoice := 0, nRow, aMenuItems
  1001.  
  1002. aMenuItems := { ;
  1003.    { 'Database','Open a New Database'}, ;
  1004.    { 'Index','Open a New Index File'}, ;
  1005.    { 'Pack Database','Remove all Deleted Records from current Database'}, ;
  1006.    { 'Customer Screen','Manage the Customer Database'}, ;
  1007.    { 'Invoice Screen','Manage the Invoice Database'}, ;
  1008.    { 'Exit','Quit the Program'}  ;
  1009.   }
  1010.  
  1011. @ 0,5 DCSTATIC TYPE XBPSTATIC_TYPE_RECESSEDBOX ;
  1012.   OBJECT oStatic SIZE 51, (Len(aMenuItems)*1.4) + .2
  1013.  
  1014. aButtons := Array(Len(aMenuItems))
  1015.  
  1016. nRow := .1
  1017. FOR i := 1 TO Len(aMenuItems)
  1018.  
  1019.   IF i = 1
  1020.     nTabGroup := XBP_BEGIN_GROUP
  1021.   ELSEIF i = Len(aMenuItems)
  1022.     nTabGroup := XBP_END_GROUP
  1023.   ELSE
  1024.     nTabGroup := XBP_WITHIN_GROUP
  1025.   ENDIF
  1026.  
  1027.   @ nRow,.6 DCPUSHBUTTON CAPTION Pad(aMenuItems[i,1],35) SIZE 50,1.3 ;
  1028.           ACTION _ActionBlock(i,@nChoice,GetList) ;
  1029.           TOOLTIP aMenuItems[i,2] ;
  1030.           FONT '10.Alaska Crt' ;
  1031.           PARENT oStatic ;
  1032.           ACCELKEY i + 48 ;
  1033.           TABSTOP  ;
  1034.           TABGROUP nTabGroup ;
  1035.           GOTFOCUS {|a,b,o|_Hilite(o,1)} ;
  1036.           LOSTFOCUS {|a,b,o|_Hilite(o,2)} ;
  1037.           OBJECT aButtons[i] ;
  1038.           MESSAGE IIF( Empty(aMenuItems[i,2]),Chr(255),aMenuItems[i,2]) ;
  1039.              INTO oMsgBoxText
  1040.  
  1041.   nRow += 1.4
  1042.  
  1043. NEXT
  1044.  
  1045. @ nRow + 1,0 DCSTATIC TYPE XBPSTATIC_TYPE_RECESSEDBOX ;
  1046.   OBJECT oMsgBoxStatic SIZE 60, 1.2
  1047.  
  1048. @ .1,5 DCSTATIC TYPE XBPSTATIC_TYPE_TEXT ;
  1049.   PARENT oMsgBoxStatic ;
  1050.   OBJECT oMsgBoxText ;
  1051.   FONT '12.Arial Bold' ;
  1052.   COLOR GRA_CLR_BLUE ;
  1053.   SIZE 58, .9 ;
  1054.   OPTIONS XBPSTATIC_TEXT_CENTER ;
  1055.   EVAL {|o|DC_CenterObject(o,oMsgBoxStatic)}
  1056.  
  1057. DCGETOPTIONS NOTITLEBAR NOBUSY
  1058.  
  1059. DCREAD GUI FIT MODAL OPTIONS GetOptions ;
  1060.    EVAL {||SetAppFocus(aButtons[1])}
  1061.  
  1062. DCMSGBOX 'You Chose Menu Selection #' + Alltrim(Str(nChoice))
  1063.  
  1064. RETURN nChoice
  1065.  
  1066. * -------------
  1067.  
  1068. STATIC FUNCTION _ActionBlock( i, nChoice, GetList )
  1069.  
  1070. RETURN {||nChoice := i, DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}
  1071.  
  1072. * --------------
  1073.  
  1074. STATIC FUNCTION _Hilite( o, nMode )
  1075.  
  1076. LOCAL oPS, nCol, nRow, nWidth, nHeight, aAttr[ GRA_AL_COUNT]
  1077.  
  1078. IF o:status() <= 0
  1079.   RETURN nil
  1080. ENDIF
  1081.  
  1082. nCol := o:currentpos()[1]
  1083. nRow := o:currentpos()[2]
  1084. nWidth := o:currentsize()[1]
  1085. nHeight := o:currentsize()[2]
  1086.  
  1087. IF IsMethod(o:SetParent(),'LOCKPS')
  1088.   oPS := o:setParent():lockPS()
  1089. ENDIF
  1090.  
  1091. IF nMode = 1
  1092.   aAttr[ GRA_AL_COLOR ] := GRA_CLR_RED
  1093. ELSE
  1094.   aAttr[ GRA_AL_COLOR ] := GRA_CLR_PALEGRAY
  1095. ENDIF
  1096. GraSetAttrLine( oPS, aAttr )
  1097. GraBox( oPS, {nCol-1,nRow-1}, {nCol+nWidth,nRow+nHeight}, GRA_OUTLINE )
  1098.  
  1099. IF Valtype(oPS) = 'O'
  1100.   o:setParent():unlockPS(oPS)
  1101. ENDIF
  1102.  
  1103. RETURN nil
  1104. *** END OF EXAMPLE ***
  1105.  
  1106. * --------------------
  1107.  
  1108. STATIC FUNCTION XSample_121()
  1109.  
  1110. /* This is an example of how to use DCSTATUSBAR to create
  1111.    locked status areas around the perimiter of a dialog window */
  1112.  
  1113. LOCAL GetList := {}, GetOptions, oMenuBar, oFileMenu, oToolBottom, ;
  1114.       oDlg, oDrawingArea, oStatBottom, bReSize, oMsgBox, oProgress, ;
  1115.       oMsgStatic, lTesting := .f., oInsStatic, oNumStatic, ;
  1116.       oCapsStatic, oStatTop, oToolTop, oStatTop2, oToolTop2, ;
  1117.       lHideStatus2 := .f., lHideStatus3 := .f., lHideStatus4 := .f., ;
  1118.       lHideStatus5 := .f., oStatLeft1, oStatLeft2, oStatRight1, ;
  1119.       oToolLeft1, oToolleft2, oToolRight1, oProgressStatic, ;
  1120.       oStatRight2, oToolRight2, lHideStatus6 := .f., lHideStatus7 := .f.
  1121.  
  1122. DCMENUBAR oMenuBar
  1123.  
  1124.   DCSUBMENU oFileMenu CAPTION 'File' ;
  1125.     MESSAGE 'File Options' INTO oMsgBox ;
  1126.     PARENT oMenuBar
  1127.  
  1128.     DCMENUITEM CAPTION 'Browse' ;
  1129.       MESSAGE 'Browse the Documentation Database' ;
  1130.       INTO oMsgBox ;
  1131.       PARENT oFileMenu ;
  1132.       ACTION {|o|o:=Thread():new(), ;
  1133.               o:start({||BrowseWindow(oDlg:drawingArea,oMsgBox,;
  1134.                          oProgress,@lTesting,GetList)}) }
  1135.  
  1136.     DCMENUITEM CAPTION 'Exit' ;
  1137.       MESSAGE 'Quit this Program' INTO oMsgBox ;
  1138.       PARENT oFileMenu ;
  1139.       ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}
  1140.  
  1141. // Top Statusbar #1 with Toolbar
  1142. DCSTATUSBAR oStatTop HEIGHT 20 ALIGN DCGUI_ALIGN_TOP SPACING 0
  1143.  
  1144. @ 0,0 DCTOOLBAR oToolTop SIZE 400,20 BUTTONSIZE 100,20 ;
  1145.       TYPE XBPSTATIC_TYPE_RAISEDBOX PARENT oStatTop PIXEL
  1146.  
  1147. DCADDBUTTON CAPTION 'Top ToolBar 2' ;
  1148.   ACTION {||lHideStatus2 := !lHideStatus2, ;
  1149.             DC_GetRefresh(GetList), ;
  1150.             DC_StatusBarRePaint(oDlg)} ;
  1151.   PARENT oToolTop PIXEL
  1152.  
  1153. DCADDBUTTON CAPTION 'Bottom StatusBar' ;
  1154.   ACTION {||lHideStatus3 := !lHideStatus3, ;
  1155.             DC_GetRefresh(GetList), ;
  1156.             DC_StatusBarRePaint(oDlg)} ;
  1157.   PARENT oToolTop PIXEL
  1158.  
  1159. DCADDBUTTON CAPTION 'Left ToolBar #1' ;
  1160.   ACTION {||lHideStatus4 := !lHideStatus4, ;
  1161.             DC_GetRefresh(GetList), ;
  1162.             DC_StatusBarRePaint(oDlg)} ;
  1163.   PARENT oToolTop PIXEL
  1164.  
  1165. DCADDBUTTON CAPTION 'Left ToolBar #2' ;
  1166.   ACTION {||lHideStatus5 := !lHideStatus5, ;
  1167.             DC_GetRefresh(GetList), ;
  1168.             DC_StatusBarRePaint(oDlg)} ;
  1169.   PARENT oToolTop PIXEL
  1170.  
  1171. DCADDBUTTON CAPTION 'Right ToolBar #1' ;
  1172.   ACTION {||lHideStatus6 := !lHideStatus6, ;
  1173.             DC_GetRefresh(GetList), ;
  1174.             DC_StatusBarRePaint(oDlg)} ;
  1175.   PARENT oToolTop PIXEL
  1176.  
  1177. DCADDBUTTON CAPTION 'Right ToolBar #2' ;
  1178.   ACTION {||lHideStatus7 := !lHideStatus7, ;
  1179.             DC_GetRefresh(GetList), ;
  1180.             DC_StatusBarRePaint(oDlg)} ;
  1181.   PARENT oToolTop PIXEL
  1182.  
  1183. // Top Statusbar #2 (Hideable) with toolbar
  1184. DCSTATUSBAR oStatTop2 HEIGHT 20 ALIGN DCGUI_ALIGN_TOP ;
  1185.    HIDE {||lHideStatus2}
  1186.  
  1187. @ 0,0 DCTOOLBAR oToolTop2 SIZE 400,20 BUTTONSIZE 50,20 ;
  1188.       TYPE XBPSTATIC_TYPE_RAISEDBOX PARENT oStatTop2 PIXEL
  1189.  
  1190. DCADDBUTTON CAPTION 'Button4' ;
  1191.   ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)} ;
  1192.   PARENT oToolTop2 PIXEL
  1193.  
  1194. DCADDBUTTON CAPTION 'Button5' ;
  1195.   ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)} ;
  1196.   PARENT oToolTop2 PIXEL
  1197.  
  1198. DCADDBUTTON CAPTION 'Button6' ;
  1199.   ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)} ;
  1200.   PARENT oToolTop2 PIXEL
  1201.  
  1202. // Bottom Statusbar (Hideable) with message, scrollbar, buttons, key status
  1203. DCSTATUSBAR oStatBottom HEIGHT 28 ALIGN DCGUI_ALIGN_BOTTOM ;
  1204.    HIDE {||lHideStatus3}
  1205.  
  1206. @ 3,0 DCSTATIC TYPE XBPSTATIC_TYPE_RECESSEDBOX ;
  1207.       SIZE 300,20 ;
  1208.       PARENT oStatBottom PIXEL OBJECT oMsgStatic
  1209.  
  1210. @ 2,2 DCMESSAGEBOX TYPE XBPSTATIC_TYPE_TEXT ;
  1211.       SIZE 300,20 MOTION ;
  1212.       COLOR GRA_CLR_BLUE, GRA_CLR_BACKGROUND ;
  1213.       OBJECT oMsgBox PARENT oMsgStatic PIXEL
  1214.  
  1215. @ 3,0 DCSTATIC TYPE XBPSTATIC_TYPE_RECESSEDBOX ;
  1216.       OBJECT oProgressStatic ;
  1217.       SIZE 100,20 PARENT oStatBottom PIXEL
  1218.  
  1219. @ 2,3 DCPROGRESS oProgress ;
  1220.       COLOR GRA_CLR_DARKRED, GRA_CLR_BACKGROUND ;
  1221.       TYPE XBPSTATIC_TYPE_TEXT ;
  1222.       SIZE 96,16 PARENT oProgressStatic PIXEL
  1223.  
  1224. @ 3,0 DCTOOLBAR oToolBottom SIZE 126,20 BUTTONSIZE 40,20 ;
  1225.       TYPE XBPSTATIC_TYPE_RECESSEDBOX PARENT oStatBottom PIXEL
  1226.  
  1227. DCADDBUTTON CAPTION '&Exit' ;
  1228.   ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)} ;
  1229.   PARENT oToolBottom PIXEL
  1230.  
  1231. DCADDBUTTON TYPE XBPSTATIC_TYPE_RAISEDBOX SIZE 3,22 ;
  1232.   PARENT oToolBottom PIXEL
  1233.  
  1234. DCADDBUTTON CAPTION '&Cancel' ;
  1235.   ACTION {||lTesting := .f.} ;
  1236.   WHEN {||lTesting} ;
  1237.   PARENT oToolBottom PIXEL
  1238.  
  1239. DCADDBUTTON TYPE XBPSTATIC_TYPE_RAISEDBOX SIZE 3,22 ;
  1240.   PARENT oToolBottom PIXEL
  1241.  
  1242. DCADDBUTTON CAPTION '&Browse' ;
  1243.   PARENT oToolBottom ;
  1244.   ACTION {|o|o:=Thread():new(), ;
  1245.     o:start({||BrowseWindow(oDlg:drawingArea,oMsgBox:ChildList()[1], ;
  1246.                 oProgress,@lTesting,GetList)}) } ;
  1247.   PIXEL
  1248.  
  1249. @ 3,0 DCSTATIC TYPE XBPSTATIC_TYPE_RECESSEDBOX ;
  1250.       SIZE 30,20 PARENT oStatBottom PIXEL OBJECT oCapsStatic
  1251.  
  1252. @ 1,1 DCSAY '' PARENT oCapsStatic ID 'CAPSLOCK' ;
  1253.       SAYSIZE 28,18 SAYCENTER PIXEL
  1254.  
  1255. @ 3,0 DCSTATIC TYPE XBPSTATIC_TYPE_RECESSEDBOX ;
  1256.       SIZE 30,20 PARENT oStatBottom PIXEL OBJECT oNumStatic
  1257.  
  1258. @ 1,1 DCSAY '' PARENT oNumStatic ID 'NUMLOCK' ;
  1259.       SAYSIZE 28,18 SAYCENTER PIXEL
  1260.  
  1261. @ 3,0 DCSTATIC TYPE XBPSTATIC_TYPE_RECESSEDBOX ;
  1262.       SIZE 30,20 PARENT oStatBottom PIXEL OBJECT oInsStatic
  1263.  
  1264. @ 1,1 DCSAY '' PARENT oInsStatic ID 'INSERT' ;
  1265.       SAYSIZE 28,18 SAYCENTER PIXEL
  1266.  
  1267. // Left Statusbar #1 (Hideable) with toolbar
  1268. DCSTATUSBAR oStatLeft1 WIDTH 45 ALIGN DCGUI_ALIGN_LEFT ;
  1269.    HIDE {||lHideStatus4} TYPE XBPSTATIC_TYPE_TEXT
  1270.  
  1271. @ 0,0 DCTOOLBAR oToolLeft1 SIZE 45,1000 BUTTONSIZE 45,20 ;
  1272.       TYPE XBPSTATIC_TYPE_RAISEDBOX PARENT oStatLeft1 PIXEL
  1273.  
  1274. DCADDBUTTON CAPTION '1-Test1' PARENT oToolLeft1 PIXEL
  1275. DCADDBUTTON CAPTION '1-Test2' PARENT oToolLeft1 PIXEL
  1276. DCADDBUTTON CAPTION '1-Test3' PARENT oToolLeft1 PIXEL
  1277. DCADDBUTTON CAPTION '1-Test4' PARENT oToolLeft1 PIXEL
  1278.  
  1279. // Left Statusbar #2 (Hideable) with toolbar
  1280. DCSTATUSBAR oStatLeft2 WIDTH 45 ALIGN DCGUI_ALIGN_LEFT ;
  1281.    HIDE {||lHideStatus5} TYPE XBPSTATIC_TYPE_TEXT
  1282.  
  1283. @ 0,0 DCTOOLBAR oToolLeft2 SIZE 45,1000 BUTTONSIZE 45,20 ;
  1284.       TYPE XBPSTATIC_TYPE_RAISEDBOX PARENT oStatLeft2 PIXEL
  1285.  
  1286. DCADDBUTTON CAPTION '2-Test1' PARENT oToolLeft2 PIXEL
  1287. DCADDBUTTON CAPTION '2-Test2' PARENT oToolLeft2 PIXEL
  1288. DCADDBUTTON CAPTION '2-Test3' PARENT oToolLeft2 PIXEL
  1289. DCADDBUTTON CAPTION '2-Test4' PARENT oToolLeft2 PIXEL
  1290.  
  1291. // Right Statusbar #1 (Hideable) with toolbar
  1292. DCSTATUSBAR oStatRight1 WIDTH 30 ALIGN DCGUI_ALIGN_RIGHT ;
  1293.    HIDE {||lHideStatus6} TYPE XBPSTATIC_TYPE_TEXT
  1294.  
  1295. @ 0,0 DCTOOLBAR oToolRight1 SIZE 30,1000 BUTTONSIZE 30,25 ;
  1296.       TYPE XBPSTATIC_TYPE_RAISEDBOX PARENT oStatRight1 PIXEL
  1297.  
  1298. DCADDBUTTON CAPTION BITMAP_EXECUTE_M PARENT oToolRight1 PIXEL
  1299. DCADDBUTTON CAPTION BITMAP_UNDO_M PARENT oToolRight1 PIXEL
  1300. DCADDBUTTON CAPTION BITMAP_REDO_M PARENT oToolRight1 PIXEL
  1301. DCADDBUTTON CAPTION BITMAP_BOLD_M PARENT oToolRight1 PIXEL
  1302. DCADDBUTTON CAPTION BITMAP_ITALIC_M PARENT oToolRight1 PIXEL
  1303. DCADDBUTTON CAPTION BITMAP_UNDERLINE_M PARENT oToolRight1 PIXEL
  1304. DCADDBUTTON CAPTION BITMAP_CODEWRITE_M PARENT oToolRight1 PIXEL
  1305. DCADDBUTTON CAPTION BITMAP_CONFIG_M PARENT oToolRight1 PIXEL
  1306. DCADDBUTTON CAPTION BITMAP_DESIGN_M PARENT oToolRight1 PIXEL
  1307. DCADDBUTTON CAPTION BITMAP_COMMENT_M PARENT oToolRight1 PIXEL
  1308.  
  1309. // Right Statusbar #2 (Hideable) with toolbar
  1310. DCSTATUSBAR oStatRight2 WIDTH 30 ALIGN DCGUI_ALIGN_RIGHT ;
  1311.    HIDE {||lHideStatus7} TYPE XBPSTATIC_TYPE_TEXT
  1312.  
  1313. @ 0,0 DCTOOLBAR oToolRight2 SIZE 30,1000 BUTTONSIZE 30,25 ;
  1314.       TYPE XBPSTATIC_TYPE_RAISEDBOX PARENT oStatRight2 PIXEL
  1315.  
  1316. DCADDBUTTON CAPTION BITMAP_BROWSER_M PARENT oToolRight2 PIXEL
  1317. DCADDBUTTON CAPTION BITMAP_CHECKBOX_M PARENT oToolRight2 PIXEL
  1318. DCADDBUTTON CAPTION BITMAP_LISTBOX_M PARENT oToolRight2 PIXEL
  1319. DCADDBUTTON CAPTION BITMAP_DIALOG_M PARENT oToolRight2 PIXEL
  1320. DCADDBUTTON CAPTION BITMAP_EDIT_M PARENT oToolRight2 PIXEL
  1321. DCADDBUTTON CAPTION BITMAP_SPINBUTTON_M PARENT oToolRight2 PIXEL
  1322. DCADDBUTTON CAPTION BITMAP_MLE_M PARENT oToolRight2 PIXEL
  1323. DCADDBUTTON CAPTION BITMAP_GET_M PARENT oToolRight2 PIXEL
  1324.  
  1325.  
  1326. DCHOTKEY xbeK_INS ACTION {||ReadInsert(!ReadInsert())}
  1327.  
  1328. DCGETOPTIONS WINDOWWIDTH 610 ;
  1329.              WINDOWHEIGHT 400
  1330.  
  1331. DCREAD GUI OPTIONS GetOptions ;
  1332.    PARENT @oDlg ;
  1333.    TITLE 'Status Bar Example' ;
  1334.    EVAL {|o|SetTimerEvent(100,{||_UpdateStats(GetList)}) }
  1335.  
  1336. SetTimerEvent(0)
  1337.  
  1338. RETURN nil
  1339.  
  1340. * ------------------
  1341.  
  1342. STATIC FUNCTION _UpdateStats( GetList )
  1343.  
  1344. LOCAL oCapsLock := DC_GetObject(GetList,'CAPSLOCK')
  1345. LOCAL oNumLock  := DC_GetObject(GetList,'NUMLOCK')
  1346. LOCAL oInsert   := DC_GetObject(GetList,'INSERT')
  1347. LOCAL lCaps     := AppKeystate( VK_CAPITAL, .T. )
  1348. LOCAL lNum      := AppKeystate( VK_NUMLOCK, .T. )
  1349.  
  1350. IF lNum == APPKEY_PRESSED
  1351.   oNumlock:SetCaption( "Num" )
  1352. ELSE
  1353.   oNumlock:SetCaption( "" )
  1354. ENDIF
  1355. IF lCaps == APPKEY_PRESSED
  1356.   oCapslock:SetCaption( "Caps" )
  1357. ELSE
  1358.   oCapslock:SetCaption( "" )
  1359. ENDIF
  1360. IF ReadInsert()
  1361.   oInsert:SetCaption( "Ins" )
  1362. ELSE
  1363.   oInsert:SetCaption( "Ovr" )
  1364. ENDIF
  1365.  
  1366. RETURN nil
  1367.  
  1368. * ------------
  1369.  
  1370. STATIC FUNCTION BrowseWindow( oDlg, oMsgBox, oProgress, ;
  1371.                 lTesting, aMainGetList )
  1372.  
  1373. LOCAL GetList := {}, oBrowse, GetOptions
  1374.  
  1375. IF !File('..\XDOC\EXPRESS.DBF')
  1376.   DC_MsgBox({'Sorry.  The database required to show this feature',;
  1377.              'is not included in the demonstration version', ;
  1378.              'or the ..\XDOC\EXPRESS.DBF file does not exist'})
  1379.   RETURN nil
  1380. ENDIF
  1381.  
  1382. SET DEFA TO ..\XDOC
  1383. USE EXPRESS VIA FOXCDX SHARED ALIAS 'XDOC'
  1384. SET INDEX TO EXPRESS.CDX
  1385. OrdSetFocus('COMMAND')
  1386. SET DEFA TO
  1387.  
  1388. @ 0,0 DCSAY ''
  1389. @ 1,0 DCBROWSE oBrowse ALIAS 'XDOC' SIZE 50, 8
  1390.  
  1391. DCBROWSECOL DATA {||XDOC->command} HEADER 'Command' ;
  1392.    PARENT oBrowse ;
  1393.    MESSAGE 'This is the Command, Function or Class' ;
  1394.    INTO oMsgBox
  1395.  
  1396. DCBROWSECOL DATA {||XDOC->short} HEADER 'Short' ;
  1397.    PARENT oBrowse ;
  1398.    MESSAGE 'This is the Short Description' ;
  1399.    INTO oMsgBox
  1400.  
  1401. DCBROWSECOL DATA {||XDOC->type} HEADER 'Type' ;
  1402.    PARENT oBrowse ;
  1403.    MESSAGE 'This is the Type of Help Item' ;
  1404.    INTO oMsgBox
  1405.  
  1406. DCBROWSECOL DATA {||XDOC->module} HEADER 'Module' ;
  1407.    PARENT oBrowse ;
  1408.    MESSAGE 'This is the name of the Module containing this item' ;
  1409.    INTO oMsgBox
  1410.  
  1411. DCBROWSECOL DATA {||XDOC->see_also} HEADER 'See Also' ;
  1412.    PARENT oBrowse ;
  1413.    MESSAGE 'This is a list of related items' ;
  1414.    INTO oMsgBox
  1415.  
  1416. @ 9.5,40 DCPUSHBUTTON CAPTION 'Test' SIZE 10,1.2 ;
  1417.   TOOLTIP 'Test all the records in the database' ;
  1418.   WHEN {||!lTesting} ;
  1419.   TITLE 'eXPress++ Documentation' ;
  1420.   ACTION {||_TestRecords(oMsgBox,oProgress,@lTesting,aMainGetList)}
  1421.  
  1422. DCHOTKEY xbeK_INS ACTION {||ReadInsert(!ReadInsert())}
  1423.  
  1424. DCGETOPTIONS AUTORESIZE
  1425.  
  1426. DCREAD GUI FIT ;
  1427.    OPTIONS GetOptions ;
  1428.    APPWINDOW oDlg ;
  1429.    TITLE 'eXPress++ Help File'
  1430.  
  1431. RETURN nil
  1432.  
  1433. * -------------
  1434.  
  1435. STATIC FUNCTION _TestRecords( oMsgBox, oProgress, lTesting, aMainGetList )
  1436.  
  1437. LOCAL nRecNo := RecNo(), nCount
  1438.  
  1439. lTesting := .t.
  1440. DC_GetRefresh(aMainGetList)
  1441. oMsgBox:setCaption('Test in Progress...')
  1442. GO TOP
  1443. nCount := 0
  1444. DO WHILE !Eof() .AND. lTesting
  1445.   DC_AppEvent(@lTesting,0,.01)
  1446.   DC_GetProgress( oProgress, nCount++, RecCount() )
  1447.   Sleep(1)
  1448.   // .. put test code here
  1449.   SKIP
  1450. ENDDO
  1451. oMsgBox:setCaption('Test Completed!  No Errors!')
  1452.  
  1453. DC_GetProgress( oProgress, -1, 0 ) // Clear progress box
  1454.  
  1455. GO nRecNo
  1456. lTesting := .f.
  1457. DC_GetRefresh(aMainGetList)
  1458.  
  1459. RETURN nil
  1460. *** END OF EXAMPLE ***
  1461.  
  1462. * ----------------
  1463.  
  1464. STATIC FUNCTION XSample_122()
  1465.  
  1466. /* This example shows how to use DC_WorkTree() to display
  1467.    a Tree-View browse of all open work areas */
  1468.  
  1469. dbeSetDefault('DBFNTX')
  1470. USE CUSTOMER INDEX CUSTOMER
  1471. USE INVOICE INDEX INVOICE NEW
  1472. SET RELATION TO INVOICE->cust_nmbr INTO customer
  1473. USE INVITEMS INDEX INVITEMS NEW
  1474. SET RELATION TO INVITEMS->inv_nmbr INTO invoice
  1475. IF File('..\XDOC\EXPRESS.DBF')
  1476.   SET DEFA TO ..\XDOC
  1477.   USE EXPRESS VIA FOXCDX SHARED ALIAS 'XDOC' NEW
  1478.   SET INDEX TO EXPRESS.CDX
  1479.   SET DEFA TO
  1480. ENDIF
  1481.  
  1482. DC_WorkTree()
  1483.  
  1484. RETURN nil
  1485. *** END OF EXAMPLE ***
  1486.  
  1487. * ----------------
  1488.  
  1489. STATIC FUNCTION XSample_123()
  1490.  
  1491. /* This is an example of a Shortcut Bar that can be
  1492.    anchored to the top or bottom of the DeskTop.
  1493.    This function may be started in another thread. */
  1494.  
  1495. LOCAL GetList := {}, oToolBar, GetOptions, oSay, oSubMenu, ;
  1496.       oShortCut, bRbDown
  1497.  
  1498. bRbDown := {|a,b,o|oSubMenu:PopUp(o, a, 2, ;
  1499.                    XBPMENU_PU_DEFAULT + XBPMENU_PU_MOUSE_RBDOWN ) }
  1500.  
  1501. @ 2,2 DCTOOLBAR oToolBar TYPE XBPSTATIC_TYPE_TEXT SIZE 9*20,20 ;
  1502.       BUTTONSIZE 20,20 PIXEL
  1503.  
  1504. DCSETPARENT TO oToolBar
  1505.  
  1506. DCADDBUTTON CAPTION '1' FONT '12.Arial Bold' ;
  1507.    ACTION {||MsgBox('Button 1 pressed')} PIXEL ;
  1508.    TOOLTIP 'Run Program #1'
  1509.  
  1510. DCADDBUTTON CAPTION '2' FONT '12.Arial Bold' ;
  1511.    ACTION {||MsgBox('Button 2 pressed')} PIXEL ;
  1512.    TOOLTIP 'Run Program #1'
  1513.  
  1514. DCADDBUTTON CAPTION '3' FONT '12.Arial Bold' ;
  1515.    ACTION {||MsgBox('Button 3 pressed')} PIXEL ;
  1516.    TOOLTIP 'Run Program #1'
  1517.  
  1518. DCADDBUTTON CAPTION '4' FONT '12.Arial Bold' ;
  1519.    ACTION {||MsgBox('Button 4 pressed')} PIXEL ;
  1520.    TOOLTIP 'Run Program #1'
  1521.  
  1522. DCADDBUTTON CAPTION '5' FONT '12.Arial Bold' ;
  1523.    ACTION {||MsgBox('Button 5 pressed')} PIXEL ;
  1524.    TOOLTIP 'Run Program #1'
  1525.  
  1526. DCADDBUTTON CAPTION '6' FONT '12.Arial Bold' ;
  1527.    ACTION {||MsgBox('Button 6 pressed')} PIXEL ;
  1528.    TOOLTIP 'Run Program #1'
  1529.  
  1530. DCADDBUTTON CAPTION '7' FONT '12.Arial Bold' ;
  1531.    ACTION {||MsgBox('Button 6 pressed')} PIXEL ;
  1532.    TOOLTIP 'Run Program #1'
  1533.  
  1534. DCADDBUTTON TYPE XBPSTATIC_TYPE_TEXT PIXEL SIZE 20,20
  1535.  
  1536. DCADDBUTTON CAPTION 'X' FONT '12.Arial Bold' ;
  1537.    ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)} PIXEL ;
  1538.    TOOLTIP 'Close this ShortCut Bar'
  1539.  
  1540. DCSETPARENT TO
  1541.  
  1542. DCSUBMENU oSubMenu
  1543.  
  1544.   DCMENUITEM CAPTION 'Top' PARENT oSubMenu ;
  1545.       ACTION {||oShortCut:setPos({0,AppDesktop():currentSize()[2] - ;
  1546.                 oShortCut:currentSize()[2]}) }
  1547.  
  1548.   DCMENUITEM CAPTION 'Bottom' PARENT oSubMenu ;
  1549.       ACTION {||oShortCut:setPos({0,0}) }
  1550.  
  1551. @ 2, 9*20 + 20 DCSAY 'My ShortCut Bar' OBJECT oSay ;
  1552.   COLOR GRA_CLR_BLUE FONT '12.Arial Italic' SAYSIZE 0 PIXEL ;
  1553.   TOOLTIP 'Right-Click for Menu' ;
  1554.   EVAL {|o|o:rbDown := bRbDown}
  1555.  
  1556. DCGETOPTIONS ;
  1557.    WINDOWWIDTH AppDesktop():currentSize()[1] ;
  1558.    WINDOWHEIGHT 30 ;
  1559.    NOTRANSLATE ;
  1560.    HIDE ;
  1561.    NOESCAPEKEY ;
  1562.    NOTITLEBAR ;
  1563.    TOOLTIPCOLOR GRA_CLR_BLACK, GRA_CLR_YELLOW
  1564.  
  1565. DCREAD GUI ;
  1566.    TITLE 'ShortCut Bar' ;
  1567.    PARENT @oShortCut ;
  1568.    OPTIONS GetOptions ;
  1569.    EVAL {|o| o:setPos({0,AppDesktop():currentSize()[2] - ;
  1570.              o:currentSize()[2]}), ;
  1571.              o:drawingArea:rbDown := bRbDown, ;
  1572.              o:show()}
  1573.  
  1574. RETURN nil
  1575. *** END OF EXAMPLE ***
  1576.  
  1577. * ----------------
  1578.  
  1579. STATIC FUNCTION XSample_124()
  1580.  
  1581. /* This sample shows how to use the built-in design
  1582.    features to move and size objects and update the
  1583.    the original source code */
  1584.  
  1585. LOCAL lOk, cText := '', GetList := {}, cCrLf := Chr(13)+Chr(10), ;
  1586.       GetOptions
  1587.  
  1588. cText += '#include "dcdialog.ch"' + cCrLf
  1589. cText += '#include "appevent.ch"' + cCrLf
  1590. cText += 'FUNCTION XSample_Test()' + cCrLf
  1591. cText += 'LOCAL cMemo1 := "", cMemo2 := "", GetList :={}, GetOptions, lOk' + cCrLf
  1592. cText += "@ 0,0 DCSAY 'This dialog was created by saving some text'" + cCrLf
  1593. cText += "@ 1,0 DCSAY 'to a file named XSAMPLE.PRG, then compiling it'" + cCrLf
  1594. cText += "@ 2,0 DCSAY 'and loading it with DC_COMPILE() / DC_OBJLOAD().'" + cCrLf
  1595. cText += "@ 3,0 DCSAY 'Press the ALT-D key to enable design mode, then'" + cCrLf
  1596. cText += "@ 4,0 DCSAY 'move/size objects, press ESCAPE and save changes.'" + cCrLf
  1597. cText += "@ 6,0 DCMULTILINE cMemo1 SIZE 30,6" + cCrLf
  1598. cText += "@ 6,40 DCMULTILINE cMemo2 SIZE 30,6" + cCrLf
  1599. cText += cCrLf
  1600. cText += "DCGETOPTIONS DESIGN HOTKEY xbeK_ALT_D SOURCECODE 'XSAMPLE.PRG'" +cCrLf
  1601. cText += "DCREAD GUI FIT ADDBUTTONS MODAL ;" + cCrLf
  1602. cText += "  OPTIONS GetOptions TITLE 'Design' TO lOk" + cCrLf
  1603. cText += "RETURN lOk" + cCrLf
  1604.  
  1605. MemoWrit('XSAMPLE.PRG',cText)
  1606.  
  1607. @ 0,0 DCSAY 'Clicking on RUN will run the below code with the interpreter.'
  1608. @ 1,0 DCSAY 'When the dialog starts, press ALT-D to enable design mode,'
  1609. @ 2,0 DCSAY 'Then move and size some objects, press ESCAPE and save the'
  1610. @ 3,0 DCSAY 'source code.  When you return to this dialog the updated source'
  1611. @ 4,0 DCSAY 'will be loaded into the source window.'
  1612.  
  1613. @ 6,0 DCMULTILINE cText SIZE 80,10 FONT '8.Courier' EDITPROTECT {||.t.}
  1614.  
  1615. @17,0 DCPUSHBUTTON CAPTION '&Exit' SIZE 9,1.2 ;
  1616.    ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}
  1617.  
  1618. @17,11 DCPUSHBUTTON CAPTION '&Run' SIZE 9,1.2 ;
  1619.    ACTION {||DC_Compile('XSAMPLE'), ;
  1620.              DC_ObjLoad('XSAMPLE'), ;
  1621.              DC_Do('XSample_Test()'), ;
  1622.              cText := MemoRead('XSAMPLE.PRG'), ;
  1623.              DC_GetRefresh(GetList) }
  1624.  
  1625. DCGETOPTIONS SAYFONT '12.Arial' SAYWIDTH 0
  1626. DCREAD GUI FIT TO lOk MODAL TITLE 'Design Example #1' OPTIONS GetOptions
  1627.  
  1628. RETURN nil
  1629. *** END OF EXAMPLE ***
  1630.  
  1631. * -----------------
  1632.  
  1633. STATIC FUNCTION XSample_125()
  1634.  
  1635. /* This is an example of DCSAY..GETs with various size fonts
  1636.    demonstrating how the GET window is automatically sized. */
  1637.  
  1638. LOCAL GetList := {}, GetOptions, dGet, cGet, nGet, lGet, cVar := Space(15)
  1639.  
  1640. dGet := Date()
  1641. nGet := 12345.67
  1642. cGet := '01234567890123456789'
  1643. @ 1,1 DCSAY 'Date - GETSIZE 10' GET dGet GETSIZE 10
  1644. @ 3,1 DCSAY 'Date' GET dGet
  1645. @ 5,1 DCSAY 'Date  Large Font' GET dGet GETFONT '12.Courier'
  1646. @ 7,1 DCSAY 'Date  Large Font' GET dGet GETFONT '12.Courier' ;
  1647.       POPUP {|d|DC_PopDate(d)}
  1648.  
  1649. @ 8,1 DCSAY 'String - GETSIZE 10' GET cGet GETSIZE 10
  1650. @ 9,1 DCSAY 'String' GET cGet
  1651. @11,1 DCSAY 'String Large Font' GET cGet GETFONT '18.Alaska Crt'
  1652.  
  1653. @13,1 DCSAY 'Numeric - GETSIZE 10' GET nGet GETSIZE 10
  1654. @15,1 DCSAY 'Numeric' GET nGet PICT '99999.99'
  1655. @17,1 DCSAY 'Numeric Large Font' GET nGet GETFONT '14.Courier New Bold'
  1656. @19,1 DCSAY 'Numeric Large Font' GET nGet GETFONT '14.Courier New Bold' ;
  1657.       POPUP {|n|DC_PopCalc(n)}
  1658.  
  1659. DC_GetPopupCaption({'12.Alaska Crt',BITMAP_PICKLIST,1})
  1660.  
  1661. DCGETOPTIONS SAYRIGHT SAYWIDTH 150
  1662.  
  1663. DCREAD GUI FIT ADDBUTTONS OPTIONS GetOptions
  1664.  
  1665. RETURN nil
  1666. *** END OF EXAMPLE ***
  1667.  
  1668. * -----------------
  1669.  
  1670. STATIC FUNCTION XSample_126()
  1671.  
  1672. /* This is an example of how to use the DCGRUMPBROW command.
  1673.    DCGRUMPBROW is an emulation of Greg Lief's GrumpBrow for
  1674.    Clipper */
  1675.  
  1676. LOCAL GetList := {}, cBrowForm := '', lOk, cScreen, aWidths, i
  1677. LOCAL cOptions := SPACE(14), xcName, xcIndex1, xcIndex2
  1678. LOCAL nRow, nCol, nCount := 0, lPackForm, oScreen
  1679. LOCAL aExitKeys := { K_ESC, K_ENTER } // Grumpbrow Exit Triggers
  1680.  
  1681. LOCAL aFormlary := ;
  1682.    {'NDC','COMPANY','GENERIC','BRAND_NAME','CODE_NAME','FORM','MEMO', ;
  1683.     'STRENGTH','PERM_REQD','CAL_QTY','CAL_AMT','CAL_DISCNT','PRICE_UNIT', ;
  1684.     'EFF_DATE', 'OLD_PRICE1','EFF_DATE1','OLD_PRICE2','EFF_DATE2', ;
  1685.     'OLD_PRICE3', 'EFF_DATE3','NDC_N'}
  1686.  
  1687. LOCAL ahFormlary := ;
  1688.    {'NDC Number','Manufacturer Name','Generic Name','Brand Name', ;
  1689.     'Drug Code', 'Form','Memo','Strength','Permission Required', ;
  1690.     'Calculation Quantity', 'Calculation Amount','Calculation Discount %', ;
  1691.     'Price per Unit', 'Effective Date','Old Price 1', ;
  1692.     'Effective Date for Old Price 1','Old Price 2',;
  1693.     'Effective Date for Old Price 2','Old Price 3', ;
  1694.     'Effective Date for Old Price 3', 'Numeric NDC Number'}
  1695.  
  1696. LOCAL apFormlary := ;
  1697.    {'@R 99999-9999-99','','','@! XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',;
  1698.     '@! NNN','@! NNNNN','','','','','$9,999.99','99','$999.99999',;
  1699.     '@D','$999.99999','@D','$999.99999','@D','$999.99999','@D'}
  1700.  
  1701. LOCAL aiFormlary:={'NDC','Generic Name'}
  1702.  
  1703. LOCAL aEditCoords := {}
  1704.  
  1705. nRow := 1
  1706. nCol := 0
  1707. FOR i := 1 TO Len(aFormlary)
  1708.   AAdd( aEditCoords, { nRow, nCol, 18, ;
  1709.          XBPSTATIC_TEXT_RIGHT + XBPSTATIC_TEXT_VCENTER, ;
  1710.          nRow, nCol + 19, nil } )
  1711.   nCol += 35
  1712.   IF nCol > 40
  1713.     nCol := 0
  1714.     nRow++
  1715.   ENDIF
  1716. NEXT
  1717.  
  1718. SET DELETED OFF
  1719. dbeSetDefault('DBFNTX')
  1720.  
  1721. xcName   := "formlary"
  1722. xcIndex1 := 'FRM_NDC.NTX'
  1723. xcIndex2 := 'FRM_GENR.NTX'
  1724. USE (xcName) ALIAS FORMLARY EXCLUSIVE
  1725. IF !FILE(xcIndex1) .or. !FILE(xcIndex2)
  1726.    oScreen := DC_WAITON('Building Formulary Index')
  1727.    index on Formlary->NDC to (xcIndex1)
  1728.    index on Formlary->GENERIC to (xcIndex2)
  1729.    DC_Impl(oScreen)
  1730. ENDIF
  1731.  
  1732. SET INDEX TO (xcIndex1), (xcIndex2)
  1733.  
  1734. lOk := .t.
  1735.  
  1736. DC_Gui(.t.)
  1737. DO WHILE lOk
  1738.  
  1739.    @ 0,0 DCSAY 'Enter DCGRUMPBROW Options' GET cOptions PICT '@!' ;
  1740.       SAYSIZE 0 GETFONT '8.Courier Bold' SAYRIGHTCENTER
  1741.  
  1742.    DCREAD GUI FIT ADDBUTTONS TO lOk ;
  1743.        TITLE 'Options are A E D P Q S V N C K I L F O' ;
  1744.        ENTEREXIT MODAL
  1745.  
  1746.    IF !lOk
  1747.       EXIT
  1748.    ENDIF
  1749.  
  1750.    Set Order to 1                      // Alpha NDC #
  1751.    DC_DbGoTop()
  1752.  
  1753.    IF DC_RecLock(5)
  1754.  
  1755.      DCGRUMPBROW TO cBrowForm ;
  1756.         SECURITY cOptions TOP 8 BOTTOM 20 LEFT 2 RIGHT 77 ;
  1757.         EXITKEY aExitKeys ;
  1758.         TITLE 'Formulary Maintenance';
  1759.         FIELDS aFormlary ;
  1760.         HEADINGS ahFormlary ;
  1761.         PICTURES apFormlary ;
  1762.         EDITCOORDS aEditCoords ;
  1763.         WIDTHS aWidths
  1764.  
  1765.      DC_MsgBox('Current Record # '+STR(RECNO()))
  1766.  
  1767.      If 'D' $ cBrowForm   // If a Drug was Deleted, Set Pack Flag
  1768.        lPackForm := .T.
  1769.      ENDIF
  1770.      UnLock
  1771.  
  1772.    ELSE
  1773.  
  1774.      DC_WinAlert("Unable to lock FORMLARY file")
  1775.  
  1776.    ENDIF
  1777.  
  1778. ENDDO
  1779.  
  1780. RETURN nil
  1781. *** END OF EXAMPLE ***
  1782.  
  1783. * -----------------
  1784.  
  1785. STATIC FUNCTION XSample_127()
  1786.  
  1787. /* This example shows how to create a GUI memo window
  1788.   that pops up by pressing ALT_M when in a table
  1789.   of text-based Gets. */
  1790.  
  1791. LOCAL GetList := {}, cMemo := '', GetOptions, oDlg, oMemo, oCrt
  1792.  
  1793. DC_SetKeyActive(.t.)
  1794. @ 0,0 DCMULTILINE cMemo SIZE 50,15 OBJECT oMemo
  1795.  
  1796. @17,0 DCPUSHBUTTON CAPTION 'Hide' SIZE 9,1.2  ;
  1797.       ACTION {||oDlg:Hide(),DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList), ;
  1798.                 SetAppFocus(oCrt)}
  1799.  
  1800. DCGETOPTIONS HIDE
  1801. DCREAD GUI FIT PARENT @oDlg OPTIONS GetOptions EXIT SAVE ;
  1802.        TITLE 'Memo Editor.  Press ALT-M to Hide'
  1803.  
  1804. SetKey(K_ALT_M, {|x|DC_ClearEvents(), ;
  1805.                     x:=oDlg:IsVisible(), ;
  1806.                     IIF(x,oDlg:hide(),oDlg:show()),  ;
  1807.                     IIF(x,SetAppFocus(oCrt),SetAppFocus(oMemo)),;
  1808.                     IIF(x,DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList), ;
  1809.                           DC_ReadGuiEventLoop(GetList,,,oDlg)) } )
  1810.  
  1811. _XSample127( @oCrt )
  1812. oDlg:Destroy()
  1813. SetKey(K_ALT_M,nil)
  1814.  
  1815. RETURN nil
  1816.  
  1817. * --------------
  1818.  
  1819. STATIC PROCEDURE _XSample127( oCrt )
  1820.  
  1821. LOCAL GetList := {}, cName := Space(20), cCity := Space(20), ;
  1822.       cState := Space(5), cStreet := Space(30), oAppWindow
  1823.  
  1824. oCrt := XbpCrt():New ( AppDeskTop(), NIL, { 0, 0 }, 25, 80 )
  1825. oCrt:FontWidth  := 8
  1826. oCrt:FontHeight := 16
  1827. oCrt:title := 'Hybrid example, Hidden Dialog'
  1828. oCrt:create()
  1829. oCrt:presSpace()
  1830. oCrt:show()
  1831. oAppWindow := SetAppWindow(oCrt)
  1832. CLS
  1833. SET CURSOR ON
  1834. @ 1,1 SAY 'Press ALT-M to toggle display of Memo Editor'
  1835. @ 3,1 SAY '  Name' GET cName
  1836. @ 4,1 SAY 'Street' GET cStreet
  1837. @ 5,1 SAY '  City' GET cCity
  1838. @ 6,1 SAY ' State' GET cState
  1839. READ
  1840. SetAppWindow(oAppWindow)
  1841. oCrt:Destroy()
  1842.  
  1843. RETURN
  1844. *** END OF EXAMPLE ***
  1845.  
  1846. * -----------------
  1847.  
  1848. STATIC FUNCTION XSample_128()
  1849.  
  1850. /* This example shows how to create browse columns
  1851.   that will toggle through a set of values when the
  1852.   mouse is double-clicked on a cell */
  1853.  
  1854. LOCAL GetList := {}, oBrowse, aCondition, aForSale, bFieldBlock
  1855.  
  1856. aForSale := {'Yes','No','Maybe'}
  1857. aCondition := {'Mint','Excellent','Good','Fair','Poor'}
  1858. CLOSE ALL
  1859. USE COLLECT VIA DBFNTX EXCL
  1860.  
  1861. @ 0,0 DCBROWSE oBrowse SIZE 48,10 ALIAS 'COLLECT' ;
  1862.   DATALINK {||_XSample128(oBrowse,aForSale,aCondition)} ;
  1863.   PRESENTATION DC_BrowPres()
  1864.  
  1865. DCBROWSECOL FIELD COLLECT->descrip PARENT oBrowse HEADER 'Description'
  1866. bFieldBlock := {||aForSale[COLLECT->for_sale+1]}
  1867. DCBROWSECOL DATA bFieldBlock PARENT oBrowse HEADER 'For Sale?'
  1868. bFieldBlock := {|n|n:=Ascan(aCondition,COLLECT->condition), ;
  1869.                    IIF(n=0,'????',aCondition[n])}
  1870. DCBROWSECOL DATA bFieldBlock PARENT oBrowse HEADER 'Condition'
  1871. bFieldBlock := {||IIF( COLLECT->original,'Yes','No')}
  1872. DCBROWSECOL DATA bFieldBlock PARENT oBrowse HEADER 'Orig Owner?'
  1873.  
  1874. DCREAD GUI FIT ADDBUTTONS MODAL TITLE 'Toggling Test'
  1875.  
  1876. RETURN nil
  1877.  
  1878. * --------------
  1879.  
  1880. STATIC FUNCTION _XSample128( oBrowse, aForSale,aCondition )
  1881.  
  1882. LOCAL nFound
  1883.  
  1884. IF oBrowse:colPos == 2
  1885.   COLLECT->for_sale++
  1886.   IF COLLECT->for_sale > 2
  1887.     COLLECT->for_sale := 0
  1888.   ENDIF
  1889. ELSEIF oBrowse:colPos = 3
  1890.   nFound := Ascan(aCondition,COLLECT->condition)
  1891.   IF nFound = Len(aCondition) .OR. nFound = 0
  1892.     COLLECT->condition := Substr(aCondition[1],1,1)
  1893.   ELSE
  1894.     COLLECT->condition := Substr(aCondition[nFound+1],1,1)
  1895.   ENDIF
  1896. ELSEIF oBrowse:colPos = 4
  1897.   COLLECT->original := !COLLECT->original
  1898. ENDIF
  1899. oBrowse:refreshCurrent()
  1900.  
  1901. RETURN nil
  1902. *** END OF EXAMPLE ***
  1903.  
  1904. * ---------------
  1905.  
  1906. FUNCTION XSample_129()
  1907.  
  1908. /* This example shows how to create a one-to-many
  1909.   browse of two browse windows browsing arrays. */
  1910.  
  1911. LOCAL GetList := {}, aDirectory, aFiles, oBrowDirs, oBrowFiles, ;
  1912.       nPointer := 1, bItemMarked
  1913.  
  1914. aDirectory := Directory('*.','D')
  1915. aFiles := {}
  1916. _Files( aDirectory, aFiles, 1 )
  1917. bItemMarked := {||_Files(aDirectory,aFiles,nPointer,oBrowFiles)}
  1918.  
  1919. @ 0,0 DCBROWSE oBrowDirs DATA aDirectory SIZE 30,10 ;
  1920.       EVAL {|o|o:itemMarked := ;
  1921.                DC_MergeBlocks(o:itemMarked,bItemMarked) } ;
  1922.       POINTER nPointer ;
  1923.       PRESENTATION DC_BrowPres()
  1924.  
  1925. DCBROWSECOL DATA {||DC_GetColArray(nil,oBrowDirs)[1]} ;
  1926.    HEADER 'Directory' WIDTH 20 PARENT oBrowDirs
  1927.  
  1928. @ 0,35 DCBROWSE oBrowFiles DATA aFiles SIZE 30,10 ;
  1929.        PRESENTATION DC_BrowPres()
  1930.  
  1931. DCBROWSECOL ELEMENT 1 HEADER 'File Name' WIDTH 20 PARENT oBrowFiles
  1932.  
  1933. DCREAD GUI FIT ADDBUTTONS TITLE 'One-to-Many Directory Browse' ;
  1934.    EVAL {|o|SetAppWindow(o)}
  1935.  
  1936. RETURN nil
  1937.  
  1938. * -------------------
  1939.  
  1940. STATIC FUNCTION _Files( aDirectory, aFiles, nPointer, oBrowFiles )
  1941.  
  1942. LOCAL i, cDirectory, cCurPath := DC_CurPath()
  1943.  
  1944.  
  1945. cDirectory := aDirectory[nPointer,1]
  1946. DC_ChDir( Alltrim(cDirectory) )
  1947.  
  1948. aFiles := Directory( '*.*')
  1949. DC_ChDir( cCurPath )
  1950.  
  1951. IF Valtype(oBrowFiles) = 'O'
  1952.   DC_GetBrowArray( oBrowFiles, aFiles )
  1953.   oBrowFiles:refreshAll()
  1954. ENDIF
  1955.  
  1956. RETURN nil
  1957. *** END OF EXAMPLE ***
  1958.  
  1959. * ---------------
  1960.  
  1961. STATIC FUNCTION XSample_130()
  1962.  
  1963. /* This example shows how to create a 3-tiered, one-to-many
  1964.   browse of three relational databases in one dialog window. */
  1965.  
  1966. LOCAL GetList := {}, GetOptions, oBrowCust, oBrowInv, oBrowItems, ;
  1967.       bInv, bItems
  1968.  
  1969. dbeSetDefault('DBFNTX')
  1970. USE CUSTOMER INDEX CUSTOMER
  1971. USE INVOICE INDEX INVOICE NEW
  1972. USE INVITEMS INDEX INVITEMS NEW
  1973.  
  1974. bInv := {|| INVOICE->(DC_SetScope(0,CUSTOMER->cust_nmbr)), ;
  1975.             INVOICE->(DC_SetScope(1,CUSTOMER->cust_nmbr)), ;
  1976.             INVOICE->(DC_DbGoTop()), ;
  1977.             oBrowInv:refreshAll() }
  1978.  
  1979. bItems := {|| INVITEMS->(DC_SetScope(0,INVOICE->inv_nmbr)), ;
  1980.               INVITEMS->(DC_SetScope(1,INVOICE->inv_nmbr)), ;
  1981.               INVITEMS->(DC_DbGoTop()), ;
  1982.               oBrowItems:refreshAll() }
  1983.  
  1984.  
  1985. @ 1,0 DCBROWSE oBrowCust ALIAS 'CUSTOMER' SIZE 40,10 ;
  1986.       PRESENTATION DC_BrowPres() ;
  1987.       NOSOFTTRACK ;
  1988.       SCOPE ;
  1989.       NOHSCROLL ;
  1990.       ITEMMARKED {|| Eval(bInv), ;
  1991.                      Eval(bItems), ;
  1992.                      DC_GetRefresh(GetList,, ;
  1993.                       DCGETREFRESH_TYPE_EXCLUDE,{GETLIST_BROWSE}) }
  1994.  
  1995. DCSETPARENT oBrowCust
  1996. DCBROWSECOL FIELD CUSTOMER->cust_nmbr HEADER 'Cust #' WIDTH 4
  1997. DCBROWSECOL FIELD CUSTOMER->bill_name HEADER 'Billing Name' WIDTH 18
  1998.  
  1999. DCSETPARENT TO
  2000. @ 1,42 DCSAY {||CUSTOMER->bill_name} COLOR GRA_CLR_BLUE SIZE 45
  2001. @ 2,42 DCSAY {||CUSTOMER->bill_strt} COLOR GRA_CLR_BLUE SIZE 45
  2002. @ 3,42 DCSAY {||CUSTOMER->bill_city} COLOR GRA_CLR_BLUE SIZE 45
  2003. @ 4,42 DCSAY {||CUSTOMER->bill_state} COLOR GRA_CLR_BLUE SIZE 5
  2004. @ 4,53 DCSAY {||CUSTOMER->bill_zip} COLOR GRA_CLR_BLUE SIZE 25
  2005. @ 5,42 DCSAY {||CUSTOMER->phone} COLOR GRA_CLR_BLUE SIZE 25
  2006. @ 6,42 DCSAY {||CUSTOMER->fax} COLOR GRA_CLR_BLUE SIZE 25
  2007. @ 7,42 DCSAY {||CUSTOMER->contact} COLOR GRA_CLR_BLUE SIZE 35
  2008.  
  2009. @12,0 DCBROWSE oBrowInv ALIAS 'INVOICE' SIZE 40,10 ;
  2010.       PRESENTATION DC_BrowPres() ;
  2011.       NOSOFTTRACK ;
  2012.       SCOPE ;
  2013.       ITEMMARKED bItems
  2014.  
  2015. DCSETPARENT oBrowInv
  2016. DCBROWSECOL FIELD INVOICE->inv_nmbr HEADER 'Invoice #' WIDTH 4
  2017. DCBROWSECOL FIELD INVOICE->ship_date HEADER 'Inv Date' WIDTH 8
  2018. DCBROWSECOL FIELD INVOICE->balance HEADER 'Balance' WIDTH 8
  2019.  
  2020. DCSETPARENT TO
  2021. @12,42 DCBROWSE oBrowItems ALIAS 'INVITEMS' SIZE 40,10 ;
  2022.       PRESENTATION DC_BrowPres() ;
  2023.       NOSOFTTRACK ;
  2024.       SCOPE
  2025.  
  2026. DCSETPARENT oBrowItems
  2027. DCBROWSECOL FIELD INVITEMS->part_nmbr HEADER 'Part Nmbr' WIDTH 10
  2028. DCBROWSECOL FIELD INVITEMS->desc HEADER 'Description' WIDTH 10
  2029. DCBROWSECOL FIELD INVITEMS->qty_ord HEADER 'Ord' WIDTH 4
  2030. DCBROWSECOL FIELD INVITEMS->qty_shp HEADER 'Ship' WIDTH 4
  2031.  
  2032. DCGETOPTIONS SAYFONT '10.Helv Bold' TABSTOP AUTORESIZE
  2033. DCREAD GUI ;
  2034.    FIT ;
  2035.    ADDBUTTONS ;
  2036.    OPTIONS GetOptions ;
  2037.    MODAL ;
  2038.    TITLE 'Customer/Invoice/Items Browse' ;
  2039.    EVAL {|o|SetAppFocus(oBrowCust:GetColumn(1))}
  2040.  
  2041. RETURN nil
  2042. *** END OF EXAMPLE ***
  2043.  
  2044. * --------------
  2045.  
  2046. STATIC FUNCTION XSample_131()
  2047.  
  2048. /* This example shows how to create a 3-tiered, one-to-many
  2049.   browse of three relational databases on separate tab pages. */
  2050.  
  2051. LOCAL GetList := {}, GetOptions, oBrowCust, oBrowInv, oBrowItems, ;
  2052.       bInv, bItems, oTabPage1, oTabPage2, oTabPage3
  2053.  
  2054. dbeSetDefault('DBFNTX')
  2055. USE CUSTOMER INDEX CUSTOMER
  2056. USE INVOICE INDEX INVOICE NEW
  2057. USE INVITEMS INDEX INVITEMS NEW
  2058.  
  2059. bInv := {|| INVOICE->(DC_SetScope(0,CUSTOMER->cust_nmbr)), ;
  2060.             INVOICE->(DC_SetScope(1,CUSTOMER->cust_nmbr)), ;
  2061.             INVOICE->(DC_DbGoTop()), ;
  2062.             oBrowInv:refreshAll() }
  2063.  
  2064. bItems := {|| INVITEMS->(DC_SetScope(0,INVOICE->inv_nmbr)), ;
  2065.               INVITEMS->(DC_SetScope(1,INVOICE->inv_nmbr)), ;
  2066.               INVITEMS->(DC_DbGoTop()), ;
  2067.               oBrowItems:refreshAll() }
  2068.  
  2069. @ 0,0 DCTABPAGE oTabPage1 SIZE 85,15 CAPTION 'Customers'
  2070.  
  2071. @ 2,2 DCBROWSE oBrowCust ALIAS 'CUSTOMER' SIZE 40,12 ;
  2072.       PRESENTATION DC_BrowPres() ;
  2073.       NOSOFTTRACK ;
  2074.       SCOPE ;
  2075.       NOHSCROLL ;
  2076.       PARENT oTabPage1 ;
  2077.       EVAL {|o|o:itemMarked := ;
  2078.                  {|| Eval(bInv), ;
  2079.                      Eval(bItems), ;
  2080.                      DC_GetRefresh(GetList,, ;
  2081.                       DCGETREFRESH_TYPE_EXCLUDE,{GETLIST_BROWSE}) } }
  2082.  
  2083. DCSETPARENT oBrowCust
  2084. DCBROWSECOL FIELD CUSTOMER->cust_nmbr HEADER 'Cust #' WIDTH 4
  2085. DCBROWSECOL FIELD CUSTOMER->bill_name HEADER 'Billing Name' WIDTH 20
  2086.  
  2087. DCSETPARENT TO oTabPage1
  2088. @ 3,43 DCSAY {||CUSTOMER->bill_name} COLOR GRA_CLR_BLUE SIZE 40
  2089. @ 4,43 DCSAY {||CUSTOMER->bill_strt} COLOR GRA_CLR_BLUE SIZE 40
  2090. @ 5,43 DCSAY {||CUSTOMER->bill_city} COLOR GRA_CLR_BLUE SIZE 40
  2091. @ 6,43 DCSAY {||CUSTOMER->bill_state} COLOR GRA_CLR_BLUE SIZE 5
  2092. @ 6,54 DCSAY {||CUSTOMER->bill_zip} COLOR GRA_CLR_BLUE SIZE 20
  2093. @ 7,43 DCSAY {||CUSTOMER->phone} COLOR GRA_CLR_BLUE SIZE 20
  2094. @ 8,43 DCSAY {||CUSTOMER->fax} COLOR GRA_CLR_BLUE SIZE 20
  2095. @ 9,43 DCSAY {||CUSTOMER->contact} COLOR GRA_CLR_BLUE SIZE 30
  2096.  
  2097. DCSETPARENT TO
  2098. @ 0,0 DCTABPAGE oTabPage2 RELATIVE oTabPage1 CAPTION 'Invoices'
  2099.  
  2100. @ 2,2 DCSAY {||CUSTOMER->cust_nmbr + ' : ' + CUSTOMER->bill_name} ;
  2101.       COLOR GRA_CLR_BLUE FONT '12.Helv Bold' ;
  2102.       SIZE 70 ;
  2103.       PARENT oTabPage2
  2104.  
  2105. @ 4,2 DCBROWSE oBrowInv ALIAS 'INVOICE' SIZE 75,10 ;
  2106.       PRESENTATION DC_BrowPres() ;
  2107.       NOSOFTTRACK ;
  2108.       PARENT oTabPage2 ;
  2109.       SCOPE ;
  2110.       EVAL {|o|o:itemMarked := bItems }
  2111.  
  2112. DCSETPARENT oBrowInv
  2113. DCBROWSECOL FIELD INVOICE->inv_nmbr HEADER 'Invoice #' WIDTH 4
  2114. DCBROWSECOL FIELD INVOICE->ship_date HEADER 'Inv Date' WIDTH 8
  2115. DCBROWSECOL FIELD INVOICE->balance HEADER 'Balance' WIDTH 8
  2116. DCBROWSECOL FIELD INVOICE->po_nmbr HEADER 'P.O. #' WIDTH 8
  2117. DCBROWSECOL FIELD INVOICE->terms HEADER 'Terms' WIDTH 8
  2118. DCBROWSECOL FIELD INVOICE->how_ship HEADER 'How Ship' WIDTH 8
  2119.  
  2120. DCSETPARENT TO
  2121. @ 0,0 DCTABPAGE oTabPage3 RELATIVE oTabPage2 CAPTION 'Inv. Items'
  2122.  
  2123. @ 2,2 DCSAY {||CUSTOMER->cust_nmbr + ' : ' + CUSTOMER->bill_name + ' : ' + ;
  2124.                INVOICE->inv_nmbr} ;
  2125.       COLOR GRA_CLR_BLUE FONT '12.Helv Bold' ;
  2126.       SIZE 70 ;
  2127.       PARENT oTabPage3
  2128.  
  2129. @ 4,2 DCBROWSE oBrowItems ALIAS 'INVITEMS' SIZE 75,10 ;
  2130.       PRESENTATION DC_BrowPres() ;
  2131.       NOSOFTTRACK ;
  2132.       SCOPE ;
  2133.       PARENT oTabPage3
  2134.  
  2135. DCSETPARENT oBrowItems
  2136. DCBROWSECOL FIELD INVITEMS->part_nmbr HEADER 'Part Nmbr' WIDTH 10
  2137. DCBROWSECOL FIELD INVITEMS->desc HEADER 'Description' WIDTH 20
  2138. DCBROWSECOL FIELD INVITEMS->qty_ord HEADER 'Ord' WIDTH 4
  2139. DCBROWSECOL FIELD INVITEMS->qty_shp HEADER 'Ship' WIDTH 4
  2140. DCBROWSECOL FIELD INVITEMS->qty_bo HEADER 'B/O' WIDTH 4
  2141. DCBROWSECOL FIELD INVITEMS->u_issue HEADER 'U/I' WIDTH 3
  2142. DCBROWSECOL FIELD INVITEMS->u_price HEADER 'U/Price' WIDTH 6
  2143.  
  2144. DCGETOPTIONS SAYFONT '9.Helv Bold' TABSTOP AUTORESIZE
  2145. DCREAD GUI ;
  2146.    FIT ;
  2147.    ADDBUTTONS ;
  2148.    OPTIONS GetOptions ;
  2149.    MODAL ;
  2150.    TITLE 'Customer/Invoice/Items Browse' ;
  2151.    EVAL {|o|SetAppFocus(oBrowCust:GetColumn(1))}
  2152.  
  2153. RETURN nil
  2154. *** END OF EXAMPLE ***
  2155.  
  2156. * --------------
  2157.  
  2158. STATIC FUNCTION XSample_132()
  2159.  
  2160. /* This example shows how to create a scrolling
  2161.   window using the VSCROLL and HSCROLL clauses
  2162.   of the DCSTATIC command */
  2163.  
  2164. LOCAL GetList := {}, oStatic1, oStatic2, oStatic3, i, aGets[20]
  2165.  
  2166. @ 0,0 DCSTATIC TYPE XBPSTATIC_TYPE_RECESSEDBOX SIZE 40,10 OBJECT oStatic1
  2167.  
  2168. @ .5,1 DCSTATIC TYPE XBPSTATIC_TYPE_TEXT SIZE 38,9 OBJECT oStatic2
  2169.  
  2170. @ 1,1 DCSTATIC TYPE XBPSTATIC_TYPE_TEXT SIZE 70,25 OBJECT oStatic3 ;
  2171.       PARENT oStatic2 ;
  2172.       FONT '12.Alaska Crt' ;
  2173.       VSCROLL oStatic1 RANGE 0,500 ;
  2174.       HSCROLL oStatic1 RANGE 0,500
  2175.  
  2176. FOR i := 1 TO 20
  2177.   aGets[i] := i
  2178.   @ i-1,1 DCSAY Str(i,2) + ;
  2179.    ' This................is.................Get ' + ;
  2180.     Str(i,2) GET aGets[i] PICT '99999' ;
  2181.     SAYSIZE 0 PARENT oStatic3
  2182. NEXT
  2183.  
  2184. DCREAD GUI FIT ADDBUTTONS TITLE 'Scrolling a Static Window'
  2185.  
  2186. RETURN nil
  2187. *** END OF EXAMPLE ***
  2188.  
  2189.  
  2190. * ----------------
  2191.  
  2192. #ifndef EXPRESS20
  2193. // FUNCTION DC_Dot()
  2194. // RETURN nil
  2195. #endif
  2196.  
  2197. * ----------------
  2198.  
  2199. #ifndef EXPRESS20
  2200. FUNCTION DC_Interpret()
  2201. RETURN nil
  2202. #endif
  2203.  
  2204. * ----------------
  2205.  
  2206. #ifndef EXPRESS20
  2207. FUNCTION DC_MenuEdit()
  2208. RETURN nil
  2209. #endif
  2210.  
  2211. * ----------------
  2212.  
  2213. #ifndef EXPRESS20
  2214. FUNCTION DC_Compile()
  2215. RETURN nil
  2216. #endif
  2217.  
  2218. * ----------------
  2219.  
  2220. #ifndef EXPRESS20
  2221. FUNCTION DC_ObjLoad()
  2222. RETURN nil
  2223. #endif
  2224.  
  2225. * ----------------
  2226.  
  2227. #ifndef EXPRESS20
  2228. FUNCTION DC_Translate()
  2229. RETURN nil
  2230. #endif
  2231.  
  2232. * ----------------
  2233.  
  2234. #ifndef EXPRESS20
  2235. FUNCTION DC_ProgPick()
  2236. RETURN nil
  2237. #endif
  2238.  
  2239. * ----------------
  2240.  
  2241. #ifndef EXPRESS20
  2242. FUNCTION DC_MenuLoad()
  2243. RETURN nil
  2244. #endif
  2245.  
  2246. * ----------------
  2247.  
  2248. #ifndef EXPRESS20
  2249. FUNCTION DC_MenuSource()
  2250. RETURN nil
  2251. #endif
  2252.  
  2253. * ----------------
  2254.  
  2255. #ifndef EXPRESS20
  2256. FUNCTION DC_MenuPick()
  2257. RETURN nil
  2258. #endif
  2259.  
  2260. * ----------------
  2261.  
  2262. #ifndef EXPRESS20
  2263. FUNCTION DC_MenuRun()
  2264. RETURN nil
  2265. #endif
  2266.  
  2267. * ----------------
  2268.  
  2269. #ifndef EXPRESS20
  2270. FUNCTION DC_ProgMaint()
  2271. RETURN nil
  2272. #endif
  2273.  
  2274. * ----------------
  2275.  
  2276. #ifndef EXPRESS20
  2277. FUNCTION DC_Program()
  2278. RETURN nil
  2279. #endif
  2280.  
  2281. * ----------------
  2282.  
  2283. #ifndef EXPRESS20
  2284. FUNCTION DC_MenuCompile()
  2285. RETURN nil
  2286. #endif
  2287.  
  2288. * ----------------
  2289.  
  2290. #ifndef EXPRESS20
  2291. FUNCTION DC_WorkTree()
  2292. RETURN nil
  2293. #endif
  2294.  
  2295. * ----------------
  2296.  
  2297. #ifndef EXPRESS20
  2298. FUNCTION DC_ErrorGUI()
  2299. RETURN nil
  2300. #endif
  2301.  
  2302.  
  2303.  
  2304.