Eye-Candy Controls/ru

From Lazarus wiki
Revision as of 08:12, 7 August 2020 by Zoltanleo (talk | contribs) (TECSpinEdit)

English (en) español (es) русский (ru)

Eye Candy Controls (сокращенно ECControls или EC-Controls) - набор визуальных элементов управления, написанных для Lazarus. Их дизайн основан на Themes, поэтому они выглядят очень нативными везде, независимо от того, какой виджет вы используете.

Каждый релиз аннонсируется на форуме Lazarus в разделе Third Party Announcements(Сторонние объявления).

Всегда есть прикрепленные файлы README.txt (список всех известных проблем) и CHANGELOG.txt (список всех изменений из предыдущего выпуска).

Лицензия

GNU Lesser General Public License 2.0 с исключением ссылок (a.k.a. Модифицированный LGPL). Каждый файл EC-Controls содержит заголовок лицензии. Кроме того, файлы COPYING.modifiedLGPL.txt и COPYING.LGPL.txt связаны с каждым архивом.

Авторство

Все компоненты написаны Blaazen. Уведомление об авторском праве и настоящее имя упоминаются в заголовке каждого блока. Вы можете связаться с автором на форуме Lazarus (псевдоним: Blaazen) в любой теме о EC-Controls (email author). Если вы авторизованы на форуме, вы можете получить адрес автора электронной почты или отправить ему личное сообщение.

Credits: Выравнивание составных компонентов (TECSpinEdit, TECSpinPosition, TECEditBtn, TECColorBtn, TECComboBtn, TECColorCombo) основано на идее Flávio, опубликованной в списке рассылки [1]

Класс TBaseScrollControl основан на TScrollingControl от Theo.

Загрузка
  • Последний релиз: 0.9.44 на 1 июня 2020 (включая demo); UltraShare не работает. Этот выпуск был протестирован с Lazarus 2.1
  • Предыдущий релиз: 0.9.30 на 1 марта 2018 (включая demo); UltraShare не работает. Этот выпуск был протестирован с Lazarus 1.9 и 1.8
  • Предыдущий релиз: 0.9.24.6 на 24 октября 2017 (без demo); TECGrid - Release candidate; UltraShare не работает.
  • Предыдущий релиз: 0.9.20 на 31 июля 2017 (без demo)
  • Предыдущий релиз: 0.9.6 на 24 мая 2016 (включая demo)
  • SourceForge: https://sourceforge.net/projects/eccontrols/
  • UltraShare: http://ultrashare.net/hosting/fl/8c275ee97f (прямая ссылка на 0.9.6, выпущенный 24.05.2016; включая demo)
  • UltraShare: http://ultrashare.net/hosting/fl/a8838060fb (прямая ссылка на 0.9.4.16, выпущенный 9.04.2016; без demos)
  • UltraShare: http://ultrashare.net/hosting/fl/f523032cb4 (прямая ссылка на 0.9.4.14, выпущенный 6.04.2016; без demo)

UltraShare - альтернатива, потому что SourceForge заблокирован в некоторых странах. О новых выпусках всегда объявляется в разделе Third Party на форуме Lazarus.

Установка в Lazarus

Открываем меню Package => Open package File (*.lpk) ... и выбираем файл eccontrols.lpk. Щелкаем Compile (ждем, пока закончится компиляция), затем выбираем Use >> Install. Lazarus спросит "Do you want to rebuild Lazarus now?"(Хотите пересобрать Lazarus сейчас?). Жмем Yes, чтобы установить пакет.

Компоненты

EC-Controls устанавливаются на вкладку EC-C палитры компонентов Lazarus.

ecpalette2.png

Новые изображения (начиная с версии 0.9.24.6). Файлы ресурсов (* .lrs) также содержат изображения _150 и _200 для настольных компьютеров с высоким разрешением.

eccpalette4.png

Компоненты ниже перечислены в порядке их появления на палитре компонентов. Все скриншоты взяты из KDE4 или Plasma5 (Lazarus + Qt).

Визуальные

TECBevel

Альтернатива TBevel.

tecbevel.png

TECBevel может рисовать непрямоугольные формы или непрямые линии.

TECLink

