home *** CD-ROM | disk | FTP | other *** search
Text File | 2002-01-30 | 94.3 KB | 3,565 lines |
- *-- PROGRAM FILE -------------------------------------------------------------
- * Application: eXPress++ Library
- * Description: eXPress++ sample programs
- * File Name: xsample1.prg
- * Author: Roger Donnay Tester:
- * Date created: 11/04/98 Date updated: 11/07/2001
- * Copyright: (c) 2001 by DONNAY Software Designs
- *-----------------------------------------------------------------------------
-
- #include "DCDIALOG.CH"
- #include "SET.CH"
- #include "XBP.CH"
- #include "APPEVENT.CH"
- #include "dcpick.ch"
- #include "dcapp.ch"
- #include "dcbitmap.ch"
- #include "dcicon.ch"
- #INCLUDE "dcmsg.CH"
- #INCLUDE "font.ch"
- #INCLUDE "dcprint.CH"
-
- #define lMDIApp aApp[1]
-
- FUNCTION X_Samples_1( oDialog )
-
- LOCAL GetList := {}, i, j, GetOptions, nTest, cMemo, oMemo, aApp[1], ;
- lDebugEvent, lDebugCreate, oDlg, oDlgWindow, cTitle, aCoords, ;
- oSourceFile, cSource
-
- cTitle := 'eXPress++ Sample Programs (Set 1)'
- nTest := 0
- cMemo := ''
- lDebugEvent := .f.
- lDebugCreate := .f.
-
- SET DEFA TO
- SET PATH TO ..\DATA
-
- FOR i := 1 TO 6
- FOR j := 1 TO 7
- nTest++
- @ j-1,1 + (i-1)*12 DCRADIO nTest ;
- VALUE nTest ;
- PROMPT XSample_Header(nTest) ;
- ACTION {||XSample_Memo(nTest,oMemo,oSourceFile,@cSource)} ;
- COLOR GRA_CLR_BLACK, GRA_CLR_BACKGROUND
- NEXT j
- NEXT i
- nTest := 1
-
- @ 3,73 DCPUSHBUTTON CAPTION 'Run Sample' ;
- SIZE 12, 1 ;
- TOOLTIP 'Run the selected sample program' ;
- ACTION {||XSample_Run(nTest,oDialog,lDebugCreate,lDebugEvent)}
-
- @ 4,73 DCPUSHBUTTON CAPTION 'Print Source' ;
- SIZE 12, 1 ;
- ACTION {||XSample_Print(cSource)}
-
- @ 5,73 DCPUSHBUTTON CAPTION 'Exit' ;
- SIZE 12, 1 ;
- ACTION {||PostAppEvent(xbeP_Close,,,oDlg)}
-
- @ 6,73 DCCHECKBOX lDebugEvent PROMPT 'Debug Events'
-
- @ 7.3,5 DCSAY '' SAYSIZE 60 COLOR GRA_CLR_DARKBLUE ;
- OBJECT oSourceFile FONT '8.Courier Bold'
-
- @ 8,1 DCMULTILINE cMemo ;
- OBJECT oMemo ;
- SIZE 85,11 ;
- FONT '8.Alaska Crt'
-
- DCGETOPTIONS ;
- ICON ICON_EXPRESS ;
- CASCADE
-
- DCREAD GUI ;
- OPTIONS GetOptions ;
- EVAL {|o|XSample_Memo(nTest,oMemo,oSourceFile,@cSource)} ;
- APPWINDOW oDialog ;
- PARENT @oDlg ;
- TITLE cTitle ;
- FIT
-
- CLOSE DATABASES
-
- RETURN nil
-
- * ----------------------------
-
- STATIC FUNCTION XSample_Memo( nTest, oMemo, oSourceFile, cSource )
-
- LOCAL cFunction, nFound, cSourceFile
-
- cSource := ''
- cFunction := 'XSample_' + Alltrim(Str(nTest))
-
- cSourceFile := 'XSAMPLE1.PRG'
- cSource := MemoRead(cSourceFile)
- IF Empty(cSource)
- cSourceFile := '..\PRG\XSAMPLE1.PRG'
- cSource := MemoRead(cSourceFile)
- ENDIF
- IF Empty(cSource)
- cSource := 'XSAMPLE1.PRG cannot be found'
- ENDIF
-
- nFound := AT('FUNCTION ' + cFunction,cSource)
- cSource := Substr(cSource,nFound)
- nFound := AT('*** END OF EXAMPLE ***',cSource)
- cSource := Substr(cSource,1,nFound+21)
-
- IF !Empty(cSource)
- oMemo:setData(cSource)
- oSourceFile:setCaption(cSourceFile)
- ENDIF
- RETURN nil
-
- * -------------------
-
- STATIC FUNCTION XSample_Print( cSource )
-
- LOCAL oPrinter, nLineCount := MLCount(cSource), i, cMemoLine, nRow
-
- DCPRINT ON TO oPrinter PREVIEW FONT '10.Courier' NONSTOP HIDE
- IF Valtype(oPrinter) # 'O' .OR. !oPrinter:lActive
- RETURN nil
- ENDIF
- nRow := 1
- FOR i := 1 TO nLineCount - 1
- cMemoLine := MemoLine( cSource, nil, i )
- @ nRow++,2 DCPRINT SAY cMemoLine PRINTER oPrinter
- IF nRow > 60
- DCPRINT EJECT
- nRow := 1
- ENDIF
- NEXT
- DCPRINT OFF
-
- RETURN nil
-
- * -----------------------
-
- STATIC FUNCTION XSample_Run( nTest, oDialog, lDebugCreate, lDebugEvent )
-
- LOCAL nDebug := 0
-
- DC_Gui(.t.)
-
- IF lDebugCreate
- nDebug += DCGUI_DEBUG_CREATE
- ENDIF
- IF lDebugEvent
- nDebug += DCGUI_DEBUG_EVENTS
- ENDIF
- DC_ReadGuiDebug(nDebug)
- CLOSE ALL
- SET DEFA TO
-
- IF nTest = 1
- XSample_1()
- ELSEIF nTest = 2
- XSample_2()
- ELSEIF nTest = 3
- XSample_3()
- ELSEIF nTest = 4
- XSample_4()
- ELSEIF nTest = 5
- XSample_5()
- ELSEIF nTest = 6
- XSample_6()
- ELSEIF nTest = 7
- XSample_7()
- ELSEIF nTest = 8
- XSample_8()
- ELSEIF nTest = 9
- XSample_9()
- ELSEIF nTest = 10
- XSample_10()
- ELSEIF nTest = 11
- XSample_11()
- ELSEIF nTest = 12
- XSample_12()
- ELSEIF nTest = 13
- XSample_13()
- ELSEIF nTest = 14
- XSample_14()
- ELSEIF nTest = 15
- XSample_15()
- ELSEIF nTest = 16
- XSample_16()
- ELSEIF nTest = 17
- XSample_17()
- ELSEIF nTest = 18
- XSample_18()
- ELSEIF nTest = 19
- XSample_19()
- ELSEIF nTest = 20
- XSample_20()
- ELSEIF nTest = 21
- XSample_21()
- ELSEIF nTest = 22
- XSample_22()
- ELSEIF nTest = 23
- XSample_23()
- ELSEIF nTest = 24
- XSample_24()
- ELSEIF nTest = 25
- XSample_25()
- ELSEIF nTest = 26
- XSample_26()
- ELSEIF nTest = 27
- XSample_27()
- ELSEIF nTest = 28
- XSample_28()
- ELSEIF nTest = 29
- XSample_29()
- ELSEIF nTest = 30
- XSample_30()
- ELSEIF nTest = 31
- XSample_31()
- ELSEIF nTest = 32
- XSample_32()
- ELSEIF nTest = 33
- XSample_33()
- ELSEIF nTest = 34
- XSample_34()
- ELSEIF nTest = 35
- XSample_35()
- ELSEIF nTest = 36
- XSample_36()
- ELSEIF nTest = 37
- XSample_37()
- ELSEIF nTest = 38
- XSample_38()
- ELSEIF nTest = 39
- XSample_39()
- ELSEIF nTest = 40
- XSample_40()
- ELSEIF nTest = 41
- XSample_41()
- ELSEIF nTest = 42
- XSample_42()
- ENDIF
-
- DC_ClearEvents()
-
- RETURN nil
-
- /* ---------------------------- */
-
- STATIC FUNCTION XSample_Header( nTest, oDlg )
-
- IF nTest = 1
- RETURN "EnterKey"
- ELSEIF nTest = 2
- RETURN 'TextBased'
- ELSEIF nTest = 3
- RETURN 'PxlBased'
- ELSEIF nTest = 4
- RETURN 'AutoSize'
- ELSEIF nTest = 5
- RETURN 'FixedSize'
- ELSEIF nTest = 6
- RETURN 'PushButt'
- ELSEIF nTest = 7
- RETURN 'DataBrow'
- ELSEIF nTest = 8
- RETURN 'PickList'
- ELSEIF nTest = 9
- RETURN 'Menu'
- ELSEIF nTest = 10
- RETURN 'CellEdit'
- ELSEIF nTest = 11
- RETURN 'HotKeys'
- ELSEIF nTest = 12
- RETURN 'BitMap'
- ELSEIF nTest = 13
- RETURN 'AppEdit'
- ELSEIF nTest = 14
- RETURN 'Progress'
- ELSEIF nTest = 15
- RETURN 'ScrollBar'
- ELSEIF nTest = 16
- RETURN 'StaticBox'
- ELSEIF nTest = 17
- RETURN 'TabPages'
- ELSEIF nTest = 18
- RETURN 'UserDlg'
- ELSEIF nTest = 19
- RETURN 'ArrayBrow'
- ELSEIF nTest = 20
- RETURN 'UDC'
- ELSEIF nTest = 21
- RETURN 'TabStops'
- ELSEIF nTest = 22
- RETURN 'Tooltip/Msg'
- ELSEIF nTest = 23
- RETURN 'Graph'
- ELSEIF nTest = 24
- RETURN 'Scopes'
- ELSEIF nTest = 25
- RETURN '@..SAY'
- ELSEIF nTest = 26
- RETURN 'Protect'
- ELSEIF nTest = 27
- RETURN 'MDI #1'
- ELSEIF nTest = 28
- RETURN 'MDI #2'
- ELSEIF nTest = 29
- RETURN 'WHEN'
- ELSEIF nTest = 30
- RETURN 'HIDE'
- ELSEIF nTest = 31
- RETURN 'POPUP'
- ELSEIF nTest = 32
- RETURN 'EVAL'
- ELSEIF nTest = 33
- RETURN 'ID'
- ELSEIF nTest = 34
- RETURN 'RELATIVE'
- ELSEIF nTest = 35
- RETURN 'CARGO'
- ELSEIF nTest = 36
- RETURN 'Gets w/Valid'
- ELSEIF nTest = 37
- RETURN 'FieldGETS'
- ELSEIF nTest = 38
- RETURN 'ScrollingGETS'
- ELSEIF nTest = 39
- RETURN 'Working'
- ELSEIF nTest = 40
- RETURN 'Printing'
- ELSEIF nTest = 41
- RETURN 'Preview'
- ELSEIF nTest = 42
- RETURN 'Cascading'
- ENDIF
-
- RETURN ''
-
- //* ---------------------------- */
-
- STATIC FUNCTION XSample_1( )
-
- /*
- @ SAY..GET (EXITS with ENTER KEY)
-
- This sample demonstrates a single @ DCSAY..GET with automatic sizing
- of the dialog window to the objects and exit when the ENTER key is hit.
- The window is NON-MODAL.
- */
-
- LOCAL GetList := {}, GetOptions, cName := Space(20)
-
- @ 1,1 DCSAY 'Enter Name' GET cName PROPER SAYRIGHT
-
- DCGETOPTIONS NOTASKLIST
-
- DCREAD GUI ;
- TITLE 'ENTER Key Demo' ;
- FIT ;
- MODAL ;
- ENTEREXIT ;
- OPTIONS GetOptions
-
- DC_MsgBox(cName)
-
- RETURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_2
-
- /*
- @ SAY..GETS (TEXT-BASED)
-
- This sample demonstrates several @ DCSAY..GETs with automatic sizing
- of the dialog window to the objects and an additional set of buttons
- for OK and CANCEL. The window is MODAL. Coordinates are TEXT-based.
- Dialog window has a recessed border and cannot be resized (fixed).
- */
-
- LOCAL GetList := {}, dDate := Date(), nNumber := 12345.67, ;
- cString := 'This is a string', lLogical := .t., GetOptions
-
- SET DATE FORMAT TO 'mm/dd/yyyy'
- @ 1,1 DCSAY 'Enter a Date' GET dDate PICTURE '99/99/9999' ;
- SAYRIGHT GETSIZE 13
- @ 3,1 DCSAY 'Enter a Number' GET nNumber SAYRIGHT
- @ 5,1 DCSAY 'Enter a String' GET cString SAYRIGHT
- @ 7,1 DCSAY 'Enter Yes or No' GET lLogical PICTURE 'Y' SAYRIGHT
-
- DCGETOPTIONS ;
- SAYWIDTH 120 ;
- WINDOWHEIGHT 300 ;
- WINDOWWIDTH 400 ;
- BORDER XBPDLG_RECESSEDBORDERTHICK_FIXED ;
- TITLE 'Data Entry' // Store options to GetOptions
-
- DCREAD GUI ;
- MODAL ;
- TITLE 'Text-Based GETs' ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL ;
- OPTIONS GetOptions
-
- RETURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_3
-
- /*
- @ SAY..GETS (PIXEL BASED)
-
- This sample demonstrates several @ DCSAY..GETs with automatic sizing
- of the dialog window to the objects and an additional set of buttons
- for OK and CANCEL. The window is MODAL. Coordinates are PIXEL-based.
- */
-
- LOCAL GetList := {}, dDate := Date(), nNumber := 12345.67, ;
- cString := 'This is a string', lLogical := .t., GetOptions
-
- SET DATE FORMAT TO 'mm/dd/yyyy'
- @ 10,1 DCSAY 'Enter a Date' GET dDate PICTURE '99/99/9999' ;
- SAYRIGHT GETSIZE 100
- @ 30,1 DCSAY 'Enter a Number' GET nNumber SAYRIGHT
- @ 50,1 DCSAY 'Enter a String' GET cString SAYRIGHT
- @ 70,1 DCSAY 'Enter Yes or No' GET lLogical PICTURE 'Y' SAYRIGHT
-
- DCGETOPTIONS ;
- WINDOWHEIGHT 300 ;
- WINDOWWIDTH 400 ;
- SAYWIDTH 120 ;
- PIXEL ;
- TITLE 'Data Entry' // Store options to GetOptions
-
- DCREAD GUI ;
- TITLE 'Pixel-Based GETs' ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL ;
- MODAL ;
- OPTIONS GetOptions
-
- RETURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_4
-
- /*
- @ SAY..GETS, AUTOMATIC SIZING OF DIALOG
-
- This sample demonstrates several @ DCSAY..GETs with automatic sizing
- of the dialog window to the objects and an additional set of buttons
- for OK and CANCEL. The window is Non-Modal with no title bar.
- Coordinates are TEXT-based. The DATE field has a pop-up calendar
- attached. The NUMERIC field can be accessed only when the date is
- not today.
- */
-
- LOCAL GetList := {}, dDate := Date(), nNumber := 12345.67, ;
- cString := 'This is a string', lLogical := .t., GetOptions
-
- SET DATE FORMAT TO 'mm/dd/yyyy'
- @ 1,1 DCSAY ' Enter a Date' GET dDate PICTURE '99/99/9999' ;
- POPUP {|d|DC_PopDate(d)} SAYRIGHT
- @ 2,1 DCSAY ' Enter a Number' GET nNumber SAYRIGHT ;
- RANGE 100,1000 WHEN {||dDate#Date()}
- @ 3,1 DCSAY ' Enter a String' GET cString SAYRIGHT
- @ 4,1 DCSAY 'Enter Yes or No' GET lLogical PICTURE 'Y' SAYRIGHT
-
- DCGETOPTIONS ;
- NOTITLEBAR
-
- DCREAD GUI ;
- MODAL ;
- FIT ;
- OPTIONS GetOptions ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
-
- RETURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_5
-
- /*
- RADIO BUTTONs, CHECKBOX, FIXED SIZED DIALOG
-
- This sample demonstrates three DCRADIO button objects and a DCCHECKBOX
- object with FIXED sizing of the dialog window . The window is MODAL.
- Coordinates are both TEXT-based and PIXEL-based. The Radiobutton
- objects are attached to a DCGROUP as the parent. The Radiobutton group
- is HIDDEN and SHOWN by clicking the Checkbox. A DCSTATIC text box
- is used to display the value chosen by the Radio Buttons.
- */
-
- LOCAL GetList := {}, cRadio := '', lCheck := .f., oRadioGroup, ;
- GetOptions, oStatic
-
- @ 1,1 DCCHECKBOX lCheck ;
- PROMPT 'Hide Radio Buttons'
-
- @ 3.2, 1 DCSTATIC XBPSTATIC_TYPE_TEXT ;
- SIZE 30, 1.5 ;
- OBJECT oStatic ;
- COLOR GRA_CLR_DARKBLUE, GRA_CLR_WHITE ;
- FONT '16.Helv'
-
- @ 6,1 DCGROUP oRadioGroup ;
- SIZE 20, 5 ;
- CAPTION 'Choose an Option' ;
- HIDE {||lCheck}
-
- @ 15,10 DCRADIO cRadio ;
- VALUE 'This is Option 1' ;
- PROMPT 'Option 1' ;
- PARENT oRadioGroup ;
- ACTION {||oStatic:SetCaption(cRadio)} ;
- PIXEL
-
- @ 35,10 DCRADIO cRadio ;
- VALUE 'This is Option 2' ;
- PROMPT 'Option 2' ;
- PARENT oRadioGroup ;
- ACTION {||oStatic:SetCaption(cRadio)} ;
- PIXEL
-
- @ 55,10 DCRADIO cRadio ;
- VALUE 'This is Option 3' ;
- PROMPT 'Option 3' ;
- PARENT oRadioGroup ;
- ACTION {||oStatic:SetCaption(cRadio)} ;
- PIXEL
-
- DCGET OPTIONS ;
- WINDOW HEIGHT 300 ;
- WINDOW WIDTH 240
-
- DCREAD GUI ;
- TITLE 'Fixed-Size Dialog' ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL ;
- MODAL ;
- OPTIONS GetOptions
-
- ReTURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_6
-
- /*
- PUSHBUTTON
-
- This sample demonstrates different DCPUSHBUTTON styles with
- Text captions, Code-block captions, and BitMap captions.
- */
-
- LOCAL GetList := {}, cCaption, nBitMap
-
- @ 1,1 DCPUSHBUTTON ;
- CAPTION BITMAP_TOP_1 ;
- ACCELKEY xbeK_ALT_T ;
- SIZE 9, 1 ;
- ACTION {||DC_msgbox('Go to Top of File')}
-
- @ 1,11 DCSAY 'The caption on this button is a Bitmap in the .EXE'
-
- cCaption := "-$$$-"
- @ 3,1 DCPUSHBUTTON ;
- CAPTION {||cCaption} ;
- ACCELKEY xbeK_ALT_P ;
- SIZE 9, 1 ;
- ACTION {||cCaption := IIF( cCaption='-$$$-','<###>','-$$$-' ), DC_GetRefresh(GetList)}
-
- @ 3,11 DCSAY 'The caption on this button is a code block'
-
- @ 5,1 DCPUSHBUTTON ;
- CAPTION '~Next' ;
- ACCELKEY xbeK_ALT_N ;
- SIZE 9, 1 ;
- ACTION {||DC_msgbox('Go to the Next Record')}
-
- @ 5,11 DCSAY 'The caption on this button is text'
-
- nBitMap := BITMAP_BOTTOM_1
- @ 7,1 DCPUSHBUTTON ;
- CAPTION {||nBitMap} ;
- ACCELKEY xbeK_ALT_P ;
- SIZE 9, 1 ;
- ACTION {||nBitMap := ;
- IIF( nBitMap=BITMAP_BOTTOM_1,BITMAP_BOTTOM_2,BITMAP_BOTTOM_1 ), ;
- DC_GetRefresh(GetList)}
-
- @ 7,11 DCSAY 'The caption on this button is a code block'
-
- DCREAD GUI ;
- MODAL ;
- TITLE 'Pushbutton Styles' ;
- FIT ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
-
- ReTURN nil
- *** END OF EXAMPLE ***
-
- /* -------------------------------- */
-
- STATIC FUNCTION XSample_7
-
- /*
- BROWSE (DATABASE)
-
- This sample demonstrates a browse of a database with a toolbar at the top
- containing pushbuttons for navigation of the browse.
- */
-
- LOCAL GetList := {}, aPres, oBrowse, oToolBar, aColors, bColor, GetOptions
-
- USE COLLECT VIA DBFNTX NEW SHARED
-
- aColors := { {GRA_CLR_WHITE,GRA_CLR_DARKRED}, ;
- {GRA_CLR_WHITE,GRA_CLR_DARKBLUE}, ;
- {GRA_CLR_BLACK,GRA_CLR_DARKGREEN} }
-
- bColor := {||aColors[COLLECT->for_sale+1]}
-
- aPres := ;
- { { XBP_PP_COL_HA_FGCLR, GRA_CLR_WHITE }, /* Header FG Color */ ;
- { XBP_PP_COL_HA_BGCLR, GRA_CLR_DARKGRAY }, /* Header BG Color */ ;
- { XBP_PP_COL_FA_FGCLR, GRA_CLR_YELLOW }, /* Footer FG Color */ ;
- { XBP_PP_COL_FA_BGCLR, GRA_CLR_DARKGRAY }, /* Footer BG Color */ ;
- { XBP_PP_COL_DA_ROWSEPARATOR, XBPCOL_SEP_DOTTED }, /* Row Sep */ ;
- { XBP_PP_COL_DA_COLSEPARATOR, XBPCOL_SEP_DOTTED }, /* Col Sep */ ;
- { XBP_PP_COL_DA_ROWHEIGHT, 20 }, /* Row Height */ ;
- { XBP_PP_COL_DA_CELLHEIGHT, 20 } } /* Cell Height */
-
- /* ----- Create ToolBar ----- */
-
- @ 1,1 DCTOOLBAR oToolBar ;
- SIZE 77, 1.5
-
- DCADDBUTTON CAPTION 'Top' ;
- SIZE 9 ;
- ACTION {||dbGoTop(), DC_GetRefresh(GetList)} ;
- WHEN {||!DC_TestBof()} ;
- PARENT oToolBar ;
- TOOLTIP 'Go to top of file'
-
- DCADDBUTTON CAPTION 'Previous' ;
- SIZE 9 ;
- ACTION {||dbSkip(-1), DC_GetRefresh(GetList)} ;
- WHEN {||!DC_TestBof()} ;
- PARENT oToolBar ;
- TOOLTIP 'Skip to previous record in file'
-
- DCADDBUTTON CAPTION 'Next' ;
- SIZE 9 ;
- ACTION {||dbSkip(1), DC_GetRefresh(GetList)} ;
- WHEN {||!DC_TestEof()} ;
- PARENT oToolBar ;
- TOOLTIP 'Skip to next record in file'
-
- DCADDBUTTON CAPTION 'Bottom' ;
- SIZE 9 ;
- ACTION {||dbGoBottom(), DC_GetRefresh(GetList)} ;
- WHEN {||!DC_TestEof()} ;
- PARENT oToolBar ;
- TOOLTIP 'Go to Bottom of file'
-
-
- /* ----- Create browse ----- */
-
- @ 3,1 DCBROWSE oBrowse ALIAS 'COLLECT' ;
- SIZE 77,11.8 ;
- EDIT xbeBRW_ItemSelected MODE DCGUI_BROWSE_EDITDOWN ;
- PRESENTATION aPres
-
- DCBROWSECOL FIELD COLLECT->descrip ;
- HEADER "Description" PARENT oBrowse FOOTER '1'
-
- DCBROWSECOL FIELD COLLECT->type ;
- HEADER "Type" PARENT oBrowse FOOTER '2'
-
- DCBROWSECOL FIELD COLLECT->sub_type ;
- HEADER "SubType" PARENT oBrowse FOOTER '3'
-
- DCBROWSECOL FIELD COLLECT->location ;
- HEADER "Location" PARENT oBrowse FOOTER '4'
-
- DCBROWSECOL DATA {|a|a:={'Yes','No','Not Sure'},a[COLLECT->for_sale+1]} ;
- HEADER "For Sale?" PARENT oBrowse ;
- EVAL { |o| o:colorBlock := bColor } FOOTER '5'
-
- DCBROWSECOL FIELD COLLECT->date_orig ;
- HEADER "Orig Date" PARENT oBrowse FOOTER '6'
-
- DCBROWSECOL FIELD COLLECT->date_acqu ;
- HEADER "Acqu Date" PARENT oBrowse FOOTER '7'
-
- DCBROWSECOL FIELD COLLECT->orig_price ;
- HEADER "Acqu Price" PARENT oBrowse FOOTER '8'
-
- DCBROWSECOL FIELD COLLECT->appr_value ;
- HEADER "Appr Value" PARENT oBrowse FOOTER '9'
-
- DCBROWSECOL FIELD COLLECT->condition ;
- HEADER "Condition" PARENT oBrowse FOOTER '10'
-
- DCBROWSECOL DATA {||IIF(COLLECT->original,'Yes','No')} ;
- HEADER "Orig Owner?" PARENT oBrowse FOOTER '11'
-
- DCBROWSECOL FIELD COLLECT->comments ;
- HEADER "Comments" PARENT oBrowse ;
- WHEN {||.f.} FOOTER '12'
-
- DCGETOPTIONS TABSTOP
-
- DCREAD GUI ;
- OPTIONS GetOptions ;
- MODAL ;
- TITLE 'Database Browse Demo' ;
- FIT ;
- BUTTONS DCGUI_BUTTON_EXIT ;
- CLEAREVENTS
-
- CLOSE ALL
-
- ReTURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_8
-
- /*
- PICK-LIST (MASTER DIALOG/SUB DIALOG)
-
- This example will display a list of fields in the "Available Fields"
- selection, allow the operator to select a set of fields, then display
- a Browse of the database for the fields selected. The example shows
- how to use DCREAD GUI to create a master dialog and a sub dialog.
- */
-
- LOCAL GetList := {}, GetOptions, cAlias, aListField, ;
- aPickField, oBrowse, oDialog
-
- USE COLLECT VIA DBFNTX NEW SHARED
-
- cAlias := 'COLLECT'
- aListField := Array(FCount())
- AFields(aListField)
- aPickField := { aListField[1], aListField[2] }
- ADel(aListField,1)
- ADel(aListField,1)
- ASize(aListField,Len(aListField)-2)
-
- @ 2,3 DCPICKLIST aPickField LIST aListField ;
- CAPTION "Available Fields", "Selected Fields" ;
- SIZE 35,12 ;
- COPYITEMS ;
- DATALINK {||BrowseCollect(cAlias,oDialog,@oBrowse,@aPickField)}
-
- DCGET OPTIONS ;
- WINDOW HEIGHT 360 ;
- WINDOW WIDTH 600
-
- DCREAD GUI ;
- MODAL ;
- TITLE "Picklist Demo" ;
- OPTIONS GetOptions ;
- PARENT @oDialog ;
- BUTTONS DCGUI_BUTTON_CANCEL
-
- CLOSE ALL
-
- RETURN nil
-
- /* --------------------- */
-
- STATIC FUNCTION BrowseCollect ( cAlias, oDialog, oBrowse, aPickField )
-
- LOCAL GetList := {}, i, aChildList
-
- IF Valtype(oBrowse) = 'O'
- oBrowse:Destroy()
- ENDIF
-
- oBrowse := nil
-
- IF Empty(aPickField)
- RETURN nil
- ENDIF
-
- @ 2,40 DCBROWSE oBrowse DATA cAlias SIZE 39,12 PARENT oDialog:drawingArea
-
- SELECT collect
- FOR i := 1 TO Len(aPickField)
- DCBROWSECOL DATA &('{||COLLECT->'+aPickField[i]+'}') ;
- HEADER aPickField[i] PARENT oBrowse
- NEXT
-
- DCREAD GUI ;
- MODAL ;
- PARENT oDialog ;
- EXIT
-
- ReTURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_9
-
- /*
- MENU WITH SUB=MENUS
-
- This example displays a dialogue box with a Multi-line edit
- and a menu with 3 submenus: File, Edit, Util.
-
- A set of pushbuttons allow for adding an item to the menu
- on the fly.
- */
-
- LOCAL GetList := {}, oFileMenu, oMenuBar, oEditMenu, oMemo, oUtilMenu, ;
- cMemo, nIndex, oDlg, oMsgBox, lCheckItem :=.t., nCheckIndex, ;
- oExitMenu
-
- USE COLLECT VIA DBFNTX NEW SHARED
-
- cMemo := COLLECT->memo
-
- @ 0,0 DCMULTILINE cMemo SIZE 70,7 FONT "10.Courier Bold"
-
- @ 8,0 DCPUSHBUTTON CAPTION 'Add Menu Item' SIZE 14,1.2 ;
- ACTION {||_XSample9(oUtilMenu,.t.,@nIndex,oDlg, ;
- DC_GetRefresh(GetList))} ;
- WHEN {||Empty(nIndex)}
-
- @ 8,16 DCPUSHBUTTON CAPTION 'Delete Menu Item' SIZE 14,1.2 ;
- ACTION {||_XSample9(oUtilMenu,.f.,@nIndex,oDlg, ;
- DC_GetRefresh(GetList))} ;
- WHEN {||!Empty(nIndex)}
-
- /* ---- Menu ---- */
-
- DCMENUBAR oMenuBar
-
- DCSUBMENU oFileMenu PROMPT "&File" PARENT oMenuBar ;
- MESSAGE 'These are FILE selections' INTO oMsgBox
-
- DCMENUITEM "&Open a File" PARENT oFileMenu ;
- MESSAGE 'This selection opens a New File' ;
- INTO oMsgBox ;
- ACTION {||DC_Msgbox('OpenFile')}
-
- DCMENUITEM "&Close File" PARENT oFileMenu ;
- MESSAGE 'This selection closes the currently selected file' ;
- INTO oMsgBox ;
- ACTION {||DC_Msgbox('CloseFile')}
-
- DCMENUITEM "&Pack File" PARENT oFileMenu ;
- MESSAGE 'This selection permanently removes deleted records' ;
- INTO oMsgBox ;
- ACTION {||DC_Msgbox('Packfile')}
-
- DCSUBMENU oEditMenu PROMPT "&Edit" PARENT oMenuBar ;
- MESSAGE 'These are EDIT selections' INTO oMsgBox
-
- DCMENUITEM BITMAP_NEXT_1 PARENT oEditMenu ;
- ACTION {||dbSkip(), ;
- cMemo := COLLECT->memo,;
- DC_GetRefresh(GetList)} ;
- ACCELKEY xbeK_ALT_N ;
- WHEN {||!Eof()} ;
- MESSAGE 'Go to the NEXT record' INTO oMsgBox
-
- DCMENUITEM BITMAP_PREVIOUS_1 PARENT oEditMenu ;
- ACTION {||dbSkip(-1), ;
- cMemo := COLLECT->memo,;
- DC_GetRefresh(GetList)} ;
- ACCELKEY xbeK_ALT_P ;
- WHEN {||!Bof()} ;
- MESSAGE 'Go to the PREVIOUS record' INTO oMsgBox
-
- DCMENUITEM BITMAP_TOP_1 PARENT oEditMenu ;
- ACTION {||dbGoTop(), ;
- cMemo := COLLECT->memo,;
- DC_GetRefresh(GetList)} ;
- ACCELKEY xbeK_ALT_T ;
- MESSAGE 'Go the the TOP of the file' INTO oMsgBox
-
- DCMENUITEM BITMAP_BOTTOM_1 PARENT oEditMenu ;
- ACTION {||dbGoBottom(), ;
- cMemo := COLLECT->memo, ;
- DC_GetRefresh(GetList)} ;
- ACCELKEY xbeK_ALT_B ;
- MESSAGE 'Go to the BOTTOM of the file' INTO oMsgBox
-
- DCSUBMENU oUtilMenu PROMPT "&Util" PARENT oMenuBar ;
- MESSAGE 'These are UTILITIES' INTO oMsgBox
-
- DCMENUITEM "&Copy File" PARENT oUtilMenu ;
- ACTION {||DC_Msgbox('CopyFile')} ;
- MESSAGE 'Copy a file' INTO oMsgBox
-
- DCMENUITEM "&Move File" PARENT oUtilMenu ;
- ACTION {||Msgbox('MoveFile')} ;
- MESSAGE 'Move a file' INTO oMsgBox
-
- DCMENUITEM "Toggle Check" PARENT oUtilMenu ;
- INDEX nCheckIndex ;
- CHECKED ;
- ACTION {||lCheckItem := !lCheckItem, ;
- oUtilMenu:CheckItem(nCheckIndex,lCheckItem)} ;
- MESSAGE 'Click here to Toggle Check Mark' INTO oMsgBox
-
- DCSUBMENU oExitMenu PROMPT "E~xit" PARENT oMenuBar ;
- MESSAGE 'This will EXIT the Menu Demo' INTO oMsgBox ;
- ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}
-
- @ 10,0 DCMESSAGEBOX OBJECT oMsgBox SIZE 70,1.5 FONT '10.Arial Bold'
-
- DCREAD GUI ;
- TITLE 'Menu Demo' ;
- FIT ;
- MODAL ;
- EVAL {|o|SetAppWindow(o)} ;
- PARENT @oDlg ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
-
- CLOSE ALL
-
- RETURN nil
-
- /* --------------------------- */
-
- STATIC FUNCTION _XSample9( oUtilMenu, lAddItem, nIndex, oDlg )
-
- LOCAL GetList := {}
-
- IF lAddItem .AND. Empty(nIndex)
-
- DCMENUITEM "New Menu Item" PARENT oUtilMenu ;
- ACTION {||Msgbox('New Menu Item')} ;
- INDEX nIndex
-
- DCREAD GUI EXIT PARENT oDlg
- DC_MsgBox('"New Menu Item" was added to Utilities Menu')
-
- ELSEIF !Empty(nIndex)
- oUtilMenu:delItem(nIndex)
- DC_MsgBox('"New Menu Item" was deleted from Utilities Menu')
- nIndex := nil
-
- ENDIF
-
- RETURN nil
- *** END OF EXAMPLE ***
-
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_10
-
- /*
- CELL-EDITING in a BROWSE
-
- This example shows how to enable editing of data within the
- cells of the browse display. The EDITOR clause of the
- DCBROWSECOL command defines the ID of the object to use as
- the cell-editor.
-
- */
-
- LOCAL GetList := {}, oBrowse, oBrowBox, oMsgBox, aType, xNIL
-
- USE COLLECT VIA DBFNTX NEW SHARED
- DC_GetPopUpCaption({nil,BITMAP_PICKLIST,1})
-
- @ 2,2 DCSTATIC XBPSTATIC_TYPE_RECESSEDBOX SIZE 78,12 ;
- OBJECT oBrowBox
-
- @ .1,.5 DCBROWSE oBrowse PARENT oBrowBox ALIAS 'COLLECT' ;
- SIZE 77,11.8 ;
- FREEZELEFT { 1 } ;
- EDIT xbeBRW_ItemSelected MODE DCGUI_BROWSE_EDITACROSSDOWN ;
- DELETE xbeK_DEL ;
- INSERT xbeK_INS ;
- PRESENTATION DC_BrowPres()
-
- DCBROWSECOL FIELD COLLECT->descrip ;
- WIDTH 8 ;
- MESSAGE 'This is the description of the article' ;
- HEADER "Description" PARENT oBrowse
-
- DCBROWSECOL FIELD COLLECT->type ;
- WIDTH 6 ;
- MESSAGE 'This is the Type-Class of the article' ;
- HEADER "Type" PARENT oBrowse ;
- EDITOR 'TYPE'
-
- DCBROWSECOL FIELD COLLECT->date_orig ;
- HEADER "Orig Date" PARENT oBrowse ;
- MESSAGE 'This is the date the article was created or discovered' ;
- WIDTH 6 ;
- EDITOR 'ORIGINAL_DATE'
-
- DCBROWSECOL FIELD COLLECT->date_acqu ;
- HEADER "Acqu Date" PARENT oBrowse ;
- MESSAGE 'This is the date the article was acquired' ;
- WIDTH 6 ;
- EDITOR 'ACQUIRED_DATE'
-
- DCBROWSECOL FIELD COLLECT->orig_price ;
- HEADER "Acqu Price" PARENT oBrowse ;
- MESSAGE 'This is the original price paid for the article' ;
- WIDTH 6 ;
- EDITOR 'ORIGINAL_PRICE'
-
- DCBROWSECOL FIELD COLLECT->appr_value ;
- HEADER "Appr Value" PARENT oBrowse ;
- MESSAGE 'This is the current appraised value of the article' ;
- WIDTH 6 ;
- EDITOR 'APPRAISED_VALUE'
-
- DCBROWSECOL FIELD COLLECT->memo ;
- HEADER "Memo" PARENT oBrowse ;
- MESSAGE 'This is general info about how the article was acquired' ;
- WIDTH 24 ;
- EDITOR 'BROWSEEDIT_MEMO' EXITKEY xbeK_F10
-
- aType := { 'HollyWood','Sports','Star-Trek','Comics','Books','Other' }
-
- @ nil, nil DCCOMBOBOX xNIL LIST aType SIZE 12,6 ;
- TYPE XBPCOMBO_DROPDOWN ;
- MESSAGE 'Enter the TYPE of article' ;
- ID 'TYPE'
-
- @ nil,nil DCMULTILINE xNIL SIZE 20,5 ;
- FONT "10.Courier" ;
- MESSAGE 'Press the F10 Key to Exit and Save' ;
- ID 'BROWSEEDIT_MEMO'
-
- @ nil, nil DCGET xNIL PICT '99/99/9999' ;
- POPUP {|d|DC_PopDate(d)} ;
- MESSAGE 'Enter the Date that article was created or discovered' ;
- GETID 'ORIGINAL_DATE'
-
- @ nil, nil DCGET xNIL PICT '99/99/9999' ;
- POPUP {|d|DC_PopDate(d)} ;
- MESSAGE 'Enter the Date that article was acquired' ;
- GETID 'ACQUIRED_DATE'
-
- /*
- @ nil, nil DCGET xNIL PICT '@K 9999.99' ;
- POPUP {|n|DC_PopCalc(n)} ;
- MESSAGE 'Enter the Price paid for article' ;
- GETID 'ORIGINAL_PRICE'
- */
-
- @ nil, nil DCSPINBUTTON xNIL SIZE 10,1 ID 'ORIGINAL_PRICE' LIMITS 1,5
-
- @ nil, nil DCGET xNIL PICT '@K 9999.99' ;
- POPUP {|n|DC_PopCalc(n)} ;
- MESSAGE 'Enter the Current appraised value of article' ;
- GETID 'APPRAISED_VALUE'
-
- @ 15,2 DCMESSAGEBOX OBJECT oMsgBox SIZE 78,1.2 ;
- FONT '12.Helv'
-
- DCREAD GUI ;
- FIT ;
- MODAL ;
- BUTTONS DCGUI_BUTTON_EXIT ;
- TITLE 'Example of Browse Cell-Editing (double-click on a cell)'
-
- IF Flock()
- CLOSE
- ENDIF
-
- RETURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_11
-
- /*
- HOT-KEYS
-
- This example shows hot to use the DCHOTKEY command to select
- a radio-button by pressing an ALT-<letter> hot key.
- */
-
- LOCAL GetList := {}, GetOptions, cOption, oRadio1, oRadio2, ;
- oRadio3, oRadio4
-
- cOption := 'P'
-
- @ 1,2 DCRADIO cOption PROMPT 'Save to &Dictionary' VALUE 'D' ;
- OBJECT oRadio1
-
- @ 2,2 DCRADIO cOption PROMPT '&Save to Source Code' VALUE 'S' ;
- OBJECT oRadio2
-
- @ 3,2 DCRADIO cOption PROMPT 'Make a &Backup file' VALUE 'B' ;
- OBJECT oRadio3
-
- @ 4,2 DCRADIO cOption PROMPT '&Pack the File' VALUE 'P' ;
- OBJECT oRadio4
-
- DCHOTKEY xbeK_ALT_D ACTION {||SetAppFocus(oRadio1), ;
- oRadio2:SetData(.f.), ;
- oRadio3:SetData(.f.), ;
- oRadio4:SetData(.f.), ;
- oRadio1:SetData(.t.), ;
- cOption := 'D' }
-
- DCHOTKEY xbeK_ALT_S ACTION {||SetAppFocus(oRadio2), ;
- oRadio1:SetData(.f.), ;
- oRadio3:SetData(.f.), ;
- oRadio4:SetData(.f.), ;
- oRadio2:SetData(.t.), ;
- cOption := 'S' }
-
- DCHOTKEY xbeK_ALT_B ACTION {||SetAppFocus(oRadio3), ;
- oRadio1:SetData(.f.), ;
- oRadio2:SetData(.f.), ;
- oRadio4:SetData(.f.), ;
- oRadio3:SetData(.t.), ;
- cOption := 'B' }
-
- DCHOTKEY xbeK_ALT_P ACTION {||SetAppFocus(oRadio4), ;
- oRadio1:SetData(.f.), ;
- oRadio2:SetData(.f.), ;
- oRadio3:SetData(.f.), ;
- oRadio4:SetData(.t.), ;
- cOption := 'P' }
-
- DCREAD GUI ;
- TITLE 'Hot-Key Demo';
- FIT ;
- MODAL ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
-
- DC_MsgBox({cOption})
-
- RETURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_12
-
- /*
- BIT-MAP
-
- This sample will display a sequence of Bit-Maps that are stored in
- a database.
- */
-
- LOCAL GetList := {}, oClipPhoto, oBitMap, nBitMap, lPlayBack
-
- @ 4,10 DCSTATIC XBPSTATIC_TYPE_RAISEDBOX SIZE 50,10 ;
- OBJECT oClipPhoto
-
- nBitMap := BITMAP_EXPRESS
- DCBITMAP nBitMap PARENT oClipPhoto AUTOSCALE OBJECT oBitMap
- lPlayBack := .f.
-
- @ 4,65 DCPUSHBUTTON CAPTION 'PlayBack' SIZE 9,2 ;
- TOOLTIP 'Play Back all BitMaps in IMAGES.DBF' ;
- ACTION {||lPlayBack := .t., ;
- DisplayImages(oClipPhoto,oBitMap,@lPlayBack,GetList) }
-
- @ 7,65 DCPUSHBUTTON CAPTION 'Stop' SIZE 9,2 ;
- TOOLTIP 'Stop the Play Back' ;
- WHEN {||lPlayBack} ;
- ACTION {||lPlayBack := .f.}
-
- DCREAD GUI ;
- FIT ;
- MODAL ;
- BUTTONS DCGUI_BUTTON_OK ;
- TITLE 'BitMap Demo'
-
- RETURN nil
-
- /* ------------------- */
-
- STATIC FUNCTION DisplayImages( oClipPhoto, oBitMap, lPlayBack, GetList )
-
- LOCAL nSeconds, lClearBox := .t., nSaveArea := Select(), cBmpDb, ;
- nEvent, oXbp, mp1, mp2, cAlaskaDrive, lOk
-
- IF !lPlayBack
- RETURN nil
- ENDIF
-
- cBmpDb := '\ALASKA\XPPW32\SOURCE\SAMPLES\DATA\BMPDB.DBF'
- IF !File(cBmpDb)
- cAlaskaDrive := SubStr(GetEnv('XPPRESOURCE'),1,2)
- cBmpDb := Strtran(cBmpDb,'C:',cAlaskaDrive)
- ENDIF
- lOk := .t.
-
- IF !File(cBmpDb)
- GetList := {}
- @ 1,1 DCSAY ;
- "Can't find Bitmap database, Enter path and file name" ;
- SAYSIZE 50
- cBmpDb := Pad(cBmpDb,60)
- @ 2,1 DCGET cBmpDb
- DCREAD GUI ;
- FIT ;
- MODAL ;
- ADDBUTTONS TO lOk ;
- ENTEREXIT
- cBmpDb := Alltrim(cBmpDb)
- ENDIF
-
- DC_GetWhen(GetList)
- IF lOk .AND. File(cBmpDb)
- USE (cBmpDb) NEW VIA foxcdx
- nEvent := xbeP_None
- DO WHILE lPlayBack .AND. nEvent # xbeP_Close
- oBitMap:setBuffer(FIELD->BITMAP,XBPBMP_FORMAT_WIN3X)
- DC_BitMapDraw( oClipPhoto, oBitMap, lClearBox )
- lClearBox := .f.
- IF Eof()
- DbGoTop()
- ELSE
- DbSkip(1)
- ENDIF
- Sleep(0.1)
- nEvent := AppEvent( @mp1, @mp2, @oXbp, .01 )
- IF Valtype(oXbp) = 'O'
- IF nEvent = xbeM_Motion .AND. mp1 == NIL
- LOOP
- ENDIF
- oXbp:handleEvent( nEvent, mp1, mp2, oXbp )
- ENDIF
- ENDDO
- CLOSE
- ENDIF
-
- RETURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_13
-
- /*
- APPLICATION EDIT
-
- This sample uses DCAPPEDIT and DCAPPFIELD to create an Application Edit
- FOR a database.
- */
-
- LOCAL GetList := {}, oStatic, oAppEdit
-
- USE COLLECT VIA DBFNTX NEW SHARED
-
- @ 0,0 DCSTATIC XBPSTATIC_TYPE_RAISEDBOX SIZE 78,18.5 ;
- OBJECT oStatic
-
- DCAPPEDIT INTO oAppEdit STYLE 3D POSITION 0,0 PARENT oStatic
-
- DCAPPFIELD COLLECT->descrip INTO oAppEdit ;
- CAPTION 'Description' ;
- COLOR GRA_CLR_BLUE
-
- DCAPPFIELD COLLECT->type INTO oAppEdit ;
- CAPTION 'Type' ;
- COLOR GRA_CLR_BLUE
-
- DCAPPFIELD COLLECT->sub_type INTO oAppEdit ;
- CAPTION 'Sub-Type' ;
- COLOR GRA_CLR_BLUE
-
- DCAPPFIELD COLLECT->location INTO oAppEdit ;
- CAPTION 'Location' ;
- COLOR GRA_CLR_BLUE
-
- DCAPPFIELD COLLECT->date_orig INTO oAppEdit ;
- CAPTION 'Date of Origin' ;
- COLOR GRA_CLR_BLUE
-
- DCAPPFIELD COLLECT->date_acqu INTO oAppEdit ;
- CAPTION 'Acquired Date' ;
- COLOR GRA_CLR_BLUE
-
- DCAPPFIELD COLLECT->appr_value INTO oAppEdit ;
- CAPTION 'Appraised Value' ;
- COLOR GRA_CLR_BLUE
-
- DCAPPFIELD COLLECT->for_sale INTO oAppEdit ;
- CAPTION 'For Sale?' ;
- COLOR GRA_CLR_BLUE
-
- DCAPPFIELD COLLECT->condition INTO oAppEdit ;
- CAPTION 'Condition' ;
- COLOR GRA_CLR_BLUE
-
- DCAPPFIELD COLLECT->bitmap1 INTO oAppEdit ;
- CAPTION 'Bit Map File #1' ;
- COLOR GRA_CLR_BLUE
-
- DCAPPFIELD COLLECT->bitmap2 INTO oAppEdit ;
- CAPTION 'Bit Map File #2' ;
- COLOR GRA_CLR_BLUE
-
- DCAPPFIELD COLLECT->comments INTO oAppEdit ;
- CAPTION 'Comments' ;
- COLOR GRA_CLR_BLUE
-
- DCAPPFIELD COLLECT->memo INTO oAppEdit ;
- CAPTION 'How was this item acquired?' ;
- COLOR GRA_CLR_BLUE ;
- WIDTH 60
-
- DCREAD GUI ;
- TITLE 'Application Edit Demo' ;
- FIT ;
- MODAL ;
- BUTTONS DCGUI_BUTTON_EXIT
-
- RETURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_14
- /*
- PROGRESS BAR
-
- This example demonstrates a progress bar that is displayed
- while copying records from a database. The CANCEL button
- can be used to cancel the copy while in progress.
- */
-
- LOCAL Getlist := {}, oProgress, oDialog, lOk := .t., oButton, ;
- nEvent, mp1, mp2, oXbp
-
- IF !File('..\XDOC\EXPRESS.DBF')
- DC_MsgBox({'Sorry. The database required to show this feature',;
- 'is not included in the demonstration version', ;
- 'or the ..\XDOC\EXPRESS.DBF file does not exist'})
- RETURN nil
- ENDIF
-
- USE ..\XDOC\EXPRESS VIA FOXCDX ALIAS XDOC
-
- @ 2,5 DCSAY 'Exporting Data to JUNK.DBF'
-
- @ 4,5 DCPROGRESS oProgress ;
- SIZE 55,1.5 ;
- PERCENT ;
- EVERY 5 ;
- MAXCOUNT RecCount() COLOR GRA_CLR_BLUE
-
- @ 4,65 DCPUSHBUTTON CAPTION '&Cancel' ;
- ACTION {||lOk:=.f.} OBJECT oButton ;
- SIZE 8,1.5
-
- DCREAD GUI ;
- TITLE 'My Test Dialog' ;
- PARENT @oDialog ;
- FIT ;
- EXIT ;
- MODAL
-
- oDialog:show()
-
- COPY TO junk WHILE _Progress( oProgress, @lOk )
-
- oButton:SetCaption('&Ok')
- DC_AppEvent( @lOk )
-
- IF !lOk
- FErase('JUNK.DBF')
- ENDIF
-
- oDialog:Destroy()
- CLOSE ALL
-
- RETURN nil
-
- /* ----------------- */
-
- STATIC FUNCTION _Progress ( oProgress, lOk )
-
- LOCAL nMaxCount := RecCount()
-
- DC_GetProgress( oProgress, RecNo() )
- DC_AppEvent( @lOk, 0, .01 )
-
- RETURN lOk
- *** END OF EXAMPLE *** p
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_15
-
- /*
- SCROLL-BARS
-
- This example uses three scrollbars to change the RED, GREEN
- and BLUE colors and display the result in a box.
- */
-
- LOCAL nRed := 50, nGreen := 100, nBlue := 150, GetList := {}, oColorBox
-
- @ 2, 44 DCSAY 'R' SAYSIZE 2
- @ 3, 43 DCSCROLLBAR DATA nRed SIZE 3,7 ;
- TYPE XBPSCROLL_VERTICAL RANGE 0,255 ;
- SCROLL { |a,x,o| nRed := a[1], ;
- o:SetData(), RGB(nRed,nGreen,nBlue,oColorBox) }
-
- @ 2, 48 DCSAY 'G' SAYSIZE 2
- @ 3, 47 DCSCROLLBAR DATA nGreen SIZE 3,7 ;
- TYPE XBPSCROLL_VERTICAL RANGE 0,255 ;
- SCROLL { |a,x,o| nGreen := a[1], ;
- o:SetData(), RGB(nRed,nGreen,nBlue,oColorBox) }
-
- @ 2, 52 DCSAY 'B' SAYSIZE 2
- @ 3, 51 DCSCROLLBAR DATA nBlue SIZE 3,7 ;
- TYPE XBPSCROLL_VERTICAL RANGE 0,255 ;
- SCROLL { |a,x,o| nBlue := a[1], ;
- o:SetData(), RGB(nRed,nGreen,nBlue,oColorBox) }
-
- @ 11, 40 DCSTATIC XBPSTATIC_TYPE_RAISEDBOX SIZE 20,2 ;
- OBJECT oColorBox ;
- EVAL {|o|o:paint := {||RGB(nRed,nGreen,nBlue,oColorBox)} }
-
- DCREAD GUI ;
- TITLE 'Scroll-bar Demo' ;
- FIT ;
- MODAL ;
- BUTTONS DCGUI_BUTTON_EXIT ;
- EVAL {||RGB(nRed,nGreen,nBlue,oColorBox)}
-
- RETURN nil
-
- /* ---------------- */
-
- STATIC FUNCTION RGB( nRed, nGreen, nBlue, oColorBox )
-
- LOCAL aAttr := Array(GRA_AA_COUNT) // area attributes
- LOCAL nMax, aOldAttr, aOldRGB, oPS
-
- oPS := oColorBox:LockPS()
- nMax := oPS:maxColorIndex() // max colors
-
- // Set new RGB color and draw box
- aAttr[ GRA_AA_COLOR ] := nMax
- aOldAttr := oPS:setAttrArea( aAttr )
- aOldRGB := oPS:setColorIndex( nMax, {nRed,nGreen,nBlue} )
- GraBox( oPS, {0,0}, {200,200}, GRA_FILL )
- oPS:setAttrArea( aOldAttr )
- oPS:setColorIndex( nMax, aOldRGB )
- oColorBox:unlockPS( oPS )
-
- RETURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_16
-
- /*
- STATIC BOXES
-
- This example shows how to create different styles of STATIC boxes
- using the DCSTATIC command.
- */
-
- LOCAL GetList := {}, oStatic1, oStatic2
-
- @ 0,0 DCSTATIC XBPSTATIC_TYPE_RECESSEDBOX SIZE 20,4 ;
- OBJECT oStatic1
-
- @ 6,0 DCSTATIC XBPSTATIC_TYPE_RAISEDBOX SIZE 20,4 ;
- OBJECT oStatic2
-
- @ 2,1 DCSTATIC XBPSTATIC_TYPE_TEXT SIZE 15,1 ;
- CAPTION 'This is Recessed' PARENT oStatic1
-
- @ 2,1 DCSTATIC XBPSTATIC_TYPE_TEXT SIZE 15,1 ;
- CAPTION 'This is Raised' PARENT oStatic2
-
- DCREAD GUI ;
- TITLE 'Static Demo' ;
- FIT ;
- MODAL ;
- BUTTONS DCGUI_BUTTON_EXIT
-
- RETURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_17
-
- /*
- TAB-PAGES
-
- This is an example of Tab-Pages using the DCTABPAGE command. Note
- that the second and third tab-pages do not require sizing when they
- are created RELATIVE to the previous tab-page.
- */
-
- LOCAL oTabPage1, oTabPage2, oTabPage3, oTabPage4, cDesc := Space(30),;
- aType := {'Star-Trek','Hollywood','Sports','Other'},;
- cType := Space(15), dDateOrig := Date(), dDateAcqu := Date(),;
- nOrigPrice := 0, nApprValue := 0, cMemo := '', ;
- GetList := {}, oSubTabPage1, oSubTabPage2, oSubTabPage3
-
- /* ---- Tab Page #1 ---- */
-
- @ 0,0 DCTABPAGE oTabPage1 CAPTION 'Collection' ;
- SIZE 72,15 PREOFFSET 0 POSTOFFSET 85
-
- @ 3,2 DCSAY "Description" GET cDesc SAYRIGHT PARENT oTabPage1
-
- @ 5,10 DCSAY "Type" PARENT oTabPage1 SAYSIZE 8
-
- @ 6,10 DCCOMBOBOX cType LIST aType SIZE 12,6 PARENT oTabPage1
-
-
- /* ---- Tab Page #2 ---- */
-
- @ 0,0 DCTABPAGE oTabPage2 CAPTION 'Financial' ;
- RELATIVE oTabPage1
-
- @ 4,2 DCSAY " Original Date" GET dDateOrig PICT '99/99/9999' ;
- PARENT oTabPage2 SAYRIGHT
-
- @ 6,2 DCSAY " Acquired Date" GET dDateAcqu PICT '99/99/9999' ;
- PARENT oTabPage2 SAYRIGHT
-
- @ 8,2 DCSAY " Acquired Price" GET nOrigPrice PICT '9999.99' ;
- PARENT oTabPage2 SAYRIGHT
-
- @ 10,2 DCSAY "Appraised Value" GET nApprValue PICT '9999.99' ;
- PARENT oTabPage2 SAYRIGHT
-
- /* ---- Tab Page #3 ---- */
-
- @ 0,0 DCTABPAGE oTabPage3 CAPTION 'Memo' ;
- RELATIVE oTabPage2
-
- @ 5,2 DCMULTILINE cMemo PARENT oTabPage3 SIZE 65,8 ;
- FONT "10.Courier Bold"
-
- /* ---- Tab Page #4 ---- */
-
- @ 0,0 DCTABPAGE oTabPage4 CAPTION 'Sub-Tabs' ;
- RELATIVE oTabPage3
-
- @ 2,5 DCTABPAGE oSubTabPage1 CAPTION 'Tab1' ;
- SIZE 50,10 PREOFFSET 0 POSTOFFSET 85 ;
- PARENT oTabPage4
-
- @ 3,10 DCSAY 'Sub-Page 1' FONT '12.Helv' PARENT oSubTabPage1 ;
- SAYSIZE 30,2
-
- @ 0,0 DCTABPAGE oSubTabPage2 CAPTION 'Tab2' ;
- RELATIVE oSubTabPage1 PARENT oTabPage4
-
- @ 3,10 DCSAY 'Sub-Page 2' FONT '12.Helv' PARENT oSubTabPage2 ;
- SAYSIZE 30,2
-
- @ 0,0 DCTABPAGE oSubTabPage3 CAPTION 'Tab3' ;
- RELATIVE oSubTabPage2 PARENT oTabPage4
-
- @ 3,10 DCSAY 'Sub-Page 3' FONT '12.Helv' PARENT oSubTabPage3 ;
- SAYSIZE 30,2
-
- DCREAD GUI ;
- TITLE 'Tab-Page Demo' ;
- FIT ;
- MODAL ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
-
- CLOSE
-
- RETURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_18
-
- /*
- USER-CREATED DIALOGUE
-
- This is an example of using eXPress++ commands with a previously-created
- dialog window. In this example, the dialog window is an XbpDialog() class.
- */
-
- LOCAL oTabPage1, oTabPage2, oTabPage3, cDesc := Space(30),;
- aType := {'Star-Trek','Hollywood','Sports','Other'},;
- cType := Space(15), dDateOrig := Date(), dDateAcqu := Date(),;
- nOrigPrice := 0, nApprValue := 0, cMemo := '', ;
- GetList := {}, oDialog, oSaveApp := SetAppWindow()
-
- oDialog := XbpDialog():New( AppDeskTop(),AppDeskTop(), { 100, 100 }, { 600, 420 },,.t. )
- oDialog:Title := "eXPress Sample - User Created Dialogue"
- IF Valtype(DC_IconDefault())='N'
- oDialog:icon := DC_IconDefault()
- ENDIF
- oDialog:Create()
-
- SetAppWindow(oDialog)
-
- /* ---- Tab Page #1 ---- */
-
- @ 3,3 DCTABPAGE oTabPage1 CAPTION 'Collection' ;
- SIZE 72,13 PREOFFSET 0 POSTOFFSET 85
-
- @ 3,2 DCSAY "Description" GET cDesc SAYRIGHT PARENT oTabPage1
-
- @ 5,10 DCSAY "Type" PARENT oTabPage1 SAYSIZE 8
-
- @ 6,10 DCCOMBOBOX cType LIST aType SIZE 12,6 PARENT oTabPage1
-
-
- /* ---- Tab Page #2 ---- */
-
- @ 0,0 DCTABPAGE oTabPage2 CAPTION 'Financial' ;
- RELATIVE oTabPage1
-
- @ 4,2 DCSAY " Original Date" GET dDateOrig PICT '99/99/9999' ;
- PARENT oTabPage2 SAYRIGHT
-
- @ 6,2 DCSAY " Acquired Date" GET dDateAcqu PICT '99/99/9999' ;
- PARENT oTabPage2 SAYRIGHT
-
- @ 8,2 DCSAY " Acquired Price" GET nOrigPrice PICT '9999.99' ;
- PARENT oTabPage2 SAYRIGHT
-
- @ 10,2 DCSAY "Appraised Value" GET nApprValue PICT '9999.99' ;
- PARENT oTabPage2 SAYRIGHT
-
- /* ---- Tab Page #3 ---- */
-
- @ 0,0 DCTABPAGE oTabPage3 CAPTION 'Memo' ;
- RELATIVE oTabPage2
-
- @ 2,2 DCMULTILINE cMemo PARENT oTabPage3 SIZE 65,8 ;
- FONT "10.Courier Bold"
-
- DCREAD GUI ;
- TITLE 'User-Created Dialog' ;
- MODAL ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL ;
- PARENT oDialog
-
- oDialog:Destroy()
- SetAppWindow( oSaveApp )
-
- RETURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_19
-
- /* ARRAY BROWSER WITH COLORS
-
- This example demonstrates how to control the color of cells in
- an array browser using DCBROWSE. In this example, the color of
- the SIZE cells is dependent on the size of the file. The
- function DC_GETCOLARRAY() is used as a pointer into the array
- being browsed.
-
- */
-
- LOCAL GetList := {}, cFileName, oFileName, aDirectory, i, ;
- nPointer, oDirectory, aColors, bColor, GetOptions
-
- cFileName := Space(30)
-
- @ 2,2 DCGET cFileName GETSIZE 43 GETOBJECT oFileName
-
- aDirectory := Directory()
- FOR i := 1 TO Len(aDirectory)
- ASize(aDirectory[i],5)
- aDirectory[i,5] := .f.
- NEXT
- ASort(aDirectory,,,{|a,b|a[1]<b[1]})
-
- @ 3.5,2 DCBROWSE oDirectory DATA aDirectory ;
- SIZE 60,12 ;
- FONT '10.Helv Bold' ;
- PRESENTATION DC_BrowPres() ;
- POINTER nPointer ;
- DATALINK {|a,b,o|cFileName:=aDirectory[nPointer,1],oFileName:SetData()} ;
- EVAL {|o|o:keyboard := {|nKey,x,oBrowse|_TabColumns(nKey,oBrowse)}} ;
- OPTIMIZE ;
- FIT ;
- NOHSCROLL ;
- MARK 5 ;
- MKCOLOR 5, GRA_CLR_WHITE, GRA_CLR_BLUE
-
- aColors := { {GRA_CLR_WHITE,GRA_CLR_DARKRED}, ;
- {GRA_CLR_WHITE,GRA_CLR_DARKBLUE}, ;
- {GRA_CLR_BLACK,GRA_CLR_DARKGREEN}, ;
- {GRA_CLR_BLACK,GRA_CLR_YELLOW} }
-
- bColor := {| nSize, nCase | nSize := DC_GetColArray(2,oDirectory),;
- nCase := DC_PickCase(nSize,'>=',;
- {1000000,100000,10000,0}, ;
- { 1, 2, 3,4} ), aColors[nCase] }
-
- DCBROWSECOL ELEMENT 1 WIDTH 10 HEADER "Name" PARENT oDirectory
-
- DCBROWSECOL ELEMENT 2 WIDTH 7 HEADER "Size" PARENT oDirectory ;
- EVAL { |o|o:colorBlock := bColor }
-
- DCBROWSECOL ELEMENT 3 WIDTH 8 HEADER "Date" PARENT oDirectory
-
- DCBROWSECOL ELEMENT 4 WIDTH 6 HEADER "Time" PARENT oDirectory
-
- DCBROWSECOL ELEMENT 5 WIDTH 4 HEADER "Marked" PARENT oDirectory
-
- DCGETOPTIONS NOMINBUTTON NOMAXBUTTON NORESIZE TABSTOP
-
- DCREAD GUI ;
- OPTIONS GetOptions ;
- FIT ;
- MODAL ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL ;
- TITLE 'Array Browse of Directory'
-
- RETURN nil
-
- * ------------
-
- STATIC FUNCTION _TabColumns(nKey,oDirectory)
-
- IF nKey == xbeK_TAB
- IF oDirectory:colPos < oDirectory:colCount
- oDirectory:right()
- ELSE
- oDirectory:firstcol()
- ENDIF
- oDirectory:forceStable()
- ENDIF
- RETURN nil
- *** END OF EXAMPLE ***
-
- * ------------------------
-
- STATIC FUNCTION XSample_20
- /*
-
- USER-DEFINED COMMAND
-
- In this example, a custom command named @..FILEVIEW can be used
- to view an ASCII file. The command is used with DCREAD GUI and
- can be mixed with any other UDC commands or DC* commands.
- */
-
- #define MYGETLIST_FILEVIEW GETLIST_USER + 1
-
- #command @ <nRow>,<nCol> FILEVIEW <(cFile)> ;
- [SIZE <nWidth> [,<nHeight>]] ;
- [PARENT <oParent>] ;
- [PRESENTATION <aPres>] ;
- [OBJECT <oCustom>] ;
- [COLOR <ncFgC> [,<ncBgC>] ] ;
- [FONT <cFont>] ;
- [MESSAGE <cMessage>] ;
- [HELPCODE <cHelpCode>] ;
- [TOOLTIP <cToolTip>] ;
- [<p:PIXEL>] ;
- [TITLE <cTitle>] ;
- [RELATIVE <oRel>] ;
- [ID <cId>] ;
- [ACCELKEY <nAccel>] ;
- => ;
- AADD( GetList, ;
- { MYGETLIST_FILEVIEW, /* nGETLIST_TYPE */ ;
- nil, /* nGETLIST_SUBTYPE */ ;
- nil, /* cGETLIST_CAPTION */ ;
- nil, /* bGETLIST_VAR */ ;
- <nRow>, /* nGETLIST_STARTROW */ ;
- <nCol>, /* nGETLIST_STARTCOL */ ;
- nil, /* nGETLIST_ENDROW */ ;
- nil, /* nGETLIST_ENDCOL */ ;
- <nWidth>, /* nGETLIST_WIDTH */ ;
- <nHeight>, /* nGETLIST_HEIGHT */ ;
- <cFont>, /* cGETLIST_FONT */ ;
- nil, /* cGETLIST_PICTURE */ ;
- nil, /* bGETLIST_WHEN */ ;
- nil, /* bGETLIST_VALID */ ;
- <cToolTip>, /* cGETLIST_TOOLTIP */ ;
- nil, /* xGETLIST_CARGO */ ;
- <aPres>, /* aGETLIST_PRESENTATION */ ;
- nil, /* bGETLIST_ACTION */ ;
- nil, /* oGETLIST_OBJECT */ ;
- nil, /* xGETLIST_ORIGVALUE */ ;
- <(cFile)>, /* xGETLIST_OPTIONS */ ;
- [{<ncFgC>,<ncBgC>}], /* aGETLIST_COLOR */ ;
- <cMessage>, /* cGETLIST_MESSAGE */ ;
- <cHelpCode>, /* cGETLIST_HELPCODE */ ;
- nil, /* cGETLIST_VARNAME */ ;
- nil, /* bGETLIST_READVAR */ ;
- nil, /* bGETLIST_DELIMVAR */ ;
- [{DC_GetAnchorCB(@<oCustom>,'O'), ;
- <(oCustom)>,'O'}], /* bGETLIST_GROUP */ ;
- nil, /* nGETLIST_POINTER */ ;
- [{DC_GetAnchorCB(@<oParent>,'O'), ;
- <(oParent)>,'O'}], /* bGETLIST_PARENT */ ;
- {|a|MyFileViewer(a)}, /* bGETLIST_REFVAR */ ;
- nil, /* lGETLIST_READONLY */ ;
- <.p.>, /* lGETLIST_PIXEL */ ;
- nil, /* nGETLIST_CURSOR */ ;
- nil, /* bGETLIST_EVAL */ ;
- [{DC_GetAnchorCb(@<oRel>,'O'), ;
- <(oRel)>,'O'}], /* bGETLIST_RELATIVE */ ;
- nil, /* xGETLIST_OPTIONS2 */ ;
- nil, /* xGETLIST_OPTIONS3 */ ;
- nil, /* xGETLIST_OPTIONS4 */ ;
- nil, /* xGETLIST_OPTIONS5 */ ;
- nil, /* xGETLIST_OPTIONS6 */ ;
- nil, /* xGETLIST_OPTIONS7 */ ;
- nil, /* xGETLIST_OPTIONS8 */ ;
- nil, /* xGETLIST_OPTIONS9 */ ;
- nil, /* cGETLIST_LEVEL */ ;
- <cTitle>, /* cGETLIST_TITLE */ ;
- nil, /* cGETLIST_ACCESS */ ;
- nil, /* bGETLIST_COMPILE */ ;
- <cId>, /* cGETLIST_ID */ ;
- nil, /* dGETLIST_REVDATE */ ;
- nil, /* cGETLIST_REVTIME */ ;
- nil, /* cGETLIST_REVUSER */ ;
- nil, /* bGETLIST_HIDE */ ;
- <nAccel>, /* nGETLIST_ACCELKEY */ ;
- } )
-
-
- LOCAL GetList := {}
-
- @ 1,0 DCSAY "This is my README.TXT file"
-
- @ 3,0 FILEVIEW \express\readme.txt SIZE 60,10
-
- DCREAD GUI ;
- TITLE 'User-Defined Command Demo' ;
- FIT ;
- MODAL ;
- BUTTONS DCGUI_BUTTON_OK
-
- RETURN nil
-
- /* ----------------------- */
-
- STATIC FUNCTION MyFileViewer ( aParams )
-
- LOCAL oXbp, aGetList, nPointer, oParent, aPos, aSize, aPres, lVisible, ;
- cFileName, cMemo, bAnchor
-
- aGetList := aParams[1]
- nPointer := aParams[2]
- oParent := aParams[3]
- aPos := aParams[4]
- aSize := aParams[5]
- aPres := aParams[6]
- lVisible := aParams[7]
-
- oXbp := XbpMLE():new( oParent, , aPos, aSize, aPres, lVisible )
-
- cFileName := aGetList[nPointer,xGETLIST_OPTIONS]
-
- IF Valtype(cFileName) = 'C' .AND. File(cFileName)
- cMemo := MemoRead(cFilename)
- aGetList[nPointer,xGETLIST_CARGO] := cMemo
- ELSE
- cMemo := 'File: ' + cFileName + ' not found.'
- ENDIF
-
- bAnchor := AnchorCb(@cMemo)
-
- IF Valtype(aGetList[nPointer,cGETLIST_FONT])='C'
- oXbp:SetFontCompoundName(aGetList[nPointer,cGETLIST_FONT])
- ENDIF
-
- oXbp:clipSiblings := .T.
- oXbp:datalink := bAnchor
- oXbp:create()
- oXbp:SetData()
-
- RETURN oXbp
- *** END OF EXAMPLE ***
-
- * -------------------------
-
- STATIC FUNCTION XSample_21
-
- /* TAB-STOPS
-
- In this example, TABSTOP and TABGROUP clauses are used to allow
- the user to navigate through the Dialog elements via the Tab-Key
- and the cursor keys. The ENTER or SPACE bar key selects the object.
- */
-
- LOCAL GetList := {}, GetOptions, cOption1, cOption2, oGroup1, ;
- oGroup2
-
- cOption1 := 'P'
-
- @ 1,2 DCGROUP oGroup1 CAPTION 'Utilities' SIZE 28,6
-
- @ 1,2 DCRADIO cOption1 PROMPT 'Save to &Dictionary' VALUE 'D' ;
- TABGROUP XBP_BEGIN_GROUP ;
- PARENT oGroup1 ;
- TABSTOP
-
- @ 2,2 DCRADIO cOption1 PROMPT '&Save to Source Code' VALUE 'S' ;
- PARENT oGroup1 ;
- TABGROUP XBP_WITHIN_GROUP
-
- @ 3,2 DCRADIO cOption1 PROMPT 'Make a &Backup file' VALUE 'B' ;
- PARENT oGroup1 ;
- TABGROUP XBP_WITHIN_GROUP
-
- @ 4,2 DCRADIO cOption1 PROMPT '&Pack the File' VALUE 'P' ;
- PARENT oGroup1 ;
- TABGROUP XBP_END_GROUP
-
- cOption2 := 'E'
-
- @ 1,35 DCGROUP oGroup2 CAPTION 'Condition' SIZE 25,6
-
- @ 1,2 DCRADIO cOption2 PROMPT 'Mint' VALUE 'M' ;
- TABGROUP XBP_BEGIN_GROUP ;
- PARENT oGroup2 ;
- TABSTOP
-
- @ 2,2 DCRADIO cOption2 PROMPT 'Excellent' VALUE 'E' ;
- PARENT oGroup2 ;
- TABGROUP XBP_WITHIN_GROUP
-
- @ 3,2 DCRADIO cOption2 PROMPT 'Good' VALUE 'G' ;
- PARENT oGroup2 ;
- TABGROUP XBP_WITHIN_GROUP
-
- @ 4,2 DCRADIO cOption2 PROMPT 'Fair' VALUE 'F' ;
- PARENT oGroup2 ;
- TABGROUP XBP_END_GROUP
-
- @ 8,1 DCSAY 'Use TAB key to select Group'
- @ 9,1 DCSAY 'Use Up/Down arrow keys then ENTER or SPACE to select Radio Button'
-
- DCREAD GUI ;
- FIT ;
- MODAL ;
- TITLE 'Tab-Stop Demo' ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
-
- RETURN nil
- *** END OF EXAMPLE ***
-
- * ---------------------
-
- STATIC FUNCTION XSample_22
-
- /* MESSAGE BOX
-
- This sample shows how to attach messages and ToolTips to an object
- and display the message in a message box area when the object is
- in focus.
-
- */
-
- LOCAL GetList := {}, cName := Space(40), cAddress1 := Space(40), ;
- cAddress2 := Space(40), GetOptions, cPhone := Space(20), ;
- oMsgBox1, oMsgBox2
-
- @ 0,0 DCSAY ' Name' GET cName ;
- GETTOOLTIP 'Enter the Last Name,;First Name,;and Middle Initial' ;
- MESSAGE 'Enter a complete name in following format: Last, First, MI' ;
- INTO oMsgBox1
-
- @ 2,0 DCSAY 'Street' GET cAddress1 ;
- GETTOOLTIP 'Street Address' ;
- MESSAGE 'Enter the Street Address' INTO oMsgBox1
-
- @ 4,0 DCSAY ' City' GET cAddress2 ;
- GETTOOLTIP 'City/State/Country/Zip' ;
- MESSAGE 'Enter the City, State, Country and Zip Code' ;
- INTO oMsgBox1
-
- @ 6,0 DCSAY ' Phone' GET cPhone ;
- GETTOOLTIP 'Area/Exchange/Number' ;
- MESSAGE 'Enter the complete phone number with Area Code' ;
- INTO oMsgBox2
-
- @ 8,0 DCMESSAGEBOX ;
- OBJECT oMsgBox1 ;
- FONT '10.Helv';
- COLOR GRA_CLR_DARKBLUE, GRA_CLR_WHITE ;
- SIZE 60,1.5 ;
- TYPE XBPSTATIC_TYPE_RECESSEDBOX
-
- @ 9.5,0 DCMESSAGEBOX ;
- OBJECT oMsgBox2 ;
- FONT '10.Helv';
- COLOR GRA_CLR_DARKRED, GRA_CLR_WHITE ;
- SIZE 60,1.5 ;
- TYPE XBPSTATIC_TYPE_RECESSEDBOX
-
- DCGETOPTIONS SAYRIGHTJUST ;
- TOOLTIPCOLOR GRA_CLR_BLACK, GRA_CLR_YELLOW
-
- DCREAD GUI ;
- TITLE 'Message Boxes and Tooltips' ;
- FIT ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL ;
- OPTIONS GetOptions
-
- ReTURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_23
-
- /* GRAPH
- This example shows how to put a graph on a TabPage
- */
-
- LOCAL GetList := {}, oTabPage1, oTabPage2, oBrowse, oStatic
-
- LOCAL y
- // The following data is retrieved from several linked databases
- LOCAL mTik := "PAR", nMonth, nYear
- LOCAL mName := "Parata Analytics Research"
- LOCAL mTitle := "Price History"
- LOCAL aTMP := ;
- { 59.81, 60.31, 69.94, 80.50, 69.00, 75.75, 66.25, 57.63, 64.38, 62.88, ;
- 68.75, 65.56, 66.88, 51.75, 50.13, 50.25, 44.25, 45.13, 48.75, 43.88, ;
- 47.13, 33.50, 36.88, 34.00, 31.50, 30.00, 34.50, 34.38, 41.75, 46.50, ;
- 44.13, 39.25, 45.25, 43.75, 41.50, 40.50, 38.75, 33.00, 30.63, 29.88, ;
- 28.00, 27.25, 24.75, 24.75, 24.13, 24.00, 22.16, 22.25, 20.00, 22.00, ;
- 22.50, 23.75, 21.13, 22.00, 21.63, 19.38, 17.88, 16.38, 17.13, 15.63, ;
- 15.75, 14.44, 14.19, 12.38, 12.75, 11.75, 11.38, 12.75 }
-
- LOCAL aData := {}, aBrowData := {}
-
- nYear := 1993
- nMonth := 1
- FOR Y = LEN(aTMP) TO 1 STEP -1
- aAdd(aData,aTmp[y])
- aAdd(aBrowData,{aTmp[y],nMonth,nYear})
- nMonth++
- IF nMonth = 13
- nMonth := 1
- nYear++
- ENDIF
- NEXT Y
-
- /* --- Tab Page 1 --- */
-
- @ 0,0 DCTABPAGE oTabPage1 SIZE 88,20 CAPTION 'Browse'
-
- @ 2,30 DCSAY mName SAYFONT '12.Helv' PARENT oTabPage1 SAYSIZE 50
-
- @ 3.5,3 DCBROWSE oBrowse DATA aBrowData PARENT oTabPage1 ;
- SIZE 35,15.5
-
- DCBROWSECOL ELEMENT 1 HEADER "Price" WIDTH 8 PARENT oBrowse
- DCBROWSECOL ELEMENT 2 HEADER "Month" WIDTH 5 PARENT oBrowse
- DCBROWSECOL ELEMENT 3 HEADER "Year" WIDTH 6 PARENT oBrowse
-
- /* --- Tab Page 2 --- */
-
- @ 0,0 DCTABPAGE oTabPage2 RELATIVE oTabPage1 CAPTION 'Graph'
-
- @ 2,1 DCSTATIC TYPE XBPSTATIC_TYPE_RECESSEDBOX SIZE 86,17 ;
- OBJECT oStatic PARENT oTabPage2 ;
- EVAL {|| _PresSpace(oStatic,aData) }
-
- DCREAD GUI ;
- TITLE 'Graph on a TabPage' ;
- FIT ;
- BUTTONS DCGUI_BUTTON_EXIT
-
- RETURN(NIL)
-
- /* ---------------------- */
-
- STATIC FUNCTION _PresSpace( oStatic, aData )
-
- LOCAL oPS, oDevice
-
- oPS := XbpPresSpace():new() // Create a PS
- oDevice := oStatic:winDevice() // Get the device context
- oPS:create( oDevice ) // Link device context to PS
- oPS:SetViewPort( { 0, 0, 570, 300 } )
-
- //Define :paint code block
- oStatic:paint := {|mp1,mp2,obj| mp1 := LinChart( oPS, aData) }
-
- RETURN nil
-
- /* ------------------------ */
-
- STATIC FUNCTION LinChart(oPS,aDATA)
-
- LOCAL aAttr,i,nX,nY1,y,oFont
- LOCAL hi := -9999, lo := 9999 , nXdivs := 6
- LOCAL ylinc,ylinc1,yinc,xinc,yinc1,nYdivs,yval,xval
- LOCAL nX0 := 50, nY0 := 30 // origins
- LOCAL xlen := 580, ylen := 330 // Relative max. values for x and y
- LOCAL xbeg, xend, xAvg
-
- xbeg := get_beg(aData)
- xend := get_end(aData)
- xAvg := get_avg(aData,xbeg,xend)
- nXdivs := 6
-
- FOR Y = xbeg to xend
- hi := if(aData[Y] > 5*xavg,hi,max(hi,aData[Y]))
- lo := if(aData[Y] > 0,min(lo,aData[Y]),0)
- NEXT Y
-
- hi := hi * 1.1
- lo := if(lo*.9 < 0, 0, lo*.9)
- Ylinc := (hi-lo)/10
- nYDivs := int((hi-lo)/Ylinc)
- YINC := ylen/(HI-lo)
- XINC := xlen/72
-
- aAttr := ARRAY( GRA_AM_COUNT )
- aAttr [ GRA_AM_COLOR ] := GRA_CLR_DARKBLUE
- aAttr [ GRA_AM_SYMBOL ] := GRA_MARKSYM_PLUS
- GraSetAttrMarker( oPS, aAttr )
-
- aAttr := ARRAY( GRA_AL_COUNT )
- aAttr [ GRA_AL_WIDTH ] := GRA_LINEWIDTH_NORMAL
- aAttr [ GRA_AL_COLOR ] := GRA_CLR_DARKBLUE
- aAttr [ GRA_AL_TYPE ] := GRA_LINETYPE_SOLID
- GraSetAttrLine( oPS, aAttr )
-
- aAttr := ARRAY( GRA_AS_COUNT )
- aAttr [ GRA_AS_COLOR ] := GRA_CLR_DARKBLUE
- aAttr [ GRA_AS_HORIZALIGN ] := GRA_HALIGN_LEFT
- aAttr [ GRA_AS_VERTALIGN ] := GRA_VALIGN_HALF
- GraSetAttrString( oPS, aAttr )
-
- // Draw x and y axis
- GraLine( oPS, {nX0, nY0}, {nX0+xlen, nY0} )
- GraLine( oPS, {nX0, nY0}, {nX0 , nY0+ylen} )
- GraLine( oPS, {nX0, nY0+ylen}, {nX0+xlen, nY0+ylen} )
- GraLine( oPS, {nX0+xlen, nY0}, {nX0+xlen, nY0+ylen} )
-
- // Draw vertical scale
- for y = 0 to nYdivs
- GraMarker ( oPS, { nX0 , nY0+((ylen/10)*y)} )
- IF lo+(ylinc*nYdivs) >= 1000
- GraStringAt( oPS, { nX0-35, nY0+((ylen/10)*y) }, Str(lo+(ylinc*y),6,0) )
- ELSE
- GraStringAt( oPS, { nX0-35, nY0+((ylen/10)*y) }, Str(lo+(ylinc*y),6,2) )
- ENDIF
- next y
-
- aAttr [ GRA_AS_COLOR ] := GRA_CLR_DARKBLUE
- GraSetAttrString( oPS, aAttr )
- GraStringAt( oPS, { nX0-35, nY0+((ylen/10)*y) }, "Price" )
-
- aAttr [ GRA_AS_COLOR ] := GRA_CLR_DARKBLUE
- aAttr [ GRA_AS_HORIZALIGN ] := GRA_HALIGN_CENTER
- aAttr [ GRA_AS_VERTALIGN ] := GRA_VALIGN_BOTTOM
- GraSetAttrString( oPS, aAttr )
-
- GraStringAt( oPS, { nX0 + (xlen/2-20), nY0 + ylen +30 }, "Parata" )
-
- // Draw horizontal scale
- FOR i := 1 TO nXdivs
- nX := nX0 + ( i*(xlen/nXdivs) )
- GraMarker ( oPS, { nX, nY0 } )
- GraStringAt( oPS, { nX-((xlen/nXdivs)/2+10), nY0-20 }, ;
- str(year(date())-6+i))
- NEXT i
-
- // Draw line
- FOR y := xbeg+1 TO min(xend,72)
- yval := if(aData[y] <= hi, (aData[Y]-lo)*YINC,(hi-lo)*YINC)
- IF yval > 0
- xval := (y*xinc)
- nY1 := nY0+((aData[y-1]-lo)*yinc)
- GraLine( oPS, {nX0+xval-xinc, nY1}, {(nX0+xval), nY0+yval} )
- ENDIF
- NEXT
-
- RETURN NIL
-
-
- /* ---------------------- */
-
- STATIC FUNCTION GET_END(aArray)
-
- local xend
- xend := len(aArray)
- do while empty(aArray[XEND]) .and. xend > 1
- xend--
- enddo
-
- return(xend)
-
- /* ----------------------- */
-
- STATIC FUNCTION GET_beg(aArray)
-
- local xbeg,last
- last := len(aArray)
- xbeg := 1
- do while empty(aArray[Xbeg]) .and. xbeg < last
- xbeg++
- enddo
-
- return(xbeg)
-
- /* --------------------- */
-
- STATIC FUNCTION GET_avg(aArray,xbeg,xend)
-
- local x
- local xavg := 0
- for x = xbeg to xend
- xavg := xavg + aArray[x]
- next
- xavg := z(xavg,(xend-xbeg+1))
-
- return(xavg)
-
- /* ---------------------- */
-
- STATIC FUNCTION Z(cl_num1,cl_num2)
-
- LOCAL RET_VAL := 0
- IF cl_num2 <> 0 .and. cl_num2 <> nil
- RET_VAL := (cl_num1/cl_num2)
- ENDIF
-
- return (RET_VAL)
-
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_24
-
- /*
- This example shows how to use DC_SETSCOPE() and the SCOPE
- clause of DCBROWSE to create scoped browses. In this
- example the range of records displayed is DC_G thru DC_K.
- */
-
- LOCAL GetList := {}, oBrowse, aPres, cScopeTop, cScopeBot, oScopeTop, ;
- oScopeBot, nRowCount
-
- IF !File('..\XDOC\EXPRESS.DBF')
- DC_MsgBox({'Sorry. The database required to show this feature',;
- 'is not included in the demonstration version.'})
- RETURN nil
- ENDIF
-
- SET DEFA TO ..\XDOC
- USE EXPRESS VIA FOXCDX ALIAS XDOC EXCLUSIVE
- SET INDEX TO EXPRESS.CDX
-
- OrdSetFocus('COMMAND')
- DC_KeyStat(.t.)
-
- DC_SETSCOPE(0,'DC_G')
- DC_SETSCOPE(1,'DC_K')
-
- DC_DbGoTop()
-
- aPres := ;
- { { XBP_PP_COL_HA_FGCLR, GRA_CLR_WHITE }, /* Header FG Color */ ;
- { XBP_PP_COL_HA_BGCLR, GRA_CLR_DARKGRAY }, /* Header BG Color */ ;
- { XBP_PP_COL_DA_ROWSEPARATOR, XBPCOL_SEP_DOTTED }, /* Row Sep */ ;
- { XBP_PP_COL_DA_COLSEPARATOR, XBPCOL_SEP_DOTTED } /* Col Sep */ ;
- }
-
- cScopeTop := Pad('DC_G',10)
- cScopeBot := Pad('DC_K',10)
-
- @ 1,1 DCSAY 'Scope Top' GET cScopeTop PICT '@!' SAYRIGHT ;
- VALID {||DC_SetScope(0,Alltrim(cScopeTop)),;
- oBrowse:RefreshAll(),;
- SetAppFocus(oBrowse),.t.} ;
- GETOBJECT oScopeTop
-
- @ 1,25 DCSAY 'Scope Bottom' GET cScopeBot PICT '@!' SAYRIGHT ;
- VALID {||DC_SetScope(1,Alltrim(cScopeBot)),;
- oBrowse:RefreshAll(),;
- SetAppFocus(oBrowse),.t.} ;
- GETOBJECT oScopeBot
-
- @ 1, 65 DCPUSHBUTTON CAPTION 'Clear ~Scope' SIZE 10,1.5 ;
- ACCELKEY xbeK_ALT_S ;
- ACTION {||DC_ClrScope(), ;
- cScopeTop := Space(10), ;
- oScopeTop:setData(), ;
- cScopeBot := Space(10), ;
- oScopeBot:setData(), ;
- oBrowse:RefreshAll(),;
- SetAppFocus(oBrowse)}
-
- @ 3,1 DCBROWSE oBrowse ALIAS 'XDOC' ;
- SIZE 77,11.8 ;
- FREEZELEFT {1} ;
- SCOPE ;
- PRESENTATION aPres ;
- COLOR {|aColor|aColor := IIF( OrdKeyNo() % 2 = 0, ;
- { GRA_CLR_BLUE,GRA_CLR_WHITE }, ;
- { GRA_CLR_RED,GRA_CLR_WHITE } ), ;
- aColor }
-
- DCBROWSECOL FIELD XDOC->command ;
- HEADER "Command" PARENT oBrowse
-
- DCBROWSECOL FIELD XDOC->type ;
- HEADER "Type" PARENT oBrowse
-
- DCBROWSECOL FIELD XDOC->short ;
- HEADER "Short Description" PARENT oBrowse
-
- DCBROWSECOL FIELD XDOC->module ;
- HEADER "Module" PARENT oBrowse ;
-
- DCBROWSECOL FIELD XDOC->category ;
- HEADER "Category" PARENT oBrowse
-
- DCBROWSECOL FIELD XDOC->see_also ;
- HEADER "See Also" PARENT oBrowse
-
- DCREAD GUI ;
- TITLE 'Scoping Demo' ;
- FIT ;
- BUTTONS DCGUI_BUTTON_EXIT ;
- TITLE 'Scoping Demo'
-
- ReTURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_25
-
- /* This example shows how to write a bunch of @SAYS on a dialog
- using the EXIT clause of DCREAD GUI */
-
- LOCAL GetList := {}, oDlg
-
- @ 0,0 DCSAY "Please wait while we go off and do something else." ;
- SAYFONT '10.Helv' SAYSIZE 0
-
- @ 2,0 DCSAY "Don't worry, we'll come back and clear this screen" ;
- SAYFONT '10.Helv' SAYSIZE 0
-
- @ 4,0 DCSAY "when we are done. You will be shelled out to DOS." ;
- SAYFONT '10.Helv' SAYSIZE 0
-
- @ 6,0 DCSAY 'Type EXIT at the DOS prompt to return' FONT '10.Helv' ;
- COLOR COLOR GRA_CLR_DARKBLUE, GRA_CLR_WHITE SAYSIZE 0
-
- DCREAD GUI FIT PARENT @oDlg EXIT TITLE "@..SAYs Demo"
-
- oDlg:SetPos({100,100})
-
- IF Upper(AppName()) # 'XANON.EXE'
- RunShell('/C COMMAND')
- ELSE
- DC_WinAlert('Shell to DOS is disabled in this version! Duh?')
- ENDIF
-
- oDlg:destroy()
-
- ReTURN nil
- *** END OF EXAMPLE ***
-
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_26
-
- /* PROTECTED FIELDS
-
- This example demonstrates how to protect a set of data fields
- from being edited based on a condition
-
- */
-
- #define cDesc_26 aSample26[1]
- #define nForSale_26 aSample26[2]
- #define nOrigPrice_26 aSample26[3]
- #define nCurrValue_26 aSample26[4]
- #define lOriginal_26 aSample26[5]
-
- LOCAL GetList := {}, aSample26[10], lEditMode, oToolBar, oDesc, ;
- aForSale, GetOptions
-
- USE COLLECT VIA DBFNTX NEW SHARED
-
- _LoadFields26( aSample26, GetList )
-
- aForSale := { 'Not for Sale','For Sale','Not Sure' }
-
- lEditMode := .f.
- @ 4,1 DCSAY 'Description' GET cDesc_26 ;
- SAYSIZE 12 ;
- SAYRIGHT ;
- GETSIZE 30 ;
- GETOBJECT oDesc ;
- SAYRIGHT EDITPROTECT {||!lEditMode}
-
- @ 6,4 DCCHECKBOX lOriginal_26 PROMPT 'Original Owner' ;
- EDITPROTECT {||!lEditMode}
-
- @ 8,4 DC3STATE nForSale_26 PROMPT aForSale ;
- SIZE 12 ;
- EDITPROTECT {||!lEditMode}
-
- @10,1 DCSAY 'Original Price' GET nOrigPrice_26 ;
- PICT '9999.99' ;
- SAYSIZE 12 ;
- SAYRIGHT ;
- EDITPROTECT {||!lEditMode}
-
- @12,1 DCSAY 'Current Value' GET nCurrValue_26 ;
- PICT '9999.99' ;
- SAYSIZE 12 ;
- SAYRIGHT ;
- EDITPROTECT {||!lEditMode}
-
- @ 0,0 DCTOOLBAR oToolBar SIZE 40,1.5 TYPE XBPSTATIC_TYPE_TEXT
-
- DCADDBUTTON CAPTION 'Prev' PARENT oToolBar SIZE 9 ;
- ACTION {||dbSkip(-1),_LoadFields26(aSample26,GetList)} ;
- WHEN {||!lEditMode}
-
- DCADDBUTTON CAPTION 'Next' PARENT oToolBar SIZE 9 ;
- ACTION {||dbSkip(),_LoadFields26(aSample26,GetList)} ;
- WHEN {||!lEditMode}
-
- DCADDBUTTON CAPTION 'Edit' PARENT oToolBar SIZE 9 ;
- ACTION {||lEditMode := .t., SetAppFocus(oDesc), ;
- DC_GetRefresh(GetList)} ;
- ID 'EDIT_BUTTON' ;
- WHEN {||!lEditMode}
-
- DCADDBUTTON CAPTION 'Save' PARENT oToolBar SIZE 9 ;
- ACTION {||lEditMode := .f.,_SaveFields26(aSample26,GetList), ;
- SetAppFocus(DC_GetObject(GetList,'EDIT_BUTTON'))} ;
- WHEN {||lEditMode}
-
- DCGETOPTIONS TABSTOP
-
- DCREAD GUI ;
- OPTIONS GetOptions ;
- TITLE 'Protected Fields Demo' ;
- FIT ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL ;
- MODAL ;
- SETFOCUS 'EDIT_BUTTON'
-
- CLOSE ALL
-
- RETURN nil
-
- /* ----------------------- */
-
- STATIC FUNCTION _LoadFields26( aSample26, GetList )
-
- cDesc_26 := COLLECT->descrip
- nForSale_26 := COLLECT->for_sale
- lOriginal_26 := COLLECT->original
- nOrigPrice_26 := COLLECT->orig_price
- nCurrValue_26 := COLLECT->appr_value
-
- DC_GetRefresh(GetList)
- DC_GetOrigSet(GetList)
-
- RETURN nil
-
- /* ------------------------ */
-
- STATIC FUNCTION _SaveFields26( aSample26, GetList )
-
- IF dbRLock()
- REPL COLLECT->descrip WITH cDesc_26
- REPL COLLECT->original WITH lOriginal_26
- REPL COLLECT->for_sale WITH nForSale_26
- REPL COLLECT->orig_price WITH nOrigPrice_26
- REPL COLLECT->appr_value WITH nCurrValue_26
- dbCommit()
- dbUnlock()
- ENDIF
- DC_GetOrigSet(GetList)
- DC_GetRefresh(GetList)
-
- RETURN nil
-
- *** END OF EXAMPLE ***
-
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_27
-
- /* MDI WINDOWS #1
-
- This example shows how to create MDI windows using the automatic
- dialog creator feature of DCREAD GUI. If no PARENT clause is
- used, a dialog window is automatically created. The DEMO1 and
- and DEMO3 programs are then launched in the created dialog
- window.
-
- */
-
- LOCAL GetList := {}, GetOptions
-
- DCGETOPTIONS ;
- WINDOWHEIGHT 480 ;
- WINDOWWIDTH 640 ;
- BITMAP BITMAP_PICKLIST
-
- DCREAD GUI ;
- TITLE "MDI Demo #1" ;
- OPTIONS GetOptions ;
- EVAL {|o|_XSample_27(o)}
-
- RETURN nil
-
- /* -------------------- */
-
- STATIC FUNCTION _XSample_27( oDialog )
-
- LOCAL oThread1, oThread2
-
- oThread1 := Thread():new()
- oThread1:Start({||XDemo_1(oDialog,.t.)})
-
- oThread2 := Thread():new()
- oThread2:Start({||XDemo_3(oDialog,.t.)})
-
- RETURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_28
-
- /* MDI WINDOWS #2 */
-
- LOCAL GetList := {}, GetOptions, oToolBar, oDlg, drawingArea, ;
- oXbp, nEvent, mp1, mp2, oApp := SetAppWindow(), oMenuBar, ;
- oMenuFile, oStatusBar
-
- DCSTATUSBAR oStatusBar WIDTH 80 ALIGN DCGUI_ALIGN_RIGHT ;
- TYPE XBPSTATIC_TYPE_TEXT
-
- @ 0,0 DCTOOLBAR oToolBar SIZE 80,500 BUTTONSIZE 80,25 ;
- TYPE XBPSTATIC_TYPE_TEXT PARENT oStatusBar PIXEL
-
- DCADDBUTTON CAPTION 'Gets 1' ;
- TOOLTIP 'Launch Test 1 routine' ;
- PARENT oToolBar ;
- ACTION {|o|o:=Thread():new(),o:start({||_XSample28_1(oDlg:drawingArea)})}
-
- DCADDBUTTON CAPTION 'Gets 2' ;
- TOOLTIP 'Launch Test 2 routine' ;
- PARENT oToolBar ;
- ACTION {|o|o:=Thread():new(),o:start({||_XSample28_2(oDlg:drawingArea)})}
-
- DCADDBUTTON CAPTION 'MLE' ;
- TOOLTIP 'Launch Test 3 routine' ;
- PARENT oToolBar ;
- ACTION {|o|o:=Thread():new(),o:start({||_XSample28_3(oDlg:drawingArea)})}
-
- DCADDBUTTON CAPTION 'CRT' ;
- TOOLTIP 'Launch Test 4 routine' ;
- PARENT oToolBar ;
- ACTION {|o|o:=Thread():new(),o:start({||_XSample28_4(oDlg:drawingArea)})}
-
- DCADDBUTTON CAPTION 'Exit' ;
- PARENT oToolBar ;
- ACTION {||PostAppEvent(xbeP_Close,nil,nil,oXbp)}
-
- DCMENUBAR oMenuBar
-
- DCSUBMENU oMenuFile PROMPT 'File' PARENT oMenuBar
-
- DCMENUITEM 'Test 1' PARENT oMenuFile ;
- ACTION {|o|o:=Thread():new(),o:start({||_XSample28_1(oDlg:drawingArea)})}
-
- DCMENUITEM 'Test 2' PARENT oMenuFile ;
- ACTION {|o|o:=Thread():new(),o:start({||_XSample28_2(oDlg:drawingArea)})}
-
- DCMENUITEM 'Test 3' PARENT oMenuFile ;
- ACTION {|o|o:=Thread():new(),o:start({||_XSample28_3(oDlg:drawingArea)})}
-
- DCMENUITEM 'Test 4' PARENT oMenuFile ;
- ACTION {||_XSample28_4(oDlg:drawingArea)}
-
-
- DCMENUITEM SEPARATOR PARENT oMenuFile
-
- DCMENUITEM 'Exit' PARENT oMenuFile ;
- ACTION {||PostAppEvent(xbeP_Close,nil,nil,oDlg)}
-
- DCGETOPTIONS ;
- WINDOWHEIGHT 520 ;
- WINDOWWIDTH 700
-
- DCREAD GUI ;
- TITLE ;
- 'MDI Demo - Click Each button several times to open multiple windows' ;
- PARENT @oDlg ;
- OPTIONS GetOptions ;
- EVAL {||SetAppWindow(oDlg)}
-
- SetAppWindow(oApp)
-
- RETURN nil
-
- /* -------------------------- */
-
- STATIC FUNCTION _XSample28_1 ( oAppWindow )
-
- LOCAL Getlist := {}, cTest1 := Space(20), cTest2 := Space(20), ;
- cTest3 := Space(20), cTest4 := Space(20)
-
- @ 1,1 DCSAY 'Testing 1' GET cTest1
- @ 2,1 DCSAY 'Testing 2' GET cTest2
- @ 3,1 DCSAY 'Testing 3' GET cTest3
- @ 4,1 DCSAY 'Testing 4' GET cTest4
-
- DCREAD GUI ;
- TITLE 'MDI Demo 1' ;
- APPWINDOW oAppWindow ;
- FIT
-
- RETURN GetList
-
- /* ------------------ */
-
- STATIC FUNCTION _XSample28_2 ( oAppWindow )
-
- LOCAL Getlist := {}, dDate1 := Date(), dDate2 := Date()+7, ;
- cTime1 := Time(), cTime2 := Time()
-
- @ 1,1 DCSAY 'Start Date' GET dDate1 POPUP {|d|DC_PopDate(d)}
- @ 2,1 DCSAY ' End Date' GET dDate2 POPUP {|d|DC_PopDate(d)}
- @ 3,1 DCSAY 'Start Time' GET cTime1 PICT '99:99:99'
- @ 4,1 DCSAY ' End Time' GET cTime2 PICT '99:99:99'
-
- DCREAD GUI ;
- TITLE 'MDI Demo 2' ;
- APPWINDOW oAppWindow ;
- FIT ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
-
- RETURN GetList
-
- /* ------------------ */
-
- STATIC FUNCTION _XSample28_3 ( oAppWindow )
-
- LOCAL GetList := {}, cMemo := ''
-
- @ 1,1 DCMULTILINE cMemo SIZE 30,7
-
- DCREAD GUI ;
- TITLE 'MDI Demo 3' ;
- APPWINDOW oAppWindow ;
- FIT ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
-
- RETURN nil
-
- /* ------------------ */
-
- STATIC FUNCTION _XSample28_4 ( oAppWindow )
-
- LOCAL GetList := {}, oCrt, oStatic
-
- @ 1,1 DCSTATIC TYPE XBPSTATIC_TYPE_RAISEDBOX SIZE 69,11.2 ;
- OBJECT oStatic
-
- @ 0,0 DCAPPCRT oCrt SIZE 25,80 ;
- PARENT oStatic ;
- CAPTION 'Crt Demo Window' BORDER XBPDLG_NO_BORDER ;
- FONT 'Terminal' FONTSIZE 6,10 ;
- ACTION {||DC_Gui(.f.),_XSample28_4_Crt(),DC_Gui(.t.),oStatic:Destroy()}
-
- DCREAD GUI ;
- TITLE 'MDI Demo 4' ;
- APPWINDOW oAppWindow ;
- FIT
-
- RETURN nil
-
- /* --------------------- */
-
- STATIC FUNCTION _XSample28_4_Crt( )
-
- LOCAL aDir
-
- CLS
- @ 2,10 SAY 'This is an Achoice of the directory using the XbpCrt() Class'
-
- aDir := Directory()
- aDir := DC_Aconvert( aDir )
-
- DC_AChoice ( 10, 10, 20, 35, aDir[1],,,,,,{.t.} )
-
- RETURN nil
-
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_29
-
- /* WHEN clause
-
- This example demonstrates how to use the WHEN clause to
- disable or enable GETS
-
- */
-
- LOCAL GetList := {}, oDlg, oGroup, nGroup, dDate := Date(), ;
- cTime := Time(), cName := Space(15), cStreet := Space(20), ;
- cCity := Space(25), cState := Space(10), cZip := Space(10), ;
- cVoice := Space(12), cFax := Space(12), cEmail := Space(30), ;
- GetOptions, aPres
-
- aPres := { { XBP_PP_DISABLED_FGCLR, GRA_CLR_WHITE }, ;
- { XBP_PP_DISABLED_BGCLR, GRA_CLR_BLUE } }
-
- nGroup := 1
- @ 4,2 DCGROUP oGroup CAPTION 'Pick a Group to Edit' SIZE 30,10
-
- @ 3,5 DCRADIO nGroup ;
- VALUE 1 ;
- PARENT oGroup ;
- PROMPT 'Date and Time' ;
- ACTION {||DC_GetRefresh(GetList)}
-
- @ 4,5 DCRADIO nGroup ;
- VALUE 2 ;
- PARENT oGroup ;
- PROMPT 'Name and Address' ;
- ACTION {||DC_GetRefresh(GetList)}
-
- @ 5,5 DCRADIO nGroup ;
- VALUE 3 ;
- PARENT oGroup ;
- PROMPT 'Telephone Numbers' ;
- ACTION {||DC_GetRefresh(GetList)}
-
- @ 3,40 DCSAY 'Date' GET dDate SAYSIZE 8 SAYRIGHT ;
- WHEN {||nGroup = 1}
-
- @ 4,40 DCSAY 'Time' GET cTime SAYSIZE 8 SAYRIGHT ;
- WHEN {||nGroup = 1} GETPRES aPres
-
- @ 6,40 DCSAY 'Name' GET cName SAYSIZE 8 SAYRIGHT ;
- WHEN {||nGroup = 2} GETPRES aPres
-
- @ 7,40 DCSAY 'Street' GET cStreet SAYSIZE 8 SAYRIGHT ;
- WHEN {||nGroup = 2} GETPRES aPres
-
- @ 8,40 DCSAY 'City' GET cCity SAYSIZE 8 SAYRIGHT ;
- WHEN {||nGroup = 2} GETPRES aPres
-
- @ 9,40 DCSAY 'State' GET cState SAYSIZE 8 SAYRIGHT ;
- WHEN {||nGroup = 2} GETPRES aPres
-
- @10,40 DCSAY 'Zip' GET cZip SAYSIZE 8 SAYRIGHT ;
- WHEN {||nGroup = 2} GETPRES aPres
-
- @12,40 DCSAY 'Voice' GET cVoice PICT '999-999-9999' ;
- SAYSIZE 8 SAYRIGHT WHEN {||nGroup = 3} GETPRES aPres
-
- @13,40 DCSAY 'Fax' GET cFax PICT '999-999-9999' ;
- SAYSIZE 8 SAYRIGHT WHEN {||nGroup = 3} GETPRES aPres
-
- @14,40 DCSAY 'E-Mail' GET cEmail PICT '@!' ;
- SAYSIZE 8 SAYRIGHT WHEN {||nGroup = 3} GETPRES aPres
-
- DCGETOPTIONS PRESENTATION aPres
-
- DCREAD GUI ;
- OPTIONS GetOptions ;
- TITLE "WHEN Clause Demo" ;
- FIT ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
-
- RETURN nil
- *** END OF EXAMPLE ***
-
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_30
-
- /* HIDE clause
-
- This example demonstrates how to use the HIDE clause to
- display or hide GETS
-
- */
-
- LOCAL GetList := {}, oDlg, oGroup, nGroup, dDate := Date(), ;
- cTime := Time(), cName := Space(15), cStreet := Space(20), ;
- cCity := Space(20), cState := Space(10), cZip := Space(10), ;
- cVoice := Space(12), cFax := Space(12), cEmail := Space(20), ;
- oDateGroup, oTelGroup, oNameGroup
-
- nGroup := 1
-
- @ 4,2 DCGROUP oGroup CAPTION 'Pick a Group to Edit' SIZE 30,10
-
- @ 3,5 DCRADIO nGroup ;
- VALUE 1 ;
- PARENT oGroup ;
- PROMPT 'Date and Time' ;
- ACTION {||DC_GetRefresh(GetList)}
-
- @ 4,5 DCRADIO nGroup ;
- VALUE 2 ;
- PARENT oGroup ;
- PROMPT 'Name and Address' ;
- ACTION {||DC_GetRefresh(GetList)}
-
- @ 5,5 DCRADIO nGroup ;
- VALUE 3 ;
- PARENT oGroup ;
- PROMPT 'Telephone Numbers' ;
- ACTION {||DC_GetRefresh(GetList)}
-
- @ 4,45 DCGROUP oDateGroup CAPTION 'Date/Time' SIZE 40,10 ;
- HIDE {|| nGroup # 1}
-
- @ 2,1 DCSAY 'Date' GET dDate SAYSIZE 8 SAYRIGHT ;
- PARENT oDateGroup
-
- @ 4,1 DCSAY 'Time' GET cTime SAYSIZE 8 SAYRIGHT ;
- PARENT oDateGroup
-
- @ 4,45 DCGROUP oNameGroup CAPTION 'Name/Address' SIZE 40,10 ;
- HIDE {|| nGroup # 2}
-
- @ 2,1 DCSAY 'Name' GET cName PARENT oNameGroup ;
- SAYSIZE 8 SAYRIGHT
-
- @ 4,1 DCSAY 'Street' GET cStreet PARENT oNameGroup ;
- SAYSIZE 8 SAYRIGHT
-
- @ 5,1 DCSAY 'City' GET cCity PARENT oNameGroup ;
- SAYSIZE 8 SAYRIGHT
-
- @ 6,1 DCSAY 'State' GET cState PARENT oNameGroup ;
- SAYSIZE 8 SAYRIGHT
-
- @ 7,1 DCSAY 'Zip' GET cZip PARENT oNameGroup ;
- SAYSIZE 8 SAYRIGHT
-
- @ 4,45 DCGROUP oTelGroup CAPTION 'Telephone/E-Mail' SIZE 40,10 ;
- HIDE {|| nGroup # 3}
-
- @ 2,1 DCSAY 'Voice' GET cVoice PICT '999-999-9999' PARENT oTelGroup ;
- SAYSIZE 8 SAYRIGHT
-
- @ 4,1 DCSAY 'Fax' GET cFax PICT '999-999-9999' PARENT oTelGroup ;
- SAYSIZE 8 SAYRIGHT
-
- @ 5,1 DCSAY 'E-Mail' GET cEmail PICT '@!' PARENT oTelGroup ;
- SAYSIZE 8 SAYRIGHT
-
- DCREAD GUI ;
- TITLE 'HIDE Clause Demo' ;
- FIT ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
-
- RETURN nil
- *** END OF EXAMPLE ***
-
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_31
-
- /*
- POPUP Clause
-
- This sample demonstrates how to use the POPUP Clause on @ DCSAY..GETs.
- In this example the POPUP clause is used on date fields to pop up a
- calendar and on numeric fields to pop up a Calculator.
-
- */
-
- LOCAL GetList := {}, dDate1 := Date(), dDate2 := Date()+7, ;
- nNumber := 12345.67
-
- SET DATE FORMAT TO 'mm/dd/yyyy'
-
- @ 1,1 DCSAY 'Enter Start Date' GET dDate1 PICTURE '99/99/9999' ;
- SAYRIGHT POPUP {|d|DC_PopDate(d)}
-
- @ 2,1 DCSAY 'Enter Start Date' GET dDate2 PICTURE '99/99/9999' ;
- SAYRIGHT POPUP {|d|DC_PopDate(d)}
-
- @ 4,1 DCSAY 'Enter a Number' GET nNumber SAYRIGHT ;
- POPUP {|n|DC_PopCalc(n)}
-
- DCREAD GUI ;
- TITLE 'POPUP Clause Demo' ;
- FIT ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL ;
- MODAL
-
- RETURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_32
-
- /* The EVAL Clause
-
- This example demonstrates how to use the EVAL clause to
- evaluate a code block immediately after a Get-List object is
- created. The EVAL clause is intended to allow the ability
- to use iVars and Methods of a class which are not supported
- by command clauses.
- */
-
- LOCAL GetList := {}, cMemo, oMemo, oMenuMemo, oMsgBox
-
- cMemo := 'This is my memo'
-
- @ 1,2 DCMULTILINE cMemo SIZE 78,8 ;
- FONT "10.Courier" ;
- OBJECT oMemo ;
- MESSAGE 'Click the right button for MENU' ;
- EVAL { |o| o:RbDown := { |x,y,z| oMenuMemo:PopUp ( z, x, 2 , ;
- XBPMENU_PU_DEFAULT + XBPMENU_PU_MOUSE_RBDOWN ) } }
-
- @ 10,2 DCMESSAGEBOX SIZE 78
-
- DCSUBMENU oMenuMemo PROMPT "&Memo" PARENT oMemo
-
- DCMENUITEM "~Delete" PARENT oMenuMemo ACTION {||oMemo:deleteMarked()}
-
- DCMENUITEM "~Cut" PARENT oMenuMemo ACTION {||oMemo:cutMarked()}
-
- DCMENUITEM "C~opy" PARENT oMenuMemo ACTION {||oMemo:copyMarked()}
-
- DCMENUITEM "~Paste" PARENT oMenuMemo ACTION {||oMemo:pasteMarked()}
-
- DCMENUITEM "~Undo" PARENT oMenuMemo ACTION {||oMemo:undo()}
-
- DCREAD GUI ;
- TITLE 'EVAL Clause Demo' ;
- FIT ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
-
-
- RETURN nil
- *** END OF EXAMPLE ***
-
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_33
-
- /* ID
-
- This example demonstrates how to assign an ID to a GetList item
- and how to extract information about the item via the ID tag.
-
- */
-
- LOCAL GetList := {}, dDate := Date(), nNumber := 12345.67, ;
- cString := 'This is a string', lLogical := .t., GetOptions
-
- SET DATE FORMAT TO 'mm/dd/yyyy'
-
- @ 1,1 DCSAY ' Enter a Date' GET dDate PICTURE '99/99/9999' ;
- SAYRIGHT ;
- SAYID 'SAY_DATE' ;
- GETID 'GET_DATE'
-
- @ 3,1 DCSAY ' Enter a Number' GET nNumber SAYRIGHT ;
- SAYID 'SAY_NUMBER' ;
- GETID 'GET_NUMBER'
-
- @ 5,1 DCPUSHBUTTON CAPTION 'Date+' SIZE 9,1.2 ;
- ID 'DATE_PLUS' ;
- ACTION {|o| o := DC_GetObject(GetList,'GET_DATE'), ;
- dDate++, o:setData() }
-
- @ 5,12 DCPUSHBUTTON CAPTION 'Date-' SIZE 9,1.2 ;
- ID 'DATE_MINUS' ;
- ACTION {|o| o := DC_GetObject(GetList,'GET_DATE'), ;
- dDate--, o:setData() }
-
- @ 5,25 DCPUSHBUTTON CAPTION 'Number+' SIZE 9,1.2 ;
- ID 'NUMBER_PLUS' ;
- ACTION {|o| o := DC_GetObject(GetList,'GET_NUMBER'), ;
- nNumber++, o:setData() }
-
- @ 5,36 DCPUSHBUTTON CAPTION 'Number-' SIZE 9,1.2 ;
- ID 'NUMBER_MINUS' ;
- ACTION {|o| o := DC_GetObject(GetList,'GET_NUMBER'), ;
- nNumber--, o:setData() }
-
- DCREAD GUI ;
- TITLE 'ID Clause Demo' ;
- FIT ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL ;
- MODAL
-
- RETURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_34
-
- /* RELATIVE coordinates
-
- This example shows how to use the RELATIVE clause to use display
- coordinates which are relative to a sibling object. Relative
- addressing is useful when designing complicated screens in
- which a large group of objects may be moved together by simply
- moving a single object in the source code.
- */
-
- LOCAL GetList := {}, oDlg, nRow := 6, nCol := 10, nTest, oTest
-
- @ 2,1 DCSAY ' Start Row' GET nRow PICT '99' ;
- VALID {||_Relative34( nRow, nCol, GetList, oDlg )}
-
- @ 3,1 DCSAY 'Start Column' GET nCol PICT '99' ;
- VALID {||_Relative34( nRow, nCol, GetList, oDlg )}
-
- @ 6,10 DCRADIO nTest PROMPT 'Radio Button 1' VALUE 1 ;
- OBJECT oTest GROUP 'RADIO'
-
- @ 1, 0 DCRADIO nTest PROMPT 'Radio Button 2' VALUE 2 ;
- RELATIVE oTest GROUP 'RADIO'
-
- @ 2, 0 DCRADIO nTest PROMPT 'Radio Button 3' VALUE 3 ;
- RELATIVE oTest GROUP 'RADIO'
-
- @ 3, 0 DCRADIO nTest PROMPT 'Radio Button 4' VALUE 4 ;
- RELATIVE oTest GROUP 'RADIO'
-
- @ 4, 0 DCRADIO nTest PROMPT 'Radio Button 5' VALUE 5 ;
- RELATIVE oTest GROUP 'RADIO'
-
- @ 5, 0 DCRADIO nTest PROMPT 'Radio Button 6' VALUE 6 ;
- RELATIVE oTest GROUP 'RADIO'
-
- @ 6, 0 DCRADIO nTest PROMPT 'Radio Button 7' VALUE 7 ;
- RELATIVE oTest GROUP 'RADIO'
-
- @ 7, 0 DCRADIO nTest PROMPT 'Radio Button 8' VALUE 8 ;
- RELATIVE oTest GROUP 'RADIO'
-
- @17,70 DCSAY '' // establish size of window
-
- DCREAD GUI ;
- TITLE 'RELATIVE Addressing Demo' ;
- PARENT @oDlg ;
- FIT ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
-
- RETURN nil
-
- /* --------------------------- */
-
- STATIC FUNCTION _Relative34( nRow, nCol, GetList, oDlg )
-
- DC_GetDestroy( GetList, 'RADIO', .t. ) // kill all the radio buttons
-
- GetList[5,nGETLIST_STARTROW] := nRow // Start radio button is 5th get
- GetList[5,nGETLIST_STARTCOL] := nCol
-
- DCREAD GUI ;
- EXIT ;
- PARENT oDlg ;
- GROUP 'RADIO'
-
- RETURN .t.
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_35
-
- /* CARGO
-
- This example shows how to access cargo which is attached to a
- Getlist item via the CARGO clause. The :cargo slot is used by
- eXPress++ as a container for a variety of information depending
- on the type of object. The container is an array of at least
- 3 elements:
-
- [1] - The Get number
- [2] - A pointer to the GetList array
- [3] - User cargo
-
- */
-
- LOCAL GetList := {}, oDlg, cMemo
-
- cMemo := 'This is my memo.' + Chr(13)+Chr(10) + ;
- 'Click on TEST to check if contents have been edited.'
-
- @ 1,1 DCMULTILINE cMemo SIZE 40,8 ;
- CARGO cMemo ;
- ID 'MYMEMO'
-
- @ 10,1 DCPUSHBUTTON CAPTION 'Test' SIZE 9,1.2 ;
- ACTION {|o|o := DC_GetObject(GetList,'MYMEMO'), ;
- IIF( !( o:cargo[3] + Chr(0) = cMemo ), ;
- DC_MsgBox('Memo Contents have been changed!'), ;
- DC_MsgBox('Memo Contents have NOT been changed!') ) }
-
- DCREAD GUI ;
- TITLE 'CARGO Demo' ;
- FIT ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL
-
- RETURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_36
-
- /* GETS with VALID clause
-
- This example demonstrates the VALID clause when used with
- @ DCSAY..GET commands.
-
- */
-
- LOCAL GetList := {}, dStartDate := Date(), dEndDate := Date()+7
-
- SET DATE FORMAT TO 'mm/dd/yyyy'
-
- @ 1,1 DCSAY "Start Date" GET dStartDate ;
- POPUP {|d|DC_PopDate(d)} ;
- VALID {|o,x| x := dStartDate > dEndDate, ;
- IIF( x, DC_WinAlert('Start Date cannot be later than end date'), ;
- nil), !x }
-
- @ 3,1 DCSAY " End Date" GET dEndDate ;
- POPUP {|d|DC_PopDate(d)} ;
- VALID {|o,x| x := dEndDate < dStartDate, ;
- IIF( x, DC_WinAlert('End Date cannot be earlier than start date'), ;
- nil), !x }
-
- DCREAD GUI ;
- TITLE 'GETs with VALID Demo' ;
- FIT ;
- MODAL ;
- BUTTONS DCGUI_BUTTON_OK + DCGUI_BUTTON_CANCEL ;
- EVAL {|o|SetAppWindow(o)}
-
- RETURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_37
-
- /* This example shows @ DCSAY..GETs which do direct edits into a
- database. The GET variable is a code-block that automatically
- handles locking/unlocking and macros. In this example, all screen
- dialog is data-driven. */
-
- LOCAL GetList := {}, aData, i, bBlock, bValid, bWhen
-
- CLOSE ALL
- USE COLLECT NEW EXCL VIA DBFNTX
-
- aData := { { 1, 1, 'Description', 'COLLECT->descrip', '@!', ;
- '!Empty(COLLECT->descrip)', '.T.' }, ;
- { 3, 1, 'Original Price', 'COLLECT->orig_price', '9999.99', ;
- '.T.','.T.'}, ;
- { 5, 1, 'Date Acquired', 'COLLECT->date_acqu', '', ;
- '.T.', '.T.' } }
-
- FOR i := 1 TO Len(aData)
-
- bBlock := _XSample37(aData[i,4],1)
- bValid := _XSample37(aData[i,6],2)
- bWhen := _XSample37(aData[i,7],2)
-
- @ aData[i,1], aData[i,2] DCSAY aData[i,3] GET bBlock ;
- PICTURE aData[i,5] ;
- VALID bValid ;
- WHEN bWhen ;
- SAYRIGHT ;
- SAYSIZE 15
-
- NEXT
-
- DCREAD GUI ;
- TITLE 'Data-Driven GETs Demo' ;
- FIT ADDBUTTONS
-
- RETURN nil
-
- /* -------------------- */
-
- STATIC FUNCTION _XSample37( xValue, nMode )
-
- IF nMode = 1 // Field Anchor
- RETURN {|x|IIF(x==nil,&(xValue),IIF(dbRLock(),&(xValue):=x,nil)), ;
- IIF(!(x==nil),dbUnlock(),nil),&(xValue) }
- ENDIF
-
- RETURN {||&(xValue)} // VALID or WHEN Anchor
-
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_38()
-
- /* This example shows "Scrolling" @ DCSAY..GETs. Moving the
- scrollbars will scroll the GETS in the window. Moving to a
- GET which is outside the window area will scroll the GETS
- up or down. Resizing the window will resize the GET area. */
-
- LOCAL GetList := {}, i, bFieldName, nCount := 1, oStatic, ;
- nVertOffset := 0, nHorizOffset := 0, oVertScroll, ;
- oHorizScroll, oDlg, oCurrGet, bGotFocus
-
- CLOSE ALL
- USE COLLECT NEW EXCL VIA DBFNTX
- bGotFocus := {|a,b,o|_XSample38_3(o,oStatic,@nVertOffset, ;
- @nHorizOffset,oVertScroll,oHorizScroll), ;
- oCurrGet:=o}
-
- @ 1,1 DCSTATIC XBPSTATIC_TYPE_RECESSEDBOX SIZE 50,8 ;
- OBJECT oStatic
-
- @ 1, 51.2 DCSCROLLBAR DATA nVertOffSet SIZE 3,8 ;
- TYPE XBPSCROLL_VERTICAL RANGE 0,FCount() ;
- AUTOTRACK ;
- OBJECT oVertScroll ;
- SCROLL { |a,x,o| nVertOffset := a[1]*20, ;
- _XSample38_2(oStatic,nVertOffSet,nHorizOffset) }
-
- @ 9.1, 1 DCSCROLLBAR DATA nHorizOffSet SIZE 50,1 ;
- TYPE XBPSCROLL_HORIZONTAL RANGE 0,200 ;
- AUTOTRACK ;
- OBJECT oHorizScroll ;
- SCROLL { |a,x,o| nHorizOffset := a[1], ;
- IIF( a[2]==XBPSB_ENDSCROLL, ;
- _XSample38_2(oStatic,nVertOffSet,nHorizOffset),nil)}
-
- FOR i := 1 TO FCount()
- IF Type(FieldName(i)) # 'M'
- bFieldName := _XSample38_1('COLLECT->'+FieldName(i))
- @ nCount,1 DCSAY FieldName(i) GET bFieldName ;
- SAYRIGHT ;
- SAYSIZE 15 ;
- SAYEVAL {|o|o:cargo[3]:=o:currentPos()} ;
- GETEVAL {|o|o:cargo[3]:=o:currentPos()} ;
- PARENT oStatic ;
- GOTFOCUS bGotFocus
- ENDIF
- nCount++
- NEXT
-
- DCREAD GUI ;
- PARENT @oDlg ;
- TITLE 'Scrolling GETS Demo' ;
- FIT ;
- MODAL ;
- ADDBUTTONS ;
- EVAL { || oDlg:reSize := ;
- {||_XSample38_4(oDlg,oStatic,oVertScroll,oHorizScroll), ;
- Eval(bGotFocus,nil,nil,oCurrGet)}}
-
- Sleep(100)
-
- RETURN nil
-
- /* ------------------- */
-
- STATIC FUNCTION _XSample38_1( c )
-
- RETURN {|x|IIF(x==nil,&(c),&(c):=x)}
-
- /* ----------------------- */
-
- STATIC FUNCTION _XSample38_2( oStatic, nVertOffset, nHorizOffset )
-
- LOCAL aChildren := oStatic:ChildList(), i, aCargo, nRow, nCol
-
- FOR i := 1 TO LEN(aChildren)
- aCargo := aChildren[i]:cargo[3] // user cargo is always :cargo[3]
- nCol := aCargo[1]
- nRow := aCargo[2]
- aChildren[i]:setPos({nCol-nHorizOffset,nRow+nVertOffset})
- NEXT
-
- RETURN nil
-
- /* ----------------------- */
-
- STATIC FUNCTION _XSample38_3( oXbp, oStatic, nVertOffset, nHorizOffset, ;
- oVertScroll, oHorizScroll )
- IF Valtype(oXbp) = 'U'
- RETURN nil
- ENDIF
-
- DO WHILE oXbp:currentPos()[2] < 0
- nVertOffset += 20
- _XSample38_2( oStatic, nVertOffset, nHorizOffset )
- ENDDO
- DO WHILE oXbp:currentPos()[2] > oStatic:currentSize()[2]-20
- nVertOffset -= 20
- _XSample38_2( oStatic, nVertOffset, nHorizOffset )
- ENDDO
- oVertScroll:setData(nVertOffset)
-
- RETURN nil
-
- /* ----------------------- */
-
- STATIC FUNCTION _XSample38_4( oDlg, oStatic, oVertScroll, oHorizScroll )
-
- oStatic:setSize({oDlg:currentSize()[1]-50, ;
- oDlg:currentSize()[2]-120})
-
- oVertScroll:setPos({oStatic:currentSize()[1] + 12, ;
- oVertScroll:currentPos()[2]})
-
- oVertScroll:setSize({oVertScroll:currentSize()[1], ;
- oStatic:currentSize()[2]})
-
- oHorizScroll:setSize({oStatic:currentSize()[1], ;
- oHorizScroll:currentSize()[2]})
-
- RETURN nil
-
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_39
-
- /* This example shows how to use DC_WaitOn() to display a
- "work in progress" dialog while an action is in
- progress */
-
- LOCAL cDialog
-
- USE ..\XDOC\EXPRESS VIA FOXCDX ALIAS XDOC EXCLUSIVE
-
- cDialog := DC_WaitOn('Please wait while copying file')
- COPY TO JUNK
- Ferase('JUNK.*')
- DC_Impl(cDialog)
-
- RETURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_40 ( lPreview )
-
- /* This example shows how printing can be accomplished using
- simple Clipper-style print commands. */
-
- LOCAL aFor_Sale, oPrinter, i, nLineCount, cMemo, cMemoLine, cScrn
-
- lPreview := IIF(Valtype(lPreview)='L',lPreview,.f.)
-
- CLOSE ALL
- USE COLLECT EXCL VIA DBFNTX
-
- IF !lPreview
- GOTO 3
- ENDIF
-
- aFor_Sale := { 'No','Yes','Not Sure' }
-
- BEGIN SEQUENCE
-
- IF lPreview
- DCPRINT ON SIZE 60,100 TO oPrinter FONT '12.Courier New' PREVIEW HIDE
- ELSE
- DCPRINT ON SIZE 60,100 TO oPrinter FONT '12.Courier New'
- ENDIF
-
- IF Valtype(oPrinter) # 'O' .OR. !oPrinter:lActive
- BREAK
- ENDIF
-
- IF !lPreview
- cScrn := DC_WaitOn()
- ENDIF
-
- DO WHILE !Eof() .AND. DC_PrinterOk(oPrinter)
-
- DCPRINT SIZE 66,80
-
- @ 2,2,20,35 DCPRINT BITMAP COLLECT->bitmap1 PRINTER oPrinter ;
- AUTOSCALE CENTER
-
- @ 2,37,20,70 DCPRINT BITMAP COLLECT->bitmap2 PRINTER oPrinter ;
- AUTOSCALE CENTER
-
- DCPRINT FONT '12.Courier New' PRINTER oPrinter
-
- @ 23, 5, 38, 65 DCPRINT BOX PRINTER oPrinter
-
- @ 24,7 DCPRINT SAY ' Description:' PRINTER oPrinter
- @ 25,7 DCPRINT SAY ' Type:' PRINTER oPrinter
- @ 26,7 DCPRINT SAY ' Sub-Type:' PRINTER oPrinter
- @ 27,7 DCPRINT SAY ' Condition:' PRINTER oPrinter
- @ 28,7 DCPRINT SAY ' Location:' PRINTER oPrinter
- @ 29,7 DCPRINT SAY ' For Sale?:' PRINTER oPrinter
- @ 30,7 DCPRINT SAY ' Original Date:' PRINTER oPrinter
- @ 31,7 DCPRINT SAY ' Acquired Date:' PRINTER oPrinter
- @ 32,7 DCPRINT SAY ' Original Price:' PRINTER oPrinter
- @ 33,7 DCPRINT SAY 'Appraised Value:' PRINTER oPrinter
- @ 34,7 DCPRINT SAY ' Comments:' PRINTER oPrinter
- @ 35,7 DCPRINT SAY ' Bit Map 1:' PRINTER oPrinter
- @ 36,7 DCPRINT SAY ' Bit Map 2:' PRINTER oPrinter
-
- DCPRINT FONT '14.Courier New' PRINTER oPrinter
-
- @ 24,25 DCPRINT SAY COLLECT->descrip PRINTER oPrinter
- @ 25,25 DCPRINT SAY COLLECT->type PRINTER oPrinter
- @ 26,25 DCPRINT SAY COLLECT->sub_type PRINTER oPrinter
- @ 27,25 DCPRINT SAY COLLECT->condition PRINTER oPrinter
- @ 28,25 DCPRINT SAY COLLECT->location PRINTER oPrinter
- @ 29,25 DCPRINT SAY aFor_Sale[COLLECT->for_sale+1] PRINTER oPrinter
- @ 30,25 DCPRINT SAY COLLECT->date_orig PRINTER oPrinter
- @ 31,25 DCPRINT SAY COLLECT->date_acqu PRINTER oPrinter
- @ 32,25 DCPRINT SAY COLLECT->orig_price PRINTER oPrinter
- @ 33,25 DCPRINT SAY COLLECT->appr_value PRINTER oPrinter
- @ 34,25 DCPRINT SAY COLLECT->comments PRINTER oPrinter
- @ 35,25 DCPRINT SAY COLLECT->bitmap1 PRINTER oPrinter
- @ 36,25 DCPRINT SAY COLLECT->bitmap2 PRINTER oPrinter
-
- DCPRINT FONT '16.Arial' PRINTER oPrinter
-
- DCPRINT SIZE 40,80
-
- cMemo := Alltrim(COLLECT->memo)
- nLineCount := MLCount(cMemo)
- FOR i := 1 TO nLineCount - 1
- cMemoLine := MemoLine( cMemo, nil, i )
- @ 25+i,7 DCPRINT SAY cMemoLine PRINTER oPrinter
- NEXT
-
- SKIP
-
- IF !Eof()
- DCPRINT EJECT
- ENDIF
-
- ENDDO
-
-
- IF !lPreview
- DC_Impl(cScrn)
- ENDIF
-
- DCPRINT OFF PRINTER oPrinter
-
- END SEQUENCE
-
- RETURN nil
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_41
-
- /* This example shows how print preview can be accomplished using
- the same code as that used for printing. */
-
- RETURN XSample_40( .T. )
-
- *** END OF EXAMPLE ***
-
- /* --------------------------- */
-
- STATIC FUNCTION XSample_42()
-
- /* This example show how to use the CASCADE clause of DCGETOPTIONS
- to create cascaded windows. */
-
- LOCAL GetList := {}, GetOptions
-
- @ 10,10 DCPUSHBUTTON PROMPT 'New Window' ;
- SIZE 30,3 ;
- FONT '12.Arial Bold' ;
- ACTION {|o|o:=Thread():new(),o:Start({||XSample_42()}) }
-
- DCGETOPTIONS ;
- CASCADE
-
- DCREAD GUI OPTIONS GetOptions FIT ADDBUTTONS
-
- RETURN nil
-
- /* ------------------- */
-
- STATIC FUNCTION _XSample42 ( xData, nElement )
-
- LOCAL cData := DC_XtoC( xData ), cPrefix
-
- DO CASE
- CASE nElement = 2
- cPrefix := 'File Size: '
- CASE nElement = 3
- cPrefix := 'File Date: '
- CASE nElement = 4
- cPrefix := 'File Time: '
- CASE nElement = 7
- cPrefix := 'Creation Date: '
- CASE nElement = 8
- cPrefix := 'Creation Time: '
- OTHERWISE
- cPrefix := ''
- ENDCASE
-
- RETURN cPrefix + cData
- *** END OF EXAMPLE ***
-
-
-
-