Chapter 1: Controlling the VFP Environment Starting Visual FoxPro Configuration files How to specify a config.fpw file How VFP locates its configuration file How VFP starts up when no configuration file is found Including a configuration file in the project How to suppress a configuration file How to determine which configuration file is being used What goes into the configuration file? Special settings SET Commands Commands Giving VFP a path How VFP looks for files Setting the default directory Using the SET PATH command Where am I? How to set a path programmatically Making sure VFP is only started once Using a 'semaphore' file Using the Windows API Combination of semaphore and Windows API SET Commands and DataSessions What exactly does "Default DataSession" mean? So can I have a "public" Datasession? How can I ensure SET commands apply to a private data session? Adding code to BeforeOpenTables() Suppressing auto-open tables Creating an environment setting class How do I get rid of the system toolbars? The system toolbar "Gotcha!" Can I make use of keyboard macros in VFP? How can I construct a more complex macro? What is a "Macro Set"? What's the difference between a macro and an On Key Label? How do I create a 'Splash' screen? How do I run my splash screen? An alternative to the splash screen How to wallpaper your desktop So how can I get the size of the current _Screen area? Do I really need to create all these bitmaps? A toolbar 'gotcha!' Tidying up your development environment Closing VFP down What is an On ShutDown procedure? What triggers an On Shutdown procedure? What goes into an On Shutdown procedure? Chapter 2: Functions and Procedures How shall we proceed? Parameters (an aside) By reference, by value? How do I know what was passed? How should I position my parameters? How can I return multiple values from a function? What about using named parameters? Passing parameters optionally Date and time functions Elapsed time Date in words Calculating Age What date is the second Tuesday in October of ? Setting up a payment schedule What date is ten business days from today? Gotcha! Strict date format and parameterized views Working with numbers Converting numbers to strings Gotcha! calculations that involve money String functions Gotcha! string concatenation Converting between strings and data Other useful functions How do I determine if a tag exists? How do I determine if a string contains at least one alpha character? How to convert numbers to words How to extract a specified item from a list Is there a simple way of encrypting passwords? Where do you want to GOTO? Chapter 3: Design, Design and Nothing Else So why all the fuss about OOP anyway? So, just what does all this OOP jargon mean? Property Method Event Messages Classes and Objects Inheritance Composition Aggregation Delegation Encapsulation Polymorphism Hierarchies Practical object oriented programming (POOP) When should you define a class? So how do you go about designing a class? This all sounds very good but what does it mean in practice? How do you go about building your classes? But does all this design stuff really work in practice? How does the design actually translate into code? Working with your classes How do I get my classes into the form controls toolbar? While we're at it, how can I identify my custom classes in the toolbar? But whenever I want white in my bitmaps it shows up gray! How do I make Visual FoxPro use my classes instead of base classes? How do I change the caption of the label that VFP adds? So can I get a browse to show the field name when a caption is set? User interface design Perception governs acceptance Keep your users focussed Use the right control for the job Chapter 4: Basic Controls What do we mean by 'basic'? Text boxes Text box label class Date text box Incremental search text box Numeric text box Handling time A time entry text box A time entry composite class The true time spinner Blinking labels The expanding edit box Calendar combo Command buttons Gotcha! Programming the logical controls Pages and page frames Chapter 5: Combos and Lists Combo and list box basics List and ListItem collections When do the events fire? How do I bind my combo and list boxes? How do I refer to the items in my combo and list boxes? What is the difference between DisplayValue and Value? What's the difference between RowSourceTypes "alias" and "fields"? How do I make my combo and list boxes point to a particular item? Quickfill combos How do I add new items to my combo and list boxes? How do I filter the items displayed in a second combo or list box based on the selection made in the first? A word about lookup tables Generic lookup combos and lists So what if I want to bind my combo to a value that isn't in the list? How do I disable individual items in a combo or list? How do I create a list box with check boxes like the one displayed by Visual FoxPro when I select "View Toolbars" from the menu? A mover list class What if I need to display hundreds of items in my combo box? Chapter 6: Grids: The Misunderstood Controls When do the events fire? Gotcha! Grid's valid fires before the valid of the current control What is the difference between ActiveRow and RelativeRow? ActiveColumn does not really tell you which is the active column How do I highlight the current grid row? Keeping a grid from scrolling when the user tabs off the last column How do I create multiline headers? Gotcha! Scrolled event does not fire when cursor keys scroll the grid Using tool tip text instead of multiline headers How do I change the grid's display order? How do I control the cursor? How do I display the last full page of a grid? How do I use a grid to select one or more rows? How do I give my multiselect grid incremental search capability? How do I use DynamicCurrentControl? How do I filter the contents of a grid? So what about data entry grids? How do I add new records to my grid? How do I handle row level validation in my data entry grid? How do I delete records in my data entry grid? How do I add a combo box to my grid? Conclusion Chapter 7: Working with Data Tables in Visual FoxPro Some basics How to open the specific table you want to use How to get the structure of a table How to compare the structures of two tables? How to test for the presence of a field in a table How to check if a table is being used by another user What is exactly is a cursor? Indexes in Visual FoxPro Types of indexes How to get information about an index How to test for the existence of an index tag Using candidate (and primary) keys What is a "surrogate key"? Managing user-entered keys Using indexes with bound tables How to index mixed data types when creating a compound key How to index a buffered table Working with the database container Using long table names Using long field names - don't!!! Using database containers How to validate a database container How to pack a database container Moving a database container Renaming a database container Managing referential integrity in Visual FoxPro Limitations of the generated RI Code Using compound keys in relationships What about other RI options? Using triggers and rules in Visual FoxPro So what's the practical difference between a 'trigger' and a 'rule'? Why, when adding a trigger to a table, does VFP sometimes reject it? Can I temporarily disable a trigger or rule then? How do I actually create my trigger and rule procedures? How do I add a trigger to a table? So when should I use a trigger? And when should I use a rule? Must a trigger or rule always refer to a s