TECLink предоставляет веб-ссылку. Эти же ссылки хорошо известны из веб-браузеров.

teclink.png

Метка, которая меняет свой вид при наведении на нее курсора мыши (по умолчанию становится подчеркнутой и синей).

Она может открывать URL-адрес в браузере по умолчанию, почтовом клиенте по умолчанию, файл в связанном приложении или просто запускать событие OnClick.

TECImageMenu

Вертикальное меню с изображениями. Подобный компонент часто используется в приложениях KDE4 и Outlook97.

tecimagemenu.png

TECImageMenu может находиться в фокусе и быть доступно с помощью клавиши Tab (когда TabStop = True, что по умолчанию). Может управляться мышью, клавиатурой или кодом.

Мышь
  • Щелчок левой кнопкой мыши по пункту меню эквивалентен нажатию по нему.
  • Щелчок средней или правой кнопкой мыши выбирает элемент, но не нажимает его.
  • Колесико мыши перемещает выделение и не нажимает его.

Клавиатура

  • Пробел и Enter: нажимает выбранный пункт меню.
  • Arrow Up, Arrow Down, Page Up, Page Down, Home и End: перемещают выделение, но не нажимают на пункт меню.
  • Быстрые клавиши (Alt + Key) выбирают и нажимают соответствующий пункт (нет необходимости фокусировать меню) ..

TECSpinBtns

Продвинутая альтернатива TUpDown.

tecspinbtns.png

TECSpinBtns основан на переменных двойной точности.

TECSpinBtns не имеет фокуса. Управляется мышью или кодом.

Мышь

TECSpinBtns состоит из 9 маленьких кнопок.

  • Щелчок левой кнопкой мыши на BtnMin, BtnBigDec, BtnDec, BtnMiddle, BtnMenu, BtnInc, BtnBigInc и BtnMax задает Value к Min, уменьшает Value на величину PageSize, уменьшает Value на величину Increment, задает Value к Middle, запускает событие OnMenuClick, увеличивает Value на величину Increment, увеличивает Value на величину PageSize и задает Value к Max соответственно.
  • Щелчок средней кнопкой мыши задает Value к Middle или запускает событие OnMenuClick - зависит от свойства MenuControl. Для перетаскивания также могут быть использованы другие кнопки мыши, зависит от свойства DragControl. Dragging mainly depends on properties: DragOrientation, MouseIncrementX, MouseIncrementY, MouseStepPixelsX, MouseStepPixelsY and Reversed.
Программно

Просто присвоив любое значение с плавающей запятой свойству 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. Если значение выходит за пределы диапазона (меньше Min или больше Max), тогда Value будет равно Min или Max.

Приоритет отрисовки:

  1. Наивысший приоритет имеет событие OnDrawGlyph.
  2. Второй - Caption. Он должен быть коротким (один или два символа).
  3. Третий - изображение из Images. Изображения должны быть присвоены, а ImageIndex должен быть больше или равен нулю, и меньше, чем Images.Count
  4. Если OnDrawGlyph не назначен, Caption является пустой строкой, а ImageIndex равен -1, тогда используется встроенный глиф. Есть пять наборов стилей, их можно выбрать с помощью свойства GlyphStyle.

TECSpinEdit

Продвинутая альтернатива TSpinEdit и TFloatSpinEdit. Это TEdit, соединенный с TECSpinBtns.

tecspinedit.png

TECSpinEdit может иметь фокус и может быть выбран на форме с помощью клавиши Tab (когда TabStop = True, что по умолчанию). Может управляться мышью, клавиатурой или кодом.

Мышь

См. TECSpinBtns.

Клавиатура

(строка редактирования должна быть в фокусе)

Текстовое значение можно ввести непосредственно в строку редактирования. Если введенное значение меньше TECSpinBtnsPlus.MinInEdit или больше TECSpinBtnsPlus.MaxInEdit, тогда значение будет изменено, чтобы соответствовать этим границам. Изменение значения выполняется в событии OnEditingDone.

  • Arrow Up/Down "щелкают" по BtnInc/BtnDec*.
  • PgUp/PgDn "щелкают" по BtnBigInc/BtnBigDec*.
  • Ctrl + Home/End "щелкают" по BtnMax/BtnMin*.
  • Ctrl + Space "щелкают" по BtnMiddle.
  • Ctrl + Enter "щелкают" по BtnMenu.

