Eye Candy Controls (shortly ECControls or EC-Controls) are set of visual controls written for Lazarus. Their design is based on Themes, therefore their look is very native everywhere, no matter what widgetset you use.
Each release is announced on Lazarus Forum in section Third Party Announcements.
There are always attached files README.txt
(list of all known issues) and CHANGELOG.txt
(list of all changes from previous release).
GNU Lesser General Public License 2.0 with linking exception (a.k.a. Modified LGPL). Each file of EC-Controls contains license header. Also, files COPYING.modifiedLGPL.txt and COPYING.LGPL.txt are bundled to each archive.
All components are written by Blaazen. Copyright notice and real name are mentioned in the header of each unit. You can contact author on Lazarus Forum (nickname: Blaazen) in any thread about EC-Controls (email author). If you are logged in to the forum, you can get author's e-mail or send him private message.
Alignment of composite components (TECSpinEdit
, TECSpinPosition
, TECEditBtn
, TECColorBtn
, TECComboBtn
, TECColorCombo
) is based on idea of Flávio published on mailing list [1]
TBaseScrollControl
class is based on TScrollingControl
by Theo.
- Latest release: 0.9.60 on 02-May 2023 (without demos); UltraShare is out of order. This release was tested with Lazarus 2.3.
- Latest release: 0.9.58 on 16-th April 2022 (without demos); UltraShare is out of order. This release was tested with Lazarus 2.3
- Previous release: 0.9.44 on 1-st June 2020 (including demos); UltraShare is out of order. This release was tested with Lazarus 2.1
- Previous release: 0.9.30 on 9-th March 2018 (including demos); UltraShare is out of order. This release was tested with Lazarus 1.9 and 1.8
- Previous release: 0.9.24.6 on 24-th October 2017 (without demos); TECGrid is Release candidate; UltraShare is out of order
- Previous release: 0.9.20 on 31-th July 2017 (without demos)
- Previous release: 0.9.6 on 24-th May 2016 (including demos)
- SourceForge: https://sourceforge.net/projects/eccontrols/
- UltraShare: http://ultrashare.net/hosting/fl/8c275ee97f (direct link to 0.9.6 released on 24-th May 2016; including demos)
- UltraShare: http://ultrashare.net/hosting/fl/a8838060fb (direct link to 0.9.4.16 released on 9-th April 2016; without demos)
- UltraShare: http://ultrashare.net/hosting/fl/f523032cb4 (direct link to 0.9.4.14 released on 6-th April 2016; without demos)
UltraShare is alternative because SourceForge is blocked in some countries. New releases are always announced in the Third Party section of the Lazarus Forum.
Open menu Package
=> Open package File (*.lpk)
select file eccontrols.lpk
. Click Compile
(wait a while) and then Use
> Install
. Lazarus will ask you "Do you want to rebuild Lazarus now?". Click Yes
to install the package.
EC-Controls are installed to the tab EC-C on the Lazarus component palette.
New images (from version 0.9.24.6). Resource files also contains 150 and 200 images for Hi-DPI desktops.
Components below are listed in order of their appearance on the component palette. All screenshots are taken from KDE4 or Plasma5 (Lazarus+Qt).
An alternative to TBevel.
TECBevel
can draw non-rectangular shapes or non-straight lines.
TECLink
provides a weblink. The same links are well known from web-browsers.
A label which changes its look when hovered by mouse (by default becomes underlined and blue).
It can open URL in default browser, default mail client, file in associated application or just trigger OnClick
event.
A vertical menu with images. Similar component is frequently used in KDE4 applications and Outlook97
TECImageMenu
can have focus and can be reached by Tab key (when TabStop = True
, which is default). Can be controlled by mouse, by keyboard or by code.
- Simply left-click on menu item.
- Middle-click or right-click selects an item but does not click.
- Mouse wheel moves the selection and does not click.
Space
andEnter
: click on the selected item.Arrow Up
,Arrow Down
,Page Up
,Page Down
,Home
andEnd
: moves the selection but does not click.- Acceleration key (
Alt
+ Key) selects and clicks the relevant item (menu doesn't need to be focused)..
An advanced alternative to TUpDown
.
TECSpinBtns
is based on double precision variables.
TECSpinBtns
cannot have focus. Can be controlled by mouse or by code.
TECSpinBtns
consists from 9 small buttons.
- Left-click on
BtnMin
,BtnBigDec
,BtnDec
,BtnMiddle
,BtnMenu
,BtnInc
,BtnBigInc
andBtnMax
sets theValue
toMin
, decreases Value by PageSize, decreases Value by Increment, setsValue
toMiddle
, triggersOnMenuClick
event, increasesValue
byIncrement
, increasesValue
byPageSize
and setsValue
toMax
respectively. - Middle-click sets
Value
toMiddle
or triggersOnMenuClick
- depends onMenuControl
property. Other mouse buttons can be used for dragging too, depends onDragControl
property. Dragging mainly depends on properties:DragOrientation
,MouseIncrementX
,MouseIncrementY
,MouseStepPixelsX
,MouseStepPixelsY
andReversed
.
Simply by assigning any floating-point value to property Value
:
Value := 10.5;
If the value is out of range (lesser than Min
or greater than Max
) then Value will be Min
or Max
.
- The highest precedence has the
OnDrawGlyph
event. - The second is
Caption
. It should be short (one or two characters). - The third is image from Images. Images must be assigned and ImageIndex must be greater or equal to zero and lesser than
Images.Count
- When the
OnDrawGlyph
is not assigned,Caption
is empty string andImageIndex
is-1
then built-in glyph is used. There is five sets of styles, they can be selected withGlyphStyle
property.
An advanced alternative to TSpinEdit
and TFloatSpinEdit
. It is TEdit
joined together with TECSpinBtns
.
TECSpinEdit
can have focus and can be reached by Tab key (when TabStop = True
, which is default). Can be controlled by mouse, by keyboard or by code.
See TECSpinBtns
.
(line-edit must be focused)
Text
value can typed in to the line-edit directly. If entered value is lesser than TECSpinBtnsPlus.MinInEdit
or greater than TECSpinBtnsPlus.MaxInEdit
then the value will be changed to fit these bounds. Change of Value
is done in OnEditingDone
event.
- Arrow Up/Down do click on
BtnInc
/BtnDec
. PgUp
/PgDn
do click onBtnBigInc
/BtnBigDec
.Ctrl
+ Home/End do click onBtnMax
/BtnMin
.Ctrl
+ Space do clickBtnMiddle
.Ctrl
+ Enter do click onBtnMenu
.
valid for
Reversed = False
. ForReversed = True
works oppositely.
Simply by assigning any floating-point value to property Value
:
Value := 10.5;
If the value is out of range (lesser than Min or greater than Max) then Value will be Min or Max.
An alternative to TCheckBox
. Similar component exists in GTk3.
TECSwitch
can have focus and can be reached by Tab key (when TabStop = True
, which is default). Can be controlled by mouse, by keyboard or by code.
- Left-click on switch area (out of knob) will change the
State
. - Left-click on the knob and holding the left-mouse button down will capture mouse and knob can be moved even if the mouse-cursor leaves the area of the switch.
Space
orEnter
changes theState
(only when focused).- Acceleration key (
Alt
+ Key) changes theState
(doesn't need to be focused).
Simply by assigning any -State
_ or Checked
property:
Checked := True; //False
State := cbChecked; //cbGrayed, cbUnchecked
Property State is always changed from checked to unchecked, from grayed to unchecked or from unchecked to checked.
A button with some advanced features and built-in glyphs. An alternative to TSpeedButton
and TToggleBox.
TECSpeedBtn
cannot have focus.
Features and differences from TSpeedButton
:
TSpeedButton
has propertyGlyph: TBitmap
.TECSpeedBtn
has propertiesImageIndex: Integer
andImages:
TImageList
instead.TECSpeedBtn
has propertyDelay
and built-in timer. Therefore it can work as a delay-button (Delay > 0
) or toggle-box (Delay < 0
).TECSpeedBtn
has more than 80 built-in glyph (painted viaTCanvas
helper).Glyphs
can be various for checked and unchecked state.- Similarly to
TSpeedButton
,TECSpeedBtn
has propertiesGroupIndex
, Checked andAllowAllUp
so buttons can be grouped to radio-group. TECSpeedBtn
cannot obtain focus but can be pressed by acceleration key (Alt
+ [underlined key]).TECSpeedBtn
can be linked withTAction
too.
- The highest precedence has the
OnDrawGlyph
event. - The second is
Caption
and image fromImages
.Images
must be assigned and at least on ofImageIndex
andImageIndexChecked
must be greater or equal to zero and lesser than Images.Count. - When the
OnDrawGlyph
is not assigned and bothImageIndex
andImageIndexChecked
are-1
then built-in glyph is used (propertiesGlyphDesign
andGlyphDesignChecked
). WhenImageIndex
is valid Image andImageIndexChecked
is-1
or only GlyphDesign is some glyph andGlyphDesignChecked
is egdNone thenImageIndex
orGlyphDesign
is used for checked state too (and vice versa).
The same as TECSpeedBtn
but derived from TCustomControl
, therefore it can have focus. An alternative to TBitBtn
and TToggleBox
.
An alternative to TEditButton
. It is TEdit
joined together with TECSpeedBtn
.
Visual component for selecting color. Line edit displays color code in various formats and associated button triggers color dialog.
Color of the glyph on the button corresponds with the color in the line-edit.
Property Text
is not published. If Text
is changed via code, EditingDone
must be called to validate the change.
A combobox with associated button. It is TComboBox
joined together with TECSpeedBtn
.
Visual component for selecting color. Combobox contains colors in various formats and associated button triggers color dialog.
Color of the glyph on the button corresponds with the color selected in the combobox.
Property Text
is not published. If Text
is changed via code, Validate
must be called to validate the change.
An alternative to THeader
.
Main feature is ability to have columns aligned to the left and to the right at a time. This components is designed for TECCheckListBox
.
An alternative to TCheckListBox
.
Can have multiple checkable columns.
Currently, property Sorted
is not supported.
An advanced alternative to TTrackBar
.
TECSlider
can have focus and can be reached by Tab
key (when TabStop = True
, which is default).
TECSlider
is based on double precision variables. TECSlider
can be controlled by mouse, by keyboard or by code.
- Left-click on Slider area (out of Knob) will move the knob by
PageSize
(or less, if mouse cursor is nearer). - Double-click or Middle-click will move the knob immediately to the mouse cursor (or to the
Min
/Max
, if click is done out of groove and scale area). - Left-click on the knob and holding the left-mouse button down will capture mouse and knob can be moved even if the mouse-cursor leaves the area of the slider.
- Mouse wheel moves knob up/down regardless of the Reversed property. In case of horizontal slider rolling up/down moves knob to the left/right, again, regardless of the
Reversed
property.
The increment is:
- Mouse wheel:
Increment * Mouse.WheelScrollLines
Ctrl
+ mouse wheel: Increment.
Space
: moves knob to the middle of the groove or to theProgressMiddlePos
in case ofProgressFromMiddle = True
0-9
: moves the knob to position which is the integer multiplier of thePageSize
(i.e. 0, 10, ..., 90 forPageSize = 10
).PgUp
: decreasesPosition
byPageSize
PgUp
: increasesPosition
byPageSize
Home
: moves the Knob toMin
End
: moves the Knob toMax
+
: increasesPosition
byIncrement
-
: decreasesPosition
byIncrement
Ctrl
+ArrowUp
: decreasesPosition
byIncrement
Ctrl
+ArrowLeft
: decreasesPosition
byIncrement
Ctrl
+ArrowDown
: increasesPosition
byIncrement
Ctrl
+ArrowRight
: increasesPosition
byIncrement
valid for
Reversed = False
. WhenReversed = True
works oppositely.
Simply by assigning any floating-point value to property Position
:
Position := 10.5;
If the value is out of range (lesser than Min
or greater than Max
) then Position
will be Min
or Max
.
An advanced alternative to TProgressBar
.
TECProgressBar
is based on double precision variables. TECProgressBar
cannot have focus. It can be controlled by code only.
An alternative to TTrackBar
or TScrollBar
. Similar components are used in Blender (3D graphics software).
TECPositionBar
cannot have focus and is based on double precision variables. TECPositionBar
can be controlled by mouse or by code.
- Left-click will set the position immediately to the mouse cursor (or to the
Min
/Max
, if click is done out of groove and scale area). - Middle-click: moves knob to the middle of the groove or to the
ProgressMiddlePos
in case ofProgressFromMiddle = True
- Left-click on the end of the progress on and holding the left-mouse button down will capture mouse and position can be moved even if the mouse cursor leaves the area of a position bar.
- Dragging is affected by
MouseDragPixels
(alone left mouse button) and MouseDragPixelsFine (Ctrl
+ left mouse button). Deafult values are 1 and 10, i.e. progress will change by one pixel when mouse cursor moves by one pixel (or by 10 pixels in case of dragging with Ctrl key pressed). - Mouse wheel moves knob up/down regardless of the Reversed property. In case of horizontal slider rolling up/down moves knob to the left/right, again, regardless of the
Reversed
property.
The increment is:
- Mouse wheel:
MouseDragPixels * Mouse.WheelScrollLines
- Ctrl + mouse wheel:
(MouseDragPixels / MouseDragPixelsFine) * Mouse.WheelScrollLines
Simply by assigning any floating-point value to property Position
:
Position := 10.5;
If the value is out of range (lesser than Min
or greater than Max
) then Position
will be Min
or Max
.
An alternative to TTrackBar
or TScrollBar
. Similar components are used in Krita (2D graphics software).
An advanced ruler.
TECRuler
cannot have focus. It just displays scale. Can have fixed or movable pointer optionally.
An alternative to TRadioGroup
.
TECRadioGroup
can have focus and can be reached by Tab key (when TabStop = True
, which is not default). Can be controlled by mouse, by keyboard or by code.
- Left-click on any item (out of knob) changes its
Checked
property toTrue
(or toFalse
if this item is already checked). - Left-click on the
TECRadioGroup
out of items sets focus to component only.
- 0: deselects all*
- 1-9: selects (or deselects*) item 1-9
- Acceleration key (
Alt
+ Key) changes theChecked
property toTrue
orFalse
(radio group doesn't have to be focused).
Depends whether
egoAllowAllUp
is inOptions
.
Simply by assigning any ItemIndex
or Items[].Checked
property:
ItemIndex := 1; //selects the second item
Items[1].Checked := False; //deselects the second item, regardless of the egoAllowAllUp in Options
An alternative to TCheckGroup
.
TECCheckGroup can have focus and can be reached by Tab
key (when TabStop = True
, which is not default). Can be controlled by mouse, by keyboard or by code.
- Left-click on any item (out of knob) changes its
Checked
property toTrue
(or toFalse
if this item is already checked). - Left-click on the
TECCheckGroup
out of items sets focus to component only.
- 0: deselects all*
- 1-9: selects (or deselects*) item 1-9
- Acceleration key (
Alt
+ Key) changes theChecked
property toTrue
/False
(check group doesn't have to be focused).
Depends whether
egoAllowAllUp
is inOptions
.
Simply by assigning any Checked[]
or Items[].Checked
property:
Checked[1] := True; //selects the second item
Items[1].Checked := False; //deselects the second item, regardless of the egoAllowAllUp in Options.
See: TECTabCtrl
TECAccordion
is a side menu, works similarly to TPageControl
.
TECAccordion
can have focus and can be reached by Tab key (when TabStop = True
, which is not default). Can be controlled by mouse, by keyboard or by code.
Left-click on any item opens/closes it.
Acceleration key (Alt
+ Key
) changes the item (component doesn't have to be focused).
Simply by setting ItemIndex
property.
A balance of three values. This is not a color picker!
TECTriangle
cannot have focus and cannot be reached by Tab key. Can be controlled by mouse only.
- Left-click on triangle area.
- Left-click and hold the pointer can drag.
- Left-click on a mark sets more exact value, for example
[0,333..., 0.333..., 0.333...]
. - Mouse wheel can roll the pointer up and down.
By calling overloaded SetValues
method. Parameters can be 1) X and Y coordinates or 2) "Top" and "Bottom" values (the thirds value "Side" is calculated so the sum of the values is always equal to 1).
See: TECGrid
See: TECLightView
Component for Configuration.
User can configure polyline or Bezier curve with multiple points.
Can be aligned with vertical and/or horizontal ruler (TECRuler
).
See ECConfCurve-Demo
.
An advanced component for configuration of general scheme.
User can add multiple blocks and connect them.
This component is highly configurable. See SchemeDesigner
and ECSchemeDesc
bundled with EC-Controls.
Designed for controlling properties of multiple TECSpinBtns
and TECSpinEdit
.
TECSpinBtns
and TECSpinEdit
have properties Controller
. When some SpinController
is assigned to this property then this Controller
can change selected properties of all assigned TECSpinEdits
and TECSpinBtns
at a time. Adjustable properties are - for example - TimerDelay
, TimerRepeat
, widths of individual buttons, GlyphsStyle
and others.
Project can have multiple SpinControllers
.
An advanced timer.
Main feature is that the first interval (property Delay
) can differ from all following intervals (property Repeat
).
A scale. It is not a component but can draw itself to any canvas.
This class is used in TECRuler
, TECSlider
, TECProgressBar
, TECPositionBar
and TECSpinPosition
.
See demo ECScale-Demo
.
Base types and classes for Eye Candy Controls (EC-C).
If you use EC-Controls in your project you may need to add this unit to your uses section.
This unit contains many declarations, color-conversion routines and base classes, for example TBaseScrollControl
.
is base class for scrolling components (TECScheme is its descendant).
You can derive your own scrolling component from TBaseScrollControl
. TECScheme
and TECGrid
are based on this class.
EC-Controls come with several demos. If some of following demos is missing in archive, it may mean that there were no changes and the demo was not included. In that case use the demo from previous release.
This demo shows all EC-Controls in various configurations.
This demo shows how you can use TECScale
in our own visual component.
This demo shows capabilities of TECConfCurve
.
This demo shows how you can create descendant component from TCustomECScheme
.
SchemeDesigner
is more than a demo. It shows you how you can create TECScheme
configurator in your own application but it can be also used to create your own configurations and store them in xml format.