Some extra controls commonly used in Lazarus forms
Internal flag set after page handle was connected to the notebook handle
TCustomPage
: The base type for Page
TCustomPage
: The base type for the tabbed pages found in notebooks
Multi-PageControls
TabVisible
- is the Tab for this page visible?
PageIndex
- integer index value for this page in the notebook
VisibleIndex
- returns the index number of a visible page
OnHide
- event handler for hiding this page in a notebook
OnShow
- event handler for showing (making visible) this page of a notebook
ImageIndex
- integer index value for the image associated with this page
TNBPages
- NoteBook Pages: an array of strings containing the names of the pages
Create a new instance of this control with specified page list and notebook
TTabPosition
- position of tab relative to page: top, bottom, left or right
TTabStyle
- normal tab style, buttons or flat buttons
TNoteBookOption
- Show the close button on a tab, allow multi-line tabs
TCustomNotebook
: The base type for TNotebook and TPageControl

TCustom Notebook: The base type for TNotebook and TPageControl

A notebook consists of several Pages, usually of similar type and kept indexed. They may contain Images listed in a table. One page is displayed at a time, but the other pages are indicated by tabs which may have their names on them, and a different page can be selected for display by clicking its tab

Multi-PageControls
ActivePageComponent
- the actual contents of the currently selected

Page
ActivePage
- the name (string) of the

Page
that is currently selected and is available for interaction
TabIndexAtClientPos
- the index value of the Tab at the specified position

ClientPos
GetImageIndex
- find the index number of the image associated with the specified Page index
IndexOf
- returns the index value of a specified page
CustomPage
- returns the page specified by

Index
CanChangePageIndex
- determine whether it is permissible to change the index of the page
GetMinimumTabWidth
- find the smallest permissible tab width
GetMinimumTabHeight
- find the least permissible height for a tab
DoCloseTabClicked
- perform the action associated with clicking the Close tab for this page (OnCloseTabClicked)
Images
- the list of images associated with the pages of this notebook
OnChanging
- event handler for changing a tab
OnCloseTabClicked
- event handler for clicking on the Close button to close a tab
OnGetImageIndex
- event handler for getting an image index
OnPageChanged
- event handler for a change in the page
The set of Options for the Notebook: Show close buttons on the tabs, multi-line tabs

The set of Options for the Notebook:

nboShowCloseButtons (display a little CloseButton on the Tab next to the label, to allow the user to close that tab),

nboMultiLine (allows multi-line captions on the Tabs)

The current Page of the Notebook
PageCount
- the number of Pages in the Notebook
PageIndex
- Index number of the current page
PageList
- the Indexed list of the Pages in the Notebook
The contents of the Pages in the Notebook (as Strings)
ShowTabs
- if True (default condition), show the tabs for each page
TabPosition
- top, bottom, left or right
TPage
: One of the pages in a tabbed Notebook

TPage: One of the pages in a tabbed Notebook

Inherits most of its properties from TCustomPage

HowToUseStdCtrls Multi-PageControls
TNotebook
: A series of tabbed pages placed together to make a notebook

TNotebook: A series of tabbed

pages placed together to make a notebook

A notebook consists of several Pages, usually of similar type and kept indexed. They may contain Images listed in a table. One page is displayed at a time, but the other pages are indicated by tabs which may have their names on them, and a different page can be selected by clicking its tab

Inherits most of its properties from TCustomNoteBook

To use a Notebook, select its icon from the 'Additional' tab of the Component Palette and place it on the Form. Adjust its size, position, alignment and anchoring as required, by moving the object on the Form or by using the Object Inspector.

Tabbed Pages are added to the NoteBook by selecting the control and right-clicking with the mouse to get a pop-up menu whose first item is 'Add Page'. Pages already in the NoteBook can be edited by selecting the appropriate ActivePage in the Object Inspector and modifying its properties or adding additional components to that Page.

Set of Options for this Notebook. Include nboShowCloseButtons, nboMultiLine

Set of Options for this Notebook. Include nboShowCloseButtons, nboMultiLine

To use the Options, select the tag in the Object Inspector, then select for inclusion any of the listed options, setting them True or False as appropriate.