*) справедливо для Reversed = False. Reversed = True делает наоборот.

Программно

Простое присвоение любого значения с плавающей точкой свойству 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. Если значение выходит за пределы диапазона (меньше Min или больше Max), тогда Value будет соответственно Min или Max.

TECSwitch

Альтернатива TCheckBox. Аналогичный компонент существует в GTk3.

tecswitch.png

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. может иметь фокус и может получить фокус на форме с помощью клавиши Tab (когда TabStop = True, что по умолчанию). Может управляться мышью, клавиатурой или кодом.

Мышь
  • Щелчок левой кнопкой мыши на области переключателя (вне кнопки) изменит State*.
  • Щелчок левой кнопкой мыши и удержание ее нажатой на кнопке захватит курсор мыши, и кнопку можно будет перемещать, даже если курсор мыши покинет область переключателя.
Клавиатура
  • Пробел или Enter изменяют State* (только если переключатель в фокусе).
  • Быстрые клавиши (Alt + Key) изменяют State* (нет необходимости перемещать фокус на переключатель).
Программно

Простое присвоение любого значения свойствам State* или Checked:

Checked := True; //False
State := cbChecked; //cbGrayed, cbUnchecked

*) Свойство State всегда изменяет значение от checked к unchecked, от grayed к unchecked или от unchecked к checked.

TECSpeedBtn

A button with some advanced features and built-in glyphs. An alternative to TSpeedButton and TToggleBox.

tecspeedbtn.png

TECSpeedBtn cannot have focus.

Features and differences from TSpeedButton:

  • TSpeedButton has property Glyph: TBitmap. TECSpeedBtn has properties ImageIndex: Integer and Images: TImageList instead.
  • TECSpeedBtn has property Delay 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 via TCanvas helper). Glyphs can be various for checked and unchecked state.
  • Similarly to TSpeedButton, TECSpeedBtn has properties GroupIndex, Checked and AllowAllUp 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 with TAction too.

Precendence of drawing:

  1. The highest precedence has the OnDrawGlyph event.
  2. The second is Caption and image from Images. Images must be assigned and at least on of ImageIndex and ImageIndexChecked must be greater or equal to zero and lesser than Images.Count.
  3. When the OnDrawGlyph is not assigned and both ImageIndex and ImageIndexChecked are -1 then built-in glyph is used (properties GlyphDesign and GlyphDesignChecked). When ImageIndex is valid Image and ImageIndexChecked is -1 or only GlyphDesign is some glyph and GlyphDesignChecked is egdNone then ImageIndex or GlyphDesign is used for checked state too (and vice versa).

TECBitBtn

The same as TECSpeedBtn but derived from TCustomControl, therefore it can have focus. An alternative to TBitBtn and TToggleBox.

tecbitbtn.png

TECEditBtn

An alternative to TEditButton. It is TEdit joined together with TECSpeedBtn.

teceditbtn.png

TECColorBtn

Visual component for selecting color. Line edit displays color code in various formats and associated button triggers color dialog.

teccolorbtn.png

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.

TECComboBtn

A combobox with associated button. It is TComboBox joined together with TECSpeedBtn.

teccombobtn.png

TECColorCombo

Visual component for selecting color. Combobox contains colors in various formats and associated button triggers color dialog.

teccolorcombo.png

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.

TECHeader

An alternative to THeader.

techeader.png

Main feature is ability to have columns aligned to the left and to the right at a time. This components is designed for TECCheckListBox.

TECCheckListBox

An alternative to TCheckListBox.

tecchecklistbox.png

Can have multiple checkable columns.

Currently, property Sorted is not supported.

TECSlider

An advanced alternative to TTrackBar.

tecslider.png

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.

Mouse
  • 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.
