background& colors are available in all QB64 color SCREEN modes.
SCREEN mode 10 has only 3 white foreground attributes including flashing.
To change the background& color only, use a comma and the desired color. Ex: COLOR , background&
Graphic drawing statements like PSET, PRESET, LINE, etc, also use the colors set by the COLOR statement if no color is passed when they are called.
The $COLOR metacommand adds named color constants for both text and 32-bit modes.
Screen Mode Attributes
SCREEN 0background& colors 0 to 7 can be changed each text character without affecting other text. Use CLS after a background color statement to create a fullscreen background color. 64 DAC hues with 16 high intensity blinking foreground (16 to 31) color attributes. See _BLINK.
See example 7 below for more SCREEN 0 background colors.
SCREEN 1 has 4 background color attributes: 0 = black, 1 = blue, 2 = green, 3 = grey. White foreground color only.
SCREEN 2 is monochrome with white forecolor and black background.
SCREEN 7 can use 16 (DAC) colors with background colors. RGB settings can be changed in colors 0 to 7 using _PALETTECOLOR.
SCREEN 8 has 16 color attributes with 16 background colors.
SCREEN 9 can use up to 64 DAC color hues in 16 color attributes with background colors assigned to attribute 0 with a _PALETTECOLOR swap. RGB settings can be changed in colors 0 to 5 and 7 using _PALETTECOLOR.
SCREEN 10 has only 4 color attributes with black background. COLOR 0 = black, 1 = grey, 2 = flash white and 3 = bright white.
SCREEN 11 is monochrome with white forecolor and a black background.
SCREEN 12 can use 16 color attributes with a black background. 256K possible RGB color hues. Background colors can be used with QB64.
SCREEN 13 can use 256 color attributes with a black background. 256K possible RGB hues.
PALETTE swaps can be made in SCREEN 7 and 9 only. Those screens were DAC screen modes in QBasic.
_DEST can be used to set the destination page or image to color using QB64.
_DEFAULTCOLOR returns the current color being used on an image or screen page handle.
24/32-Bit colors using QB64
Pixel color intensities for red, green, blue and alpha range from 0 to 255 when used with _RGB, _RGBA, _RGB32 and RGBA32.
Combined RGB function values returned are LONG values. Blue intensity values may be cut off using SINGLE variables.
_ALPHA transparency values can range from 0 as transparent up to 255 which is fully opaque.
_CLEARCOLOR can also be used to set a color as transparent.
Colors can be mixed by using _BLEND (default) in 32-bit screen modes. _DONTBLEND disables blending.
NOTE: Default 32-bit backgrounds are clear black or _RGBA(0, 0, 0, 0). Use CLS to make the black opaque.
Explanation: The RGB intensity values are multiplied by 4 to get the _RGB intensity values as hexadecimal values. The individual 2 digit HEX$ intensity values can be added to "&HFF" to make up the 32-bit hexadecimal string value necessary for VAL to return to _PALETTECOLOR. The statement is only included in the example to show how that can be done with any 32-bit color value.
Read & write color port intensities with INP & OUT
Legacy code may use INP and OUT to read or set color port intensities. QB64 emulates VGA memory to maintain compatibility.
The same can be achieved using _PALETTECOLOR (recommended practice).
OUT &H3C7, attribute 'Set port to read RGB settings with:
Example 4: Using CLS after setting the background color in SCREEN 0 to make the color cover the entire screen.
'' ''
SCREEN 0: _FULLSCREEN
COLOR , 7: CLS
COLOR 9: PRINT "Hello" '' ''
<span style="color:#5454fc;">Hello</span>
Example 5: Using a different foreground color for each letter:
'' ''
SCREEN 0
COLOR 1: PRINT "H";
COLOR 3: PRINT "E";
COLOR 4: PRINT "L";
COLOR 5: PRINT "L";
COLOR 6: PRINT "O"
COLOR 9: PRINT "W";
COLOR 11: PRINT "O";
COLOR 12: PRINT "R";
COLOR 13: PRINT "L";
COLOR 14: PRINT "D" '' ''