For example, setting nboShowCloseButtons to True will cause a CloseButton (a small CheckBox with an 'x' in it) to appear on each Tab of the NoteBook, allowing the tabbed Page to be closed when the user clicks on the CloseButton.

TTimer
: An elapsed timer useful in many applications

TTimer: An elapsed timer useful in many applications

Inherits most of its properties from TCustomTimer

TIdleTimer
: A timer to measure idle time between processes

TIdleTimer: A timer to measure idle time between processes

Inherits most of its properties from TCustomTimer

AutoEnabled
- if True, Timer is automatically enabled
AutoEndEvent
- the event that causes the automatic end of the timer
AutoStartEvent
- the event that triggers autostart (either idle time-out or user input)
TShape
- An arbitrary graphic geometrical shape placed on the Form. It may be one of a series of standard shapes defined by TShapeType

TShape: An arbitrary graphic geometrical shape placed on the Form. It may be one of a series of standard shapes defined by TShapeType (stRectangle, stSquare, stRoundRect, stRoundSquare, stEllipse, stCircle, stSquaredDiamond, stDiamond).

It can be displayed using the Paint method and the Brush and Pen tools.

StyleChanged
- method for handling change of style by Sender
The Brush to be used for colouring this shape
The Pen to be used for drawing this shape
Which Shape? (Rectangle, Square, RoundRect, RoundSquare, Ellipse, Circle, SquaredDiamond, Diamond)

Which Shape?

stRectangle,

stSquare,

stRoundRect,

stRoundSquare,

stEllipse,

stCircle,

stSquaredDiamond,

stDiamond

TCustomSplitter
: the base type for

TSplitter

TCustomSplitter: the base type for

TSplitter

A Splitter is a vertical or horizontal bar that can be placed on a panel or form, to separate sub-panels functionally and allow re-sizing of the constituent sub-panels

This class defines many of the basic properties for the children classes, such as positioning, sizing and alignment

    { TCustomSplitter is a control for interactively resizing another control.
        It is a vertical or horizontal bar anchored to a side of a control.
        You can either set the Align property to alLeft (alRight,alTop,alBottom),
        then it will become a vertical bar, aligned to the left and when the user
        moves it with the mouse, the control to the left with the same Align=alLeft
        will be resized.
        The second more flexible possibility is to set the properties Align=alNone,
        AnchorSides and ResizeAnchor.
        }

StartSplitterMove
- method for starting movement of the splitter, given the mouse position MouseXY
Style for resizing - as a line, a pattern, full update, or none
AutoSnap - automatically snaps to a grid point or grid line in the Form designer
Boolean property, true if snapping to grid positions
Whether the edges of the splitter bar are bevelled
Minimum size for splitter - default 30 pixels
Event handler for receiving permission to resize
Event handler for occasion when splitter has moved
AnchorSplitter
- anchor the splitter to Acontrol using the specified Kind of anchor
ResizeControl
- the control that is to be re-sized with the splitter
GetOtherResizeControl
- find out which other control is to be re-sized
MoveSplitter
- by an amount specified by Offset
SetSplitterPosition
- to specified NewPosition
GetSplitterPosition
- returns the current position of the splitter
ResizeAnchor
- the kind of anchor to be used for resizing
TSplitter
: A vertical or horizontal bar placed on a panel or form, to separate sub-panels functionally

TSplitter: A vertical or horizontal bar that can be placed on a panel or form, to separate sub-panels functionally and allow re-sizing of the constituent sub-panels

The splitter extends for the full height (if vertical) or full width (if horizontal) of the parent control (form or panel) and is anchored to the edges; its position along the length or height of the parent is determined by the programmer or user by moving the whole control with the mouse, and its size can be adjusted using the sizing bars and with the ResizeAnchor property

HowToUseStdCtrls
TPaintBox
: a painted rectangular box with defined size and color

TPaintBox: a painted rectangular box with defined size and colour

HowToUseStdCtrls
TCustomImage
- the base type for

TImage
TCustomImage

: The base type for

TImage
. This is a control of the class

TGraphicControl
, designed to be lightweight and fast
TGraphicControl
Should image be centered?
Boolean property - True if image is to be centered
Picture

