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