JPPack
A collection of VCL/LCL components for Delphi/Lazarus - buttons, panels, LinkLabel, ProgressBar, ColorComboBox, ColorListBox, Timer and other
Install / Use
/learn @jackdp/JPPackREADME
JPPack
A collection of VCL/LCL components for Delphi 2009 - 11.0 Alexandria and Lazarus
- JPPack
- Overview
- AnchoredControls
- TagExt
- Components
- TJppPanel
- TJppBasicPanel
- TJppSimplePanel
- TJppFlipPanel
- TJppStdPanel
- TJppPngButton
- TJppBasicPngButton
- TJppBasicPngButtonEx
- TJppBasicSpeedButton
- TJppComboBox
- TJppComboBoxEx
- TJppFlatComboBox
- TJppColorComboBox
- TJppColorListBox
- TJppColorSwatch, TJppColorSwatchEx
- TJppProgressBar
- TJppHtmlHint
- TJppLabel
- TJppShadowLabel
- TJppLinkLabel
- TJppDoubleLineLabel
- TJppDoubleLabel
- TJppEdit
- TJppEditEx
- TJppMemo
- TJppMemoEx
- TJppCheckBox
- TJppRadioButton
- TJppDateTimePicker
- TJppGPHatchStyleComboBox
- TJppBrushStyleComboBox
- TJppPenStyleComboBox
- TJppTimer
- TJppPngCollection
- TJppStorageCtrl
- TJppStringStorageCtrl
- Installation
- License
Overview
JPPack is a small collection of VCL components for Delphi and LCL components for Lazarus and CodeTyphon.
Supported Delphi versions: 2009, 2010, XE, XE2, XE3, XE4, XE5, XE6, XE7, XE8, 10.0 Seattle, 10.1 Berlin, 10.2 Tokyo, 10.3 Rio, 10.4 Sydney, 11.0 Alexandria.
Lazarus: Required FPC version ~~3.0.4~~ 3.2.0 or newer (tested on Lazarus 2.0.10 + FPC 3.2.0, Lazarus 2.2.0 + FPC 3.2.2 and Lazarus 2.2.2 + FPC 3.2.2).
CodeTyphon: Tested on CodeTyphon 7.7 r2202141933 with FPC 3.3.1 r2202141933

These components were created within a few years, they were repeatedly modified, improved, and extended with the functions needed in the implementation of specific projects. Generally, there is a small chaos, but I think everything works OK (I hope!).
I am no expert on writing VCL components and helped myself by analyzing the source codes (and using fragments) of various free Delphi components, especially Cindy Components and PngComponents.
Cindy Components
Some of the functions and procedures related to graphics processing were taken from the Cindy Components. The gradient related routines were almost entirely taken from this package (VCL.cyGraphics.pas file).
The author of the Cindy Components is Júlio Maurício Antunes Piao. The sources are available at https://sourceforge.net/projects/tcycomponents/ In the source files in which I use functions written by Júlio, I have added relevant information with a link to his page.
PngComponents
After long and fierce battles with various buttons from different packages of components for Delphi (commercial and free), I finally found ones that displays the PNG files correctly - TPngBitBtn and TPngSpeedButton from the PngComponents package. I have never had problems with them, unlike many, many others. For this reason, in the implementation of my buttons I decided to rely on the code from this package.
The original author of the PngComponents package is Martijn Saly (www.thany.org). The project is currently maintained by Uwe Raabe. Sources are available at https://github.com/UweRaabe/PngComponents
In the folder 3rd-party you can find the ZIP file with the PngComponents ver. 1.4.1. This is the latest version of the PngComponents available when writing this document and it works fine with the JPPack.
2020.08.31 - Version from GitHub works well too.
AnchoredControls
Each visual component in the JPPack package supports anchoring of external components using the AnchoredControls property.
You can anchor external components to any edge. When you change the size or position of the main component, the position of the anchored components will be automatically updated.

TagExt
Most components in the JPPack package has the TagExt property. Here you can store one integer value (IntValue), string (StrValue), float number (RealValue), pointer (PointerValue) and date (DateValue). The first three values are available from the Object Inspector and in the code, the last two - only in the code.
Default values:
Property | Default value
----------------------|--------------
TagExt.IntValue | 0
TagExt.StrValue | '' (empty string)
TagExt.RealValue | 0
TagExt.PointerValue | nil
TagExt.DateValue | Now
Components
TJppPanel
A highly customizable panel. TCustomPanel descendant.
It was written on the basis of one of the panels included in the Cindy Components package (but I do not remember exactly which one).

The panel is divided into two parts - upper and lower. For each of them you can define colors (gradient or solid) separately.
All panel borders are configured separately. You can set different color, thickness, style, visibility for each border.
The panel has a built-in support for the unlimited collection of captions. Each caption has its own property Font: TFont, and can be centered or positioned relative to the corners of the panel.
Moreover, the TJppPanel has a built-in support for the unlimited collection of horizontal lines, vertical lines and horizontal bars.
TJppBasicPanel
A truncated version of the TJppPanel. It does not have built-in collections of captions, vertical lines, horizontal lines, and horizontal bars.
TJppSimplePanel
A truncated version of the TJppBasicPanel. It has only one gradient, all borders have the same color (Appearance.BorderColor), but each border can be hidden/shown (Appearance: DrawTopBorder, DrawBottomBorder, DrawLeftBorder, DrawRightBorder).
This panel is great for creating a basic UI layout.
TJppFlipPanel
Highly customizable collapsible panel based on the TJvRollOut panel from the JVCL package
https://github.com/project-jedi/jvcl/blob/master/jvcl/run/JvRollOut.pas
Original license: MPL 1.1
My modifications: public domain

You can put top-aligned panels on the ScrollBox to simulate CategoryPanelGroup from Delphi.
TJppStdPanel
TCustomPanel descendant
Standard panel with component anchoring support.
TJppPngButton
Currently only for Delphi.
TJppPngButton is an extended TPngBitBtn button from the PngComponents package.

The button can be in one of five states: normal, hot, down (pressed), focused and disabled. For each state you can set a whole range of display parameters: upper and bottom gradient/solid color (similarly to TJppPanel), border color, style and width, font parameters (color, name, size, style).
If you want the button to be displayed in system colors, set property Appearance.DefaultDrawing to True (all custom colors defined in the Appearance.<STATES> will then be ignored).
The number of all colors for all button states is really big, so I decided to make it easier to manage the displayed colors using ready-to-use color schemes (color maps).
I have created 36 different color schemes for TJppPngButton. To change the active color scheme, select one of the schemes available in the ColorMapType property in the Object Inspector.
Color schemes can be edited with the TJppPngButton Color Maps Designer program, which is located in the repository in the demos directory.
TJppBasicPngButton
Currently only for Delphi.
This button is a slightly truncated version of the TJppPngButton. It has only one gradient for each button state and does not support color schemes.
TJppBasicPngButtonEx
Currently only for Delphi.
Similar to TJppBasicPngButton but with support for subcaption.

TJppBasicSpeedButton
This button is very similar to TJppBasicPngButton, but it is based on TGraphicControl, so it does not take the focus (it has no focused state).
TJppComboBox
TCustomComboBox descendant.
Additional properties:
AnchoredControlsBoundLabel- Internal label.Flash- Flashing options. To turn on flashing, call theFlashBackgroundmethod in the code.ShowLabel- Show / hide bound label.TagExt
TJppComboBoxEx
`TCus