- the actual image for display
True if picture is to be stretched
True if you can see through the image
True if image is proportional
TImage
- a graphic image placed on the form; usually loaded from a picture file.

TImage

: a graphic image placed on the form; usually loaded from a picture file.

The actual image is found in Picture or Canvas

Inherits most of its properties from its ancestors, TCustomImage, TGraphicControl and TControl

HowToUseStdCtrls
TControl.AutoSize
A bevel placed around the edge of buttons and other components

TBevel

- a bevel placed around the edge of buttons and other components.

Its appearance is governed by TBevelShape, TBevelStyle and TBevelwidth

Virtual Paint method called in response to paint requests received by the parent control.

// standard properties, which should be supported by all descendants

Either reads a flag containing alignment instructions (FAlign) or writes alignment instructions (SetAlign)

May have no alignment, may have custom or client alignment, or can be aligned to top, bottom, left or right

// standard properties, which should be supported by all descendants

Determines how the control is to be anchored to its client or parent conrol

Either reads a flag containing the set of anchors to be used, or writes a set of anchors. If they have been written, this is indicated in IsAnchorsStored

// standard properties, which should be supported by all descendants

Determines the border spacing for this control

Reads flag to find stored spacing values required for the border of the control, or writes the flag to set the spacing.

The properties are defined in the parent class TControlBorderSpacing

// standard properties, which should be supported by all descendants

Determine Constraints (max and min height and width) for this control; reads the size constraints or stores new ones.

Name
is the name of the component. This name should be a valid identifier, i.e. must start with a letter, and can contain only letters, numbers and the underscore character. When attempting to set the name of a component, the name will be checked for validity. Furthermore, when a component is owned by another component, the name must be either empty or must be unique among the child component names.
Attempting to set the name to an invalid value will result in an exception being raised.
Shape
- whether a box, a frame or a line along one of the edges
Style
- whether raised or lowered

    The Visible property represents the ability to see a visual control.
              If Visible is True the control is shown, otherwise it is hidden.
              Calling Show sets, among others, Visible to True.
              Setting Visible to False is equivalent to calling Hide method.

The Visible property does not depend on control's parent visibility. Use IsVisible method to consider this and get real visibility.

// standard properties, which should be supported by all descendants

Reads or Writes flag if bounds are changed

// standard properties, which should be supported by all descendants
Reads or Writes flag if control is re-sized.
TCustomRadioGroup:
the base type for

TRadioGroup

TCustomRadioGroup: the base type for

TRadioGroup

A group of related but mutually exclusive radio buttons, requiring the user to select one af a set of alternatives

This class defines Items, where the captions for individual radio boxes are stored, Rows and Columns for arranging the radio boxes, and ColumnLayout to determine whether the data are arranged down the columns first, or across the rows first.

ItemIndex
- the index value of an entry within the list of Items
Items
- a string list containing the captions for the radio boxes
Columns
- the number of columns in which the

Items
(radio buttons) are to be arranges
ColumnLayout
-

HorizontalThenVertical
or vice versa
CanModify
- if True, modification of the RadioGroup is permitted
Rows
- the number of rows in which Items (radio boxes) are held
Number of rows
TRadioGroup
: A group of related but mutually exclusive radio buttons, requiring the user to select one af a set of alternatives

TRadioGroup: A group of related but mutually exclusive radio buttons, requiring the user to select one af a set of alternatives. As one button becomes selected, the remaining buttons in the group become automatically deselected.

To Use this control, place it in the required position on the form, then in the Object Inspector select Items and click on the ellipsis (...) to open the string editor. Type in the captions to accompany each check box, then close the string editor and you will see a series of Radio Boxes with their captions displayed beside them. (Note - unlike TCheckGroup, there is no special RadioGroup editor)

Inherits properties from TCustomRadioGroup and TCustomGroupBox

TRadioGroup behaves differently from a group of

TRadioButton controls placed arbitrarily around a form.

In the case of TRadioButton, the mutual exclusivity is a feature that applies to any RadioButton anywhere in the Form, and the RadioButtons can be rearranged in any order or placed anywhere within the containing Form, while in TRadioGroup the exclusivity applies only to buttons within the Group, which are ordered strictly according to their ItemIndex within the Items stringlist.