Keyboard
  • Space: moves knob to the middle of the groove or to the ProgressMiddlePos in case of ProgressFromMiddle = True
  • 0-9: moves the knob to position which is the integer multiplier of the PageSize (i.e. 0, 10, ..., 90 for PageSize = 10).
  • PgUp: decreases Position by PageSize
  • PgUp: increases Position by PageSize
  • Home: moves the Knob to Min
  • End: moves the Knob to Max
  • +: increases Position by Increment
  • -: decreases Position by Increment
  • Ctrl + ArrowUp: decreases* Position by Increment
  • Ctrl + ArrowLeft: decreases* Position by Increment
  • Ctrl + ArrowDown: increases* Position by Increment
  • Ctrl + ArrowRight: increases* Position by Increment

*) valid for Reversed = False. When Reversed = True works oppositely.

Code

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.

TECProgressBar

An advanced alternative to TProgressBar.

tecprogressbar.png

TECProgressBar is based on double precision variables. TECProgressBar cannot have focus. It can be controlled by code only.

TECPositionBar

An alternative to TTrackBar or TScrollBar. Similar components are used in Blender (3D graphics software).

tecpositionbar.png

TECPositionBar cannot have focus and is based on double precision variables. TECPositionBar can be controlled by mouse or by code.

Mouse
  • 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 of ProgressFromMiddle = 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
Code

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.

TECSpinPosition

An alternative to TTrackBar or TScrollBar. Similar components are used in Krita (2D graphics software).

tecspinposition.png

TECRuler

An advanced ruler.

tecruler.png

TECRuler cannot have focus. It just displays scale. Can have fixed or movable pointer optionally.

TECRadioGroup

An alternative to TRadioGroup.

tecradiogroup.png

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.

Mouse
  • Left-click on any item (out of knob) changes its Checked property to True (or to False if this item is already checked*).
  • Left-click on the TECRadioGroup out of items sets focus to component only.
Keyboard
  • 0: deselects all*
  • 1-9: selects (or deselects*) item 1-9
  • Acceleration key (Alt + Key) changes the Checked property to True or False* (radio group doesn't have to be focused).

*) Depends whether egoAllowAllUp is in Options.

Code

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

TECCheckGroup

An alternative to TCheckGroup.

teccheckgroup.png

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.

Mouse
  • Left-click on any item (out of knob) changes its Checked property to True (or to False if this item is already checked*).
  • Left-click on the TECCheckGroup out of items sets focus to component only.
Keyboard
  • 0: deselects all*
  • 1-9: selects (or deselects*) item 1-9
  • Acceleration key (Alt + Key) changes the Checked property to True/False* (check group doesn't have to be focused).

*) Depends whether egoAllowAllUp is in Options.

Code

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.

TECTabCtrl

See: TECTabCtrl

TECAccordion

TECAccordion is a side menu, works similarly to TPageControl.

tecaccordion.png

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.

Mouse

Left-click on any item opens/closes it.

Keyboard

Acceleration key (Alt + Key) changes the item (component doesn't have to be focused).

Code

Simply by setting ItemIndex property.

TECTriangle

A balance of three values. This is not a color picker!

tectriangle.png

TECTriangle cannot have focus and cannot be reached by Tab key. Can be controlled by mouse only.

Mouse
  • 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.
Code

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).

TECGrid

See: TECGrid

TECLightView

See: TECLightView

TECConfCurve

Component for Configuration.

tecconfcurve.png

User can configure polyline or Bezier curve with multiple points.

Can be aligned with vertical and/or horizontal ruler (TECRuler).

See ECConfCurve-Demo.

TECScheme

An advanced component for configuration of general scheme.

tecscheme.png

User can add multiple blocks and connect them.

This component is highly configurable. See SchemeDesigner and ECSchemeDesc bundled with EC-Controls.

Non-visual components

TECSpinController

Designed for controlling properties of multiple TECSpinBtns and TECSpinEdit.

tecspincontrollericon.png

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.

TECTimer

An advanced timer.

tectimericon.png

Main feature is that the first interval (property Delay) can differ from all following intervals (property Repeat).

Other parts of EC-Controls

Class TECScale

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.

Unit ECTypes

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.

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.

Demos

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.

ECC-Demo

This demo shows all EC-Controls in various configurations.

ECScale-Demo

This demo shows how you can use TECScale in our own visual component.

ECConfCurve-Demo

This demo shows capabilities of TECConfCurve.

ECSchemeDesc

This demo shows how you can create descendant component from TCustomECScheme.

SchemeDesigner

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.