ColorPalette
English · Français
About
ColorPalette is a cross-platform color palette grid with ability to select a color from a palette. The OnMouseColorPick event is fired when the user clicks onto a color.
Authors
Tom Gregorovic and Werner Pamler
License
Modified LGPL
Usage
Color selection
When a color is selected by clicking with the mouse onto a color box an event OnColorPick is generated; the event gets the rgb value of the picked color as a parameter. Another parameter passes the ShiftState active during the click; usually this identifies the mouse button pressed. If the property ShowSelection is turned on then the picked color is highlighted.
The time flow when exactly the color is selected is determined by the property PickMode:
pmImmediate: The color is selected, and the event is generated, when the mouse button goes down.pmContinuous: The color is selected, and the event is generated, while the mouse moves and when the mouse button goes up.pmDefault: The color is selected when the mouse button goes down, and the event is generated when the mouse button goes up. Both events must occur at the same location. This mode is a left-over from a previous version of the component and should not be used any more.
Palettes
Built-in palettes
The components supports a series of built-in palettes as determined by the PaletteKind property:
pkStandardPalette: the 16 standard color defined by thegraphicsunitpkExtendedPalette: the same, but extended by the 4 extra colorsclMoneyGreen, clSkyBlue, clCream, clMedGraypkSystemPalette: the 25 system colors defined by thegraphicsunitpkStandardAndSystemPalette: the standard colors plus the system colorspkExtendedAndSystemPalette: the extended colors plus the system colorspkGradientPalette: "all" colors nicely arranged; useGradientStepsto define the horizontal resolution.pkWebSafePalette: a set of web-safe colors as defined by a wikipedia article.pkWebSafePalette2: another set of web-safe colors.
Custom palettes and palette files
In addition, a custom palette can be loaded from a file by calling the LoadPalette method. The palette files are simple text files according to this example (see also Default.pal in the component folder):
Custom palette example:$COLS 8
# sets count of palette grid columns0,0,0
# inserts color r,g,b colorname
# colorname is optional.
255,255,255 White$NONE
# inserts empty palette grid cell$BLENDWB 128,128,128 3
# creates color gradient white -> color -> black with specified steps
# The specified steps are applied to the transitions between "white" and "color"
# and between "color" and "black", i.e., in total, there are <tt>2*steps+1</tt> color boxes.A set of keywords is defined to identify the palette file entries:
r,g,b colorname: Defines the next entry of the color palette by means of its red-green-blue components (0..255). Thecolornameis optional.$NONE: Is a place-holder for an empty color button. Useful for layout optimization. If the propertyUseSpacersis false then the button can be picked as colorclNone.$BLENDBW r,g,b n: creates a series of palette entries corresponding to a gradient from white to the specified color and to black. Each one of the two gradient consists ofnsteps, i.e. in total,2*n+1palette entries are created.$COLS value: defines the number of columns used to display the palette.$BTNDIST value: specifies the pixel distance between the color palette button tiles (valueis aninteger)$BTNWIDTH value: specifies the pixel width of each color palette button (valueis aninteger)$BTNHEIGHT value: specifies the pixcel height of each color palette button (valueis aninteger)$BTNBORDER r,g,b: specifies the color of the border of a palette button in terms of r, g, b values (0..255)$FLIPPED value: specifies whether the palette is flipped (value = TRUE) or not (value = FALSE)$SELKIND value: specifies how the selected palette button is highlighted.valuecan beNONE,THIN,THICK,THIN-INV,THICK-INV.$SELCOLOR r,g,b: specifies the color with which the selected button is highlighted if$SELKINDisTHINorTHICK. The color is given by its red, green and blue components (0..255).#: defines a comment - all characters in the same line following the#are ignored.
Methods and properties for color access
There are several methods and properties to manipulate and query the entries of the used palette:
AddColor(AColor: TColor; AColorName: String = ''): adds a new entry to the palette. An optional color name can be provided.DeleteColor(AIndex: Integer): removes the entry with the specified index from the paletteClearColors: removes all colors from the palette.LoadPalette(AFileName: String; AItems: TPaletteItems = []): load a palette from specified file. The optional parameterAItemsallows to define which items stored in the palette are loaded:TPaletteItems = set of [piColors, piColumnCount, piFlipped, piButtonBorder, piButtonSize, piButtonDistance, piSelKind, piSelColor]. By default,AItemsis[piColors, piColumnCount]which loads all colors and the column count. UsepiAllas an abbreviation to load all items.SavePalette(AFileName: String): saves the currently used palette to a palette file which, in turn, can be re-loaded by means of theLoadPalettemethod.- Access individual colors by using the
Colors[Index]property. ColorCountreturns the number of colors in the palette.PickedColor: returns the currently selected colorPickedIndex: returns the index of the currently selected color (indexes are counted first along the rows).MouseColor: returns the color of the button underneath the mouse cursorMouseIndex: returns the index of the color underneath the mouse cursor (indexes are counted first along the rows).Colors[AIndex: Integer]: allows to read and write a color at the specified palette indexColorNames[AIndex:Integer]: allows to read and write the name of the color at the specified palette index. If an empty string is written to the ColorNames property then the colorname defined by the graphics unit is used.
Other properties
Layout
ButtonHeight: height of the color buttons (in pixels). Is used along withColumnCountto define the height of the control.ButtonWidth: width of the color buttons (in pixels). Is used along withColumnCountto define the width of the control.ButtonDistance: distance, in pixels, between the individual color buttons.ColumnCount: Defines how many color buttons are drawn horizontally.
Visual appearance
ButtonBorderColor: defines the borderline around a color button. Can be removed by selectingclNone.Color: defines the background color of the component. Note that the background is not visible if <ttButtondistance = 0.ShowSelection: If true a thick border is drawn around the button of the selected color.UseSpacers: If trueclNonecolor entries serve as spacers to arrange groups of colors. If falseclNoneis shown as a crossed-out button meaning "transparent color".
Hints
ShowColorHint: If true a hint popup window is displayed for the color button above which the mouse cursor hovers. The built-in hint text can be modified by means of theOnGetHintTextevent.- The
OnGetHintTextevent allows to modify the built-in text used for creating the popup hint.
Demo projects
Two demo projects are contained in the folder demo of the component installation directory:
- GeneralDemo shows application of all the features of TColorPalette.
- ToolbarDemo adds a ColorPalette to a coolbar/toolar.
Download and installation
svn checkout https://svn.code.sf.net/p/lazarus-ccr/svn/components/colorpalette- Download from Lazarus CCR at SourceForge
- Install the package
LazColorPalettein the Lazarus IDE. The ColorPalette icon is added to the Misc component palette page.
Change Log
Version 0.2
- New features
- "AddColor", "DeleteColor" etc.
- Color names
- Builtin palettes
- Highlight selected color
- Color button distance, border color
- Color hint window
- New keywords in palette file
- Tested on Windows 2000/XP/7/10, and with gtk2 and qt under Linux (Mint 17).
Version 0.1
- Initial release
- Tested on Windows XP, and with gtk1 and gtk2 under Linux (Kubuntu 6.06).
From the Free Pascal wiki, page "ColorPalette", as it stood on 2016-06-21 after a change by Arent, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.
Talk about this page
Nobody has opened a bench for this page yet. Sign in to open one.