TRadioButton is an entity in itself, with a number of additional properties, whereas the buttons within

TRadioGroup are not separate entities, but rather are simply entries in a list of strings, each of which is associated with the on-screen image of a

RadioButton.

The example shows the difference between the use of TRadioButton and TRadioGroup

HowToUseStdCtrls TRadioButton
Caption
- the text string appearing above the whole RadioGroup box
Items
- a string list containing the captions of the radio boxes

Items - a string list containing the captions of the radio boxes

Use the String List editor, opened by selecting Items and the ellipsis (...) in the Object Inspector, to insert the captions for the radio boxes, and determine their order and layout using the Rows, Columns and ColumnLayout properties

TCustomCheckGroup
: The base type for

TCheckGroup

TCustomCheckGroup: The base type for

TCheckGroup

This class defines Items, where the captions for individual check boxes are stored, Rows and Columns for arranging the check boxes, and ColumnLayout to determine whether the data are arranged down the columns first, or across the rows first.

TCustomGroupBox
DefineProperties
- overrides the method inherited from TComponent, defines the top, left properties
TComponent.DefineProperties
Reads data from a stream
Writes Data to a stream
Rows
- the number of rows in which the Items (check boxes) are arranged
The number of rows holding items
Items
- a string list for the captions of the check boxes
Whether an individual entry in the list is Checked
CheckEnabled
- whether a given (indexed) entry in the list is allowed to be checked
Columns
- the number of columns in which the

Items
(check boxes) are to be arranges
ColumnLayout
-

HorizontalThenVertical
or vice versa
OnItemClick
- event handler for mouse click on one of the Items in the Check Group
AutoFill
- whether Check Boxes should be automatically filled in (checked)
TCheckGroup
: A group of Check Boxes physically and logically grouped together on a form

TCheckGroup: A group of Check Boxes physically and logically grouped together on a form

To Use this control, place it in the required position on the form, then either right-click on the control to see the pop-up CheckGroup editor, or in the Object Inspector select Items and click on the ellipsis (...) to open the string editor. In either case, type in the captions to accompany each check box, then close the string or CheckGroup editor and you will see a series of boxes with their captions displayed beside them.

Inherits properties from TCustomCheckGroup and TCustomGroupBox

HowToUseStdCtrls TRadioGroup
Caption
: the string which appears at the top of the Check Group Box

Caption: the string which appears as a caption at the top of the Check Group Box to describe the function of the Check Group as a whole

Items
- a string list containing the captions of the check boxes

Items - a string list containing the captions of the check boxes

Use the String List editor or the CheckGroup editor (opened by right-clicking on the control in the Form) to insert the captions for the check boxes, and determine their order and layout

TBoundLabel
: A label bound to another object, for example in

TLabeledEdit
TBoundLabel
: A label bound to another object, for example in

TLabeledEdit
TLabeledEdit
Create a new instance of a Graphic Control
FocusControl
- whether this control has focus
Caption : the caption which will appear on the Bound Label, to identify its function
Custom Labelled Edit

TCustomLabeledEdit

: The base type for

LabeledEdit.

Note particularly the EditLabel property (see TBoundLabel), which contains the label attached to the Edit control.

TCustomEdit TCustomLabel
EditLabel
- the label attached to the edit box
LabelPosition

- whether above, below, to the left or to the right of the Edit box
LabelSpacing

- the distance between the Label and the Edit box
Labelled Edit: An Edit Box with a permanently attached Label

TLabeledEdit

: An Edit Box with a permanently attached Label

Saves time and effort over placing separate Label and Edit Box on Form. The properties are described in the parent component, TCustomLabeledEdit from which most of the properties are inherited

TCustomEdit TBoundLabel
Text

: the text-string being entered or edited in the Labelled Edit box
TCustomPanel
: The base type for

TPanel

TCustomPanel: The base type for

TPanel

A Panel is a defined rectangular area of the form into which other components can be placed to group them functionally and geographically.

TCustomPanel defines the positioning and bevelling properties of any descendent classes, and provides methods for painting and writing text to the panel.

