Open navigation menu
Close suggestions
Search
Search
en
Change Language
Upload
Sign in
Sign in
Download free for days
100%
(1)
100% found this document useful (1 vote)
3K views
660 pages
Foxpro Developers Guide
foxpro (dos) developer pack item
Uploaded by
z. e.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content,
claim it here
.
Available Formats
Download as PDF or read online on Scribd
Download
Save
Save Foxpro Developers Guide For Later
100%
100% found this document useful, undefined
0%
, undefined
Embed
Share
Print
Report
100%
(1)
100% found this document useful (1 vote)
3K views
660 pages
Foxpro Developers Guide
foxpro (dos) developer pack item
Uploaded by
z. e.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content,
claim it here
.
Available Formats
Download as PDF or read online on Scribd
Carousel Previous
Carousel Next
Download
Save
Save Foxpro Developers Guide For Later
100%
100% found this document useful, undefined
0%
, undefined
Embed
Share
Print
Report
Download now
Download
You are on page 1
/ 660
Search
Fullscreen
Developer's Guide Includes Putting It All Together Fox SoftwareOverview of the Documentation Getting Started introduces you to FoxPro and gives you a quick tour of its powerful features. After the quick tour, you can continue to the tutorial and learn how easy it is to use the features previewed in the quick tour. Interface Guide begins with an introduction to the interface followed by an item-by-item tour of the interface. Each menu option is described along with any related dialogs and windows. FoxPro power tools, which allow you to build interface components and access your data without programming, are also described in this manual. Commands & Functions is a complete reference for the FoxPro programming language. It contains detailed descriptions of all FoxPro commands and functions in alphabetical order, plus an alphabetical listing of system memory variables. Developer's Guide contains an extended discussion of recommended techniques for designing and implementing FoxPro 2.0 applications. Suggested usage of new FoxPro 2.0 power tools is illustrated by numerous examples. Advanced topics such as customization, compatibility and optimization are also included in this manual. Help is always a keystroke away when you use FoxPro. To see context-sensitive help for the active window, dialog or menu option, press Fl. For a command, function or system memory variable, select it and press Fl. Each help topic is linked with related help topics for easy accessFoxPro Developer's Guide August 1991 Fox Software, Inc 134 W. South Boundary Perrysburg, Ohio 43551Trademarks FoxBASE*, FoxBASE*+ and FoxBASE*+/Mac are registered trademarks and FoxPro™ is a trademark of Fox Holdings, Inc. Other trademarks may be used throughout this manual. FoxPro software and reference materials are the sole property of Fox Holdings, Ine. Reproductions of any kind without prior written consent is strictly prohibited, © 1989, 1991 Fox Holdings, Inc. All rights reserved.Contents Contents Overview: Putting It All Together ‘This chapter provides an overview of the power tools used to develop an application. The chapter begins on page 1-1. Screens Advantages of the Screen Builder ‘Terms Used in this Chanter Utility Screens . . . Other Screens . . Screen Sets . Code Snippets... Calling a Screen Program . Significance of READ... ... . Your Working Environment, Design Considerations ‘The Generated Program Sereen Layout... . Setup Code Cleanup and Procedure Code Window Definitions READ Level Clauses Field Objects and Controls Field Objects Push Buttons . Radio Buttons... . . Check Boxes . weed POUR «a eae es mea Coordinating Browse with Screens Activating Browse Windows Sizing and Positioning Browse Windows 2-91 Activating Menus During a Modal READ... 2-92 Debugging Screen Code in an Application... . 2-93 Using FoxDoc with Screen Programs ....... 2-95ii Menus Advantages of the Menu Builder ........ ‘Terms Used in this Chapter... .. .. Code Snippets... 22. ...-0-- Calling a Menu Program Activating the Menu . . READ and Menus . SET SYSMENU . . . PUSH MENU and POP MENU .. . . Your Working Environment . Design Considerations . . The Generated Program . General Options... Menu Bar Options... . Menu Popup Option: Option Check Box. . . Debugging your Menus. ............. Additional Tips 6.2... ee eee Coordinating Screens and Menus Activating a Menu System READ and Menus . . . SET SYSMENU . * PUSH MENU and POP MENU Calling a Menu Program Calling a Screen Program Keyboard Shorteuts for Screen Controls Project — The Main Sroanizing Tool Advantages of a Project What Can Projects Contain? . One Project Versus Multiple Projects hts. Home Directory for Portable Applications Selecting a Main File . . . Including Modifiable Files in Applications Unknown References in Projects Procedural Code in Projects . © B10 . 3-11 . 3-12 3-16 . 3-20 . 3-28 331 3-36 . 3-40 . . 3-42 42 42 AB 2B 44 45 46 ContentsError Handling ....- 2-2-2022 sees 5-12 Saving the Current Environment ....... 5-13 Creating the New Environment . . . BIS Preserving/Restoring the System Menu Bar. 5-15 Testing For Resources 5-16 Utility Procedures... ... . 5-16 Debugging Your nee Program Errors Compilation Errors Interactive Compilation ............. 63 COMPILE Command . Save and Compile . . Causes of Compilation Errors. Runtime Errors . Debugging Suggestions ........22.-.0005 SQL Quiz Quiz Databases .......... * 7-2 Questions... . . 7-3 Solutions 3-7 Report Variable Hints Report Variables... .......--.0--- 8-2 Report Variable Do's and Don't t's 84 Comparison Report Print Out... 2.2... 55. 85 iiiiv Arrays Creating Arrays... .. FoxPro Array Functions . Manipulating Arrays... . Initializing Entire Arrays . Referencing Array Elements ......... Assigning Values to Array Elements . . Redimensioning Arrays . Public and Private Arrays . Public Arrays Private Arrays .... . Array Limitations... Passing Entire Arrays to User-Defined Functions . 9-10 ‘Transferring Data Between Arrays and Databases 9-11 Arrays and SELECT-SQL........... oe O13 Arrays and FoxPro Controls . . . & = 9-14 Low-Level File /O Creating Files ci ccccie cee eeeens .. 10-3 Opening Files and Ports ............ 10-5 Reading From Files and Ports 10-6 Writing to Files and Ports . 10-8, Closing Files and Ports . . . 10-8 Commands and Functions for Low-Level 1/0 . 10-9 Low-Level Access to Communications Ports 10-10 Text Merge Merging Text with Text Merge Components . . 11-2 VIN. a -. ILS Directing Output to the Sereen, Windows and Files 11-8 Screen Output... 0... -.. 118 Window Output ...... soya Mg File Output r4aeeran edie Program Templates and Programs... . 11-10 ContentsContents Customizing Help Context-Sensitive Help in FoxPro ......... FOXHELP — Default Help File ...... Help Database Requirements... . FOXHELP Topics . % FOXHELP Details : FOXHELP Cross References . ‘Tailoring the Help Display ae a0 Specifying a Help Database... . . Narrowing Displayed H Help Topics . . Grander Schemes ah Help File Codes Documenting eauicallans with FoxDoc Overview... . rr Getting Started a FoxDoc Files... ....... Moving Around In FoxDoc Function Key Options A Quick Run Through Status Screen .. . . FoxDoe System Screen FoxDoc Report Screen ‘ FoxDoe Format/Action Diagram Options Sereen FoxDoc Xref (Cross-Reference) Options Screen . FoxDoc Headings Options Screen FoxDoc Tree Diagram Screen . FoxDoc Printing Options Screen . FoxDoc Other Options Screen . FoxDoe Commands Macros... . DOCCODE: Pseudo Program Statements Other FoxDoe Directives . . . a Using FoxDoc in a Batch Environment 13-2 13-4 13-4 13-4 .. 13-9 . 13-13 . 13-19 13-26 + + 13-28 » . 13-31 . 13-34 . 13-38 . 13-40 . 13-40 . 13-42 . . 13-43 . 13-45vi Documenting Applications with FoxDoc (cont'd) Program Limitations and Miscellaneous Notes. . 13-46 Memory Usage . . . 13-46 Continuation Lines 13-46 Multiple Procedure Files 13-47 Command Line Switches 13-47 Changing, Saving and Restoring Default Options 13-49 Default File Names for Report Output ..... . 13-50 FoxDoe File Types Identification 13-51 Cross-Reference Codes 13-55 Batch Programs 13-57 Keyword File List Information 13-59 TANT 2 or vw sic cosnewrsnoscee 13-61 Symbols .......... 13-62 Sample Reports... . . . 13-64 Sample Main Program/Project File 13-65 System Summary... .......-.-55- . 13-66 Tree Diagram . 13-68 Procedure and Funetion Summary... 13-69 Database Structure Summary . . . - 13-70 Database Summary Lee 13-72 Index File Summary... . s 13-74 Report Form File Summary ............ 13-76 Token Cross-Reference Report... . . . 2... 13-78 Public Variable Summary 13-79 Macro Summary 13-80 Array Summary . wsnnnaegay ISB PUBL ys i 48 2 ye wewmEs HS we - 13-82 Customizing FoxPro Startup Files - 142 CONFIGSYS .... . - 142 CONFIGFP. 6... - 143 Changing Configuration Setings dl ; 1a SET Commands .... ce 1G SET Commands in CONFIG . 14-6 Special CONFIG Items 14-10 Startup Switches 14-17 ContentsContents Specify Configuration File 2... 0.00. Turn Off Use of Expanded Memory ... . . Prevent Attempts to Use F11 and F12 Keys Suppress Sign-on Screen . . . Loaders Function Keys and Macros Function Keys . Macros... . . . FOXUSER Resource File Structure of FOXUSER or Modifying the FOXUSER Resource File . . Predefining Browse Window Configuration . Extended Display Modes ......-..---- Display Modes..........-- Additional Display Modes Also Supported COMOr woe scene Color Pair . . Color Pair List Color Scheme Color Set . Specifying Colors in CONFIG.FP Optimizing Your System Memory . 4 ‘Types of Memory wom Ke me x Memory and Standard FoxPro . Extended FoxPro ‘ General Memory Guidelines . . . General Considerations CONFIG.SYS Startup Speed . Files and Directories Free Disk Space Math Coprocessor ‘TSRs and Memory... . Loddéte pieces savsavave FoxPro/LAN and Temporary Files . 15-2 15-2 15-3 15-6 15-9 - 15-10 . 15-10 - Well . » 15-12 15-14 RAM Disks and Disk Caches That Use 1 EMS. . . 15-16 - . 15-16 .. 15-16 - 15-17 15-14 viiOptimizing Your Application The Rushmore Technology . Rushmore with Multiple Databases. Rushmore with Single Databases Basic Optimizable Expressions . . . . . . Combining Basic Optimizable Expressions . . 16-6 Combining Complex Expressions When Rushmore Is Not Available... . . . 16-9 Disabling Rushmore . . . General Performance Hints... 16-10 Compatibility Additions and Enhancements to FoxPro 2.0... . 17-2 Language Changes FoxBASE+, FoxPro 1.xx . 17-6 New Operator or Re New Commands . New Functions New System Memory Variables | FoxBASE+ Compatibility... . . Emulating FoxBASE+ Havstroke ‘Asaigamnents 17-44 SET Options for FoxBASE+ Emulation . . . . 17-46 Unavoidable Differences 17-47 SETCOMPATIBLE ......... iis 17-50 Converting Files from FoxBASE+ 2.10... . 17-58 .NDX Index Files . 17-58 .DBT Memo Files . 17-59 FOX Program Files . 17-60 Compiling Programs . . 17-60 Executing Programs . . . 17-61 Converting Files from FoxPro 1. XX. wees 17-63 ContentsContents Multi-User FoxPro System Requirements ...... « wom gan 182 Hardware 18-2 Software . = 8 om 18-2 Installation and Work Station Setup... . - 18-4 ADDUSER.PRG 18-5 Running FoxPro/LAN 18-9 System Configuration wee. 18-10 FoxPro/LAN Components... .... +. + + 1810 ‘Temporary Work Files . . . . 28. & * e e CONFIG.FP .. . . we oo on HE Special CONFIG Options ........... . 18-13 FOXUSER Resource File... ......- . 18-14 Multi-User Programming . epee ee IIB Exclusive Use versus Shared Use... .. 18-15 Commands that Require Exclusive Use . . 18-16 Write Access versus Read-only Access . . . 18-17 Record and File Locking esee - IEIT Automatic versus Manual Locking « - 18-18 Unlocking Records and Database Files - - 18-18 Commands that perform Automatic Locking . 18-19 SETREPROCESS ........- Manual Locking Funetions . . Collision Management... . Error Handling Routines The Low-level File Functions Optimizing Performance . . . : Place the Temporary Files on a Local Drive . 18-26 Sorted Files versus Indexed Files... .. . . 18-26 Exclusive Use of Files 2.2.20... 000% 18-27 Length of Lock... hay wee eeesas 18-27 Multi-User Commands and Functions... ... « 18-28 BROWSECHANGEARDIT 18-29 DISPLAY or LIST STATUS... 18-30 ERROR... 18-31 FLOCK. . 18-32 MESSAGE 18-34 NETWORK... . 18-35 ROM ccicem yy neat ee tages gaa nua 18-36 ixMulti-User FoxPro (cont'd) RLOCK or LOCK 18-37 SET EXCLUSIVE 18-40 SET LOCK 18-41 SET MULTILOCKS 18-42 SET NOTIFY . 18-43 SET PRINTER... .. 18-44 Format 1 18-44 Format2 .... 18-45 Format 3 . 18-45 SET REFRESH 18-46 SET REPROCESS .. . 18-47 SET STATUS 18-50 PU cae we owe 18-51 SYS(2011) ... 2... 18-52 UNLOCK 2... 18-53 USE ... EXCLUSIVE . euseve 18-54 Multi-User Error Messages... . . 18-55 Printer Drivers Printer Driver Overview RERRKRRE Saws 19-3 Using FoxPro’s Sample Printer Drivers... 19-8 Specifying a Printer Driver . . . -. 19-8 Creating a New Printer Driver Setup... . . 19-9 Modifying an Existing Printer Setup... . . 19-10 Deleting a Printer Setup... .. vee 19-10 Specifying a Default Printer Setup... ... 19-11 Loading a Printer Driver Setup. . 2... 19-11 Clearing the Current Printer Setup 19-11 Specifying Printer Procedures Interactively _ 19-12 ContentsContents Creating Custom Printer Drivers... . 5. - Printer Driver Programs Printer Driver Procedures PDONLOAD ... . PDONUNLOAD PppocsT PDDOCEND..... PDPAGEST .... PDPAGEEND ...- PDLINEST PDLINEEND PDOBIST PDOBJECT PDOBJEND PDADVPRT Printer Procedures Notes a ePUIPAAIIS! apse ro tinStacrchn ri wit Designating a Printer Driver Program Custom Printer Driver Setup Applications Appendices Customer Support Tables Error Messages Index - 19-13 +» 19-13 - 19-14 . » 19-15 19-15 . 19-15 . 19-16 . 19-16 . 19-17 . 19-17 19-17 19-17 . 19-19 - 19-19 . 19-20 . 19-21 19-22 ~ 19-28 xiPutting It All Together1 Overview: Putting It All Together Chapters in Putting It All Together provide insight into using FoxPro's power tools to develop an application. FoxPro power tools automate the construction of user interfaces, the retrieval and dis- play of information, the gathering of application components from various locations into an .APP or an .EXE, and the updating of ap- plications when components change. A project is the unifying mechanism that gathers the pieces of an application together, as shown below. Project Components Procedural: + programs: External Routines: + libraries Interface: + screen sets + menus + formats: Other Files: + databases + mem files + keyboard macros Retrieval/reporting: + reports + labels = queries Each chapter in Putting It All Together includes examples, ex- planations and recommended techniques to help you get the most out of FoxPro. Special attention is focused on options that offer significant or unique opportunities for your applications. Overview: Putting It All Together Di© D1-2 To get the most out of this section, you should know how to operate the power tools and have a basic understanding of the FoxPro language. If you need to learn to operate the power tools, refer to the FoxPro Interface Guide or the FoxPro Getting Started manual. If you are interested in details about a particular com- mand or function, refer to the FoxPro Commands & Functions manual. Chapters in Putting It All Together contain examples from the OR- GANIZER sample application provided with FoxPro 2.0. The OR- GANIZER is located in the directory SAMPLE. Feel free to inves- tigate ORGANIZER in depth, use its techniques and develop your own approaches. To use ORGANIZER, just execute ORGANIZE.APP. Two options are added to the System menu popup: Conversions and Organize... Conversions allows you to convert from one unit of measurement to another, When you choose Organize..., a submenu appears dis- playing the following options: * Client Manager organizes information about clients. * Money Manager... displays a submenu with the following options: — Credit Cards organizes credit card information. — Accounts organizes bank account information. — Transactions organizes your business transaction information. * Restaurants organizes information about restaurants. * Family & Friends organizes information about family members and friends. Code used in the examples in this manual may differ slightly from the ORGANIZER code on disk. ‘The ORGANIZER consists of eight projects: ACCNTS.PJX, TRANS.PJX, CLIENTS.PJX, FAMILY.PJX, CREDIT.PJX, CONVERT.PJX and RES. ‘TAURS.PJX and ORGANIZE.PJX. Overview: Putting It All Together2 Screens Se ST Screens When you build a screen, you are creating a piece of source code for your application. Information about the screen is saved in an SOx database. This database has an associated memo field with an SCT extension, ‘This screen file contains: * Information to define windows (if the screen is defined as a window). * Information to define the size, position, and appearance of all fields and controls. © Information about the environment (if it is saved with the sereen). © All underlying code (defined in code snippets) to define the behavior of the screen and the objects within the sereen. GENSCRN, the FoxPro screen generator, extracts information from the SCX database and creates a screen program file with an SPR extension, An .SPR sereen program file should never be edited. When you need to make changes to a screen, they should be made to the screen itself (using the FoxPro Screen Builder). This chapter assumes knowledge of the Screen Builder and how to create objects and define code snippets. It also assumes knowledge of FoxPro commands and functions. Examples throughout this chapter demonstrate how to use the clauses associated with each READ and object level clause to define the behavior of a screen and the objects within the screen. All examples are taken from the ORGANIZER application provided with FoxPro. For more information about the ORGANIZER, see the chap- ter titled Putting It All Together in this manual. ‘We recommend that you open the screen (SCX) files used in the examples to look at the code in the code snippets for different, ob: jects in the screen. Compare the code snippets to see how the ob- jects interact with each other and with other screens in a screen set. You should also run the ORGANIZER application to see how objects and screens behave in an application. D2-1Advantages of the Screen Builder Advantages of the Screen Builder D2-2 Save Lots of Time Taking a minimal amount of time learning to use the Screen Builder now will result in a big payoff immediately. ‘The code gen- erator creates all the code to define the physical placement of fields and controls. It also assigns names to procedures, climinat- ing the possibility of a name collision in an application, Organization and Clarity The Screen Builder provides you with a method to encapsulate in- terface code and separate it from procedural code You can unify an object and the procedures that define its action. Procedures are defined in code snippets that are stored with the object. WYSIWYG What-you-see-is-what-you-get!_ There's no more counting rows and columns to define the position of a field. Imagine trying to count pixels in a graphic environment. What a headache! When you design a screen with the Screen Builder, you can see how the screen will look and how different objects interact with each other in the generated sereen. You can experiment with dif- ferent layouts, too. Increased Productivity You can design “utility” screens that can be combined with other sereens in a screen set. One utility screen can be used over and over in an application without code duplication. Also, if you make a change to the utility screen, the change is reflected in every ap- plication that uses the screen. We have supplied several utility screens that you can use as ap- plication building blocks. You can also assemble your own library of reusable screens to reflect you own interface style. ScreensTerms Used in this Chapter Terms Used in this Chapter Screens ‘The following is a list of terms used throughout this chapter: Code snippet — A piece of code associated with an object or screen. A code snippet is stored with the screen. Control — Push buttons, radio buttons, check boxes, popups, lists and invisible buttons are controls that can be defined in a screen. Generated code — Code created by GENSCRN, the FoxPro screen generator. Generator-named procedures — Procedures assigned a unique name by the screen generator. Allowing the generator to name procedures prevents name collision in an application Object — Any text, field, box, line or control in a screen. Object level clause — A clause for a specific object in a screen. A code snippet can be defined for each clause. WHEN, VALID and MESSAGE clauses are available for all objects. An ERROR clause is available for GET and EDIT fields. READ level clause — A clause for a specific screen. A code snip- pet can be defined for each clause. ACTIVATE, VALID, DEACTIVATE, SHOW and WHEN clauses are available for screens. Screen set — A screen set can be just one or a combination of several screens. One .SPR program is generated for a screen set. SCX file — A screen database file. SCT file — Memo file associated with .SCx database. SPR file — Generated screen program file. SPX file — Compiled SPR file. User-named procedures — Procedures that the user names and calls by name in a code snippet or expression. The alternative to a user-named procedure is a generator-named procedure Utility screen — A screen designed to work with other screens when combined in a screen set. Utility screens provide consistency in applications. Changes made to a utility sereen are reflected in all modules of an application in which the utility sereen is used. D2-3Utility Screens Utility Screens D2-4 Naming Variables in Uti Utility screens are screens designed to be used multiple times throughout an application or in more than one application. ‘They are often combined with other screens in a screen sot. Utility screens are usually designed to be independent of the structure and content of a particular database. Utility screens can be used in a variety of ways. The ORGANIZER application uses utility screens to move through data files (CON- TROL1.SCX) and to locate specific records in data files (BROW- SER.SCX), CONTROL1.SCX When you use utility screens: * You can share the same screen among different applications. * You provide consistency throughout an application. When a utility sereen is used in several places, the user becomes familiar with its look and functionality. * Any changes you make to a utility screen are reflected throughout the application. When you modify a utility screen, the Project Manager makes sure that the latest version of the screen is used in every application. All you need to do is rebuild projects that contain the modified utility screen. y Screens When you name variables in utility screens, include the “m.” prefix to avoid a variable name conflict with a field name from a database file. ScreensUtility Sereens REGIONAL Variables in Utility Screens Because utility screens are often combined with other screens in a screen set, it is best to define variables as REGIONAL when design- ing utility screens. The REGIONAL command lets you create regional memory variables and memory variable arrays. Memory variables or arrays with identical names can be created without interfering with each other — their values are protected within a “region”. Using REGIONAL variables is described later in this chapter and in the FoxPro Commands & Functions manual. Other Screens Many sereens are designed to be used with a specific database or application. The “non-utility” screens: * Are used only once. * ‘Typically reference information that is unique to the current application. Screens DesScreen Sets Screen Sets ‘A screen set can consist of one screen or it may consist of may screens. When code is generated, one .SPR program is created for the entire screen set. Modularity of Interface Pieces Usually, screens combined in a sereen set are defined as windows It may help to think of “one screen — one window.” For example, the control panel is a separate screen because it occupies its own window. Don’t think of a screen as “everything on the monitor.” Think of a screen as an entity occupying one window. Creating a Screen Set You can create a screen set with the Project Manager. When you add a screen to a project, the Generate Screen dialog appears Choose the Add push button to add the desired screens to the screen set. At the bottom of the Generate Screen dialog you can name the screen set. The name of the first screen in the screen set is displayed in the text box by default. The order in which screens are placed in a screen set affects the access order of the screens upon execution. It also affects the generation of RWAD level code snippets in the .SPR program. Options in the Generate Screen dialog allow you to edit, remove and arrange the screens. You can also suppress the generation of certain code segments. For information on ordering screens in a screen set and other options in the Generate Screen dialog, see the Screen Builder chapter in the FoxPro Interface Guide. You can save the coordinates specified when arranging screens by placing the screens in a project and saving the project. All information specified in the Generate Screen dialog is saved in the project file. When you define and generate screen sets containing multiple screens, setup code from successive screens is concatenated with the setup code from the first screen. It is possible to write code for one screen that will unintentionally change the desired output of code written for a previous screen. Careful planning and coding will ensure that you obtain the results you intended. D2-6 ScreensCode Snippets Code Snippets Screens When you create a screen, you can define code snippets associated with a specific clause for a specific object in a screen. You can also define code snippets that affect the entire screen. Defining code snippets is described in the Screen Builder chapter of the FoxPro Interface Guide. When you assign a clause to an object or a screen, you can define an expression or a procedure for the clause < Edit... > ears EEC Examples in this section are from the USERLAST field in ADDUSERS.SCX If an expression is defined for a clause, the expression is inserted in the generated program with the associated clause. @ 8,41 GT mi "Blank entries are no ABLE If the expression calls another procedure, you can define that pro- cedure in the Cleanup & Procedure code or it can be any procedure located in your path. Cleanup & Procedure code is described later in this chapter. D2-7Code Snippets D2-8 If a procedure is defined for a clause, the procedure is assigned a unique name by the SYS(2015) function. <> Procedure ©> Expression Careers erry RETURN .F. eg Seat CT see sh emer ater) This unique name is inserted in the generated program with the clause. @ 8,41 GEP m.userlast ; VALID _px Onduat () ‘The procedure is generated at the end of the program file. ‘The unique name associated with the clause becomes part of a FUNC. TION command and the code snippet follows. * pronoun m.userlast: VALID . * Function Origin: * Fran Screen: RODUSERS, Record Nimber: 8 * * variable: muserlast * Led By: VALID Clause 4 * cbject Type: jeld * * snippet Number 6 , Function F origin comments FUNTION pe20nduaf 66 seston 1 IF RETY (m.userlast) RETURN .F BOF ScreensScreens Code Snippets SHOW GET m.userfirst ENABLE _OUROBI = OBJNUM (m.userfirst) It is not necessary to include a RETURN command in the code snip- pet. If no RETURN statement is included, a .7. is automatically returned. | The unique name assigned to a code snippet changes every time you generate a screen. When you want to change a screen, you must modify the screen (the SCX file) and then regenerate the code. If you make modifications in the generated program (the .SPR file) and then regenerate the screen, all changes will be lost. In the generated code, all procedures are documented with the uni- que name and function origin comments. ‘These comments describe the screen, object and clause with which the procedure is associated. Comments are also inserted in the generated program 30 that FoxDoc can document your programs D2-9Calling a Screen Program Calling a Screen Program D2-10 When you call a sereen program, you must use the following syn- tax: Do
, SPR Screen programs (SPR), menu programs (.MPR), programs (.PRG), queries (QPR), projects (PJX) and applications (APP) are all as- signed different extensions. This allows these files to have the same base names, yet not overwrite programs on disk. Compiled sereon programs have an .SPX extension. Be sure to use the .SPR or SPX extension when calling a screen program. ScreensSignificance of READ READ is the operative command used to animate and coordinate sets of screens, menus and other windows into an interactive ses- sion. Other statements in a screen program define the appearance and behavior of objects in the screen. ‘The READ command makes the objects come alive READ level clauses and the actions they perform are: Activate This routine is used to disable objects in other win- dows, hide windows, display messages, etc. Deactivate This routine is used to keep the current READ window active (not allow another window to become the out- put window), It can also be used to terminate (or not terminate) a READ based on the RETURN value. Show This routine is used to refresh SAY and GET fields, enable and disable GET objects. Valid This routine is used to determine if a READ can be exited based on the result of a logical expression. When This routine is used to determine if the READ is ex- ecuted based on the result of a logical expression. ‘The WHEN clause can also be used to set the environ- ment for a READ. For example, if you want 2 menu available in a modal read, you would execute the menu program in the READ WHEN clause, Modal When a window is defined as modal, the window as- sumes the behavior of a FoxPro dialog. This means that windows outside of the screen set can not be brought forward on top of the screen set window and the current menu system is temporarily deactivated. Screens. D2-11Significance of READ D2-12 with You can include a list of windows that can be ac- tivated along with a screen set if an Associated Win- dow list is included in the Generate dialog. This win- dow list is added to the READ command. The syntax for the WITH clause is: READ WITH
The ACTIVATE clause can define the behavior of screens in the Associated Window list. It is executed only when the activating window is a READ window. It is not executed when Browse windows, desk acces- sories or other non-READ windows are included with the screen set. The WITH clause automatically makes the screen set modal. Only those windows defined in the sereen set and specified in the Associated Window list can be ac- tivated. To define a screen as Modal or assign an Associated Window list: 1, Choose the Generate option on the Program menu popup when the screen is frontmost or choose the Edit push button when building a project. The Generate Screen dialog appears. Defining an Associated Window list automatically makes the screen set modal. 2. Choose the Modal or Associated Windows check box. Modal defines the screen as modal (as described above). When you choose the Associated Windows check box, the As- sociated Window dialog appears. This dialog allows you to specify the Associated Window that can be activated with the screen set. Screensv Screens Significance of READ ‘This is a restrictive list. Only those windows specified in the list can be activate. If other windows are present when the screen is executed, they will appear on the monitor but cannot be activated or accessed. 3. Specify the windows(s) you want to include with the screen in the Associated window list. These windows can be activated with those defined in the Screen Set. It is not necessary to in- clude the windows defined in the Screen Set in the Associated Window list. Any Browse or memo windows or desk accessories you would like to access with your screens should be included in the As- sociated Window list. Rule 1 — to access a memo window while in a modal READ, include the database alias in the associated window list. Rule 2 — To access a Browse window while in a modal READ, include the Browse window title (by default, the database alias) in the Associated Window list. For more information and an example on the Associated Window list and the READ WITH clause, see the section on Coordinating Browse with Screens later in this chapter. D2-13Your Working Environment Your Working Environment D2-14 Working in 50 Line Mode If your machine supports an extended display mode, use it! Developing in 50 line mode allows you to display many code snip- pet windows simultaneously. You can see the eode for one object while creating code for another object and, at the same time, see the Design window for the screen. You can also have several Screen Design windows open at once. Cut, Copy and Paste Between Windows You can cut, copy and paste code from one editing window into another even if the code is from different screens. You can also cut, copy and paste objects between several Screen Design win- dows. When you copy and paste an object from one screen to another, all the information associated with the object (including any code snippets) is copied as well. Manipulating Code Snippet Editing Windows You can size, minimize and dock code snippet editing windows just as you can other text editing windows. When you save the screen, the state of windows is saved as well. When you open the screen, all code snippet editing windows appear as they did when you closed the screen. From the Screen menu popup you can choose Open All Snippets or Close All Snippets to open and close all code snippet editing windows at once. When a code snippet window is open, the clause or option with which the snippet is associated is dimmed in the corresponding dialog. This provides you with a visual clue as to the state of the window. All open code snippet editing windows are listed at the bottom of the Window menu popup. You can make any code snippet editing window the active window by choosing it from this menu popup ScreensDesign Considerations Design Considerations Window Types Your applications should have a consistent look. ‘The appearance of a window provides the user with a visual clue about the be- havior of the window. For example, make all your input screens one window type, all dialogs another, alerts another type, and so on, For more information on window types, see the Defining Windows section later in the chapter. Screen Controls Placing controls in a screen reduces the need for menu options. If you can make a menu option available through a control in the screen (without making the screen cluttered), do it. Reserve menu options for seldom used and irreversible options and keyboard shortcuts for screen controls. For more information on designing menus, see the Menus chapter in this manual. Access Order of Screens and Objects Mouse users can point and click between screens and between ob- jects in a sereen. Keyboard users do not have this option. Design screens with both types of users in mind Screens are accessed in the order they appear in a screen set. Ob- jects within a screen are accessed in the order they are defined. This is the order the objects are numbered in the Screen Design window. Objects should be ordered in a screen in an intuitive manner, Or- dering objects by row, column or region is desirable. For information on ordering screens in a screen set and objects in a sereen, see the Screen Builder chapter of the FoxPro Interface Guide. Disabled Item Screens Ifa field or control has no meaning until another action occurs (for example, you fill in a field to enable a push button), it should be disabled. A code snippet for one object can include code that will enable other fields and controls. Examples in this chapter demonstrate how to achieve this result. D2-15Design Considerations D2-16 Hot Keys Mouse users can point and click anywhere in the screen. Key- board users do not have this option. Hot keys allow the user to move to a desired control with one key press. For example, when a user edits one field in a screen, a hot key can enable him to access a control that will save the information. If a user is in a GET field or an EDIT region, he will need to exit the GET field or EDIT region before the hot key is available. Default and Escape Push Buttons A default push button is surrounded by « » and is automatically chosen when the user presses Ctrl+Enter. Default buttons usually take an action (for example, save the information in the screen) before exiting the screen, An escape push button appears as any other push button and is activated when the user chooses the button or presses Escape. Escape buttons usually exit the screen without taking any action (cancel), SCATTER MEMVAR and GATHER MEMVAR vs. Direct Editing The SCATTER MEMVAR command allows you to create memory vari- ables for every field in the current database record. When you create these variables and define the fields with an “m.” prefix, the editing of fields takes place on the variables, not directly on the database. ‘This allows the user to cancel out of or escape from a sereen without saving any changes. If variables are not created, when the user exits the READ (by moving to another record or exiting the screen), any modifications to the field are saved immediately. When you edit variables, the changes are not saved until a GATHER MEMVAR command is ex- ecuted. Most of the screens in the ORGANIZER application have a SCATTER MEMVAR command in the READ SHOW code snippet. The GATHER command is located in the VALID code snippet for the Save push button. Changes are not saved until the user chooses the Save push button. ScreensColor Screens Design Considerations When you assign a color scheme to a screen, every object in the screen takes on the attributes of that color scheme. You can, how- ever, assign a different color scheme to individual objects within a screen. Because an object can be colored differently at different points (selected, disabled, enabled, hot key), a single color pair is not enough to color the object. For this reason, a color scheme is required. If an object is assigned a color scheme which is different than the scheme assigned to the screen, the color scheme assigned to the object takes precedence. Every object in a screen can be defined with a different color scheme. For information on assigning color schemes to objects, see the Screen Builder chapter of the FoxPro Interface Guide. For infor- mation on color schemes, see the Color chapter in this manual. Following is a list of tips for using color: * Use color as a complementary feature to provide extra information for those users who have color capability. * Colors look best against a background of neutral gray. Studies have shown colored text is harder to read than black text on a white background. Beware of light shades of blue, which are generally the most illegible of all colors. * If all users of the application have a color monitor, color can be used to distinguish objects. D2-17‘The Generated Program The Generated Program GENSCRN, the FoxPro sereen generator, extracts information from SCX databases and creates a program file with an SPR extension. ‘SPR programs are generated in the following order: Setup Code — Section 1 Program environment code (opening) Open file commands Define window commands Setup Code — Section 2 Screen layout commands READ command Release window commands Close file commands Program environment code (closing) Cleanup and procedure code READ and object level code snippets ‘The example on the following pages is from CONVERTSPR. This example shows how code appears in the generated program. Ex- amples of code snippets and how they are used to manipulate specific screens are described throughout this chapter. D2-18 ScreensScreens ‘The Generated Program + eraser can. cP uizs29* | Program * * Pox Software Systems Group * code Is always * . a * generated. The L * author and ad- + + copycight: (0) 1891 Fax Softwexe, Tne. st |e ete : elas tion In the pro- ++ pernyshing, 43551 «| ee - . * taken from the + © Description + | Screen Code 4 * This program was automatically generated by GHNECRN. = * Options dialog. 7 CONART Setup Cove - SECTIGH 1 : froma 1 maqiitting = IF PILEVEL.()=0 SET PROCEDURE D utility Gh BeCR DO orrorhandler WITH MESSGE(), LIEND() EER PROGRAM. mR cers ‘Setup Code ~ Section 1 — You IF Ser(emxt) = "a can define code to be inserted : and executed at the beginning Fe ae of the generated program by Seen « Ne > placing generator directives in Ese the setup code for the screen mtalkstat (defined in a code snippet with Bor ‘the Setup option in the Screen Layout dialog). merea moewact m.hidecerm = WVISTELE(*comare!") DD setup D2-19The Generated Program pest 0 RESIONAL m.currarea, m.talkstat, m.compstat IP Ser(“TA’) = "a SED TAK OFF nutalkstat = "aN" Program Environment Code — This in- formation Is always generated. This |. code defines regional variables and Ese makes environment settings for the en- m.talkstat = *OFF* tire generated program. BUF mucenpetat = SET(*COMPRITELE") SED COMPATIBLE FOXPLIS mcwrarea = SHACT() * , CONVERT Databases, Inderes, Relations . IF USED(*nits*) SELECT unit's SEP ORCER TO 0 ase SELECT 0 USE (LOCPILE(*dbfs\units.dbt*, ‘DEF*, “ihero is unite"): JCAIN ALIAS units ; Open file commands — These commands are CFR 0 generated when environment information has BOF been saved (In the Screen Layout dialog) and ‘Open Files is checked in the Generate Screen dialog. You can suppress the generation of ae Ten [beets these commands by unchecking the Open Files CURE foctore ‘check box. If you choose to suppress the ‘SET GREER TO 0 generation of these commands, you can open ESE files in the setup code for the screen. SELECT 0 USE (LOCFILE(*dbts\ factors.cbf*,*DBF*, "here is factors?*)); AGAIN ALIAS factors CRORR_O BOF SELECT units ScreensScreens ‘The Generated Program . * Window definitions . . SeneeereneReeanensnatALtAAALARaRha bane enan anne : ‘Define window commands Gee Meee) — DEFINE WINDOW com- DEI ERO creat: ¢ mands are generated when FRM INT ( (ROM) 15) /2), DAT ((SO0L()-83)/2) >a window Is defined (in the "70 INP ((SROW()~15) /2) +14, 2NP((SCDLA)~53) /2)+52 +Sereen Layout dialog) and TIME " Conversions "+ Detine Windows is checked in the Generate Screen dialog. You can suppress the generation of these com mands by unchecking this check box. if you choose to suppress the generation ———— of these commands, you aor can define the windows in the setup code for the screen . . (COWERT Setup Code - SECTION 2 * s¥eaTON 1 SED WEPARAS 10 REFERENCE, PUSH MENU _MSYSMERN ~ ‘Setup Code - Section 2 — This segment of the generated program includes all setup code that follows the | #SECTION 2 generator direc- tive. If the selup code con- n.size = AN(fromerry) tains no generator directives, DIMENSION toarry{m.size] it Is placed in this segment of FOR m.i = 1 TO msize the screen program. fronarry(in.i] = ALLTRIM(Eromcry{mi}) tosrry[m.i] - fromcey{n. BOAR m.fronpop = fremarry(1) m.topep = toarry!: D2-21‘The Generated Program * . COWER? Sezeen Layout * stREGION 1 IF WVISIBLE ("convert") ACTIVATE WINER convert: SAE, ELSE The window is activated with a NOSHOW ACTIVATE WHOOW convert NesHW|*— clause so the objects can be drawn and the BOF window shown with all the objects in place. @ 7,28 10 12,49 This produces a "snappler” effect. color ws 7,170 12,22; cater was @ 7,3 SAY" From * @ 7,30 SAY " To: * @ 8,2 Gr mfromal : ‘Screen Layout commands — SIZE 1,20 ; ‘One command is generated for DEALT "5 each object In each screen. PICIURE "ETE" ; VALID convet (toval, fromal, "right") @ 9,4 er ma PICTIRE, FROM fromerry ; 7B. 3,16 § Dera 1: VALID _px800}5d3() @ 0,17 Gor munittype + PICHRE "@HRA Ar\
2 SEP SKIP OF POPUP _MREXXRD .7. SET SKIP OF POPUP reports SET SKIP OF POPUP cardinfo .7. aor READ level clause D2-25,Screen Layout Screen Layout Choose Screen Layout... on the Screen menu popup to bring for- ward the Screen Layout dialog. +> DeskTop © > Window
Screen Code: C1 Setup. C1 Cleanup @ Procs... « OK > READ Clauses! < Cancel > Rout [1 Activate... {2 Show. Column: [J valia 11 Uhen. CX] Center [1 Deactivate, Environment: Dd Add alias < Save > « Restore > < Clear > Screen Layout Dialog This dialog contains options for defining a window including color, sizing and position, defining code snippets for setup and cleanup code, and defining code snippets for READ level clauses. D2-26 ScreensSetup Code Screens Screen Layout Code in the Setup code snippet can be used to: Save the current environment (to be restored later). This often includes saving the value of certain SET commands. Create a new environment. Define memory variables and arrays. Save the current menu system by pushing it on the menu stack. Pushing menus is described in the Menus and Coordinating Screens and Menus chapters in this manual. Call other programs (for example, a program to install a menu system). Receive parameters (using generator directives). Specify the error handling routine that is called when an error is generated (ON ERROR). Open files. Define windows. Specify a procedure file. D227Screen Layout Setup Code Example 1 ‘This example is from FAMILY.SCX. This screen is used in the Fami- ly & Friends module of the application. Setup code is used to define variables and push a menu system. (Xd Sond Holiday Cards C7 Special Diet Needs (1 Exchange Gifts CTRLTAB to exit PRIVATE m.adding, m.editing -_______ Make variables PRIVATE Define and initialize memory variable SCATIER MEMVAR MEMO madding = editing Create memory variables for all fieids (including memo fields). D2-28 ScreensScreen Layout Regional Variables Screens Often, a control in a screen uses the same variable name as a control in another screen. When these screens are combined into a sereen set and a single program is created, a conflict occurs with the variable common to both screens. REGIONAL variables are used to avoid this type of conflict. REGIONAL variables are similar to private variables. Memory vari- ables or arrays with identical names can be created without inter- fering with cach other — their values are protected within a “region”. Declaring screen variables as regional in the setup code ensures that a variable is not affected by a variable with the same name used in another screen in the screen set. If you declare variables in screens in a sereen set as REGIONAL variables in the setup code, FoxPro automatically resolves the conflicts. When regional variables are declared in the screen setup code, the GENSCRN screen generating program automatically inserts the necessary #REGION compiler directives needed to resolve memory variable name conflicts. #REGION compiler directives are inserted at the beginning of the setup code for each screen, at the beginning of the screen layout statements for each screen, at the beginning of the cleanup code for each screen and in the READ and Object level code snippets for each object. For more information on REGIONAL variables, see the REGIONAL command in the FoxPro Commands & Functions manual. 12-29Screen Layout Setup Code Example 2 This example is from CONTROLISCX, a utility screen used throughout the ORGANIZER application. Setup code is used to define regional variables. D2-30 Generator directive #SECTION 2 (described In next section) REGIONAL m.choice, m.toprec, m.bottomrec, m.saverecno, m.quitting mquitting = .F. __| Make variables REGIONAL m.choice = "OK" Initialize variable for "OK" push button IF EOF() If file Is open and at end of @: BOTTOM file, position on bottom record, EDIE, m,saverecno = RECNO() @ TP Initialize variables with top, m.toprec = RECNO() bottom and current RECN GO ROTTON a m.bottomrec = RECNO() 5 —_— Retum record pointer to current record ScreensScreen Layout Generator Directives Screens Generator directives were implemented in FoxPro to allow the user to include code in a generated screen program that would not otherwise be available through the Screen Builder. Generator directives are commands that communicate solely with GENSORN, FoxPro screen program code generator. Generator direc- tives do not appear in generated screen program code. Generator directives must be place in the Setup code for a screen. Only one directive of each type can be include in the code. #SECTION 1 | 2 These generator directives allow you to split the setup code for a screen into two sections. Setup Code — Section 1 is generated at the beginning of the .SPR program. Setup Code — Section 2 is generated after the DEFINE WINDOW commands and before the Screen Layout commands. You would split the setup code if you wanted to include a PARAMETER statement or an ON ERROR state- ment in the screen program. Precede commands to be inserted in section one of the setup code with a #SECTION 1. If you would like other setup code placed in Setup Code — Section 2, a #SECTION 2 generator directive should follow commands in section 1, #SECTION 1 PARAMETER x, y, 2
SECTION 2 other comands> #READCLAUSES
This generator directive allows you to specify clauses to be placed at end of a READ command that are not available through the Screen Builder. Typical clauses to include are TIMEOUT, SAVE, OB- JECT, NOMOUSE and COLOR. #READCLAUSE TIMBOUT SAVE OBJECT COLOR * These READ clause mist be * placed on one line in the * setup code. D2-31Screen Layout D2-32 #ITSEXPRESSION
This generator directive allows you to specify a single character that can be used to indicate that picture clauses, window titles and window footers are expressions instead of literal strings, #TTSEXFRESSION ~ #SECTIONL vamame = "Fred" * A window title can be defined * as ~
. when the window is displayed, Fred * appears as the window title. The #SECTION1 generator directive is included in this example be- cause the windows are defined before Setup Code — Section 2 is executed. #ITSEXPRESSION is applicable only to windows defined in the Screen Layout dialog in the Screen Builder. #WNAME
‘This generator directive allows you to substitute the current win- dow name for
wherever it occurs in code. This allows you to use generic code which is independent of the unique window name generated by GENSCRN. ‘The following statement is defined in setup code for screen: HARUM Ered The following statements are defined in ACTIVATE clause for win- dow: IF WONTOP( fred’)
EDIF A unique name for current window is substituted for "fred". It is not necessary to know actual window name. With t t above example, the following code appears in the generated screen program: IF WONTOP('_PV6ONIAGH') && Unique named window
ELSE
EOF ScreensScreen Layout #REDEFINE By default, GENSCRN generates code to check for the existence of a window before defining it. This generator directive allows you to suppress the commands that check for existence of a window and automatically redefine window. Screens D2-33Screen Layout Setup Code Example 3 This example is from ADDUSERSSCX, a screen is called in the Credit Cards module of the ORGANIZER application. Setup code is split into two sections. In section two of the setup code, an array is defined and filled with a SQL SELECT statement. Selection list: Authorized users: rT Nove + > [Secon Cone teed arteries Poe ened © Renove > Coe ees Prac ees Renove All > Eset Last: New nane > First? ok #SECTL PARAMETER m.cardid Generator directive PARAMETER statement asecT2 PRIVATE m.mover, m.us allusers, m Generator directive Make variables Environment setting PRIVATE SET EXACT_ON m.user = 1 m.userlast = "" Define and initialize variables, create array to prevent an error if CARDUSER.DBF Is empty. ECT () MENSION allusers(1, allusers =" a Call UDF LOCATEDB( } to locate IF NOT locatedb("carduser", 1) -DBF and associated .FPT. RETURN > LOCATEDB( ) is defined in ENDIF MAIN.PRG REQNO() ELECT DISTINCT lastname, firstname, ALLTRIM (firstname) +" "4ALLIRIM( FROM carduser ; NIO ARRAY allusers Fill array using SQL SELECT D2-34 ScreensScreens Screen Layout m.allent = ALEN(allusers, 1) (users) Is an array that was created in the pre- vious screen, IF BPTY (users) mvusrent = 0 ELSE mwusrent = 1 m.limit = ALEN(users,1) DO WHILE m.usrent <= m, limit Check size of Authorized Users IF EXPTY (users [m.usrcnt,1]) |” List so blank records will not EXIT be displayed. ENDIF m.usrent = m.usrent + 1 ENDO mvusrent = m.usrent - 1 RO D2-35Screen Layout D2-36 Open Files When screens are generated, code to open files, set index order, set relations, etc., is generated using the environment information saved with the screen. These commands are generated and ex- ecuted prior to the DEFINE WINDOW commands. The Open Files check box in the Generate Screen dialog allows you to suppress the generation of these commands. We recommend that you allow the generator to create the open file commands; however, you can define these commands in the Setup code snippet. Defining Windows When screens are generated, code to define windows is generated using the window definition information saved with the screen. These commands are generated and executed prior to the com- mands in the Setup Code — Section 2 code snippet. The Define Windows check box in the Generate Screen dialog allows you to suppress the generation of these commands. We recommend that you allow the generator to create the DEFINE WINDOW commands; however, you can define these commands in the Setup code snippet. If you do not name a window in the Sereen Layout dialog, a unique name is generated for the window. ‘This unique name changes every time you regenerate the screen. ScreensScreen Layout Cleanup and Procedure Code Cleanup and Procedure code is generated and executed at the end of the .SPR program. This code snippet can be used to: . Restore environment settings Release public memory variables (by name) Restore the previous menu system Release windows Close files Define user-named procedures Cleanup and procedure code is used to restore the environment and release public memory variables. It is also used to pop menu systems. Screens D2-37Screen Layout Cleanup and Procedure Code Example 1 This example is from FAMILY.SCX, a screen called in the Family & Friends module of the ORGANIZER application. This code snippet restores environment settings and pops a menu system. IF m.quitting RELEASE WINDOW family |— Release windows. RELEASE WINDOW controls EOF D2-38 ScreensScreen Layout. Releasing Public Variables by Name You should release public variables by name in the cleanup code for a screen. Issuing a RELEASE ALL command in the cleanup code for a screen will release all variables in the currently executing program. Close Files When screens are generated, code to close files is generated auto- matically, These commands are executed before the user-defined cleanup code, The Close Files check box in the Generate Screen dialog allows you to suppress the generation of these commands. We recommend you allow the generator to create the open file com- mands, however, you can define commands to close files in the Cleanup and Procedure code snippet Releasing Windows RELEASE WINDOW
commands are generated auto- matically for every window defined in a screen set. The Release Windows check box in the Generate Screen dialog allows you to suppress the generation of these commands. We recommend that you allow the generator to create these com- mands; however, you can close them in the Cleanup and Procedure code snippet. If you define RELEASE WINDOW
commands, it is best to name the window (in the Screen Layout dialog). User-Named Procedures Screens If a procedure is used by more than one object in a screen, it is best to call the procedure with a DO command in a code snippet for the associated clause or as a UDF in an expression for the as- sociated clause. This “usermamed procedure” can be defined in the cleanup and procedure code or it can be any procedure located in your path, Using a user-named procedure ensures that when you modify the procedure, the changes are reflected in the behavior of all objects with which the procedure is associated. If an identical procedure is defined individually in multiple code snippets, you would need to modify the procedure in every code snippet. 5 D2-39Screen Layout D2-40 When you define a procedure in the code snippet, the generator assigns the procedure a unique name that changes every time the screen is regenerated. The unique name is inserted in a FUNCTION command and the code in the code snippet follows. When you define a user-named procedure, you must use a PROCE- DURE or FUNCTION command (depending on how the procedure is called). If you want a value other that .T. returned, you must issue a RETURN at the end of the procedure, These commands are not generated as they are with procedures defined at the READ and object level. Any procedure, whether it is defined in a code snippet or a user- named procedure, can call another procedure. You can define that procedure in the Cleanup and Procedure code snippet. The proce- dure can also be any procedure located in your path. ScreensScreen Layout Cleanup and Procedure Code Example 2 This example is from ADDUSERS.SCX., a screen called in the Credit Cards module of the ORGANIZER application. The Last and First GET fields in ADDUSERS.SCX call a procedure named ESCHANDLER from the WHEN clause code snippet. Selection list: Authorized users: Jon Jeager < Move + erry eens eg Puce oct 9 < + Renove Ca cad rere tenes < Renove All Danse < New nane « OK ‘The WHEN clause code snippet contains the following code: ON KEY IABEL esc DO eschandler ‘This procedure is defined in the cleanup code for the screen and contains the following code: * ESCHANDLER - Handle ESC-aping out of a field. PROCEDU CN KEY LABEL esc muserlast. = SPACE (22) m.userfirst = SPACE (14) + Abort entry of new name. SHOW GET m.userlast DISABLE SHOW GET m.userfirst DISABLE eschandler Screens D2-41Screen Layout D2-42 Cleanup and Procedure Code Example 3 This exampli from CONVERT.SCX, a screen called in the Conver- sions module of the ORGANIZER application. In this screen, the To and From GET fields use an expression to call a UDF. Conversions > Area > Length Hass Speed Tenperature Tine Volune 2 Sey ‘The following expression is defined for the VALID clause for the From GET field: convrt (toval, fromal, "ri ‘The following expre GET field: ion is defined for the VALID clause for the To convrt (toval, frowal, "1 These expressions call CONVRT ), a UDF defined in the cleanup code for the screen. CONVRTX ) contains the following code: * COWRT = Do the conversion. FUNCTION convrt PARAMETER m.new, 1.0 PRIVATE m.toid, R; ScreensScreen Layout Window Definitions It is not necessary to name windows in the Screen Layout dialog. If you do not specify a window name, a unique name is created during generation. Allowing FoxPro to name the window eliminates the possibility of names colliding with window names in other screens of the application. This unique name changes every time you generate the screen. Name your windows if you want to reference the windows by name in other procedures or if your application includes context-sensitive help. For information on incorporating context-sensitive help in you applications, see the chapter titled Customizing Help in this manual. Positioning Windows By default, all windows are centered on the monitor. You can specify the position of the window in the Screen Layout dialog. These coordinates are saved in the SCX database. ‘The Arrange push button in the Generate Screen dialog allows you to reposition the windows in a screen set prior to generation. If the screen set is saved in a project, these coordinates are saved in the .PJX database. Arranging windows does not change the coor- dinates saved in the .SCX database. Window Types Screens The following list describes the window types available and sug- gested uses for each window type: User This window type is used when you want to control window attributes (close, float, zoom, ete.) and window color. System ‘This window type is used when you want. to mimic FoxPro system windows. Dialog ‘Typically, this window type is specified for windows that are modal in nature. In modal dialogs, informa tion must be completed in the dialog before the dialog can be exited. In the FoxPro interface, the Setup dialog is modal). Alert This window type is used to display warning and con- firmation information. Alerts are typically modal D2-43Screen Layout READ Level Clauses ‘You can define READ level code snippets for the ACTIVATE, VALID, DEACTIVATE, SHOW and WHEN clauses. Following is a list of the order that READ events and clauses are executed when the READ is first issued: . READ level WHEN clause ACTIVATE WINDOW READ level ACTIVATE npAD level SHOW! GET level WHEN for the first GET Following is a list of the order that READ clauses are called when a new window is activated: D2-44 VALID for the field being exited DEACTIVATE old window (window name returned by WLAST( )) ACTIVATE new window (window name returned by WONTOP( )) READ level DEACTIVATE READ level ACTIVATE (if the window brought on top is a READ window) WHEN clause for the new field } The SHOW clause is also executed whenever the SHOW GETS command is issued. The SHOW GETS command can be issued in any code snippet in the screen. The DEACTIVATE routine is executed when any window is brought forward and the deactivating window is a READ win- dow. The DEACTIVATE routine is not executed if the window brought forward is launched from a VALID, WHEN, DEAC- TIVATE, ACTIVATE or SHOW clause. ScreensScreen Layout READ Level ACTIVATE Example Screens ‘This example is from CLIENTSSCX., a screen called in the Client Manager module of the ORGANIZER application. The Client Manager module is an example of displaying Browse windows with screens, This procedure is used to select the CLIENTS database when the Account Details window is active, and to prohibit the closing of the Browse windows. For more information on coordinating Browse windows with sereens, see the section titled Coordinating Screens with Browse later in this chapter. Companys Balance: 2100.10 Contact: Motes: prea-Pnone: Str tetentn cuisine >< teu >< Save > (Cancel > alercnd feivez-a eivaccan D2-45Sereen Layout D2-46 IF UPPER (WLAST()) = "ACOOUNT DETAILS" OR UPPER (WLAST()) = "DETAILS. SERVI SELECT clients ‘SHOW GETS Hf Browse window was the last window on top, reselect th CLIENTS database because ac- tivating the Browse window automatically selects the as- sociated database. IP NOT WEXIST ("Account") SELECT details BROWSE LAST NOWAIT NORMAL SELECT clients = Ita Browse window Is closed, reopen it. IF NOT WEXIST ("Client") BROWSE LAST NOWAIT NORMAL EDIF ScreensScreens Screen Layout READ Level SHOW Example 1 ‘This example is taken from FAMILY.SCX, a screen called in the Family & Friends module of the ORGANIZER application. The SHOW clause is used to create variables for every field in the database and move data from the current record into correspond- ing variables. Fantly/Friends nanager Last Mane? Initial Birth: (ERAS [x] Send Holiday Cards (3 Special Diet Needs {1 Exchange Gifts CTRLTAB to exit nor adding — SCATTER MEMVAR MEMD | ENDIF t ——— Create varlables for all fields ————_—_——_! (including memo fields) and move data from current record into variables. —— Check if this is a new record Editing takes place on variables, not directly on database fields D2-47Screen Layout The SHOW clause is executed whenever the SHOW GETS command is issued. The SHOW GETS command can be defined in any code snippet in the screen. SHOW GETS redisplays all GET objects (fields, text, radio or invisible buttons, check boxes, popups, lists and text editing regions), When objects are redisplayed, you can specify whether they are enabled or disabled. SHOW GETS vs. SHOW GET All GETS are redisplayed with SHOW GETS. Individual objects can be redisplayed with SHOW GET or SHOW OBJECT. SHOW GETS will execute the READ level SHOW routine. SHOW GET and SHOW OB. JECT will not. D2-48 ScreensScreen Layout READ Level SHOW Example 2 ‘This example is taken from CONTROL1SCX, a utility screen used throughout the ORGANIZER application. The SHOW clause is used to enable and disable buttons depending on the position of the record pointer in the database. IF BOF() @ sor ROIF m.saverecno = RECNO() ‘Save current, top and @ Me | bottom RECNOy ) to m.toprec = RECNO() wartablea: GO BOTTOM m.bottemrec = RECNO() @ m.saverecno REOKO() = m-bottomrde SHOW GET m.choice, 1 DISABLE Enable Disable buttons it SHOW GET m.choice, 2 ENABLE | record pointer is positioned SHOW GET m.choice, 3 ENABLE ‘on bottom record. ‘SHOW GET m.choice, 4 DISABLE IF RECNO() = m.toprec’ Enable/Disable buttons SHOW GET m.choice, BLE if record pointer is SHOW GET m.choice, 2 DISABLE positioned on top SHOW GET m.choice, 3 DISABLE record. SHOW GET m.choice, 4 ENABLE at Enable all buttons if record SHOW CET m.choice ENABLE }— pointer is on any record = ‘except top or bottom record, Screens D249Screen Layout READ Level SHOW Example 3 This example is taken from CREDIT.SCX, a screen called in the Credit Cards module of the ORGANIZER application. The SHOW clause is used to SCATTER database fields and create an array for the Authorized Users list. Pea Nunber ta:} oct |) 7851~2479~7374-a5e7 | Diner's Club Issued By Phone: Interest —_Linit Annual Fee: Purchase: Sa Expires: fash Advi Etim Due Date: Hote: Se Teen | CTRL*TAE to oxit Pete ed - Balance: $-Z18.39 < Edit Users > < Balance > < Help > € New > € Save >
Make variable PRIVATE. Check if this is a new record. SCATTER fields to memory — variables. (See READ Level ‘SHOW Example 1) If there are users in the database, create array for Authorized Users list based on Id number 50 ScreensScreens EDIE SHOW CET m.user EDF SELECT credcard SELECT credcard users =" SHOW GET m.user Screen Layout If there are no card users, blank the array (users and refresh the display. It card users have just been added, refresh the display. D2-51Screen Layout READ Level WHEN Example 1 This example is from CLIENT.SCX, a screen called in the Client Manager module of the ORGANIZER application. The WHEN routine is executed each time the READ is executed. In this example, the WHEN routine is used to install the menu system associated with the Client Manager screen. This allows the menu system to be reactivated whenever the user is in a screen with GET fields. Compares Balance: 2180.10 < Save >< Cancel >
‘Qzpen Planning & Tac DO mainnenu.mpr Install menu system. * release ‘CONVERI” bar. PAR 6 OF _MSYSTEM Disable Conversions menu option. SKIP |_ Check memory and disable menus and options accordingly. IF VAL(SYS(1001)) SET SKIP © pO ScreensScreen Layout READ Level WHEN Example 2_ Screens This example is taken from ADDUSERSSCX, a screen called when you choose the Edit Users push button in CREDIT.SCX, a screen used in the Credit Cards module of the ORGANIZER application. ‘The WHEN clause is used to display a message when the user chooses the Edit Users push button without entering a card id number in the Credit Card Manager sereen. CEE Blank entries are not allowed «Moves > < + Remove > « Remove #11 -> D2-53Field Objects and Controls Field Objects and Controls D2-54 In a screen, field objects allow you to display and edit data. Con- trols (e.g, push buttons, check boxes) are used to designate, con- firm or cancel actions. Defining field objects and controls is deseribed in the FoxPro Inter- face Guide Every field object and control in a screen can be assigned clauses. WHEN, VALID, and MESSAGE clauses can be assigned to all fields and controls. GET and EDIT fields can also be assigned an ERROR clause. The following list describes the execution time of each clause: WHEN ‘The WHEN clause is executed as you move on to a Clause field or control. In lists, the WHEN clause is executed as you move from item to item in the list. VALID ‘The VALID clause is executed when the cursor exits a Clause GET or EDIT field and when a control is chosen. MESSAGE The MESSAGE clause is executed when the cursor is Clause positioned on a GET or EDIT field and when a control is selected. ERROR The ERROR clause is executed when the cursor exits a Clause GET or EDIT field with invalid data (as defined in a VALID clause). The ERROR clause is available for GET and EDIT fields only. ‘This chapter contains examples of the clauses available for field objects and controls and how these clauses can be used. ScreensField Objects and Controls Field Objects Choose Field... on the Screen menu popup to bring forward the Screen Field dialog. © > Bait £1 Lover... {1 Error... J Scroll bar [1 Comment... € 1 Allow tabs C1 Disablea (J Refresh Screen Field Dialog Screens 2.55Field Objects and Controls When you define a new field, the size of the field in the Design window is determined in the following manner: * If a PICTURE format is defined in the Format text box, the field is the defined width of the picture. * If no picture is defined, the field in the Design window is the size of the field as defined in the structure of the database unless one of the following is true: — If the field is a SAY expression of character type that includes more than one field or variable, the size of the fields is concatenated and the field in the Design window is the total of all the fields in the expression. — If the field is a SAY expression of numeric type and includes more than one field or variable, the size of the field in the Design window is the size of the largest, numeric field in the expression. — If the field is a SAY expression of date type, the field will be eight characters wide (if SET CENTURY is ON the field will be ten characters wide). — If the field is a memory variable, its size is determined by its type. Character variables are the length of the defined string, logical are three characters wide and numeric are ten characters wide. Date variables are eight characters wide (if SET CENTURY is ON the date field will be ten characters wide). — All fields of memo type are defined as the width specified by SET MEMOWIDTH (the default SET MEMOWIDTH value is 50). © If the field is not defined in the structure and has no picture clause, the size of the field will default to 10 characters wide. You can manually change the size of fields after they are placed in the Design window. The size of a field is never automatically changed once it is placed in the Sereen Design window. D2-56 ScreensField Objects and Controls GET/EDIT WHEN Clause Example 1 Screens ‘This example is taken from RESTAURSSCX, a screen called from the Restaurants module of the ORGANIZER application. ‘The WHEN clause is defined for the Cuisine GET field and is used to execute an escape routine. When you choose Other... in the Cuisine popup, code in the VALID clause for the Cuisine popup enables the Cuisine GET field ‘The escape routine is a user-named procedure defined in the cleanup code for the screen. Sse Restaurant: (OgEGrerry Speciality: GUCaiIPneg Bs171 Dorcas Way {1 Reservations UX] Credit Cards {J Ualet Parking (Xd Handicap Access CTRL*TAB to exit [XI Casual Attire ON KEY LABEL esc DO eschandler WITH "newcuis” D2-57Field Objects and Controls @ ... GET/EDIT WHEN Clause Example 2 This example is taken from RESTAURSSCX, a screen called from the Restaurants module of the ORGANIZER application. The WHEN clause defined for the State GET field is used to display a list when the cursor enters the field. Restaurant: Speciality: Address: PRP Steaks Giese Cuisine: 5171 Dorcas Uay Delauare District of Colu Plorida Georgia CTRL*TAB to exit C3 Reservations (x) Credit Cards C1 Valet Parking (xd Handicap Access (x1 Casual Attire PRIVATE staflds, m.choice, m.savearea, m.count, m.lastkey | m.lastkey = LASTKEY () m.savearea = SELECT() Make variables PRIVATE and Initialize variable | TF NETWORK() AND NOT (m.editing OR m,adding) RETURN EDIF- IF NOT locatedb("states", 0) RETURN RUE COUNT TO m.count DIMENSION staflds {m.count, 2] COPY TO ARRAY staflds D2-58 Itusing FoxPro/LAN, prevent display of popup If not editing or adding record. ___ Call UDF LOCATEDB( ) (See Setup Code Example 3) Create and fill array with records for STATES.DBF ScreensField Objects and Controls = ASORT (staflds, 2) Sont records. DEFI WIND list FROM 7,32 TO 14,52 NONE | pefine and activate window ACTI WIND list for list. IF NOT EPPTY (State) m.choice = ASUBSCRIPT (staf lds, ASCAN (staflds, State, 1) , 1) RUF. State stored in field is selected in list. @ 0,0 GET mchoice ; FROM staflds ; ICTURE '@61" ; RANE 2; SIZE 7,20 7 DEFAULT 1 + COLOR SCHEME 1 Define and activate list. RELE WIND list Release window for list. USE SELECT (m.savearea) __ Store chosen state to REPLACE state WITH staflds{m.choice, 1) database. SHOW GET state IF m.lastkey=5 OR m.lastkey=19 OR m.lastkey=15 * Provide a way to move between the objects with the keyboard. _ _CUROBJ = CBINUM(m, city) | atiow user to use keyboard t¢ _OROBI = OBINM (mn. zip) cave bomen ENOI ‘objects. Screens D2-59Field Objects and Controls @ ... GET/EDIT VALID Clause Example 1 ‘This example is taken from CLIENTS.SCX, a screen called from the Client Manager module of the ORGANIZER application. ‘The VALID clause is defined for the Company GET field and is used to compare values and enable the Save push button, ‘The SHOWSAVE( ) func- tion is located in the cleanup code for the screen. Contact Aree-Phone: lettent Type: (> Rotive © > Inactive > Pret < Help >< New >< Save >< Cancel > Ee az7at a IF m.conpany < > clients.conpany showsave( ) RUIF D2-60 ScreensField Objects and Controls GET/EDIT VALID Clause Examy ‘This example is taken from ADDUSERS.SCX, a screen called when you choose the Edit Users push button in CREDIT.SCX, a screen used in the Credit Cards module of the ORGANIZER application. In this example, the VALID clause is defined for the Last GET field and is used to check for data in the field and to enable the First GET field. rer < Move + eerie ey Pees < © Renove Ce eu erent < Renove All iat < New name «< 0K IF EMPTY (m.userlast) If fleld is empty, do not allow RETURN .F, |-——— user to exit until data Is. BUIF entered of user presses escape. SHOW GET m.userfirst ENABLE Enable and select First _CUROBJ = OBINMM (n.userfirst) GET field Screens D2-61Field Objects and Controls @ ... GET/EDIT ERROR Clause Example This example is taken from ADDUSERS.SCX, a screen called when you choose the Edit Users push button in CREDIT.SCX, a screen used in the Credit Cards module of the ORGANIZER application. In this example, the ERROR clause is defined for the Last GET field and is used to display a message if the user tries to tab to another field without entering a last name. Selection list! CSE pUcolirey Schu: Prenat eae tenes < © Renove > cen! Pee ene? « Remove All > Dae tenes Last: < New name > | "Blank entries are not allowed" D2-62 ScreensField Objects and Controls @ ... SAY Refresh Example This example is taken from CREDIT.SCX, a screen called from the Credit Cards module of the ORGANIZER application. The SHOW routine is defined for the Balance SAY field and is used to refresh the field when the record changes. Ree | CINL*TAB to exit Preece ened Balance: $-218.39 Bait Users > < Balance > < Help > < Neu > < Save >
Vertical (1 Terminating
Push Button Dialog Push buttons can be used to invoke another sereen or a dialog You can give the user a visual clue that a push button will bring forward a dialog by placing an ellipsis (...) in the push button prompt. Screens 2-65Field Objects and Controls D2-66 Group vs. Individual Push Buttons Push buttons can be defined individually or in groups. Push but- tons that perform similar actions (Top, Bottom, Prior, Next) should be defined in a group. A DO CASE statement in the VALID clause can determine which button was selected and take the appropriate action. Push buttons which perform actions that are not related to any other push buttons should be defined individually. Terminating vs. Non-Terminating Push Buttons Push buttons perform actions within a READ and are, by default, non-terminating buttons. When a button is non-terminating, all controls remain active and you can make further selections and enter additional data in the generated screen, Terminating push buttons execute the VALID (if one is defined), exit the READ and execute the next line in the controlling program, Default and Escape Push Buttons Special characters allow you to define default and escape push but- tons. For information on defining default and escape push buttons, see the Sereen Builder chapter in the FoxPro Interface Guide or the @ ... GET — Push Buttons command in the FoxPro Commands & Functions manual. ScreensField Objects and Controls Push Button VALID Clause Example 1 ‘This example of an individual push button is taken from PAMI- LY.SCX, a screen called in the Family & Friends module of the OR- GANIZER application, The VALID clause is defined for the Help push button and is used to bring forward a Help window for the Family & Friends module. Fantly/Friends Hanager po | UX) Send Holiday Cards CJ Special Diet Needs C1 Exchange Gifts, CTRLSTA to exit HELP CHR(254) Family / Friends Screens D2-67Field Objects and Controls Push Button VALID Clause Example 2 ‘This example of group push buttons is taken from CONTROLISCX, a utility screen used throughout the ORGANIZER application. The VALID clause is used to enable and disable push buttons depending on the position of the record pointer in the database. DO CASE CASE m.choice = “Next” SKIP 1 IF REOND() = m,bottomrec SHOW GET m.choice, 1 DISABLE SHOW GET m.choice, 4 DISABLE ELSE Executed when user chooses Next push button. \— Moves record pointer down ‘one record In database and enablesidisablos buttons. ‘SHOW GET m.choice, 2 ENABLE ‘SHOW GET m.choice, CASE m.choioe SKIP -1 IF RBCND() = m.toprec SHOW Ger m,choice, 2 DISABLE SHOW GET m.choice, 3 DISABLE "Prior™ IF FECNO() < m.bottomrec 3 ENIBLE Executed when user chooses Prior push button. |. Moves record pointer up ‘one record in database and enables/disables buttons. SHOW GBT m.choice, 1 ENABLE SHOW GET m.choice, 4 ENABLE ENDIF ENDIF (ASE m.choice = “Top” @ TP Executed when user SHOW GET m.choice, 1 ENABLE eee or or SHOW GET m,choice, 2 DISABLE [> Moves record pointer to SW Get michoice, 3 DISAELE lop record tn eatanese end, SOW Gor a chaise, 2 BOLLE enables/disables buttons. CASE m.choice = "Botan" ———————> GO BOTTM Executed when user chooses SHOW GET m.choice, 1 DISABLE Bottom push button. Moves ‘SHOW GET m.choice, 2 ENABLE |— record pointer to bottom SHOW GET m.choice, 3 ENABLE record bn cetabane and SHOW GET m.choice, 4 DISABLE enables/disables buttons. D2-68 ScreensScreens Field Objects and Controls Call BROWSER.SPR. + nreasee fg another wiliny seceen| SROWSERSEM IS mui ORGANIZER application. (ASE m.choice = "Locate™ Store .T. to variables and Terminate READ on current level. Execute SHOW routine. Variables for push buttons can be of character or numeric type. In this example, the variable m.choice is defined as a character variable in the setup code for the screen. This al- lows you to rearrange the push buttons in the screen without modifying the code snippet This technique can also be used for radio buttons and popups. D2-69Field Objects and Controls Push Button WHEN Clause Example This example is taken from RESTAURSSCX, a screen called in the Restaurants module of the ORGANIZER application. The Restaurant module is a multi-user application. In FoxPro/LAN, choosing Edit push button locks the record and the Edit button changes to Save. Choosing the Save or Cancel push button unlocks the record. The Edit push button is disabled when using single-user FoxPro. You can edit fields directly. The WHEN clause is defined for the Edit push button and is used to display a message if the user chooses the Save push button without entering a restaurant name. Credit Cards Valet Parking Handicap Access. CTRLOTA to exit Casual Attire IF NOT (m.adding OR m.editing) |_ Disable button if not adding or RETURN .T, editing record. EODIF —_———— Check to soe If Restaurant IF EMPTY (restaurant) field is empty. 22 GRIT) WAIT WIDOW "Enter restaurant name" NOWAIT _CUROBJ = CBINM (restaurant) RETURN .F. BODIF Display message and ring bell If user chooses Save Push button without entering Restaurant name. D2-70 ScreensField Objects and Controls Radio Buttons Radio buttons allow the user to choose from a list of mutually ex- clusive options. Choose Radio Button... on the Sereen menu popup to bring for- ward the Radio button dialog. Radio Button Prompts: as ©) Horizontal ¢-) Vertical Radio buttons always occur in groups and only one radio button in the group can be selected at any given time. A check box should be used to represent single item options. Screens D2-71
You might also like
Basics of Visual FoxPro Programming
PDF
72% (36)
Basics of Visual FoxPro Programming
51 pages
Foxpro Commands and Functions PDF
PDF
100% (2)
Foxpro Commands and Functions PDF
1,083 pages
Ms Foxpro Language Reference
PDF
100% (1)
Ms Foxpro Language Reference
1,328 pages
Ms Foxpro Developers Guide LCK
PDF
100% (1)
Ms Foxpro Developers Guide LCK
375 pages
Visual FoxPro To Visual Basic NET 2004 PDF
PDF
100% (1)
Visual FoxPro To Visual Basic NET 2004 PDF
1,535 pages
Database Advisor - May 1993
PDF
100% (1)
Database Advisor - May 1993
200 pages
Clipper 5.3
PDF
No ratings yet
Clipper 5.3
718 pages
Special Edition Mastering Visual FoxPro 6
PDF
71% (7)
Special Edition Mastering Visual FoxPro 6
864 pages
1001 Things You Wanted To Know About Visual FoxPro
PDF
50% (2)
1001 Things You Wanted To Know About Visual FoxPro
41 pages
Basics of Visual FoxPro Programming
PDF
100% (2)
Basics of Visual FoxPro Programming
51 pages
Creating Custom Visual FoxPro Menus
PDF
No ratings yet
Creating Custom Visual FoxPro Menus
15 pages
CA-Clipper For DOS Version 5.3. Getting Started Guide
PDF
100% (1)
CA-Clipper For DOS Version 5.3. Getting Started Guide
205 pages
Foxpro For MS Dos
PDF
100% (1)
Foxpro For MS Dos
27 pages
Foxpro Master Index
PDF
No ratings yet
Foxpro Master Index
42 pages
Hack7 Section 4
PDF
No ratings yet
Hack7 Section 4
86 pages
Visual DBase 5.7 Language Reference
PDF
100% (2)
Visual DBase 5.7 Language Reference
1,080 pages
Visual Foxpro Client-Server Handbook - Contents
PDF
100% (1)
Visual Foxpro Client-Server Handbook - Contents
52 pages
Visual Foxpro
PDF
No ratings yet
Visual Foxpro
11 pages
Cspro 80
PDF
No ratings yet
Cspro 80
959 pages
VF9
PDF
No ratings yet
VF9
72 pages
VFP9 Focus
PDF
No ratings yet
VFP9 Focus
68 pages
Mastering FoxPro - (For Version 1.01 - Charles Siegel
PDF
No ratings yet
Mastering FoxPro - (For Version 1.01 - Charles Siegel
676 pages
Microsoft Visual FoxPro 6.0 Language Reference
PDF
No ratings yet
Microsoft Visual FoxPro 6.0 Language Reference
1,558 pages
Fox Pro 2.6
PDF
100% (1)
Fox Pro 2.6
31 pages
Using Foxpro - John W. Zumsteg
PDF
No ratings yet
Using Foxpro - John W. Zumsteg
410 pages
Developing Foxpro Applications - P.L. Olympia and Kathy Cea
PDF
No ratings yet
Developing Foxpro Applications - P.L. Olympia and Kathy Cea
454 pages
Running Visual Foxpro On Linux Using Wine
PDF
No ratings yet
Running Visual Foxpro On Linux Using Wine
26 pages
FoxPro Tutorial Santosh Sir
PDF
No ratings yet
FoxPro Tutorial Santosh Sir
5 pages
Cursor Adapter Sample
PDF
No ratings yet
Cursor Adapter Sample
6 pages
Foxpro Distribution Kit
PDF
No ratings yet
Foxpro Distribution Kit
24 pages
Win Is Is 15 Rev 2
PDF
No ratings yet
Win Is Is 15 Rev 2
163 pages
Fox Pro Command
PDF
100% (3)
Fox Pro Command
11 pages
Dot NET For VFP Developers
PDF
100% (1)
Dot NET For VFP Developers
418 pages
174385-001 Overview of The XENIX 286 Operating System Nov84
PDF
No ratings yet
174385-001 Overview of The XENIX 286 Operating System Nov84
104 pages
Exploring The PICK Operating System 2nd Edition by Jonathan E Sisk and Steve VanArsdale
PDF
No ratings yet
Exploring The PICK Operating System 2nd Edition by Jonathan E Sisk and Steve VanArsdale
366 pages
Assemble Data and Graphic Programs: A: B: C: CD (Q:)
PDF
No ratings yet
Assemble Data and Graphic Programs: A: B: C: CD (Q:)
18 pages
Exploring The PICK Operating Sys
PDF
No ratings yet
Exploring The PICK Operating Sys
356 pages
2 Computer Fundamental
PDF
No ratings yet
2 Computer Fundamental
25 pages
07chapter 2
PDF
No ratings yet
07chapter 2
4 pages
Foxpro
PDF
No ratings yet
Foxpro
134 pages
Security in FoxPro (Protecting Application and Data)
PDF
No ratings yet
Security in FoxPro (Protecting Application and Data)
16 pages
Ado Foxpro
PDF
No ratings yet
Ado Foxpro
52 pages
MS DOS 3 3 Users Guide
PDF
No ratings yet
MS DOS 3 3 Users Guide
494 pages
Commands in Foxpro
PDF
No ratings yet
Commands in Foxpro
25 pages
Microsoft - Visual FoxPro - Excel Import
PDF
No ratings yet
Microsoft - Visual FoxPro - Excel Import
7 pages
Fox Pro
PDF
0% (1)
Fox Pro
30 pages
Competency-Based Learning Material
PDF
No ratings yet
Competency-Based Learning Material
73 pages
Visual Dbase
PDF
No ratings yet
Visual Dbase
77 pages
Supported Visual FoxPro Commands and Functions
PDF
No ratings yet
Supported Visual FoxPro Commands and Functions
3 pages
XPCICSCOBOLUserGuide PDF
PDF
No ratings yet
XPCICSCOBOLUserGuide PDF
194 pages
Practical No.:-1: Starting of Foxpro
PDF
No ratings yet
Practical No.:-1: Starting of Foxpro
39 pages
FoxPro Commands
PDF
No ratings yet
FoxPro Commands
2 pages
Visual Basic File
PDF
No ratings yet
Visual Basic File
17 pages
4 Visual Foxpro - An: Information and A Database Is An Organized Collection of Related
PDF
No ratings yet
4 Visual Foxpro - An: Information and A Database Is An Organized Collection of Related
11 pages
VFP Tutorial - Micorsoft Visual Foxpro
PDF
No ratings yet
VFP Tutorial - Micorsoft Visual Foxpro
46 pages
FoxPro Database
PDF
No ratings yet
FoxPro Database
19 pages
Visual FoxPro Lecture 1
PDF
No ratings yet
Visual FoxPro Lecture 1
5 pages
Visual Foxpro - An Introduction
PDF
No ratings yet
Visual Foxpro - An Introduction
12 pages
Data Base Application in Visual Foxpro: by Valentin Casavela
PDF
No ratings yet
Data Base Application in Visual Foxpro: by Valentin Casavela
20 pages
Foxpro Notes
PDF
No ratings yet
Foxpro Notes
22 pages