Logo

Hacker’s Guide to Visual FoxPro
An irreverent look at how Visual FoxPro really works. Tells you the inside scoop on every command, function, property, event and method of Visual FoxPro.

SET COLOR SET, SET COLOR OF Scheme, SCHEME(), RGBSCHEME(), SET COLOR OF, SET COLOR TO

These commands and functions all relate to old ways of setting colors. The first four are all part of the elaborate coloring system designed for FoxPro/DOS. See CREATE COLOR SET for an explanation of that system.

SET COLOR OF and SET COLOR TO date back even before the FP/DOS color system and are totally obsolete. Don’t use them. They’ll just get you in trouble.

Usage

SET COLOR SET TO [ ColorSetName ]

This command loads the named color set from the resource file and puts it into effect. Before you can use it, you need to have created a color set (with CREATE COLOR SET).

Usage

SET COLOR OF SCHEME nScheme TO
       [ ColorPairList | SCHEME nSourceScheme ]
cColorPairList = SCHEME( nScheme [, nColorPair ] )
cRGBColorList = RGBSCHEME( nScheme [, nColorPair ] )

Parameter

Value

Meaning

nScheme

Numeric

A color scheme number from 1 to 24.

ColorPairList

List of color pairs

A comma-delimited list of up to 10 color pairs to use for the specified scheme.

nSourceScheme

Numeric

A color scheme number from 1 to 24 whose colors should be copied to the specified scheme.

nColorPair

Numeric

Which color pair should be returned?

Omitted

Return the entire list of color pairs.

cColorPairList

Character

A list of 10 color pairs plus a shadow indicator.

cRGBColorList

Character

A list of 10 RGB color pairs plus a shadow indicator.

A color scheme is a set of 10 color pairs used for some aspect of the FoxPro interface. FoxPro has 24 color schemes, of which we’re allowed to change 20 or so—a group of schemes in the middle is reserved (in VFP 3, it’s 13 to 16; in VFP 5 and later, it’s 13 to 15). In FoxPro for DOS, there was wide variation from one color scheme to the next. In Windows, by default, the differences are small. Using the Windows default colors, most color schemes contain black, white and an assortment of grays, with maybe the occasional blue thrown in.

There are two ways to indicate colors in FoxPro. The modern Windows way is by using the RGB color definitions. (See RGB() for details.) The traditional Fox way uses a set of letters and symbols in which, for example, blue is represented by “B”, black by “N” and yellow by “GR+”. Not exactly intuitive—we’ve never managed to learn these and don’t plan to now.

SET COLOR OF SCHEME lets you change the colors assigned to a particular scheme. You can either make the scheme exactly match another color scheme or you can specify all 10 color pairs, either in RGB format or using the old letter system. The RGB format used in this command is different than anywhere else in FoxPro—instead of three numbers inside the RGB() function, you put six. The first three are the foreground and the last three are the background. This way, a single RGB() gives a color pair rather than a single color.

SCHEME() and RGBSCHEME() let you find out what colors are assigned to a particular scheme. You can return the entire list or a single color pair. No matter which format you choose, after the 10 color pairs, you see an extra comma followed by either “+” or “-“. (Actually, in Visual FoxPro, we’ve only ever seen the “+”.) That last character indicates whether objects using that color scheme cast a shadow or not. Since nothing casts a shadow in Visual FoxPro for Windows, you can safely ignore this value.

Color handling in Visual FoxPro (and in FoxPro 2.x for Windows) is significantly more trouble than in FoxPro for DOS with its complex, but powerful, colorset mechanism. You can use the DOS system in Visual FoxPro, but setting colors at the application level detaches those colors from the Windows colors, so they don’t change when the user changes Windows color schemes. This is clearly a violation of the Windows Interface Guidelines. On the whole, your best bet in VFP is to totally ignore colors and color schemes and rely on the user to set appropriate colors at the Windows level. Doing anything else tells the user that his opinion doesn’t count.

Example

SET COLOR SET TO MyColors  && Previously saved
? SCHEME(1)                && Return colors for scheme 1
? RGBSCHEME(4,3)           && Return 3rd color pair of scheme 4
* Copy colors from scheme 10 to scheme 7
SET COLOR OF SCHEME 7 TO SCHEME 10

See Also

BackColor, ColorSource, Create Color Set, ForeColor, RGB(), Set