UpdateBordersAndBevels
- make sure any changes to borders and bevels are accurately shown
Alignment
- whether text is left or right justified, or centered
BevelInner
- determines the nature of the Inner Bevel of the panel (whether raised, lowered etc)
BevelOuter
- determines the nature of the Outer Bevel of the panel (whether raised, lowered etc)
BevelWidth
- the Width of the panel's bevel in pixels
FullRepaint
- if True, the panel needs to be fully repainted after each change
TPanel
: A defined rectangular area of the form into which other components can be placed

TPanel: A defined rectangular area of the form into which other components can be placed to group them functionally and geographically

Most of the properties are defined in ancestor classes including TCustomPanel, TCustomControl and TWinControl

Any controls such as buttons or check boxes that are placed inside the panel become its children, and inherit many of its properties. If the Panel is moved, the child controls move with it. Any part of a child control that falls outside the panel becomes invisible.

HowToUseStdCtrls
TCustomTrayIcon
- the base class for

TTrayIcon
, a multiplatform System Tray component.
TTrayIcon
is a multiplatform System Tray component. It adds an icon to the tray and signifies an application that is inactive but ready to be activated. Under Windows the System tray is usually located on the bottom-right corner of the screen, but it may be elsewhere. On other operating systems this position varies.
Create
creates a new instance of a

TCustomTrayIcon
class. If

AOwner
is not

Nil
, the new component attempts to insert itself in the list of owned components of the owner.
Destroy
sends a

opRemove
notification to all components in the free-notification list. After that, all owned components are destroyed by calling

DestroyComponents (and hence removed from the list of owned components). When this is done, the component removes itself from its owner's child component list. After that, the parent's destroy method is called.
Hide - Removes the icon from the System Tray
Show - Shows the icon on the System Tray
ShowBalloonHint
displays a smal balloon-like window near the tray icon. It can be used to send notifications about the status of an action, or notify of a received message or any other event which doesn't require an imediate response. The Ballon window disappears after

BallonHintTimeout
milliseconds of when the user clicks it or it's close button.
Find the position of the Tray Icon and thus a position suitable to display the hinting BalloonHint. Under Windows an approximate location is detected.
the set of kinds of ballon flag that can be displayed (may be None, Info, Warning or Error)
The text to be shown in the hinting balloon
The period after which the hinting balloon disappears
The title to be shown on the hinting balloon
The canvas of the Tray Icon
PopUpMenu - a small menu popup that is displayed when right mouse button is clicked over icon - separate from hint balloon
The Icon or picture that is to be displayed
A simple hint that is shown when the mouse hovers over the icon.
Determines if Icon should be painted to the System Tray. This can be set to false if one wishes to instead paint to the Canvas of the Tray Icon.
It is set to true when the icon is shown and remains true until Hide is called. Setting Visible has the same effect as calling Hide or Show.
Event Handler for Mouse Click on Tray Icon
Event handler for mouse double-click
Event handler if mouse button is pressed down
Event handler if mouse button is up
Event handler for mouse movement
Use this to implement custom drawing to the icon. Draw using the canvas property of the icon. Note: Does not work on win32.

Assign copies the contents of

Source to

Self, if the classes of the destination and source classes are compatible.

The TPersistent implementation of Assign does nothing but calling the AssignTo method of source. This means that if the destination class does not know how to assign the contents of the source class, the source class instance is asked to assign itself to the destination class. This means that it is necessary to implement only one of the two methods so that two classes can be assiged to one another.

In general, a statement of the form

Destination:=Source;

(where Destination and Source are classes) does not achieve the same as a statement of the form

Destination.Assign(Source);

After the former statement, both Source and Destination will point to the same object. The latter statemtent will copy the contents of the Source class to the Destination class.

Multi-PageControls
- controls that offer a selection of alternative pages for display

Multi-PageControls - controls that offer a selection of alternative pages for display

A number of controls, found in Units ExtCtrls and ComCtrls, offer the ability to create multi-page forms with a series of Tabs along one edge that allow the user to select one of the Pages for display and interaction.

These include: TPageControl, TNoteBook, TTabControl and THeaderControl (the Header Control components have a very different structure and function). Icons for all of these exist on the Additional or Common Controls tabs of the Component Palette in the Lazarus IDE.

While the various components may look superficially similar, they differ in properties, inheritance, method of adding additional pages, behaviour at run-time, methods for referencing pages and so on.

We have to be very clear when using the various properties, to distinguish between the word 'Tab' as referring to a Tab indicating an identifier for a page, and 'Tab' as referring to the TAB key on the standard keyboard. In common with most Lazarus components, it is possible to enable each control to be included in the TabOrder of TabStops for a Form, so that the component can be reached by repeated pressing of the TAB key, and we must not confuse this use of 'Tab' with the use to denote a Page.

The properties CanTab, TabStop and TabOrder refer to the use of the TAB key to navigate to the relevant control.

Properties such as Tabs, TabIndex, IndexOfTabAt(), TabIndexAtClientPos(), TabPosition, TabHeight, TabWidth, TabVisible, OnCloseTabClicked refer to the use for Page selection.

TNoteBook and

TPageControl are both descended from

TCustomNoteBook (which is in turn descended from

TWinControl) and have many inherited properties in common.

TPageControl has, in general, more advanced features and is probably intended to replace

TNoteBook.

The following table summarises the main differences between the two components.

| Property or method | TNoteBook | TPageControl
Pages, ActivePage | String, TPage | TTabSheet, a more advanced version of TPage
Drag/Drop/Dock | Drag properties, but minimal Dock or Drop | Full Drag, Drop, Dock properties and methods
Indexing | PageIndex | ActivePageIndex, TabIndex
Showing/Hiding Tabs | ShowTabs | TabVisible in TTabSheet
Hints | No Hinting methods | ShowHint, ParentShowHint
Font | No Font properties | Font, ParentFont
Sensing position of Tab | None | TabPosition, OnGetSiteInfo
Options | Published property Options, include nboShowCloseButtons, nboMultiLine | No published Options property, but inherits Options (public property) from TCustomNoteBook, so they could be set explicitly in code

The individual Pages in both of the above controls (descended from TCustomNoteBook) are separate and can have their own specific collections of widgets which appear only when the relevant Page is selected by its Tab.

In contrast, the TTabControl component (descended from TCustomTabControl) has only one display area (Protected property DisplayRect), but the image displayed in it is determined by which tab has been selected. Each Tab has an index value which is used to select the appropriate image from an indexed ImageList and display it in the Display Rectangle.

The properties of the Tabs in TTabControl are very configurable compared with those in the controls derived from TCustomNoteBook, allowing for instance the creation of multi-line captions, the placement of images on Tabs, the possibility of the Owner routine determining the drawing of the tab, the configuration of Tab size, the selection of multiple tabs. The trade-off is that the display area is restricted in what it can display, and is essentially confined to display of images.

To use any of the above controls, select them from the relevant tab on the IDE Component Palette and drop them on the form in the required position. Fill in as many relevant properties as you can in the Object Inspector.

To add Tabs or Pages to the controls, select the control with a left mouse click or by selecting from the Component menu in the Object Inspector, then right-click on the component to get a pop-up menu, whose first item will be 'Add Page' or 'Add Tab'.

The Tabs in TTabControl can be edited by selecting 'Tabs' in the Object Inspector, clicking on the ellipsis (...) and using the string editor that pops up.

The pages inTNoteBook or TPageControl can be edited by selecting the ActivePage in the Object Inspector and then editing the properties of the individual page.

THeaderControl offers a widget that could be placed along the edge of a Panel or Form, allowing a highly customised mechanism for selection. However, there are no intrinsically associated display areas, and it is the developer's responsibility to supply an index associated with the selection from the

THeaderControl and determining what action is to occur or what is to be displayed in any attached Panel or Form.

When the control is first selected from the Component Palette and placed on a Form, it consists of an unadorned rectangle. However, selecting the control and right-clicking (or selecting the 'Sections' property in the Object Inspector) gives access to a Sections editor (a StringList editor) and Sections can be added to the control. The sections are separated by vertical lines, and each section can have a string inserted as a label, associated with an Index value. The Sections can be rearranged, re-ordered, or be individually painted.

In a typical application a THeaderControl and a TPanel or TForm would be docked together, and code would be written to find which Section of the Header had been selected, then use its index to control the display in the other docked control.

AutoFill
- whether responses to Items should automatically be filled in