<?xml version="1.0" encoding="UTF-8"?>
<!--

Documentation for LCL (Lazarus Component Library) and LazUtils (Lazarus 
Utilities) are published under the Creative Commons Attribution-ShareAlike 4.0 
International public license.

https://creativecommons.org/licenses/by-sa/4.0/legalcode.txt
https://gitlab.com/freepascal.org/lazarus/lazarus/-/blob/main/docs/cc-by-sa-4-0.txt

Copyright (c) 1997-2025, by the Lazarus Development Team.

-->
<fpdoc-descriptions>
<package name="lcl">
<!--
====================================================================
StdCtrls
====================================================================
-->
<module name="StdCtrls">
<short>Standard controls used in the Lazarus Component Library (LCL).</short>
<descr>
<p>
<file>stdctrls.pp</file> contains standard controls used in Lazarus Component 
Library (LCL) applications. Most of the controls are found on the 
<b>Standard</b> tab in the Lazarus IDE component palette, including:
</p>
<ul>
<li>TButton</li>
<li>TLabel</li>
<li>TEdit</li>
<li>TMemo</li>
<li>TToggleBox</li>
<li>TCheckBox</li>
<li>TRadioButton</li>
<li>TListBox</li>
<li>TComboBox</li>
<li>TScrollBar</li>
<li>TGroupBox</li>
</ul>
<p>
The following controls are added to the <b>Additional</b> tab in the Lazarus 
IDE component palette:
</p>
<ul>
<li>TStaticText</li>
</ul>
</descr>

<!-- unresolved external references -->
<element name="Classes"/>
<element name="SysUtils"/>
<element name="Types"/>
<element name="LCLStrConsts"/>
<element name="LCLType"/>
<element name="LCLProc"/>
<element name="LCLIntf"/>
<element name="LMessages"/>
<element name="LResources"/>
<element name="Graphics"/>
<element name="ActnList"/>
<element name="Controls"/>
<element name="Forms"/>
<element name="Menus"/>
<element name="Themes"/>
<element name="TextStrings"/>
<element name="ExtendedStrings"/>
<element name="LazUTF8"/>
<element name="LazMethodList"/>
<element name="LazLoggerBase"/>
<element name="LazUtilities"/>

<element name="TEditCharCase">
<short>
Determines the case for text in an edit box or a combo-box control.
</short>
<descr>
<p>
<var>TEditCharCase</var> is an enumerated type with values that determine the 
case used for text in controls like <var>TCustomComboBox</var> and 
<var>TCustomEdit</var>. TEditCharCase is the type used to implement the 
<var>CharCase</var> property in both TCustomComboBox and TCustomEdit.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.CharCase"/>
<link id="TCustomEdit.CharCase"/>
</seealso>
</element>
<element name="TEditCharCase.ecNormal">
<short>Normal mode (no case conversion).</short>
</element>
<element name="TEditCharCase.ecUppercase">
<short>Converts every character entered to upper case.</short>
</element>
<element name="TEditCharCase.ecLowerCase">
<short>Converts every character entered to lower case.</short>
</element>

<element name="TEchoMode">
<short>How text in the edit box is displayed.</short>
<descr>
<p>
<var>TEchoMode</var> is an enumerated type with values that control whether 
text in a control is displayed with or without obfuscation. TEchoMode is the 
type used to implement the <var>EchoMode</var> property in 
<var>TCustomEdit</var>.
</p>
</descr>
<seealso>
<link id="TCustomEdit.EchoMode"/>
</seealso>
</element>
<element name="TEchoMode.emNormal">
<short>Characters are shown unmodified.</short>
</element>
<element name="TEchoMode.emNone">
<short>All characters are shown as spaces.</short>
<descr/>
</element>
<element name="TEchoMode.emPassword">
<short>All characters shown as the value in PasswordChar.</short>
</element>

<element name="TScrollStyle">
<short>Indicates the visibility for scrollbars on a control.</short>
<descr>
<p>
<var>TScrollStyle</var> is an enumerated type with values that indicates the 
visibility for one or more scrollbars displayed for an associated edit 
control. TScrollStyle is the type used to implement the <var>ScrollBars</var> 
property in <var>TCustomMemo</var>.
</p>
</descr>
<seealso>
<link id="TCustomMemo.ScrollBars"/>
</seealso>
</element>
<element name="TScrollStyle.ssNone">
<short>No scrollbars are displayed.</short>
</element>
<element name="TScrollStyle.ssHorizontal">
<short>A horizontal scrollbar is shown.</short>
</element>
<element name="TScrollStyle.ssVertical">
<short>A vertical scrollbar is shown.</short>
</element>
<element name="TScrollStyle.ssBoth">
<short>Both horizontal and vertical scrollbars are shown.</short>
</element>
<element name="TScrollStyle.ssAutoHorizontal">
<short>A horizontal scrollbar is shown only when needed.</short>
</element>
<element name="TScrollStyle.ssAutoVertical">
<short>A vertical scrollbar is shown only when needed.</short>
</element>
<element name="TScrollStyle.ssAutoBoth">
<short>Both scrollbars are shown only when needed.</short>
</element>

<element name="TScrollCode">
<short>The scroll action type, as reported by the widget.</short>
<descr>
<p>
<var>TScrollCode</var> is an enumerated type with values that represent 
scroll actions received from the widgetset class for a scrollbar. The 
positions and values in the enumeration correspond to the constants defined 
in the <file>LCLType</file> unit, and include:
</p>
<ul>
<li>SB_LINEUP</li>
<li>SB_LINEDOWN</li>
<li>SB_PAGEUP</li>
<li>SB_PAGEDOWN</li>
<li>SB_THUMBPOSITION</li>
<li>SB_THUMBTRACK</li>
<li>SB_TOP</li>
<li>SB_BOTTOM</li>
<li>SB_ENDSCROLL</li>
</ul>
<p>
Values in TScrollCode are passed as an argument to the <var>Scroll</var> 
method in <var>TCustomScrollBar</var>, and subsequently to the 
<var>TScrollEvent</var> event handler in the <var>OnScroll</var> property.
</p>
</descr>
<seealso>
<link id="TScrollEvent"/>
<link id="TCustomScrollBar.Scroll"/>
<link id="TCustomScrollBar.OnScroll"/>
</seealso>
</element>
<element name="TScrollCode.scLineUp">
<short>Scroll one line up (column left).</short>
</element>
<element name="TScrollCode.scLineDown">
<short>Scroll one line down (column right).</short>
</element>
<element name="TScrollCode.scPageUp">
<short>Scroll one page up (left).</short>
</element>
<element name="TScrollCode.scPageDown">
<short>Scroll one page down (right).</short>
</element>
<element name="TScrollCode.scPosition">
<short>Scroll to the specified position.</short>
</element>
<element name="TScrollCode.scTrack">
<short>Scroll tracking to the specified position.</short>
</element>
<element name="TScrollCode.scTop">
<short>Scroll to the top (left) end.</short>
</element>
<element name="TScrollCode.scBottom">
<short>Scroll to the bottom (right) end.</short>
</element>
<element name="TScrollCode.scEndScroll">
<short>Scrolling finished.</short>
</element>

<element name="TScrollEvent">
<short>Defines an event handler type for scrollbar events.</short>
<descr>
<p>
<var>TScrollEvent</var> is an object procedure which defines an event handler 
signalled when a scroll event occurs in the scrollbar widgetset class. The 
event handler is called before the new <var>Position</var> is set for the 
control. The value in Position can be adjusted to implement custom scrollbar 
behavior.
</p>
<p>
TScrollEvent is the type used to implement the <var>OnScroll</var> event 
handler in <var>TCustomScrollBar</var>.
</p>
</descr>
<seealso>
<link id="TCustomScrollBar.OnScroll"/>
<link id="TCustomScrollBar.Scroll"/>
</seealso>
</element>
<element name="TScrollEvent.Sender">
<short>The scrollbar for the event notification.</short>
</element>
<element name="TScrollEvent.ScrollCode">
<short>The scroll action for the notification.</short>
</element>
<element name="TScrollEvent.ScrollPos">
<short>New position for the scrollbar.</short>
<descr>
<p>
The suggested new scroll position. Change this value to implement custom 
scroll behavior.
</p>
</descr>
<seealso/>
</element>

<element name="TCustomScrollBar">
<short>The base class for <var>TScrollBar</var>.</short>
<descr>
<p>
<var>TCustomScrollBar</var> is a <var>TWinControl</var> descendant which 
defines the base class for a scrollbar, such as <var>TScrollBar</var>. 
TCustomScrollBar can be used for horizontal or vertical scrollbars displayed 
on a form or scrolling window control.
</p>
<p>
A scrollbar allows the content in a client area to be scrolled when it 
extends beyond the window bounds. TCustomScrollBar provides the properties, 
methods, and events needed to interface with the widgetset class for the 
platform or operating system.
</p>
<p>
Use the <var>Kind</var> property to specify the orientation for the scrollbar.
</p>
<p>
Use <var>Min</var>, <var>Max</var>, <var>SmallChange</var>, 
<var>LargeChange</var>, <var>PageSize</var> and <var>Position</var> 
properties to control the scrolling behavior for the scrollbar.
</p>
<p>
Use the <var>OnChange</var> and <var>OnScroll</var> event handlers to respond 
to programmatic changes to the scrollbar, or messages received from the 
widgetset class.
</p>
<p>
See <link id="#lcl.forms.TControlScrollBar">TControlScrollBar</link> for 
information about scrollbars used for windowed controls.
</p>
</descr>
<seealso>
<link id="TScrollBar"/>
<link id="#lcl.forms.TScrollingWinControl">TScrollingWinControl</link>
<link id="#lcl.forms.TControlScrollBar">TControlScrollBar</link>
<link id="#lcl.controls.TWinControl">TWinControl</link>
</seealso>
</element>

<element name="TCustomScrollBar.FKind"/>
<element name="TCustomScrollBar.FPosition"/>
<element name="TCustomScrollBar.FMin"/>
<element name="TCustomScrollBar.FMax"/>
<element name="TCustomScrollBar.FPageSize"/>
<element name="TCustomScrollBar.FRTLFactor"/>
<element name="TCustomScrollBar.FSmallChange"/>
<element name="TCustomScrollBar.FLargeChange"/>
<element name="TCustomScrollBar.FOnChange"/>
<element name="TCustomScrollBar.FOnScroll"/>

<!-- private -->
<element name="TCustomScrollBar.DoScroll">
<short>
Performs actions needed to translate and apply scrollbar notification 
messages.
</short>
</element>
<element name="TCustomScrollBar.DoScroll.Message">
<short>Message examined and applied in the method.</short>
</element>

<element name="TCustomScrollBar.NotRightToLeft">
<short>Always returns <b>True</b></short>
</element>
<element name="TCustomScrollBar.NotRightToLeft.Result">
<short>Always returns <b>True</b>.</short>
</element>

<element name="TCustomScrollBar.SetKind">
<short>Sets the value for the Kind property.</short>
<descr/>
<seealso>
<link id="TCustomScrollBar.Kind"/>
</seealso>
</element>
<element name="TCustomScrollBar.SetKind.Value">
<short>New value for the Kind property.</short>
</element>

<element name="TCustomScrollBar.SetMax">
<short>Sets the value for the Max property.</short>
<descr/>
<seealso>
<link id="TCustomScrollBar.Max"/>
</seealso>
</element>
<element name="TCustomScrollBar.SetMax.Value">
<short>New value for the Max property.</short>
</element>

<element name="TCustomScrollBar.SetMin">
<short>Sets the value for the Min property.</short>
<descr/>
<seealso>
<link id="TCustomScrollBar.Min"/>
</seealso>
</element>
<element name="TCustomScrollBar.SetMin.Value">
<short>New value for the Min property.</short>
</element>

<element name="TCustomScrollBar.SetPosition">
<short>Sets the value for the Position property.</short>
<descr/>
<seealso>
<link id="TCustomScrollBar.Position"/>
</seealso>
</element>
<element name="TCustomScrollBar.SetPosition.Value">
<short>New value for the Position property.</short>
</element>

<element name="TCustomScrollBar.SetPageSize">
<short>Sets the value for the PageSize property.</short>
<descr/>
<seealso>
<link id="TCustomScrollBar.PageSize"/>
</seealso>
</element>
<element name="TCustomScrollBar.SetPageSize.Value">
<short>New value for the PageSize property.</short>
</element>

<element name="TCustomScrollBar.CNHScroll">
<short>Handles the LM_HSCROLL message for the control.</short>
</element>
<element name="TCustomScrollBar.CNHScroll.Message">
<short>Message handled in the method.</short>
</element>

<element name="TCustomScrollBar.CNVScroll">
<short>Handles the LM_VSCROLL message for the control.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomScrollBar.CNVScroll.Message">
<short>Message handled in the method.</short>
</element>

<element name="TCustomScrollBar.CNCtlColorScrollBar">
<short>Handles the CN_CTLCOLORSCROLLBAR message for the control.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomScrollBar.CNCtlColorScrollBar.Message">
<short>Message handled in the method.</short>
</element>

<element name="TCustomScrollBar.WMEraseBkgnd">
<short>Handles the LM_ERASEBKGND message for the control.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomScrollBar.WMEraseBkgnd.Message">
<short>Message handled in the method.</short>
</element>

<element name="TCustomScrollBar.WSRegisterClass">
<short>
Registers the widgetset class created for new instances of the control.
</short>
<descr>
<p>
<var>WSRegisterClass</var> is an overridden procedure used to register the 
widgetset class instance created for new instances of the control. 
WSRegisterClass calls the inherited method, and calls 
<var>RegisterCustomScrollBar</var> for the widgetset.
</p>
</descr>
<seealso>
<link id="#lcl.lclclasses.TLCLComponent.WSRegisterClass">TLCLComponent.WSRegisterClass</link>
</seealso>
</element>

<element name="TCustomScrollBar.GetControlClassDefaultSize">
<short>Gets the default size for new instances of the class.</short>
<descr>
<p>
<var>GetControlClassDefaultSize</var> is an overridden <var>TSize</var> class 
function used to get the default size for new instances of the class.
</p>
<p>
GetControlClassDefaultSize sets the values in members in the return value. 
The <var>CX</var> member contains the width for the new instance, and is set 
121 (pixels). The <var>CY</var> member contains the height for the new 
instance, and is set to the number of pixels returned from 
<var>GetSystemMetrics</var> for the <var>SM_CYHSCROLL</var> constant.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.GetControlClassDefaultSize">TControl.GetControlClassDefaultSize</link>
</seealso>
</element>
<element name="TCustomScrollBar.GetControlClassDefaultSize.Result">
<short>
TSize instance with the default width and height for the control.
</short>
</element>

<element name="TCustomScrollBar.CreateParams">
<short>Initializes the creation parameters for the class instance.</short>
<descr>
<p>
<var>CreateParams</var> is an overridden method used initialize the creation 
parameters for the class instance. CreateParams calls the inherited method, 
and ensures that the <var>Params</var> argument is updated to include the 
value from the <var>Kind</var> property in the style information for the 
<var>TCreateParams</var> instance. This ensures that the correct orientation 
for the scrollbar is used in the creation parameters.
</p>
</descr>
<seealso>
<link id="TCustomScrollBar.Kind"/>
<link id="TScrollBarKind"/>
<link id="TCustomScrollBar.CreateWnd"/>
<link id="#lcl.lcltype.TCreateParams">TCreateParams</link>
<link id="#lcl.controls.TWinControl.CreateParams">TWinControl.CreateParams</link>
</seealso>
</element>
<element name="TCustomScrollBar.CreateParams.Params">
<short>The creation parameters and flags for the instance.</short>
</element>

<element name="TCustomScrollBar.CreateWnd">
<short>
<var>CreateWnd</var> - calls inherited <var>CreateWnd</var> then initializes 
various Scroll Info properties.
</short>
<descr>
<p>
The inherited method creates the interface object, sets parameters and 
assigns the handle. Then the size of scrollbar, maximum and minimum values, 
page size and position of scrollbar are set.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.CreateWnd">TWinControl.CreateWnd</link>
</seealso>
</element>

<element name="TCustomScrollBar.Change">
<short>Invokes the OnChange event handler for the control.</short>
<descr>
<p>
<var>Change</var> is a procedure used to perform the <var>Changed</var> 
method in the ancestor class, and to signal the <var>OnChange</var> event 
handler (when assigned) for the control. Change is called when 
<var>SetParams</var> is used to update the <var>Position</var>, 
<var>Min</var>, <var>Max</var>, or <var>PageSize</var> values in the 
scrollbar.
</p>
</descr>
<seealso>
<link id="TCustomScrollBar.OnChange"/>
<link id="TCustomScrollBar.SetParams"/>
<link id="TCustomScrollBar.Position"/>
<link id="TCustomScrollBar.Min"/>
<link id="TCustomScrollBar.Max"/>
<link id="TCustomScrollBar.PageSize"/>
<link id="#lcl.controls.TControl.Changed">TControl.Changed</link>
</seealso>
</element>

<element name="TCustomScrollBar.Scroll">
<short>Signals the OnScroll event handler.</short>
<descr>
<p>
<var>Scroll</var> is a method used to signal the <var>OnScroll</var> event 
handler (when assigned) for the control.
</p>
<p>
<var>ScrollCode</var> contains the scrollbar command constant for the scroll 
operation. <var>ScrollPos</var> contains the new position for the scrollbar 
when the operation is completed.
</p>
<p>
Scroll is called from the implementation of the private DoScroll method, 
which handles scrollbar control messages and sets the values for the 
arguments to the method.
</p>
</descr>
<seealso>
<link id="TCustomScrollBar.OnScroll"/>
</seealso>
</element>
<element name="TCustomScrollBar.Scroll.ScrollCode">
<short>
Scroll command code for the operation; up or down a line, a page, to the top 
or bottom, etc.
</short>
</element>
<element name="TCustomScrollBar.Scroll.ScrollPos">
<short>The new position for the scrollbar.</short>
</element>

<element name="TCustomScrollBar.CalculatePreferredSize">
<short>Gets the preferred size for new instances of the class.</short>
<descr>
<p>
<var>CalculatePreferredSize</var> is overridden in TCustomScrollBar. The 
inherited method is called, and the value in PreferredHeight or 
PreferredWidth is updated, based on the value in <var>Kind</var>, to use the 
corresponding value from <var>GetSystemMetrics</var>.
</p>
</descr>
<seealso>
<link id="TCustomScrollBar.Kind"/>
<link id="#lcl.controls.TWinControl.CalculatePreferredSize">TWinControl.CalculatePreferredSize</link>
<link id="#lcl.lclintf.GetSystemMetrics">GetSystemMetrics</link>
</seealso>
</element>
<element name="TCustomScrollBar.CalculatePreferredSize.PreferredWidth">
<short>Preferred width calculated for the control.</short>
</element>
<element name="TCustomScrollBar.CalculatePreferredSize.PreferredHeight">
<short>Preferred height calculated for the control.</short>
</element>
<element name="TCustomScrollBar.CalculatePreferredSize.WithThemeSpace">
<short>
<b>True</b> when space is reserved for theme element details in the 
calculated dimensions.
</short>
</element>

<element name="TCustomScrollBar.Create">
<short>Constructor for the class instance.</short>
<descr>
<p>
<var>Create</var> is the overridden constructor for the class instance, and 
calls the inherited constructor on entry.
</p>
<p>
Create ensures that the component style is updated to <var>csScrollBar</var> 
and sets the initial bounds for the control to the values returned from 
<var>GetControlClassDefaultSize</var>. Create sets the default values for 
properties, like:
</p>
<dl>
<dt>TabStop</dt>
<dd>Set to <b>True</b>.</dd>
<dt>ControlStyle </dt>
<dd>
Includes the values: [csFramed, csDoubleClicks, csOpaque]. Excludes the 
values: [csAcceptsControls, csDoubleClicks, csCaptureMouse, csSetCaption].
</dd>
<dt>Kind</dt>
<dd>Set to sbHorizontal.</dd>
<dt>Position</dt>
<dd>Set to 0.</dd>
<dt>Min</dt>
<dd>Set to 0.</dd>
<dt>Max</dt>
<dd>Set to 100.</dd>
<dt>SmallChange</dt>
<dd>Set to 1.</dd>
<dt>LargeChange</dt>
<dd>Set to 1.</dd>
</dl>
</descr>
<seealso/>
</element>
<element name="TCustomScrollBar.Create.AOwner">
<short>Owner of the class instance.</short>
</element>

<element name="TCustomScrollBar.SetParams">
<short>
Updates the Min and Max values, the size of the page, and the position in the 
scrollbar.
</short>
<descr>
<p>
<var>SetParams</var> is an overloaded procedure used to update the values in 
the <var>TScrollInfo</var> structure passed to the widgetset class. Values 
passed in parameters are stored in the TScrollInfo instance, and used to 
validate the new settings for the scrollbar.
</p>
<p>
SetParams raises an <var>EInvalidOperation</var> exception if the value in 
AMax is smaller than the value in AMin.
</p>
<p>
The value in <var>APosition</var> is normalized to ensure that it is in the 
range specified by <var>AMin</var> and <var>AMax</var>.
</p>
<p>
<var>APageSize</var> is set to 0 (zero) if it contains a negative value.
</p>
<p>
When any of the parameter values differ from the current values in the class 
instance, the class instance is updated. <var>SetScrollInfo</var> is called 
to apply the changed values when a handle has been allocated for the control. 
<var>SetScrollPos</var> is called when APosition contains a value different 
than the one in the class instance. The <var>Change</var> method is called to 
process the updated values in the control and signal the <var>OnChange</var> 
event handler (when assigned). The <var>SetParams</var> method in the 
widgetset class is called to synchronize the changes.
</p>
<p>
SetParams is called when a new value is assigned to the <var>Position</var>, 
<var>Min</var>, <var>Max</var>, or <var>PageSize</var> property.
</p>
</descr>
<seealso>
<link id="TCustomScrollBar.Position"/>
<link id="TCustomScrollBar.Min"/>
<link id="TCustomScrollBar.Max"/>
<link id="TCustomScrollBar.PageSize"/>
<link id="TCustomScrollBar.Change"/>
<link id="TCustomScrollBar.OnChange"/>
<link id="TScrollInfo"/>
</seealso>
</element>
<element name="TCustomScrollBar.SetParams.APosition">
<short>Value applied to the scrollbar position.</short>
</element>
<element name="TCustomScrollBar.SetParams.AMin">
<short>Value applied to the scrollbar minimum value.</short>
</element>
<element name="TCustomScrollBar.SetParams.AMax">
<short>Value applied to the scrollbar maximum value.</short>
</element>
<element name="TCustomScrollBar.SetParams.APageSize">
<short>Value applied to the scrollbar page size.</short>
</element>

<element name="TCustomScrollBar.Kind">
<short>Contains the scrollbar orientation, horizontal or vertical.</short>
<descr>
<p>
<var>Kind</var> is a <var>TScrollBarKind</var> property which indicates the 
orientation for the scrollbar.
</p>
<p>
Setting a new value for the property causes the <var>Constraints</var> for 
the control to be updated with values from the widgetset class. The widgetset 
class is also notified of the new value for the property. 
<var>SetBounds</var> is called to refresh the <var>Width</var> and 
<var>Height</var> for the control.
</p>
<p>
The default value for the property is <var>sbHorizontal</var>.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.Constraints">TControl.Constraints</link>
<link id="#lcl.controls.TControl.Width">TControl.Width</link>
<link id="#lcl.controls.TControl.Height">TControl.Height</link>
<link id="#lcl.controls.TWinControl.SetBounds">TWinControl.SetBounds</link>
<link id="TScrollBarKind"/>
</seealso>
</element>

<element name="TCustomScrollBar.LargeChange">
<short>The distance to scroll on an click beneath the slider.</short>
<descr>
<p>
A large change is produced by clicks on the blank area above or below the 
slider; it is rather analogous to the Page Down or Page Up functions of the 
Keyboard, and is typically set up to move the slider and the control contents 
by a full page (window size).
</p>
<p>
Use SmallChange for the value applied when the Up or Down arrows are clicked, 
or when one of the cursor keys is pressed to navigate in the associated 
control.
</p>
</descr>
</element>

<element name="TCustomScrollBar.Max">
<short>
The maximum value for the bottom or right position depending on orientation.
</short>
<descr>
<p>
The default value for the property is <b>100</b>. Changing the value for the 
property cause SetParams to be called to apply the values in Position, Min, 
Max, and PageSize to the scrollbar information stored in the widgetset class 
instance.
</p>
</descr>
<seealso>
<link id="TCustomScrollBar.Min"/>
<link id="TCustomScrollBar.Position"/>
<link id="TCustomScrollBar.PageSize"/>
<link id="TCustomScrollBar.SetParams"/>
<link id="#lcl.lcltype.TScrollInfo">TScrollInfo</link>
</seealso>
</element>

<element name="TCustomScrollBar.Min">
<short>
The minimum value for the top or left position depending on orientation.
</short>
<descr>
<p>
The default value for the property is <b>0</b>. Changing the value for the 
property cause SetParams to be called to apply the values in Position, Min, 
Max, and PageSize to the scrollbar information stored in the widgetset class 
instance.
</p>
</descr>
<seealso>
<link id="TCustomScrollBar.Max"/>
<link id="TCustomScrollBar.Position"/>
<link id="TCustomScrollBar.PageSize"/>
<link id="TCustomScrollBar.SetParams"/>
<link id="#lcl.lcltype.TScrollInfo">TScrollInfo</link>
</seealso>
</element>

<element name="TCustomScrollBar.PageSize">
<short>The size of the slider relative to the total scroll range.</short>
<descr>
<p>
PageSize contains the size for the proportionally-sized slider for the 
control.
</p>
<p>
PageSize is used in the CreateWnd method when the initial scrollbar 
information is assigned for the control. It is also one of the arguments 
passed to the SetParams method to update the scrollbar information in the 
widgetset class instance.
</p>
</descr>
<seealso/>
</element>

<element name="TCustomScrollBar.Position">
<short>The position of the slider in the scrollbar.</short>
<descr>
<p>
Position contains a value in the range specified by the Min and Max 
properties. The default value for the property is 0. Changing the value for 
the property causes the SetParams method to be called to apply the values in 
Position, Min, Max, and PageSize to the scrollbar information stored in the 
widgetset class instance.
</p>
</descr>
<seealso>
<link id="TCustomScrollBar.Max"/>
<link id="TCustomScrollBar.Min"/>
<link id="TCustomScrollBar.PageSize"/>
<link id="TCustomScrollBar.SetParams"/>
</seealso>
</element>

<element name="TCustomScrollBar.SmallChange">
<short>
The distance to scroll when the up or down button is clicked.
</short>
<descr>
<p>
A small change occurs when the up or down buttons are clicked, or by up/down 
keyboard commands. It is typically used for scrolling by a few pixels, or by 
a single row or column of text.
</p>
<p>
Use LargeChange for the value applied when clicking the thumb in the 
scrollbar, or when using the Home or End keys to navigate in the associated 
control.
</p>
</descr>
</element>

<element name="TCustomScrollBar.TabStop">
<short>Enables keyboard navigation using the Tab or Shift+Tab keys.</short>
<descr>
<p>
Allows the user to navigate to this control by pressing the Tab or Shift+Tab 
keys. The default value for the property is <b>True</b> in TCustomScrollBar.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.TabStop">TWinControl.TabStop</link>
</seealso>
</element>

<element name="TCustomScrollBar.OnChange">
<short>
Event handler signalled when the value in Position, Min, Max, or PageSize is 
changed.
</short>
<descr>
<p>
<var>OnChange</var> is a <var>TNotifyEvent</var> property which contains an 
event handler signalled when scroll information is updated in the control. 
OnChange is signalled (when assigned) from the Change method, and occurs when 
the value in Position, Min, Max, or PageSize is changed using SetParams.
</p>
<p>
Use the OnScroll event handler to respond to events signalled for control 
messages dispatched to the Scroll method.
</p>
</descr>
<seealso>
<link id="TCustomScrollBar.Position"/>
<link id="TCustomScrollBar.Min"/>
<link id="TCustomScrollBar.Max"/>
<link id="TCustomScrollBar.PageSize"/>
<link id="TCustomScrollBar.Change"/>
<link id="TCustomScrollBar.SetParams"/>
<link id="TCustomScrollBar.OnScroll"/>
</seealso>
</element>

<element name="TCustomScrollBar.OnScroll">
<short>Event handler signalled when scrollbar messages are applied.</short>
<descr>
<p>
<var>OnScroll</var> is a <var>TScrollEvent</var> property which provides an 
event handler signalled when the position for the scrollbar has been changed.
</p>
<p>
<var>Sender</var> contains the scrollbar for the event.
</p>
<p>
<var>ScrollCode</var> contains the scroll command constant for the operation.
</p>
<p>
<var>ScrollPos</var> contains the new position for the scrollbar when the 
operation is completed. The event handler can be used to override the value 
in ScrollPos before it is applied to the Position property in the class 
instance.
</p>
<p>
OnScroll is signalled (when assigned) from the <var>Scroll</var> method, and 
occurs when control messages, like CNHScroll and CNVScroll, are processed and 
applied.
</p>
<p>
Use the <var>OnChange</var> event to respond to programmatic changes to 
property values in the scrollbar.
</p>
</descr>
<seealso>
<link id="TCustomScrollBar.Position"/>
<link id="TCustomScrollBar.Scroll"/>
<link id="TCustomScrollBar.OnChange"/>
<link id="TScrollEvent"/>
</seealso>
</element>

<element name="TScrollBar">
<short>
A control that allows the user to scroll the content in an associated control 
by moving a slider.
</short>
<descr>
<p>
A control that allows the user to scroll the content in a windowed control, 
by moving a slider.
</p>
<p>
TScrollBar appears as a long rectangular track bar, within which a smaller 
contrasting block or slider can move up and down (or from side to side in a 
horizontal ScrollBar). It has small triangular indicators or pointers on one 
or both ends of the bar, depending on the widgetset.
</p>
<p>
Clicking with the mouse on one of the pointers moves the slider a small 
distance (<var>SmallChange</var>) in the specified direction. Clicking with 
the mouse in the blank area of the scrollbar above or below the slider makes 
the slider move by a larger increment (<var>LargeChange</var>).
</p>
<p>
The slider can also be moved by clicking on it with the mouse, and holding 
down the button while moving the mouse. The slider then follows the mouse 
until the button is released.
</p>
<p>
If the mouse has a scrollwheel, the slider also can be moved by rotating the 
wheel.
</p>
<p>
The arrow keys or the Page Up/Page Down keys on the keyboard can be used to 
move the slider, too.
</p>
<p>
The location of the slider along the track is held in the <var>Position</var> 
property. It's the programmer's responsibility to ensure that the content of 
the window is scrolled to the new Position of the scrollbar.
</p>
</descr>
<seealso>
<link id="TCustomScrollBar.OnChange"/>
<link id="HowToUseStdCtrls"/>
</seealso>
</element>

<element name="TScrollBar.Align" link="#lcl.controls.TControl.Align"/>
<element name="TScrollBar.Anchors" link="#lcl.controls.TControl.Anchors"/>
<element name="TScrollBar.BidiMode" link="#lcl.controls.TControl.BiDiMode"/>
<element name="TScrollBar.BorderSpacing" link="#lcl.controls.TControl.BorderSpacing"/>
<element name="TScrollBar.Constraints" link="#lcl.controls.TControl.Constraints"/>
<element name="TScrollBar.DoubleBuffered" link="#lcl.controls.TWinControl.DoubleBuffered"/>
<element name="TScrollBar.DragCursor" link="#lcl.controls.TControl.DragCursor"/>
<element name="TScrollBar.DragKind" link="#lcl.controls.TControl.DragKind"/>
<element name="TScrollBar.DragMode" link="#lcl.controls.TControl.DragMode"/>
<element name="TScrollBar.Enabled" link="#lcl.controls.TControl.Enabled"/>
<element name="TScrollBar.Kind" link="#lcl.stdctrls.TCustomScrollBar.Kind"/>
<element name="TScrollBar.LargeChange" link="#lcl.stdctrls.TCustomScrollBar.LargeChange"/>
<element name="TScrollBar.Max" link="#lcl.stdctrls.TCustomScrollBar.Max"/>
<element name="TScrollBar.Min" link="#lcl.stdctrls.TCustomScrollBar.Min"/>
<element name="TScrollBar.OnChange" link="#lcl.stdctrls.TCustomScrollBar.OnChange"/>
<element name="TScrollBar.OnContextPopup" link="#lcl.controls.TControl.OnContextPopup"/>
<element name="TScrollBar.OnDragDrop" link="#lcl.controls.TControl.OnDragDrop"/>
<element name="TScrollBar.OnDragOver" link="#lcl.controls.TControl.OnDragOver"/>
<element name="TScrollBar.OnEndDrag" link="#lcl.controls.TControl.OnEndDrag"/>
<element name="TScrollBar.OnEnter" link="#lcl.controls.TWinControl.OnEnter"/>
<element name="TScrollBar.OnExit" link="#lcl.controls.TWinControl.OnExit"/>
<element name="TScrollBar.OnKeyDown" link="#lcl.controls.TWinControl.OnKeyDown"/>
<element name="TScrollBar.OnKeyPress" link="#lcl.controls.TWinControl.OnKeyPress"/>
<element name="TScrollBar.OnKeyUp" link="#lcl.controls.TWinControl.OnKeyUp"/>
<element name="TScrollBar.OnScroll" link="#lcl.stdctrls.TCustomScrollBar.OnScroll"/>
<element name="TScrollBar.OnStartDrag" link="#lcl.controls.TControl.OnStartDrag"/>
<element name="TScrollBar.OnUTF8KeyPress" link="#lcl.controls.TWinControl.OnUTF8KeyPress"/>
<element name="TScrollBar.PageSize" link="#lcl.stdctrls.TCustomScrollBar.PageSize"/>
<element name="TScrollBar.ParentBidiMode" link="#lcl.controls.TControl.ParentBiDiMode"/>
<element name="TScrollBar.ParentDoubleBuffered" link="#lcl.controls.TWinControl.ParentDoubleBuffered"/>
<element name="TScrollBar.ParentShowHint" link="#lcl.controls.TControl.ParentShowHint"/>
<element name="TScrollBar.PopupMenu" link="#lcl.controls.TControl.PopupMenu"/>
<element name="TScrollBar.Position" link="#lcl.stdctrls.TCustomScrollBar.Position"/>
<element name="TScrollBar.ShowHint" link="#lcl.controls.TControl.ShowHint"/>
<element name="TScrollBar.SmallChange" link="#lcl.stdctrls.TCustomScrollBar.SmallChange"/>
<element name="TScrollBar.TabOrder" link="#lcl.controls.TWinControl.TabOrder"/>
<element name="TScrollBar.TabStop" link="#lcl.stdctrls.TCustomScrollBar.TabStop"/>
<element name="TScrollBar.Visible" link="#lcl.controls.TControl.Visible"/>

<element name="TCustomGroupBox">
<short>
The base class for <var>TGroupBox</var>, <var>TRadioGroup</var> and 
<var>TCheckGroup</var>.
</short>
<descr>
<p>
<var>TCustomGroupBox</var> is a visual component used to organize related 
controls into a group. It acts a container. TCustomGroupBox is the base class 
for <var>TGroupBox</var>, <var>TRadioGroup</var> and <var>TCheckGroup</var>. 
Do not create instances of TCustomGroupBox; use one of the descendent classes.
</p>
</descr>
<seealso>
<link id="TGroupBox"/>
<link id="#lcl.extctrls.TRadioGroup">TRadioGroup</link>
<link id="#lcl.extctrls.TCheckGroup">TCheckGroup</link>
</seealso>
</element>

<element name="TCustomGroupBox.WSRegisterClass" link="#lcl.lclclasses.TLCLComponent.WSRegisterClass"/>

<element name="TCustomGroupBox.GetControlClassDefaultSize" link="#lcl.controls.TControl.GetControlClassDefaultSize"/>
<element name="TCustomGroupBox.GetControlClassDefaultSize.Result">
<short>Default size for new instances of the class.</short>
</element>

<element name="TCustomGroupBox.UpdateOpaque">
<short>Updates the control style when the parent background is used.</short>
<descr>
<p>
<var>UpdateOpaque</var> is a method used to update the control style flags 
when the parent background is used for the control. When the 
<var>ParentBackground</var> property is set to <b>True</b>, 
<var>ControlStyle</var> is updated to remove the <var>csOpaque</var> flag. If 
ParentBackground is not enabled, ControlStyle is updated to include the 
csOpaque flag.
</p>
</descr>
<seealso>
<link id="TCustomGroupBox.ParentBackground"/>
</seealso>
</element>

<element name="TCustomGroupBox.CreateParams">
<short>Ensures that creation parameters are updated for the control.</short>
<descr>
<p>
<var>CreateParams</var> is overridden in <var>TCustomGroupBox</var> to ensure 
that the <var>Style</var> information in <var>Params</var> is updated to 
include the value <var>BS_GROUPBOX</var>.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.CreateParams">TWinControl.CreateParams</link>
<link id="#lcl.lcltype.TCreateParams">TCreateParams</link>
<link id="#lcl.lcltype.BS_GROUPBOX">BS_GROUPBOX</link>
</seealso>
</element>
<element name="TCustomGroupBox.CreateParams.Params">
<short>Creation parameters updated in the method.</short>
</element>

<element name="TCustomGroupBox.SetColor">
<short>Sets the value for the Color property.</short>
<descr>
<p>
<var>SetColor</var> is a method used to set the value in the <var>Color</var> 
property. It calls the inherited method on entry.
</p>
<p>
When the value for the Color property is set to <var>clDefault</var>, or has 
the same value as the Color property in <var>Parent</var>, no additional 
actions are performed in the method. Otherwise, the value in ParentBackground 
is set to <b>False</b>.
</p>
</descr>
<seealso>
<link id="TCustomGroupBox.ParentBackground"/>
<link id="#lcl.controls.TControl.Color">TControl.Color</link>
</seealso>
</element>
<element name="TCustomGroupBox.SetColor.Value">
<short>New value for the Color property.</short>
</element>

<element name="TCustomGroupBox.SetParentBackground">
<short>Sets the value for the ParentBackground property.</short>
<descr>
<p>
<var>SetParentBackground</var> is an overridden method in 
<var>TCustomGroupBox</var> used to set the value for the 
<var>ParentBackground</var> property. It calls the inherited method on entry.
</p>
<p>
When the property value is set to <b>True</b> and <var>ParentColor</var> is 
enabled, the Color property in the <var>Parent</var> control is assigned to 
the Color property for the group box. Otherwise, <var>clDefault</var> is 
assigned to the <var>Color</var> property.
</p>
<p>
SetParentBackground calls the <var>UpdateOpaque</var> method to ensure that 
the ControlStyle flags for the control reflect the transparency needed to 
draw the parent background.
</p>
</descr>
<seealso>
<link id="TCustomGroupBox.SetParentBackground"/>
<link id="TCustomGroupBox.UpdateOpaque"/>
<link id="#lcl.controls.TControl.ParentColor">TControl.ParentColor</link>
<link id="#lcl.controls.TControl.Parent">TControl.Parent</link>
<link id="#lcl.graphics.clDefault">clDefault</link>
</seealso>
</element>
<element name="TCustomGroupBox.SetParentBackground.AParentBackground">
<short>New value for the ParentBackground property.</short>
</element>

<element name="TCustomGroupBox.CMParentColorChanged">
<short>Handles the CM_PARENTCOLORCHANGED message for the control.</short>
<descr>
<p>
Calls the inherited method on entry to update the value in the 
<var>Color</var> property. Calls <var>UpdateOpaque</var> to adjust the 
control style flags when the parent color is applied.
</p>
</descr>
<seealso>
<link id="TCustomGroupBox.UpdateOpaque"/>
<link id="#lcl.controls.TControl.ParentColor">TControl.ParentColor</link>
<link id="#lcl.controls.TControl.CMParentColorChanged">TControl.CMParentColorChanged</link>
</seealso>
</element>
<element name="TCustomGroupBox.CMParentColorChanged.Message">
<short>Control message handled in the method.</short>
</element>

<element name="TCustomGroupBox.Create">
<short>Constructor for the class instance.</short>
<descr>
<p>
<var>Create</var> is the overridden constructor for the class instance. It 
calls the inherited constructor on entry to the method. Create ensures that 
the component style is set to the value <var>csGroupBox</var>, and includes 
the value <var>csAcceptsControls</var> in the <var>ControlStyle</var> 
property. Create calls <var>SetInitialBounds</var> to resize the control 
using the values returned from <var>GetControlClassDefaultSize</var>.
</p>
</descr>
<seealso>
<link id="TCustomGroupBox.GetControlClassDefaultSize"/>
<link id="#lcl.controls.TControl.ControlStyle">TControl.ControlStyle</link>
<link id="#lcl.controls.TControl.SetInitialBounds">TControl.SetInitialBounds</link>
</seealso>
</element>
<element name="TCustomGroupBox.Create.AOwner">
<short>Owner of the class instance.</short>
</element>

<element name="TCustomGroupBox.ParentBackground">
<short>Indicates if the control uses the background from the parent.</short>
<descr>
<p>
The write access specifier is overridden in <var>TCustomGroupBox</var>. It 
calls the inherited method on entry.
</p>
<p>
If <var>AParentBackground</var> is <b>True</b> and ParentColor is 
<b>True</b>, the <var>Color</var> from the <var>Parent</var> control is 
assigned to the <var>Color</var> property. Otherwise, the value 
<var>clDefault</var> is stored in the Color property.
</p>
<p>
The <var>UpdateOpaque</var> method is called to adjust the control style 
flags in the control.
</p>
<p>
The default value for the property is <b>True</b>.
</p>
</descr>
<seealso>
<link id="TCustomGroupBox.UpdateOpaque"/>
<link id="#lcl.controls.TControl.ParentBackground">TControl.ParentBackground</link>
</seealso>
</element>

<element name="TGroupBox">
<short>
A container that allows a number of objects to be grouped physically and 
conceptually on a form.
</short>
<descr>
<p>
<var>TGroupBox</var> is a <var>TCustomGroupBox</var> descendant which 
implements a visual component used to organize related controls into a group. 
It acts as a container for controls added to the component, and is assigned 
as the parent for each control.
</p>
<p>
TGroupBox sets the visibility for properties defined in ancestor classes.
</p>
</descr>
<seealso>
<link id="HowToUseStdCtrls"/>
<link id="TCustomGroupBox"/>
</seealso>
</element>

<element name="TGroupBox.Align" link="#lcl.controls.TControl.Align"/>
<element name="TGroupBox.Anchors" link="#lcl.controls.TControl.Anchors"/>
<element name="TGroupBox.AutoSize" link="#lcl.controls.TControl.AutoSize"/>
<element name="TGroupBox.BidiMode" link="#lcl.controls.TControl.BiDiMode"/>
<element name="TGroupBox.BorderSpacing" link="#lcl.controls.TControl.BorderSpacing"/>
<element name="TGroupBox.Caption" link="#lcl.controls.TControl.Caption"/>
<element name="TGroupBox.ChildSizing" link="#lcl.controls.TWinControl.ChildSizing"/>
<element name="TGroupBox.ClientHeight" link="#lcl.controls.TControl.ClientHeight"/>
<element name="TGroupBox.ClientWidth" link="#lcl.controls.TControl.ClientWidth"/>
<element name="TGroupBox.Color" link="#lcl.controls.TControl.Color"/>
<element name="TGroupBox.Constraints" link="#lcl.controls.TControl.Constraints"/>
<element name="TGroupBox.Ctl3D" link="#lcl.controls.TControl.Ctl3D"/>
<element name="TGroupBox.DockSite" link="#lcl.controls.TWinControl.DockSite"/>
<element name="TGroupBox.DoubleBuffered" link="#lcl.controls.TWinControl.DoubleBuffered"/>
<element name="TGroupBox.DragCursor" link="#lcl.controls.TControl.DragCursor"/>
<element name="TGroupBox.DragKind" link="#lcl.controls.TControl.DragKind"/>
<element name="TGroupBox.DragMode" link="#lcl.controls.TControl.DragMode"/>
<element name="TGroupBox.Enabled" link="#lcl.controls.TControl.Enabled"/>
<element name="TGroupBox.Font" link="#lcl.controls.TControl.Font"/>
<element name="TGroupBox.ParentBackground" link="#lcl.stdctrls.TCustomGroupBox.ParentBackground"/>
<element name="TGroupBox.ParentDoubleBuffered" link="#lcl.controls.TWinControl.ParentDoubleBuffered"/>
<element name="TGroupBox.OnChangeBounds" link="#lcl.controls.TControl.OnChangeBounds"/>
<element name="TGroupBox.OnClick" link="#lcl.controls.TControl.OnClick"/>
<element name="TGroupBox.OnContextPopup" link="#lcl.controls.TControl.OnContextPopup"/>
<element name="TGroupBox.OnDblClick" link="#lcl.controls.TControl.OnDblClick"/>
<element name="TGroupBox.OnDragDrop" link="#lcl.controls.TControl.OnDragDrop"/>
<element name="TGroupBox.OnDockDrop" link="#lcl.controls.TWinControl.OnDockDrop"/>
<element name="TGroupBox.OnDockOver" link="#lcl.controls.TWinControl.OnDockOver"/>
<element name="TGroupBox.OnDragOver" link="#lcl.controls.TControl.OnDragOver"/>
<element name="TGroupBox.OnEndDock" link="#lcl.controls.TControl.OnEndDock"/>
<element name="TGroupBox.OnEndDrag" link="#lcl.controls.TControl.OnEndDrag"/>
<element name="TGroupBox.OnEnter" link="#lcl.controls.TWinControl.OnEnter"/>
<element name="TGroupBox.OnExit" link="#lcl.controls.TWinControl.OnExit"/>
<element name="TGroupBox.OnGetSiteInfo" link="#lcl.controls.TWinControl.OnGetSiteInfo"/>
<element name="TGroupBox.OnKeyDown" link="#lcl.controls.TWinControl.OnKeyDown"/>
<element name="TGroupBox.OnKeyPress" link="#lcl.controls.TWinControl.OnKeyPress"/>
<element name="TGroupBox.OnKeyUp" link="#lcl.controls.TWinControl.OnKeyUp"/>
<element name="TGroupBox.OnMouseDown" link="#lcl.controls.TControl.OnMouseDown"/>
<element name="TGroupBox.OnMouseEnter" link="#lcl.controls.TControl.OnMouseEnter"/>
<element name="TGroupBox.OnMouseLeave" link="#lcl.controls.TControl.OnMouseLeave"/>
<element name="TGroupBox.OnMouseMove" link="#lcl.controls.TControl.OnMouseMove"/>
<element name="TGroupBox.OnMouseUp" link="#lcl.controls.TControl.OnMouseUp"/>
<element name="TGroupBox.OnMouseWheel" link="#lcl.controls.TControl.OnMouseWheel"/>
<element name="TGroupBox.OnMouseWheelDown" link="#lcl.controls.TControl.OnMouseWheelDown"/>
<element name="TGroupBox.OnMouseWheelUp" link="#lcl.controls.TControl.OnMouseWheelUp"/>
<element name="TGroupBox.OnResize" link="#lcl.controls.TControl.OnResize"/>
<element name="TGroupBox.OnStartDock" link="#lcl.controls.TControl.OnStartDock"/>
<element name="TGroupBox.OnStartDrag" link="#lcl.controls.TControl.OnStartDrag"/>
<element name="TGroupBox.OnUnDock" link="#lcl.controls.TWinControl.OnUnDock"/>
<element name="TGroupBox.OnUTF8KeyPress" link="#lcl.controls.TWinControl.OnUTF8KeyPress"/>
<element name="TGroupBox.ParentBidiMode" link="#lcl.controls.TControl.ParentBiDiMode"/>
<element name="TGroupBox.ParentColor" link="#lcl.controls.TControl.ParentColor"/>
<element name="TGroupBox.ParentCtl3D" link="#lcl.controls.TWinControl.ParentCtl3D"/>
<element name="TGroupBox.ParentFont" link="#lcl.controls.TControl.ParentFont"/>
<element name="TGroupBox.ParentShowHint" link="#lcl.controls.TControl.ParentShowHint"/>
<element name="TGroupBox.PopupMenu" link="#lcl.controls.TControl.PopupMenu"/>
<element name="TGroupBox.ShowHint" link="#lcl.controls.TControl.ShowHint"/>
<element name="TGroupBox.TabOrder" link="#lcl.controls.TWinControl.TabOrder"/>
<element name="TGroupBox.TabStop" link="#lcl.controls.TWinControl.TabStop"/>
<element name="TGroupBox.Visible" link="#lcl.controls.TControl.Visible"/>

<element name="TEmulatedTextHintStatus">
<short>Status values for an emulated TextHint display in a control.</short>
<descr>
<p>
<var>TEmulatedTextHintStatus</var> is an enumerated type with values which 
indicate the status for an emulated TextHint display in a control. 
TEmulatedTextHintStatus is the type used for the 
<var>EmulatedTextHintStatus</var> property in both <var>TCustomComboBox</var> 
and <var>TCustomEdit</var>.
</p>
</descr>
<seealso>
<link id="TCustomEdit.EmulatedTextHintStatus"/>
<link id="TCustomComboBox.EmulatedTextHintStatus"/>
</seealso>
</element>
<element name="TEmulatedTextHintStatus.thsHidden">
<short>An emulated TextHint not currently displayed for the control.</short>
</element>
<element name="TEmulatedTextHintStatus.thsShowing">
<short>
An emulated TextHint is currently being shown for the control. The value for 
control has been temporarily set to the value in TextHint.
</short>
</element>
<element name="TEmulatedTextHintStatus.thsChanging">
<short>
The emulated TextHint is being displayed. Occurs while the HintFont is being 
created, and the hint text value and password character are passed to the 
widgetset class. Changes to thsShowing when the actions have been completed.
</short>
</element>

<element name="TComboBoxAutoCompleteTextOption">
<short>
Defines the behavior of the <var>AutoComplete</var> feature in a combo-box 
control.
</short>
<descr>
<p>
<var>TComboBoxAutoCompleteTextOption</var> is an enumerated type with values 
which control the auto-completion features and behaviors in combo-box 
controls. Values from the enumeration are stored in the 
<var>TComboBoxAutoCompleteText</var> type used in the 
<var>AutoCompleteText</var> property in <var>TCustomComboBox</var> and 
descendent classes.
</p>
</descr>
<seealso>
<link id="TComboBoxAutoCompleteText"/>
<link id="TCustomComboBox.AutoCompleteText"/>
</seealso>
</element>
<element name="TComboBoxAutoCompleteTextOption.cbactEnabled">
<short>Enable Auto-Completion features.</short>
</element>
<element name="TComboBoxAutoCompleteTextOption.cbactEndOfLineComplete">
<short>
Perform Auto-Complete only when cursor is at the end of the string.
</short>
</element>
<element name="TComboBoxAutoCompleteTextOption.cbactRetainPrefixCase">
<short>
Retains the case of characters user has typed. This option has no effect if 
cbactEndOfLineComplete is not set.
</short>
</element>
<element name="TComboBoxAutoCompleteTextOption.cbactSearchCaseSensitive">
<short>Search for the completion string with case sensitivity.</short>
</element>
<element name="TComboBoxAutoCompleteTextOption.cbactSearchAscending">
<short>
Search completion strings in ascending order when set. Otherwise, search in 
descending order.
</short>
</element>

<element name="TComboBoxAutoCompleteText">
<short>Set of <var>TComboBoxAutoCompleteTextOption</var> values.</short>
<descr>
<p>
<var>TComboBoxAutoCompleteText</var> is a set type used to store zero (0) or 
more values from the <var>TComboBoxAutoCompleteTextOption</var> enumeration. 
TComboBoxAutoCompleteText is the type used to implement the 
<var>AutoCompleteText</var> property in <var>TCustomComboBox</var> and 
descendent classes. It is also the type used for the 
<var>DefaultComboBoxAutoCompleteText</var> constant which defines the default 
values used in combo-box controls.
</p>
</descr>
<seealso>
<link id="TComboBoxAutoCompleteTextOption"/>
<link id="TCustomComboBox.AutoCompleteText"/>
<link id="DefaultComboBoxAutoCompleteText"/>
</seealso>
</element>

<element name="DefaultComboBoxAutoCompleteText">
<short>
Default values for the AutoCompleteText property in combo-box controls.
</short>
<descr>
<p>
<var>DefaultComboBoxAutoCompleteText</var> is a constant which contains the 
set of default values used in the <var>AutoCompleteText</var> property in 
combo-box controls. DefaultComboBoxAutoCompleteText is assigned to the 
property in the constructor for the class instance.
</p>
<p>
DefaultComboBoxAutoCompleteText contains the following values from the 
<var>TComboBoxAutoCompleteTextOption</var> enumeration:
</p>
<ul>
<li>cbactEndOfLineComplete</li>
<li>cbactSearchAscending</li>
</ul>
</descr>
<seealso>
<link id="TComboBoxAutoCompleteTextOption"/>
<link id="TCustomComboBox.AutoCompleteText"/>
<link id="TCustomComboBox.Create"/>
</seealso>
</element>

<element name="TComboBoxStyle">
<short>The display style available for combo-box controls.</short>
<descr>
<p>
<var>TComboBoxStyle</var> is an enumerated type with values which control the 
display style for combo-box controls. TComboBoxStyle is the type used for the 
<var>Style</var> property in <var>TCustomComboBox</var> and descendent 
classes.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Style"/>
</seealso>
</element>
<element name="TComboBoxStyle.csDropDown">
<short>
The combo-box has an edit control and a button to open and close the 
drop-down list. This is the default value used for the control.
</short>
</element>
<element name="TComboBoxStyle.csSimple">
<short>
The combo-box has an edit control and a list box which is always visible.
</short>
</element>
<element name="TComboBoxStyle.csDropDownList">
<short>
The combo-box has a drop-down list for selecting an entry. The selected value 
is displayed like a label and is not editable.
</short>
</element>
<element name="TComboBoxStyle.csOwnerDrawFixed">
<short>
Similar to csDropDownList, but is owner-drawn with a fixed height for items 
in the list.
</short>
</element>
<element name="TComboBoxStyle.csOwnerDrawVariable">
<short>
The drop-down list elements are owner-drawn and can have a variable height 
for items in the list.
</short>
</element>

<element name="TComboBoxStyleHelper">
<short>Helper for the TComboBoxStyle type.</short>
<descr>
<p>
<var>TComboBoxStyleHelper</var> is a type helper for 
<var>TComboBoxStyle</var>. TComboBoxStyleHelper provides convenience methods 
used to examine, adjust, or translate values in the TComboBoxStyle 
enumeration.
</p>
<p>
For example:
</p>
<code>
// does the style include an edit box?
if AComboBox.Style.HasEditBox then DoSomething;

// does the style use owner-draw?
if AComboBox.Style.IsOwnerDrawn then DoSomething;

// does the style use variable height items?
if AComboBox.Style.IsVariable then DoSomething;

// toggle the edit box visibility and use in the current style
AComboBox.Style := AComboBox.Style.SetEditBox(False);
</code>
</descr>
<seealso>
<link id="TCustomComboBox.Style"/>
<link id="TComboBoxStyle"/>
</seealso>
</element>

<element name="TComboBoxStyleHelper.HasEditBox">
<short>Determines if the style includes an edit box.</short>
<descr/>
<seealso/>
</element>
<element name="TComboBoxStyleHelper.HasEditBox.Result">
<short><b>True</b> if an selected item value is editable.</short>
</element>

<element name="TComboBoxStyleHelper.SetEditBox">
<short>Enables or disables an edit box according to the current style.</short>
<descr/>
<seealso/>
</element>
<element name="TComboBoxStyleHelper.SetEditBox.Result">
<short>Style values after adding or removing the edit box.</short>
</element>
<element name="TComboBoxStyleHelper.SetEditBox.AHasEditBox">
<short>
<b>True</b> enables the edit box; <b>False</b> disables the edit box.
</short>
</element>

<element name="TComboBoxStyleHelper.IsOwnerDrawn">
<short>Indicates if the combo-box control is owner-drawn.</short>
<descr/>
<seealso/>
</element>
<element name="TComboBoxStyleHelper.IsOwnerDrawn.Result">
<short><b>True</b> if the style includes an owner-drawn option.</short>
</element>

<element name="TComboBoxStyleHelper.IsVariable">
<short>
Indicates if list items can have a variable height in the combo-box control.
</short>
<descr/>
<seealso/>
</element>
<element name="TComboBoxStyleHelper.IsVariable.Result">
<short>
<b>True</b> when the option is included for variable height list items.
</short>
</element>

<element name="TOwnerDrawState">
<short>Alias for the TOwnerDrawState type in <file>lcltype.pp</file>.</short>
<descr>
<p>
<var>TOwnerDrawState</var> instances are passed as an argument to methods 
which draw list items in controls, like <var>TCustomComboBox.DrawItem</var> 
and <var>TCustomListBox.DrawItem</var>.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.DrawItem"/>
<link id="TCustomListBox.DrawItem"/>
<link id="#lcl.lcltype.TOwnerDrawState">TOwnerDrawState</link>
</seealso>
</element>

<element name="TDrawItemEvent">
<short>
Specifies an event handler used to paint a single item in an owner-drawn list 
box or combo-box.
</short>
<descr>
<p>
<var>TDrawItemEvent</var> is an object procedure type which specifies an 
event handler signalled to paint an single item in a owner-drawn list box or 
combo-box control. Arguments passed to the event handler identify the 
control, the index for the list item, the canvas coordinates, and the drawing 
state for the operation. The event handler is responsible for rendering the 
list item to its control in its entirety when the control uses owner-drawn 
style settings.
</p>
<p>
TDrawItemEvent is the type used to implement the <var>OnDrawItem</var> 
property in <var>TCustomComboBox</var> and <var>TCustomListBox</var>. An 
application must implement and assign an object procedure using the signature 
for the handler to respond to the event notification.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.OnDrawItem"/>
<link id="TCustomListBox.OnDrawItem"/>
</seealso>
</element>
<element name="TDrawItemEvent.Control">
<short>The control for the owner-drawn operation.</short>
</element>
<element name="TDrawItemEvent.Index">
<short>Index of the list item to draw.</short>
</element>
<element name="TDrawItemEvent.ARect">
<short>The Canvas rectangle for the list item.</short>
</element>
<element name="TDrawItemEvent.State">
<short>Flags describing the drawing state for the list item.</short>
</element>

<element name="TMeasureItemEvent">
<short>
Specifies an event handler used to get the Height for a single item in an 
owner-drawn list box or combo-box.
</short>
<descr>
<p>
<var>TMeasureItemEvent</var> is an object procedure type which specifies an 
event handler signalled to get the height for a single item in an owner-drawn 
list box or combo-box control. Arguments passed to the handler include the 
control for the event notification, the index position for the item measured 
in the handler, and the derived height for the item.
</p>
<p>
TMeasureItemEvent is the type used for the <var>OnMeasureItem</var> property 
in <var>TCustomComboBox</var> and <var>TCustomListBox</var>. An application 
must implement and assign a procedure using the signature for the handler to 
respond to the event notification. The handler should account for variable 
height items when enabled in settings for the control.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.OnMeasureItem"/>
<link id="TCustomListBox.OnMeasureItem"/>
</seealso>
</element>
<element name="TMeasureItemEvent.Control">
<short>The list box or combo-box control.</short>
</element>
<element name="TMeasureItemEvent.Index">
<short>Index of the list item to measure.</short>
</element>
<element name="TMeasureItemEvent.AHeight">
<short>Height of the list item in pixels.</short>
</element>

<element name="TCustomComboBox">
<short>
The base class for combo-box components.
</short>
<descr>
<p>
<var>TCustomComboBox</var> is a <var>TWinControl</var> descendant which 
implements the base class for combo-box components in the LCL (Lazarus 
Component Library).
</p>
<p>
A combo-box is visually represented as an edit control and a scrollable list 
of items which can be selected. The list can always be visible, or opened 
when needed using a drop-down indicator. In addition, the items displayed on 
the control be drawn using using the built-in mechanisms for the widgetset 
class or using an owner-drawn style.
</p>
<p>
Despite similarities in appearance to <var>TCustomEdit</var> and 
<var>TCustomList</var>, the class inherits no properties from these classes 
(Delphi compatible).
</p>
<p>
Use <var>Items</var> to access the entries displayed in the drop-down list. 
Use <var>AddItem</var> or <var>AddHistoryItem</var> to add entries to the list 
of items. Use <var>OnGetItems</var> to dynamically populate the Items in the 
control when the drop-down list is displayed.
</p>
<p>
The selectable values in <var>Items</var> can be maintained at design-time by 
clicking on the ellipsis character (<b>...</b>) displayed next to Items in the 
Object Inspector.
</p>
<p>
The <var>Text</var> property reflects the text entered directly into the edit 
box, or selected either manually or by auto-completion from the Items in the 
list. At run-time, the entry selected from the list replaces the text in the 
edit box, and <var>ItemIndex</var> holds the (zero-based) index number of the 
selected item. If no value is selected from the drop-down list, the default 
text (if any) remains for any information typed directly into the control 
Text, and ItemIndex takes the value of -1.
</p>
<p>
Use <var>Style</var> to control the display style and drawing mechanism 
enabled for the drop-down list on the control.
</p>
<p>
Use <var>AutoDropDown</var>, <var>AutoComplete</var>, 
<var>AutoCompleteText</var>, and <var>AutoDropDown</var> to control the
behavior of the edit box and its interaction with the drop-down list on the 
control.
</p>
<p>
Use <var>ItemHeight</var> and <var>ItemWidth</var> to control the appearance 
for the Items displayed on the drop-down list.
</p>
<p>
Do not create instances of TCustomComboBox. Use one of the descendent 
classes, like <var>TComboBox</var> or <var>TComboBoxEx</var>.
</p>
<remark>
The Height property in TCustomComboBox / TComboBox cannot be changed for some 
platforms, including Windows and macOS. It is best to set AutoSize to 
<b>True</b> to ensure consistent size handling on the supported platforms.
</remark>
<remark>
Changing the value in BorderStyle to bsNone has no effect for the Windows 
widgetset. It is not possible to remove the border on the Windows platform.
</remark>
</descr>
<seealso>
<link id="TComboBox"/>
<link id="TWinControl"/>
<link id="#lcl.comboex.TComboBoxEx">TComboBoxEx</link>
</seealso>
</element>

<element name="TCustomComboBox.FArrowKeysTraverseList"/>
<element name="TCustomComboBox.FAutoCompleteText"/>
<element name="TCustomComboBox.FAutoSelect"/>
<element name="TCustomComboBox.FAutoSelected"/>
<element name="TCustomComboBox.FAutoDropDown"/>
<element name="TCustomComboBox.FCanvas"/>
<element name="TCustomComboBox.FCharCase"/>
<element name="TCustomComboBox.FDropDownCount"/>
<element name="TCustomComboBox.FDroppedDown"/>
<element name="TCustomComboBox.FEditingDone"/>
<element name="TCustomComboBox.FEmulatedTextHintStatus"/>
<element name="TCustomComboBox.FItemHeight"/>
<element name="TCustomComboBox.FItemIndex"/>
<element name="TCustomComboBox.FItemWidth"/>
<element name="TCustomComboBox.FItems"/>
<element name="TCustomComboBox.FMaxLength"/>
<element name="TCustomComboBox.FOnChange"/>
<element name="TCustomComboBox.FOnCloseUp"/>
<element name="TCustomComboBox.FOnDrawItem"/>
<element name="TCustomComboBox.FOnDropDown"/>
<element name="TCustomComboBox.FOnGetItems"/>
<element name="TCustomComboBox.FOnMeasureItem"/>
<element name="TCustomComboBox.FOnSelect"/>
<element name="TCustomComboBox.FReadOnly"/>

<element name="TCustomComboBox.FReturnArrowState">
<short>
Used internally, to return the state of arrow keys from temporary change.
</short>
</element>

<element name="TCustomComboBox.FSelLength"/>
<element name="TCustomComboBox.FSelStart"/>
<element name="TCustomComboBox.FSorted"/>
<element name="TCustomComboBox.FStyle"/>
<element name="TCustomComboBox.FTextHint"/>

<element name="TCustomComboBox.GetAutoComplete">
<short>Gets the value for the AutoComplete property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.AutoComplete"/>
</seealso>
</element>
<element name="TCustomComboBox.GetAutoComplete.Result">
<short>Value for the AutoComplete property.</short>
</element>

<element name="TCustomComboBox.GetDroppedDown">
<short>Gets the value for the DroppedDown property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.DroppedDown"/>
</seealso>
</element>
<element name="TCustomComboBox.GetDroppedDown.Result">
<short>Value for the DroppedDown property.</short>
</element>

<element name="TCustomComboBox.GetItemWidth">
<short>Gets the value for the ItemWidth property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.ItemWidth"/>
</seealso>
</element>
<element name="TCustomComboBox.GetItemWidth.Result">
<short>Value for the ItemWidth property.</short>
</element>

<element name="TCustomComboBox.SetAutoComplete">
<short>Sets the value for the AutoComplete property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.AutoComplete"/>
</seealso>
</element>
<element name="TCustomComboBox.SetAutoComplete.AValue">
<short>New value for the AutoComplete property.</short>
</element>

<element name="TCustomComboBox.SetArrowKeysTraverseList">
<short>Sets the value for the ArrowKeysTraverseList property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.ArrowKeysTraverseList"/>
</seealso>
</element>
<element name="TCustomComboBox.SetArrowKeysTraverseList.Value">
<short>New value for the ArrowKeysTraverseList property.</short>
</element>

<element name="TCustomComboBox.SetItemWidth">
<short>Sets the value for the ItemWidth property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.ItemWidth"/>
</seealso>
</element>
<element name="TCustomComboBox.SetItemWidth.AValue">
<short>New value for the ItemWidth property.</short>
</element>

<element name="TCustomComboBox.SetCharCase">
<short>Sets the value for the CharCase property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.CharCase"/>
</seealso>
</element>
<element name="TCustomComboBox.SetCharCase.eccCharCase">
<short>New value for the CharCase property.</short>
</element>

<element name="TCustomComboBox.SetReadOnly">
<short>Sets the value for the ReadOnly property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.ReadOnly"/>
</seealso>
</element>
<element name="TCustomComboBox.SetReadOnly.AValue">
<short>New value for the ReadOnly property.</short>
</element>

<element name="TCustomComboBox.SetTextHint">
<short>Sets the value for the TextHint property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.TextHint"/>
</seealso>
</element>
<element name="TCustomComboBox.SetTextHint.AValue">
<short>New value for the TextHint property.</short>
</element>

<element name="TCustomComboBox.ShowEmulatedTextHintIfYouCan">
<short>Tries to display an emulated TextHint for the control.</short>
<descr>
<p>
<var>ShowEmulatedTextHintIfYouCan</var> is a method which attempts to display 
an emulated <var>TextHint</var> for the control. ShowEmulatedTextHintIfYouCan 
calls <var>CanShowEmulatedTextHint</var> to determine if the control requires 
an emulated TextHint display, and is in a state which allows it. If 
CanShowEmulatedTextHint returns <b>True</b>, the 
<var>ShowEmulatedTextHint</var> method is called to display the TextHint.
</p>
<p>
ShowEmulatedTextHintIfYouCan is called from the implementation of the 
<var>InitializeWnd</var> and <var>WMKillFocus</var> methods, and when a new 
value is assigned to the TextHint property.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.TextHint"/>
<link id="TCustomComboBox.CanShowEmulatedTextHint"/>
<link id="TCustomComboBox.ShowEmulatedTextHint"/>
<link id="TCustomComboBox.WMKillFocus"/>
<link id="TCustomComboBox.InitializeWnd"/>
</seealso>
</element>

<element name="TCustomComboBox.ShowEmulatedTextHint">
<short>Displays an emulated TextHint for the control.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.TextHint"/>
<link id="TCustomComboBox.Text"/>
<link id="TCustomComboBox.EmulatedTextHintStatus"/>
<link id="#lcl.controls.TControl.Font">TControl.Font</link>
</seealso>
</element>

<element name="TCustomComboBox.HideEmulatedTextHint">
<short>Hides an emulated TextHint display for the control.</short>
<descr/>
<seealso/>
</element>

<element name="TCustomComboBox.UpdateItemIndex">
<short>
Updates the value in ItemIndex when the value at the position does not match 
the specified value.
</short>
<descr>
<p>
Called when the editable value in Text is stored for the control, including 
when a key up event causes the auto-completed text to be updated for the 
control.
</p>	
</descr>
<version>
Added in LCL version 4.0.
</version>
<seealso>
<link id="TCustomComboBox.RealSetText"/>
<link id="TCustomComboBox.KeyUp"/>
</seealso>
</element>
<element name="TCustomComboBox.UpdateItemIndex.AValue">
<short>
Value compared to the existing value stored at ItemIndex, and applied to the 
Text for the control.
</short>
</element>
<element name="TCustomComboBox.UpdateItemIndex.Result">
<p>
Returns <b>True</b> if the position where the specified value is stored was 
different than the position in ItemIndex.
</p>
</element>

<element name="TCustomComboBox.UpdateSorted">
<short>Performs actions needed when the Sorted property is changed.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.Sorted"/>
</seealso>
</element>

<element name="TCustomComboBox.LMDrawListItem">
<short>Handler for custom drawing an item; calls DrawItem.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomComboBox.LMDrawListItem.TheMessage">
<short>Message handled in the method.</short>
</element>

<element name="TCustomComboBox.LMMeasureItem">
<short>
Determines the height of an item using MeasureItem in variable owner-draw 
mode.
</short>
<descr/>
<seealso/>
</element>
<element name="TCustomComboBox.LMMeasureItem.TheMessage">
<short>Message handled in the method.</short>
</element>

<element name="TCustomComboBox.LMSelChange">
<short>Handles selection change messages for the control.</short>
<descr>
<p>
<var>LMSelChange</var> is a method used to handle a <var>LM_CHANGED</var> 
message for the control. No actions are performed in the method during 
component streaming, when the control is freed, or at design-time.
</p>
<p>
<var>LMSelChange</var> calls the <var>Select</var> method to signal the 
<var>OnSelect</var> event handler (when assigned).
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Select"/>
<link id="TCustomComboBox.OnSelect"/>
</seealso>
</element>
<element name="TCustomComboBox.LMSelChange.TheMessage">
<short>Message handled in the method.</short>
</element>

<element name="TCustomComboBox.CNCommand">
<short>Handles a CN_COMMAND notification message for the control.</short>
<descr>
<p>
<var>CNCommand</var> is a method used to handle a <var>CN_COMMAND</var> 
control notification message for the control. CNCommand examines 
<var>TheMessage</var> to determine the actions needed for the NotifyCode in 
the message.
</p>
<p>
When NotifyCode is <var>CBN_DROPDOWN</var>, the following actions are 
performed:
</p>
<ul>
<li>DroppedDown is set to <b>True</b>.</li>
<li>Calls DropDown to signal the OnDropDown event handler (when 
assigned).</li>
<li>Calls AdjustDropDown to configure the height and width for the drop down 
list.</li>
</ul>
<p>
When NotifyCode is <var>CBN_CLOSEUP</var>, the following actions are 
performed:
</p>
<ul>
<li>DroppedDown is set to <b>False</b>.</li>
<li>Calls CloseUp to signal the OnCloseUp event handler (when assigned).</li>
</ul>
</descr>
<seealso/>
</element>
<element name="TCustomComboBox.CNCommand.TheMessage">
<short>Message handled in the method.</short>
</element>

<element name="TCustomComboBox.WMChar">
<short>Handles LM_CHAR window messages for the control.</short>
<descr>
<p>
Prevents ordinary characters from triggering the accelerator key for the 
control.
</p>
</descr>
<seealso/>
</element>
<element name="TCustomComboBox.WMChar.Message">
<short>Message handled in the method.</short>
</element>

<element name="TCustomComboBox.WMKillFocus">
<short>Implements a handler for the LM_KILLFOCUS message.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomComboBox.WMKillFocus.Message">
<short>Message handled in the method.</short>
</element>

<element name="TCustomComboBox.WMSetFocus">
<short>Implements a handler for the LM_SETFOCUS message.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomComboBox.WMSetFocus.Message">
<short>Message handled in the method.</short>
</element>

<element name="TCustomComboBox.WSRegisterClass" link="#lcl.lclclasses.TLCLComponent.WSRegisterClass"/>

<element name="TCustomComboBox.CanShowEmulatedTextHint">
<short>
Indicates whether an emulated TextHint can be displayed for the control.
</short>
<descr>
<p>
<var>CanShowEmulatedTextHint</var> is a <var>Boolean</var> function which 
indicates whether an emulated text hint can be displayed for the control. 
Emulated text hints are the fallback mechanism used when text hints are not 
natively supported for a platform / widgetset.
</p>
<p>
The return value is <b>True</b> when <b>all</b> of the following conditions 
are met:
</p>
<ul>
<li>A Handle has been allocated for the widgetset class instance.</li>
<li>Text hints are not natively supported as an LCL capability for the 
platform.</li>
<li>The ComponentState property does not contain csDesigning or 
csLoading.</li>
<li>TextHint is not an empty string value.</li>
<li>Text is an empty string value.</li>
<li>The control is not Focused.</li>
</ul>
<p>
CanShowEmulatedTextHint is called during execution of the InitializeWnd 
method, when the LM_KILLFOCUS window message is handled for the control, and 
when a new value is assigned to the TextHint property.
</p>
</descr>
<seealso/>
</element>
<element name="TCustomComboBox.CanShowEmulatedTextHint.Result">
<short>
<b>True</b> when emulated TextHints are used, and the control state allows 
the hint display.
</short>
</element>

<element name="TCustomComboBox.CreateParams">
<short>
Updates the specified creation parameters to include additional flags for the 
control.
</short>
<descr>
<p>
<var>CreateParams</var> is an overridden method in 
<var>TCustomComboBox</var>, and calls the inherited method on entry. 
CreateParams ensures that the style information in <var>Params</var> is 
updated to include constants needed to represent values in the 
<var>Style</var> property for the control. The following constants are also 
included:
</p>
<ul>
<li>WS_VSCROLL</li>
<li>CBS_AUTOHSCROLL</li>
<li>CBS_HASSTRINGS</li>
</ul>
<p>
When <var>Sorted</var> is set to <b>True</b>, the value CBS_SORT is also 
included in the style information in Params.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Style"/>
<link id="TCustomComboBox.Sorted"/>
<link id="#lcl.controls.TWinControl.CreateParams">TWinControl.CreateParams</link>
</seealso>
</element>
<element name="TCustomComboBox.CreateParams.Params">
<short>Creation parameters updated in the method.</short>
</element>

<element name="TCustomComboBox.InitializeWnd">
<short>
Synchronizes the control and its widgetset class instance when the handle is 
created.
</short>
<descr>
<p>
<var>InitializeWnd</var> is overridden in <b>TCustomComboBox</b> to ensure 
that the widgetset class and the current class instance are synchronized. 
InitializeWnd calls the inherited method on entry.
</p>
<p>
InitializeWnd gets the string values for list items stored in the widgetset 
class instance (when present), and applies them to the <var>Items</var> 
property. The <var>Sorted</var> property in the control is applied to the list 
items provided by the widget.
</p>
<p>
Other property values are forwarded <b>to</b> the widgetset class 
instance, including:
</p>
<ul>
<li>ArrowKeysTraverseList</li>
<li>DropDownCount</li>
<li>ItemIndex</li>
<li>MaxLength</li>
<li>ReadOnly</li>
<li>Style</li>
</ul>
<p>
Values in <var>SelStart</var> and <var>SelLength</var> are re-applied to 
update the edit box in the control to reflect any changes to property values.
</p>
<p>
InitializeWnd is called from CreateWnd after the Window handle has been 
allocated, and before any child handles are allocated.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Items"/>
<link id="TCustomComboBox.ItemIndex"/>
<link id="TCustomComboBox.Style"/>
<link id="TCustomComboBox.ReadOnly"/>
<link id="TCustomComboBox.MaxLength"/>
<link id="TCustomComboBox.DropDownCount"/>
<link id="TCustomComboBox.ArrowKeysTraverseList"/>
<link id="#lcl.controls.TWinControl.InitializeWnd">TWinControl.InitializeWnd</link>
<link id="#lcl.controls.TWinControl.CreateWnd">TWinControl.CreateWnd</link>
</seealso>
</element>

<element name="TCustomComboBox.DestroyWnd">
<short>Destroys the handle for the control (and its children).</short>
<descr>
<p>
<var>DestroyWnd</var> is an overridden method in TCustomComboBox used to 
destroy the handle for the windowed control. This occurs when the control is 
freed, and when the handle is re-created in the widgetset class. DestroyWnd 
ensures that values for the ItemIndex and Items properties are retrieved from 
the widgetset class before it is destroyed or re-created. The value in Sorted 
is applied to the Items retrieved from the widgetset class.
</p>
<p>
DestroyWnd calls the inherited method prior to exit.
</p>
</descr>
<errors>
DestroyWnd calls <var>RaiseGDBException</var> to raise a catchable debugger 
exception if a handle has not been allocated for the control.
</errors>
<seealso>
<link id="TCustomComboBox.ItemIndex"/>
<link id="TCustomComboBox.Items"/>
<link id="TCustomComboBox.Sorted"/>
<link id="#lcl.controls.TWinControl.DestroyWnd">TWinControl.DestroyWnd</link>
<link id="#lcl.lclproc.RaiseGDBException">RaiseGDBException</link>
</seealso>
</element>

<element name="TCustomComboBox.DoAutoCompleteSelect">
<short>
Selects an item in the control when auto-complete is enabled and activated by 
a key event.
</short>
<descr>
<p>
Calls the <var>Select</var> method to signal the <var>OnSelect</var> event 
handler (when assigned). DoAutoCompleteSelect is called from the 
<var>KeyUp</var> method when auto-completion has enabled in the 
<var>AutoCompleteText</var> property, and an alphanumeric key is handled in 
the method.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.AutoCompleteText"/>
<link id="TCustomComboBox.KeyUp"/>
<link id="TCustomComboBox.OnSelect"/>
<link id="TCustomComboBox.Select"/>
</seealso>
</element>

<element name="TCustomComboBox.DoEnter">
<short>Updates the control when the Enter key is applied.</short>
<descr>
<p>
<var>DoEnter</var> is an overridden method used to update the edit and list 
box when the <b>Enter</b> or <b>Return</b> key is handled in messages to the 
control. The inherited method is called to signal the <var>OnEnter</var> 
event handler (when assigned).
</p>
<p>
DoEnter uses the value in <var>Style</var> to determine if an edit box is 
enabled for the control. If an edit box is <b>not</b> used, no additional 
actions are performed in the method.
</p>
<p>
When <var>AutoSelect</var> is enabled, the <var>SelectAll</var> method is 
called to select the text in the edit box and to locate the entry in the 
<var>Items</var> for the control. <var>AutoSelected</var> is updated to 
indicate if <var>SelText</var> matches the value in Text.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.AutoSelect"/>
<link id="TCustomComboBox.AutoSelected"/>
<link id="TCustomComboBox.Items"/>
<link id="TCustomComboBox.SelectAll"/>
<link id="TCustomComboBox.SelText"/>
<link id="TCustomComboBox.Style"/>
<link id="TCustomComboBox.Text"/>
<link id="#lcl.controls.TWinControl.DoEnter">TWinControl.DoEnter</link>
<link id="#lcl.controls.TWinControl.OnEnter">TWinControl.OnEnter</link>
</seealso>
</element>

<element name="TCustomComboBox.DoExit">
<short>
Updates the control when the CM_EXIT control message is handled.
</short>
<descr>
<p>
<var>DoExit</var> is an overridden method in <var>TCustomComboBox</var> used 
to perform actions needed when the <b>CM_EXIT</b> control message is handled 
for the control. DoExit sets the value in <var>AutoSelected</var> to 
<b>False</b>, and calls the inherited method to signal the <var>OnExit</var> 
event handler (when assigned).
</p>
</descr>
<seealso>
<link id="TCustomComboBox.AutoSelected"/>
<link id="#lcl.controls.TWinControl.DoExit">TWinControl.DoExit</link>
<link id="#lcl.controls.TWinControl.OnExit">TWinControl.OnExit</link>
</seealso>
</element>

<element name="TCustomComboBox.DrawItem">
<short>
Draws a list item, using the OnDrawItem handler (when assigned).
</short>
<descr>
<p>
<var>DrawItem</var> is a procedure used to draw a list item defined in the 
<var>Items</var> property. DrawItem is called when the 
<var>LM_DrawListItem</var> message is handled for the control. Arguments 
passed to the method include the position in Items for the value drawn, the 
canvas rectangle where the drawing occurs, and the drawing state for the list 
item.
</p>
<p>
DrawItem signals the <link id="TCustomComboBox.OnDrawItem">OnDrawItem</link> 
handler (when assigned) to perform the drawing operation. Otherwise, default 
painting is performed by filling the background for the Canvas rectangle (if 
needed) and calling the InternalDrawItem routine.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.OnDrawItem"/>
<link id="TDrawItemEvent"/>
<link id="TOwnerDrawState"/>
<link id="#rtl.types.TRect">TRect</link>
</seealso>
</element>
<element name="TCustomComboBox.DrawItem.Index">
<short>The position for the item drawn in the method.</short>
</element>
<element name="TCustomComboBox.DrawItem.ARect">
<short>The area to paint on the Canvas.</short>
</element>
<element name="TCustomComboBox.DrawItem.State">
<short>The drawing state for the item (selected...).</short>
</element>

<element name="TCustomComboBox.KeyUpAfterInterface">
<short>Handles key up events forwarded from the LCL interface.</short>
<descr>
<p>
<var>KeyUpAfterInterface</var> is an overridden method in 
<var>TCustomComboBox</var>. It ensures that the EditingDone method is called 
when a <var>VK_RETURN</var> Key code is received from the LCL interface. The 
internal edit completion flag is reset prior to exiting from the method.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.EditingDone">TControl.EditingDone</link>
<link id="#lcl.controls.TControl.OnEditingDone">TControl.OnEditingDone</link>
</seealso>
</element>
<element name="TCustomComboBox.KeyUpAfterInterface.Key">
<short>Key code examined in the method.</short>
</element>
<element name="TCustomComboBox.KeyUpAfterInterface.Shift">
<short>Shift, Ctrl, or Alt modifier for the key code.</short>
</element>

<element name="TCustomComboBox.MeasureItem">
<short>Gets the height for an item in the drop-down list.</short>
<descr>
<p>
<var>MeasureItem</var> is a procedure used to get the height for an item in 
the drop-down list for the control.
</p>
<p>
MeasureItem is called when the <b>LM_MeasureItem</b> message is handled for 
the control. The value in <var>ItemHeight</var> has already been updated in 
the message handler, and is used for a list box <var>Style</var> that has a 
fixed item height. MeasureItem is called from the message handler when the 
Style uses a variable item height. The derived item height is stored in the 
<var>ItemHeight</var> property when it is a non-zero positive value.
</p>
<p>
MeasureItem signals the <var>OnMeasureItem</var> event handler (when 
assigned) to calculate the height for the specified item. The value in the 
<var>Index</var> argument determines the string value in <var>Items</var> 
used for the calculation. <var>TheHeight</var> is updated with the derived 
height for the list box item. An application must implement the OnMeasureItem 
event handler to calculate the height for variable height items in the 
control.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.OnMeasureItem"/>
<link id="TCustomComboBox.ItemWidth"/>
<link id="TCustomComboBox.ItemHeight"/>
<link id="TCustomComboBox.Style"/>
<link id="#lcl.lmessages.TLMMeasureItem">TLMMeasureItem</link>
</seealso>
</element>
<element name="TCustomComboBox.MeasureItem.Index">
<short>The index of the item whose height is required.</short>
</element>
<element name="TCustomComboBox.MeasureItem.TheHeight">
<short>
The height of the item, in pixels, calculated in the OnMeasureItem handler.
</short>
</element>

<element name="TCustomComboBox.GetControlClassDefaultSize" link="#lcl.controls.TControl.GetControlClassDefaultSize"/>
<element name="TCustomComboBox.GetControlClassDefaultSize.Result">
<short>Default size (bounds) for the new class instance.</short>
</element>

<element name="TCustomComboBox.LMChanged">
<short>Handles the LM_CHANGED message for the control.</short>
<descr>
<p>
<var>LMChanged</var> is a procedure used to handle a <b>LM_CHANGED</b> 
message received for the control. LMChanged occurs when the widgetset class 
calls the LCLSendChangeMsg routine for the control. LMChanged calls the 
<var>Change</var> method to perform the control message and to signal the 
<var>OnChange</var> event handler (when assigned).
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Change"/>
<link id="TCustomComboBox.OnChange"/>
<link id="#lcl.controls.TControl.Perform">TControl.Perform</link>
</seealso>
</element>
<element name="TCustomComboBox.LMChanged.Msg">
<short>Message handled in the method.</short>
</element>

<element name="TCustomComboBox.CMWantSpecialKey">
<short>Handles the CM_WANTSPECIALKEY control message for the control.</short>
<descr>
<p>
For the Darwin (macOS) platform, cursor keys (VK_LEFT, VK_RIGHT, VK_UP, 
VK_DOWN) in Message are marked as handled for edit controls.
</p>
<p>
The inherited method is called (for all platforms) prior to exiting from the 
method.
</p>
</descr>
<seealso/>
</element>
<element name="TCustomComboBox.CMWantSpecialKey.Message">
<short>Message handled in the method.</short>
</element>

<element name="TCustomComboBox.Change">
<short>
Signals the OnChange event handler when the value for the control is changed.
</short>
<descr>
<p>
<var>Change</var> is a procedure used to perform actions needed when the 
value for the control is changed. Change is called from the 
<var>LMChanged</var> method used to process the change notification message.
Change calls the <var>Changed</var> method, inherited from TControl, to 
<var>Perform</var> the control message. The <var>OnChange</var> event handler 
is signalled (when assigned).
</p>
</descr>
<seealso>
<link id="TCustomComboBox.LMChanged"/>
<link id="TCustomComboBox.OnChange"/>
<link id="#lcl.controls.TControl.Changed">TControl.Changed</link>
<link id="#lcl.controls.TControl.Perform">TControl.Perform</link>
</seealso>
</element>

<element name="TCustomComboBox.Select">
<short>
Signals the <var>OnSelect</var> event handler when ItemIndex is changed.
</short>
<descr>
<p>
<var>Select</var> is a procedure called when the item selection in the 
drop-down list for the control has changed. This can happen when text is 
entered and auto-completion is enabled, or when a new value is selected from 
the drop-down list.
</p>
<p>
Select signals the <var>OnSelect</var> event handler (when assigned). For 
Delphi compatibility, the event handler is <b>not</b> signalled when 
<var>ItemIndex</var> contains <b>-1</b> (<var>Text</var> is not located in 
the <var>Items</var> for the control).
</p>
</descr>
<seealso>
<link id="TCustomComboBox.OnSelect"/>
<link id="TCustomComboBox.Items"/>
<link id="TCustomComboBox.ItemIndex"/>
<link id="TCustomComboBox.AutoComplete"/>
<link id="TCustomComboBox.AutoCompleteText"/>
<link id="TCustomComboBox.Text"/>
<link id="TCustomComboBox.SelText"/>
<link id="TCustomComboBox.SelStart"/>
<link id="TCustomComboBox.SelLength"/>
</seealso>
</element>

<element name="TCustomComboBox.DropDown">
<short>Signals the <var>OnDropDown</var> event handler.</short>
<descr>
<p>
<var>DropDown</var> is a procedure called whenever the drop-down list is 
displayed. DropDown is called when a <b>CN_Command</b> message with a 
<b>CBN_DROPDOWN</b> notification code is handled for the control. DropDown 
signals the <var>OnDropDown</var> event handler (when assigned).
</p>
<p>
Use <var>DroppedDown</var> to determine if the drop-down list has been 
displayed.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.CloseUp"/>
<link id="TCustomComboBox.DroppedDown"/>
<link id="TCustomComboBox.OnDropDown"/>
</seealso>
</element>

<element name="TCustomComboBox.GetItems">
<short>Signals the <var>OnGetItems</var> event handler.</short>
<descr>
<p>
<var>GetItems</var> is a procedure used to dynamically populate the values 
stored in the <var>Items</var> property. GetItems signals the 
<var>OnGetItems</var> event handler (when assigned) to perform actions needed 
to fill the Items property. GetItems is called from the 
<var>IntfGetItems</var> method executed when the widgetset class makes its 
drop-down list visible.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Items"/>
<link id="TCustomComboBox.OnGetItems"/>
<link id="TCustomComboBox.IntfGetItems"/>
</seealso>
</element>

<element name="TCustomComboBox.SetItems">
<short>Sets the value for the Items property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.Items"/>
</seealso>
</element>
<element name="TCustomComboBox.SetItems.Value">
<short>New value for the Items property.</short>
</element>

<element name="TCustomComboBox.CloseUp">
<short>Called when the drop-down list is closed.</short>
<descr>
<p>
<var>CloseUp</var> is a method called whenever the drop-down list for the 
control is closed. CloseUp is called when a <b>CN_Command</b> message with a 
<b>CBN_CLOSEUP</b> notification code is received in the control.
</p>
<p>
CloseUp does not perform any actions in the method at design-time, when the 
component is being loaded using LCL streaming, or when the control is freed.
</p>
<p>
CloseUp signals the <var>OnEditingDone</var> event handler when an edit box 
is enabled in the <var>Style</var> property in the control. The 
<var>OnCloseUp</var> event handler is signalled (when assigned).
</p>
<p>
When <var>AutoSelect</var> is enabled, the <var>SelectAll</var> method is 
called and the <var>AutoSelected</var> property is updated.
</p>
</descr>
<seealso>
<link id="TComboBox.OnEditingDone"/>
<link id="TCustomComboBox.OnCloseUp"/>
<link id="TCustomComboBox.DroppedDown"/>
<link id="TCustomComboBox.DropDown"/>
<link id="TCustomComboBox.Style"/>
<link id="TCustomComboBox.SelectAll"/>
<link id="TCustomComboBox.AutoSelect"/>
<link id="TCustomComboBox.AutoSelected"/>
</seealso>
</element>

<element name="TCustomComboBox.AdjustDropDown">
<short>Adjusts the extent for the drop-down list.</short>
<descr>
<p>
<var>AdjustDropDown</var> is used to adjust the bounds for the drop-list list 
in the control. AdjustDropDown is called when the drop-list becomes visible, 
and when the value in the <var>ItemWidth</var> property is changed.
</p>
<p>
AdjustDropDown does not perform any actions in the method if a handle has not 
been assigned for the control.
</p>
<p>
AdjustDropDown ensures that the value in <var>DropDownCount</var> is applied 
(when needed) to the drop-down list for the control. The minimum height and 
width for the list is calculated using the <var>ItemWidth</var> and 
<var>ItemHeight</var> properties. The dimensions are passed to the widgetset 
class using the SetComboMinDropDownSize routine in the LCL interface.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.ItemWidth"/>
<link id="TCustomComboBox.ItemHeight"/>
<link id="TCustomComboBox.Items"/>
<link id="TCustomComboBox.DropDownCount"/>
<link id="TCustomComboBox.DropDown"/>
</seealso>
</element>

<element name="TCustomComboBox.DoAutoAdjustLayout">
<short>
Performs actions needed to auto-adjust the control using the specified layout 
policy.
</short>
<descr>
<p>
<var>DoAutoAdjustLayout</var> is an overridden method used to apply an 
auto-adjust layout policy to the control. DoAutoAdjustLayout calls the 
inherited method on entry.
</p>
<p>
DoAutoAdjustLayout ensures that the item height for the control is scaled 
using the factor in <var>AYProportion</var> when <var>AMode</var> contains 
the <var>lapAutoAdjustWithoutHorizontalScrolling</var> or 
<var>lapAutoAdjustForDPI</var> layout adjustment policy values.
</p>
<p>
DoAutoAdjustLayout is called from the <var>AutoAdjustLayout</var> method.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.DoAutoAdjustLayout">TControl.DoAutoAdjustLayout</link>
<link id="#lcl.controls.TLayoutAdjustmentPolicy">TLayoutAdjustmentPolicy</link>
</seealso>
</element>
<element name="TCustomComboBox.DoAutoAdjustLayout.AMode">
<short>Layout adjustment policy applied in the method.</short>
</element>
<element name="TCustomComboBox.DoAutoAdjustLayout.AXProportion">
<short>Factor used to scale horizontal dimensions.</short>
</element>
<element name="TCustomComboBox.DoAutoAdjustLayout.AYProportion">
<short>Factor used to scale vertical dimensions.</short>
</element>

<element name="TCustomComboBox.GetItemCount">
<short>Returns the number of items defined in the drop-down list.</short>
<descr>
<p>
<var>GetItemCount</var> is an <var>Integer</var> function used to get the 
number of values stored in the <var>Items</var> for the control. It is a 
convenience method, and is equivalent to reading the value for the 
<var>Count</var> property in <var>Items</var>.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Items"/>
</seealso>
</element>
<element name="TCustomComboBox.GetItemCount.Result">
<short>The number of Items defined in the control.</short>
</element>

<element name="TCustomComboBox.GetItemHeight">
<short>Gets the value for the ItemHeight property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.ItemHeight"/>
</seealso>
</element>
<element name="TCustomComboBox.GetItemHeight.Result">
<short>Value for the property.</short>
</element>

<element name="TCustomComboBox.GetSelLength">
<short>Gets the value for the SelLength property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.SelLength"/>
</seealso>
</element>
<element name="TCustomComboBox.GetSelLength.Result">
<short>Value for the property.</short>
</element>

<element name="TCustomComboBox.GetSelStart">
<short>Gets the value for the SelStart property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.SelStart"/>
</seealso>
</element>
<element name="TCustomComboBox.GetSelStart.Result">
<short>Value for the property.</short>
</element>

<element name="TCustomComboBox.GetSelText">
<short>Gets the value for the SelText property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.SelText"/>
</seealso>
</element>
<element name="TCustomComboBox.GetSelText.Result">
<short>Value for the property.</short>
</element>

<element name="TCustomComboBox.GetItemIndex">
<short>Gets the value for the ItemIndex property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.ItemIndex"/>
</seealso>
</element>
<element name="TCustomComboBox.GetItemIndex.Result">
<short>Value for the property.</short>
</element>

<element name="TCustomComboBox.GetMaxLength">
<short>Gets the value for the MaxLength property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.MaxLength"/>
</seealso>
</element>
<element name="TCustomComboBox.GetMaxLength.Result">
<short>Value for the property.</short>
</element>

<element name="TCustomComboBox.SetDropDownCount">
<short>Sets the value for the DropDownCount property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.DropDownCount"/>
</seealso>
</element>
<element name="TCustomComboBox.SetDropDownCount.AValue">
<short>New value for the DropDOwnCount property.</short>
</element>

<element name="TCustomComboBox.SetDroppedDown">
<short>Sets the value for the DroppedDown property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.DroppedDown"/>
</seealso>
</element>
<element name="TCustomComboBox.SetDroppedDown.AValue">
<short>New value for the DroppedDown property.</short>
</element>

<element name="TCustomComboBox.SetItemHeight">
<short>Sets the value for the ItemHeight property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.ItemHeight"/>
</seealso>
</element>
<element name="TCustomComboBox.SetItemHeight.AValue">
<short>New value for the ItemHeight property.</short>
</element>

<element name="TCustomComboBox.SetItemIndex">
<short>Sets the value for the ItemIndex property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.ItemIndex"/>
</seealso>
</element>
<element name="TCustomComboBox.SetItemIndex.Val">
<short>New value for the ItemIndex property.</short>
</element>

<element name="TCustomComboBox.SetMaxLength">
<short>Sets the value for the MaxLength property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.MaxLength"/>
</seealso>
</element>
<element name="TCustomComboBox.SetMaxLength.AValue">
<short>New value for the MaxLength property.</short>
</element>

<element name="TCustomComboBox.SetSelLength">
<short>Sets the value for the SelLength property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.SelLength"/>
</seealso>
</element>
<element name="TCustomComboBox.SetSelLength.Val">
<short>New value for the SelLength property.</short>
</element>

<element name="TCustomComboBox.SetSelStart">
<short>Sets the value for the SelStart property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.SelStart"/>
</seealso>
</element>
<element name="TCustomComboBox.SetSelStart.Val">
<short>New value for the SelStart property.</short>
</element>

<element name="TCustomComboBox.SetSelText">
<short>Sets the value for the SelText property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.SelText"/>
</seealso>
</element>
<element name="TCustomComboBox.SetSelText.Val">
<short>New value for the SelText property.</short>
</element>

<element name="TCustomComboBox.SetSorted">
<short>Sets the value for the Sorted property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.Sorted"/>
</seealso>
</element>
<element name="TCustomComboBox.SetSorted.Val">
<short>New value for the Sorted property.</short>
</element>

<element name="TCustomComboBox.SetStyle">
<short>Sets the value for the Style property.</short>
<descr/>
<seealso>
<link id="TCustomComboBox.Style"/>
</seealso>
</element>
<element name="TCustomComboBox.SetStyle.Val">
<short>New value for the Style property.</short>
</element>

<element name="TCustomComboBox.RealGetText">
<short>Gets the text/caption for the control.</short>
<descr>
<p>
<var>RealGetText</var> is an overridden method in <var>TCustomComboBox</var> 
which provides additional debugging support in the method. RealGetText 
ensures that a handle has been allocated for the control and the value in 
Text is available in the widgetset class prior to calling the inherited 
method.
</p>
<p>
The return value contains the Caption assigned to the control, or an empty 
string ('') when the control handle is not available.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.RealGetText">TWinControl.RealGetText</link>
</seealso>
</element>
<element name="TCustomComboBox.RealGetText.Result">
<short>Caption for the control, or an empty string.</short>
</element>

<element name="TCustomComboBox.RealSetText">
<short>
Updates ItemIndex when the new value for the control is updated.
</short>
<descr>
<p>
<var>RealSetText</var> is an overridden method in <var>TCustomComboBox</var>. 
It ensures that <var>ItemIndex</var> is updated with the ordinal position in 
<var>Items</var> where the <var>AValue</var> argument is found. The value in 
ItemIndex is determined by locating the specified value using the case 
sensitivity and search order settings in the AutoCompleteText. If there are no 
values stored in Items, or AValue is not stored there, ItemIndex is set to 
<b>-1</b>.
</p>
<p>
A visible emulated <var>TextHint</var> is hidden when AValue is not an empty 
string ('').
</p>
<p>
The inherited method is called prior to exit. This causes the widgetset class 
to be updated when its <var>Handle</var> is valid. The value in 
<var>Caption</var> is also updated, and a <b>CM_TEXTCHANGED</b> control 
message is performed for the control.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.ItemIndex"/>
<link id="TCustomComboBox.Items"/>
<link id="TCustomComboBox.MatchListItem"/>
<link id="TCustomComboBox.AutoCompleteText"/>
<link id="TCustomComboBox.RealGetText"/>
<link id="TCustomComboBox.RealGetText"/>
<link id="#lcl.controls.TWinControl.RealSetText">TWinControl.RealSetText</link>
<link id="#lcl.controls.TWinControl.RealGetText">TWinControl.RealGetText</link>
</seealso>
</element>
<element name="TCustomComboBox.RealSetText.AValue">
<short>The new value for the control.</short>
</element>

<element name="TCustomComboBox.KeyDown">
<short>Filters keys used to traverse the list.</short>
<descr>
<p>
<var>KeyDown</var> is an overridden method in <var>TCustomComboBox</var>. 
KeyDown ensures that keys like Escape, Tab, and Return are handled in the 
manner needed for the <var>Style</var> in the control. If the values in 
<var>Key</var> and <var>Shift</var> are not specifically handled in the 
method, the inherited KeyDown method is called.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Style"/>
<link id="TCustomComboBox.AutoDropDown"/>
<link id="TCustomComboBox.ArrowKeysTraverseList"/>
<link id="#lcl.controls.TWinControl.KeyDown">TWinControl.KeyDown</link>
</seealso>
</element>
<element name="TCustomComboBox.KeyDown.Key">
<short>The pressed key.</short>
</element>
<element name="TCustomComboBox.KeyDown.Shift">
<short>The state of the modifier keys and mouse buttons.</short>
</element>

<element name="TCustomComboBox.KeyUp">
<short>
Handles AutoComplete and AutoSelect for the control.
</short>
<descr>
<p>
<var>KeyUp</var> is an overridden method in TCustomComboBox, and calls the 
inherited method on entry.
</p>
<p>
KeyUp ensures that the <b>VK_RETURN</b> key code causes <var>SelectAll</var> 
to be called when <var>AutoCompletion</var> or <var>AutoSelect</var> is 
enabled for the control. <var>AutoSelected</var> is set to <b>True</b> when 
the values in <var>SelText</var> and <var>Text</var> are the same.
</p>
<p>
In addition, alphanumeric key codes are used to perform AutoComplete text 
location using the options enabled in the <var>AutoCompleteText</var> 
property. The values in <var>Text</var>, <var>SelStart</var>, and 
<var>SelLength</var> are updated (when needed) and the <var>Select</var> 
method is called to reflect the operation. If the key causes the 
auto-completed text to differ from the value in Text, ItemIndex is updated to 
reflect the auto-completed text value.
</p>
<p>
KeyUp is called when <var>TLMKeyUp</var> control messages are processed in 
the handlers for the control.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.AutoSelect"/>
<link id="TCustomComboBox.AutoSelected"/>
<link id="TCustomComboBox.AutoComplete"/>
<link id="TCustomComboBox.AutoCompleteText"/>
<link id="TCustomComboBox.Text"/>
<link id="TCustomComboBox.SelText"/>
<link id="TCustomComboBox.SelStart"/>
<link id="TCustomComboBox.SelLength"/>
<link id="TCustomComboBox.Select"/>
<link id="TCustomComboBox.ItemIndex"/>
<link id="#lcl.controls.TWinControl.KeyUp">TWinControl.KeyUp</link>
</seealso>
</element>
<element name="TCustomComboBox.KeyUp.Key">
<short>Virtual key code examined in the method.</short>
</element>
<element name="TCustomComboBox.KeyUp.Shift">
<short>Shift, Alt, or Ctrl modifier for the key code.</short>
</element>

<element name="TCustomComboBox.UTF8KeyPress">
<short>
<var>UTF8KeyPress</var> converts character case if required then calls the 
inherited method.
</short>
<descr>
<p>
<var>UTF8KeyPress</var> is an overridden method, and calls the inherited 
method on entry. The inherited method emulates a UTF-8-encoded keypress. The 
UTF-8 encoding should be used when there is the possibility that input/output 
will occur in any language that requires multiple bytes to represent each 
character, i.e. all languages except English.
</p>
<p>
UTF8KeyPress uses the value in <var>CharCase</var> to determine if the 
character case for <var>UTF8Key</var> is converted:
</p>
<dl>
<dt>ecNormalCase</dt>
<dd>No conversion is required.</dd>
<dt>ecLowerCase</dt>
<dd>Calls UTF8LowerCase to convert the value in UTF8Key.</dd>
<dt>ecUpperCase</dt>
<dd>Calls UTF8UpperCase to convert the value in UTF8Key.</dd>
</dl>
</descr>
<seealso>
<link id="TCustomComboBox.CharCase"/>
<link id="#lazutils.lazutf8.UTF8LowerCase">UTF8LowerCase</link>
<link id="#lazutils.lazutf8.UTF8UpperCase">UTF8UpperCase</link>
<link id="#lcl.controls.TWinControl.UTF8KeyPress">TWinControl.UTF8KeyPress</link>
</seealso>
</element>
<element name="TCustomComboBox.UTF8KeyPress.UTF8Key">
<short>UTF-8-encoded character examined in the method.</short>
</element>

<element name="TCustomComboBox.MouseUp">
<short>
Highlights the selected text in the control when the left mouse button is 
released.
</short>
<descr>
<p>
<var>MouseUp</var> is an overridden method, and calls the inherited method on 
entry. MouseUp ensures that the selected text in the control is highlighted 
when the Left mouse button is released and <var>AutoSelect</var> is enabled. 
MouseUp calls <var>SelectAll</var> to select the value in the <var>Text</var> 
property in the edit box for the control. The value in 
<var>AutoSelected</var> is set to <b>True</b>.
</p>
<p>
No selection is performed in the method when AutoSelect is set to 
<b>False</b>.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.AutoSelect"/>
<link id="TCustomComboBox.AutoSelected"/>
<link id="TCustomComboBox.SelectAll"/>
<link id="TCustomComboBox.Text"/>
<link id="TCustomComboBox.SelText"/>
<link id="TCustomComboBox.SelStart"/>
<link id="TCustomComboBox.SelLength"/>
<link id="#lcl.controls.TControl.MouseUp">TControl.MouseUp</link>
</seealso>
</element>
<element name="TCustomComboBox.MouseUp.Button">
<short>Mouse button for the notification.</short>
</element>
<element name="TCustomComboBox.MouseUp.Shift">
<short>Shift, Alt, or Ctrl modifier for the notification.</short>
</element>
<element name="TCustomComboBox.MouseUp.X">
<short>Horizontal coordinate for the mouse pointer.</short>
</element>
<element name="TCustomComboBox.MouseUp.Y">
<short>Vertical coordinate for the mouse pointer.</short>
</element>

<element name="TCustomComboBox.SelectItem">
<short>Selects the list item with the specified text.</short>
<descr>
<p>
<var>SelectItem</var> is a <var>Boolean</var> function used to select the 
list item in the control with the value specified in <var>AnItem</var>. The 
return value is <b>True</b> when the <var>Items</var> property contains an 
entry with the value in <var>AnItem</var>.
</p>
<p>
The value in <var>ItemIndex</var> is updated with the ordinal position in 
Items for the specified value, or <b>-1</b> when AnItem does not exist in 
Items. When the value in ItemIndex is changed, the <var>Click</var> and 
<var>Select</var> methods are called to refresh the control display and to 
signal the <var>OnClick</var> and <var>OnSelect</var> event handlers.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Items"/>
<link id="TCustomComboBox.ItemIndex"/>
<link id="TCustomComboBox.Select"/>
<link id="TCustomComboBox.OnSelect"/>
<link id="#lcl.controls.TControl.Click">TControl.Click</link>
<link id="#lcl.controls.TControl.OnClick">TControl.OnClick</link>
</seealso>
</element>
<element name="TCustomComboBox.SelectItem.Result">
<short><b>True</b> when a matching item was found and selected.</short>
</element>
<element name="TCustomComboBox.SelectItem.AnItem">
<short>The text to find in Items.</short>
</element>

<element name="TCustomComboBox.ShouldAutoAdjust">
<short>
Indicates if the width and/or height for the control can be adjusted by a 
layout policy.
</short>
<descr>
<p>
<var>ShouldAutoAdjust</var> is an overridden method in 
<var>TCustomComboBox</var>. It sets the values in the <var>AWidth</var> and 
<var>AHeight</var> parameters to indicate if the control can adjust the 
bound(s) when a layout policy is applied to the control. <b>True</b> 
indicates the value for the property can be adjusted.
</p>
<p>
ShouldAutoAdjust is used in the implementation of the 
<var>DoAutoAdjustLayout</var> method.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.DoAutoAdjustLayout"/>
<link id="#lcl.controls.TControl.ShouldAutoAdjust">TControl.ShouldAutoAdjust</link>
</seealso>
</element>
<element name="TCustomComboBox.ShouldAutoAdjust.AWidth">
<short>Always set to <b>True</b> in the method.</short>
</element>
<element name="TCustomComboBox.ShouldAutoAdjust.AHeight">
<short><b>True</b> when AutoSize is not enabled for the control.</short>
</element>

<element name="TCustomComboBox.ItemHeight">
<short>The default height of an item in the drop-down for the control.</short>
<descr>
<p>
<var>ItemHeight</var> is an Integer property which contains the height (in 
pixels) used when drawing an item in the drop-down list.
</p>
<p>
The value for the property is retrieved from the widgetset class when not 
already assigned in the class instance, or when using an owner-drawn 
<var>Style</var>. Setting a new value for ItemHeight calls the 
<var>SetItemHeight</var> method in the widgetset class for owner-drawn Styles.
</p>
<p>
The property value is updated when the <var>LM_MeasureItem</var> message is 
handled for the control. When variable height items are enabled in Style, the 
<var>OnMeasureItem</var> event handler must be implemented to calculate the 
height for individual value in <var>Items</var>.
</p>
<p>
<var>ItemHeight</var>, <var>ItemWidth</var>, <var>Items</var>, and 
<var>DropDownCount</var> are used in the <var>AdjustDropDown</var> method to 
determine the dimensions for the drop-down list in the control.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.OnMeasureItem"/>
<link id="TCustomComboBox.Style"/>
<link id="TCustomComboBox.Items"/>
<link id="TCustomComboBox.ItemWidth"/>
<link id="TCustomComboBox.DropDownCount"/>
<link id="TCustomComboBox.AdjustDropDown"/>
</seealso>
</element>

<element name="TCustomComboBox.ItemWidth">
<short>The minimum width of the items in the drop-down list.</short>
<descr>
<p>
<var>ItemWidth</var> is an <var>Integer</var> property which contains the 
minimum number of pixels used when displaying the static or drop-down list 
for the control. The default value for the property is 0 (zero).
</p>
<p>
Setting a new value for the property causes the <var>AdjustDropDown</var> 
method to be called to adjust the dimensions for the list to the values in 
<var>ItemHeight</var>, <var>ItemWidth</var>, and <var>DropDownCount</var>.
</p>
<p>
Use <var>ItemHeight</var> to specify the number of pixels required for items 
displayed in the drop-down list for the control.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.DropDownCount"/>
<link id="TCustomComboBox.ItemHeight"/>
<link id="TCustomComboBox.AdjustDropDown"/>
</seealso>
</element>

<element name="TCustomComboBox.MaxLength">
<short>
The maximum length for text entered in the edit box for the control.
</short>
<descr>
<p>
<var>MaxLength</var> is an <var>Integer</var> property which contains the 
maximum length for a value entered in the <var>Text</var> for the control. It 
controls the number of characters allowed in the edit box, but does not limit 
the length of the value that can be directly assigned to Text. MaxLength is 
passed to and read from the widgetset class when a handle has been assigned 
for the control.
</p>
<p>
The default value for the property is <b>0</b> (zero), and indicates that a 
maximum length has not been specified in the property. Setting the value for 
the property does not alter the existing value in Text.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Text"/>
</seealso>
</element>

<element name="TCustomComboBox.OnChange">
<short>
Event handler signalled for user changes to the text in the edit box.
</short>
<descr>
<p>
<var>OnChange</var> is a <var>TNotifyEvent</var> property which implements 
the event handler signalled when the value in the edit box has been changed.
</p>
<p>
The event applies to interactive changes to <var>Text</var> made by the user, 
not those made programmatically. Note that this differs from how other 
OnChange events work. For example: TEdit.OnChange is triggered by text 
changes that occur in code. This event is also triggered when the item 
selection is changed using the drop-down list in the combo-box.
</p>
<p>
OnChange is signalled (when assigned) in the <var>Change</var> method called 
when the control messages are handled in the window procedure. An application 
must implement and assign an object procedure using the signature in 
TNotifyEvent to respond to the event notification.
</p>
</descr>
<seealso>
<link id="TCustomEdit.OnChange"/>
<link id="TCustomEdit.Change"/>
<link id="TCustomEdit.Text"/>
<link id="#rtl.classes.TNotifyEvent">TNotifyEvent</link>
</seealso>
</element>

<element name="TCustomComboBox.OnCloseUp">
<short>Handler invoked when the drop-down list closes.</short>
<descr>
<p>
<var>OnCloseUp</var> is a <var>TNotifyEvent</var> property which contains the 
event handler signalled when the drop-down list in the control is hidden or 
closed. It can be used to perform any actions needed in an application, such 
as comparing pre-selection and post-selection values for properties. An 
application must implement and assign an object procedure to the property to 
respond to the event notification.
</p>
</descr>
<seealso>
<link id="#rtl.classes.TNotifyEvent">TNotifyEvent</link>
</seealso>
</element>

<element name="TCustomComboBox.OnDrawItem">
<short>Handler for special painting of an item (in owner-draw mode).</short>
<descr>
<p>
<var>OnDrawItem</var> is a <var>TDrawItemEvent</var> property which contains 
an event handler used to draw an item in the drop-down list for the control. 
OnDrawItem is used when <var>Style</var> contains one of the owner-drawn 
values. See <var>TComboBoxStyle</var> for more information about the 
owner-drawn styles available.
</p>
<p>
OnDrawItem is signalled (when assigned) from the <var>DrawItem</var> method. 
The event handler is responsible for all drawing operations needed to render 
the specified list item. This can include the text and any images or overlays 
drawn for the list item. Use the <var>Canvas</var> property to render the 
list item to the specified coordinate rectangle.
</p>
<p>
If OnDrawItem is not assigned, an internal default drawing routine is called 
to render the list item. It handles filling the canvas rectangle with the 
background for the item, and drawing the item text using the style, layout, 
and alignment defined in the control.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.DrawItem"/>
<link id="TCustomComboBox.Style"/>
<link id="TCustomComboBox.Canvas"/>
<link id="TDrawItemEvent"/>
<link id="TComboBoxStyle"/>
</seealso>
</element>

<element name="TCustomComboBox.OnDropDown">
<short>Handler invoked when the list has dropped down.</short>
<descr>
<p>
<var>OnDropDown</var> is a <var>TNotifyEvent</var> property with the event 
handler signalled when the drop-down list for the control is displayed. 
OnDropDown is signalled (when assigned) from the <var>DropDown</var> method. 
DropDown is called when the <b>CBN_DROPDOWN</b> message is handled for the 
control.
</p>
<p>
Implement and assign an object procedure to the handler to respond to the 
event notification.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Style"/>
<link id="TCustomComboBox.DropDown"/>
<link id="#rtl.classes.TNotifyEvent">TNotifyEvent</link>
</seealso>
</element>

<element name="TCustomComboBox.OnGetItems">
<short>Handler invoked when widgetset items list can be populated.</short>
<descr>
<p>
<var>OnGetItems</var> is a <var>TNotifyEvent</var> property with the event 
handler signalled to load the values used in the <var>Items</var> property.
</p>
<p>
OnGetItems is signalled (when assigned) from the <var>GetItems</var> method. 
Some widgetsets, like GTK, call GetItems (via <var>IntfGetItems</var>) just 
before the drop-down list is displayed. Others call GetItems when the handle 
for the control is created. OnGetItems provides one event to handle both 
cases.
</p>
<p>
An application should implement and assign an object procedure to the handler 
to respond to the event notification. The procedure must perform any actions 
needed to load the values for the Items property from an appropriate source.
</p>
<p>
Values can always be stored in the Items property using code at run-time, or 
by entering the values using the Object Inspector at design-time.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.GetItems"/>
<link id="TCustomComboBox.Items"/>
<link id="TCustomComboBox.IntfGetItems"/>
<link id="#rtl.classes.TNotifyEvent">TNotifyEvent</link>
</seealso>
</element>

<element name="TCustomComboBox.OnMeasureItem">
<short>Handler invoked when the height for an item is needed.</short>
<descr>
<p>
<var>OnMeasureItem</var> is a <var>TMeasureItemEvent</var> property with the 
event handler signalled to get the height for an item displayed in the list 
box for the control.
</p>
<p>
OnMeasureItem is signalled (when assigned) from the <var>MeasureItem</var> 
method. MeasureItem (and OnMeasureItem) are used when the <var>Style</var> 
property indicates that the control uses a variable height for each item 
displayed in the list box. OnMeasureItem occurs when the 
<b>LM_MeasureItem</b> message is handled for the control.
</p>
<p>
Use the <var>Index</var> argument to get the value in <var>Items</var> 
examined in the event handler. Use <var>ItemWidth</var> to determine the 
maximum width allowed for the variable height item. <var>Canvas</var> can be 
used to get text metrics for the <var>Font</var> used in the control. Update 
the <var>AHeight</var> argument with the height calculated for the item.
</p>
<p>
Use <var>ItemHeight</var> for the item height used for fixed height drawing 
styles.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.MeasureItem"/>
<link id="TCustomComboBox.Style"/>
<link id="TCustomComboBox.ItemHeight"/>
<link id="TCustomComboBox.ItemWidth"/>
<link id="TCustomComboBox.Canvas"/>
<link id="TMeasureItemEvent"/>
</seealso>
</element>

<element name="TCustomComboBox.OnSelect">
<short>Handler invoked when an item is selected.</short>
<descr>
<p>
<var>OnSelect</var> is a <var>TNotifyEvent</var> property with the event 
handler signalled when an item is selected in the list box for the control.
</p>
<p>
OnSelect is signalled (when assigned) from the <var>Select</var> method when 
<var>ItemIndex</var> contains a positive non-zero value. Select (and 
subsequently OnSelect) are called from multiple methods in TCustomComboBox. 
<var>SelectItem</var> calls Select when the value in ItemIndex is changed as 
a result of assigning a value to <var>Text</var>. <var>KeyUp</var> calls 
Select when the value in Text is updated by auto-completion features in the 
control. Select is also called when the <b>LM_SelChange</b> message is 
handled for the control.
</p>
<p>
Implement and assign an object procedure to the handler to respond to the 
event notification.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Select"/>
<link id="TCustomComboBox.SelectItem"/>
<link id="TCustomComboBox.ItemIndex"/>
<link id="TCustomComboBox.Items"/>
<link id="TCustomComboBox.KeyUp"/>
<link id="#rtl.classes.TNotifyEvent">TNotifyEvent</link>
</seealso>
</element>

<element name="TCustomComboBox.ParentColor">
<short>Uses the Color from the Parent control, when enabled.</short>
<descr>
<p>
ParentColor determines if the control should use the Color from the Parent 
control, when enabled. The default value for the property is <b>False</b> in 
TCustomComboBox.
</p>
<p>
When this property is <b>True</b>, all changes to the Color of the parent 
will also be applied to the Color of the control, ensuring that they both 
contain same value. If the Color of the control is changed by the 
application, then ParentColor will be automatically set to <b>False</b>.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.ParentColor">TControl.ParentColor</link>
</seealso>
</element>

<element name="TCustomComboBox.Sorted">
<short>
Determines whether the list entries are sorted in alphanumeric order.
</short>
<descr>
<p>
<var>Sorted</var> is a <var>Boolean</var> property which indicates if values 
in <var>Items</var> are stored and displayed in alphanumeric sort order.
</p>
<p>
Setting this property to <b>True</b> enforces ascending alphanumeric 
case-insensitive sorting of the list. When set to <b>True</b>, new entries 
are added in sort order, and not to the end of the Items list. When a new 
value is assigned to the property, the <var>UpdateSorted</var> method is 
called to set the <var>Sorted</var> property in <var>Items</var> to the 
corresponding value. <var>ItemIndex</var> is also set to the location in 
Items where the value in <var>Text</var> is stored, or <b>-1</b> when not 
found.
</p>
<p>
The default value for the property is <b>False</b>.
</p>
</descr>
<seealso/>
</element>

<element name="TCustomComboBox.Create">
<short>Constructor for the class instance.</short>
<descr>
<p>
<var>Create</var> is the overridden constructor for the class instance, and 
calls the inherited constructor on entry. Create ensures that resources are 
allocated for members in the class instance. Create sets the default values 
for properties, including:
</p>
<dl>
<dt>DropDownCount</dt>
<dd>Set to display 8 items by default.</dd>
<dt>ArrowKeysTraverseList</dt>
<dd>Set to <b>True</b> to enable cursor key navigation in the control.</dd>
<dt>AutoCompleteText</dt>
<dd>Set to the values in the DefaultComboBoxAutoCompleteText constant.</dd>
<dt>AutoSelect</dt>
<dd>Set to <b>True</b>.</dd>
<dt>CharCase</dt>
<dd>Set to ecNormal.</dd>
<dt>AutoSize</dt>
<dd>
Set to <b>True</b>. AutoSize must be <b>True</b> by default since some 
widgetsets (win32, wince) ignore the combo-box height and others (gtk2) look 
ugly with a very small height.
</dd>
</dl>
</descr>
<seealso>
<link id="TCustomComboBox.Destroy"/>
</seealso>
</element>
<element name="TCustomComboBox.Create.TheOwner">
<short>Owner of the class instance.</short>
</element>

<element name="TCustomComboBox.Destroy">
<short>Destructor for the class instance.</short>
<descr>
<p>
<var>Destroy</var> is the overridden destructor for the class instance. 
Destroy calls <var>DestroyHandle</var> if a handle has been allocated for the 
control. Destroy frees resources allocated for the <var>Canvas</var> 
property, and calls the inherited destructor.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Create"/>
</seealso>
</element>

<element name="TCustomComboBox.IntfGetItems">
<short>Gets the values in the Items property for the widgetset class.</short>
<descr>
<p>
<var>IntfGetItems</var> is a procedure used to populate the values in the 
<var>Items</var> property. IntfGetItems is called when the widgetset class 
retrieves the values for the items displayed in the control. Some widgetsets 
perform this action when the handle is allocated, or the focus is set for the 
control. Others perform the action when the drop-list for the control is 
displayed.
</p>
<p>
IntfGetItems calls the <var>GetItems</var> method to signal the 
<var>OnGetItems</var> event handler (when assigned).
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Items"/>
<link id="TCustomComboBox.GetItems"/>
<link id="TCustomComboBox.OnGetItems"/>
</seealso>
</element>

<element name="TCustomComboBox.AddItem">
<short>
Adds the specified string (and optional object) to the Items displayed in the 
control.
</short>
<descr>
<p>
<var>AddItem</var> is a procedure used to add the specified value (and an 
optional associated object) to the <var>Items</var> in the control. AddItem 
calls the <var>AddObject</var> method in Items to store the values in 
<var>Item</var> and <var>AnObject</var>.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Items"/>
<link id="#rtl.classes.TStrings.AddObject">TStrings.AddObject</link>
</seealso>
</element>
<element name="TCustomComboBox.AddItem.Item">
<short>The string added to Items.</short>
</element>
<element name="TCustomComboBox.AddItem.AnObject">
<short>The associated object, can be <b>Nil</b>.</short>
</element>

<element name="TCustomComboBox.MatchListItem">
<short>
Gets the position for the specified value in Items using the AutoCompleteText 
settings for the control.
</short>
<descr>
<p>
<var>MatchListItem</var> is an <var>Integer</var> function used to get the 
ordinal position in Items where the value in <var>AValue</var> is stored.
</p>
<p>
MatchListItem uses the <var>TComboBoxAutoCompleteText</var> settings in 
<var>AutoCompleteText</var> to locate the position for the specified value. If 
cbactSearchCaseSensitive is included in AutoCompleteText, a case-sensitive 
search is used to locate the value. Otherwise, AValue is converted to 
uppercase and a case-insensitive search is performed in Items.
</p>
<p>
The search direction in Items is determined using the cbactSearchAscending 
value in AutoCompleteText. When present, the search starts at the first value 
in Items (position 0) and continues until a match is found or all Items have 
been checked. When omitted, the search starts at the last value in Items 
(Count-1) and continues until a match is found or all Items have been checked.
</p>
<p>
The return value is -1 if Items does not contain any entries (Count=0), if 
AValue is an empty string (''), or AValue is not found in Items using the 
AutoCompleteText settings.
</p>
<p>
MatchListItem is called from the RealSetText method when the edit text for the 
control has been changed.
</p>
</descr>
<version>
Added in LCL version 3.0.
</version>
<seealso>
<link id="TCustomComboBox.RealSetText"/>
<link id="TCustomComboBox.Items"/>
<link id="TCustomComboBox.AutoCompleteText"/>
</seealso>
</element>
<element name="TCustomComboBox.MatchListItem.Result">
<short>
Ordinal position in Items for the specified value, or -1 when not found.
</short>
</element>
<element name="TCustomComboBox.MatchListItem.AValue">
<short>
Value to locate in the Items for the control.
</short>
</element>

<element name="TCustomComboBox.AddHistoryItem">
<short>
Add an item as the first entry in the history list for the control.
</short>
<descr>
<p>
<var>AddHistoryItem</var> is a procedure used to add the values in 
<var>Item</var> and <var>AnObject</var> to the beginning of the list items 
displayed for the control. AddHistoryItem uses the value in 
<var>CaseSensitive</var> to determine if case is significant when comparing 
the value in Item to the existing value at the beginning of <var>Items</var>.
</p>
<p>
AddHistoryItem calls the <var>InsertObject</var> method in Items to store the 
values at the initial position in the Items list (ordinal position 0). When 
Item exists at another position in Items, it is removed.
</p>
<p>
<var>MaxHistoryCount</var> contains the maximum number of entries allowed in 
the Items property. When the number of entries in Items exceeds the value in 
MaxHistoryCount, the excess is removed from the end of the Items property.
</p>
<p>
When <var>SetText</var> is <b>True</b>, the value in Item is stored to the 
<var>Text</var> property.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Items"/>
<link id="TCustomComboBox.Text"/>
<link id="#rtl.classes.TStrings.InsertObject">TStrings.InsertObject</link>
<link id="#rtl.classes.TStrings.Delete">TStrings.Delete</link>
</seealso>
</element>
<element name="TCustomComboBox.AddHistoryItem.Item">
<short>The string to be added to the list.</short>
</element>
<element name="TCustomComboBox.AddHistoryItem.AnObject">
<short>Optional associated object added for the item.</short>
</element>
<element name="TCustomComboBox.AddHistoryItem.MaxHistoryCount">
<short>The maximum number of items that can be added to the history.</short>
</element>
<element name="TCustomComboBox.AddHistoryItem.SetAsText">
<short>
When <b>True</b> the string also is copied into the edit box for the control.
</short>
</element>
<element name="TCustomComboBox.AddHistoryItem.CaseSensitive">
<short>
<b>True</b> means that the list can contain multiple items with the same 
text, differing in case.
</short>
</element>
<element name="TCustomComboBox.AddHistoryItem.AnObject">
<short>The object associated with the item; can be <b>Nil</b>.</short>
</element>

<element name="TCustomComboBox.Clear">
<short>Removes all items from the list, and clears the edit box.</short>
<descr>
<p>
<var>Clear</var> is a procedure used to remove all values stored in the 
<var>Items</var> property for the control. Clear calls the Clear method in 
Items to removed the strings and any associated objects stored in the 
<var>TStrings</var> property. Clear sets the value in <var>Text</var> to an 
empty string (<b>''</b>) which forces the value in ItemIndex to be changed 
to <b>-1</b>.
</p>
<p>
Use the Clear method in Items to remove all of the values stored in Items 
but keep the current value in Text.
</p>
<p>
Use ClearSelection to reset the value in ItemIndex and de-select the selected 
value in Items.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Items"/>
<link id="TCustomComboBox.Items"/>
<link id="TCustomComboBox.ItemIndex"/>
<link id="TCustomComboBox.ClearSelection"/>
<link id="#rtl.classes.TStrings.Clear">TStrings.Clear</link>
</seealso>
</element>

<element name="TCustomComboBox.ClearSelection">
<short>Removes the item selection in the list box for the control.</short>
<descr>
<p>
<var>ClearSelection</var> is a procedure used to remove the current item 
selection in the list box for the control. This causes the value in 
<var>ItemIndex</var> to be changed to <b>-1</b>, and the value in Text is set 
to an empty string ('').
</p>
<p>
Use SelStart, SelLength, and SelText to access or modify the text selection 
in the edit control. Set <var>SelLength</var> to zero (<b>0</b>) to remove 
the text selection in the edit box.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.ItemIndex"/>
<link id="TCustomComboBox.SelLength"/>
<link id="TCustomComboBox.SelStart"/>
<link id="TCustomComboBox.SelText"/>
</seealso>
</element>

<element name="TCustomComboBox.CharCase">
<short>
Indicates the case conversion applied to the value entered in the edit box 
for the control.
</short>
<descr>
<p>
<var>CharCase</var> is a <var>TEditCharCase</var> property which indicates 
the case conversion applied to the value entered in the edit box for the 
control. The default value for the property is <var>ecNormal</var>, and 
indicates that no case conversion is performed.
</p>
<p>
Setting a new value for the property causes the value in <var>Text</var> to 
be converted to the specified case by calling either the 
<var>UTF8LowerCase</var> or the <var>UTF8UpperCase</var> routine. Text is not 
modified when <var>ecNormal</var> is assigned to the property.
</p>
<p>
The value in CharCase is used when the <var>UTF8KeyPress</var> is called to 
apply key press events for the control.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Text"/>
<link id="TCustomComboBox.UTF8KeyPress"/>
<link id="#lazutils.lazutf8.UTF8LowerCase">UTF8LowerCase</link>
<link id="#lazutils.lazutf8.UTF8UpperCase">UTF8UpperCase</link>
</seealso>
</element>

<element name="TCustomComboBox.DroppedDown">
<short>
Indicates whether the drop-down list has been displayed.
</short>
<descr>
<p>
<var>DroppedDown</var> is a <var>Boolean</var> property which indicates 
whether the drop-down list for the control has been displayed.
</p>
<p>
Reading the value for the property causes the widgetset class to be queried 
when a handle has been allocated for the control. Otherwise, the stored value 
for the property is used.
</p>
<p>
Setting a new value for the property causes the widgetset class to be 
notified of the changed property value. No actions are performed if a handle 
has not been allocated for the control, or during LCL component streaming. 
Setting this property opens or closes the drop-down list.
</p>
<p>
The value in DroppedDown is maintained when the <var>Style</var> for the 
control is altered, when <b>CBN_DROPDOWN</b> or <b>CBN_CLOSEUP</b> control 
messages are handled, and when key down events are handled which change the 
visibility of the drop-down list.
</p>
<remark>
For the macOS Carbon widgetset, setting DroppedDown to <b>True</b> does not 
cause the drop-down list to be displayed when Style is set to csDropDownList.
</remark>
</descr>
<seealso>
<link id="TCustomComboBox.Style"/>
<link id="TCustomComboBox.KeyDown"/>
<link id="TComboBoxStyle"/>
</seealso>
</element>

<element name="TCustomComboBox.SelectAll">
<short>Selects the text content in the edit box for the control.</short>
<descr>
<p>
<var>SelectAll</var> is a procedure used to select/highlight the 
<var>Text</var> displayed in the edit box for the control. SelectAll requires 
a <var>Style</var> that uses an edit box in the control. No actions are 
performed in the method when Style does not include an enabled edit box.
</p>
<p>
SelectAll sets the value in <var>SelStart</var> to <b>0</b> (zero) to move 
the selection to the beginning of the edit box, and sets <var>SelLength</var> 
to the number of UTF-8-encoded characters in Text. No selection/highlighting 
is performed when Text contains an empty string (<b>''</b>).
</p>
<p>
SelectAll is called from methods like <var>DoEnter</var>, <var>KeyUp</var>, 
<var>CloseUp</var>, and <var>MouseUp</var>.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Style"/>
<link id="TCustomComboBox.Text"/>
<link id="TCustomComboBox.SelStart"/>
<link id="TCustomComboBox.SelLength"/>
<link id="TCustomComboBox.SelText"/>
<link id="TCustomComboBox.DoEnter"/>
<link id="TCustomComboBox.KeyUp"/>
<link id="TCustomComboBox.CloseUp"/>
<link id="TCustomComboBox.MouseUp"/>
</seealso>
</element>

<element name="TCustomComboBox.AutoComplete">
<short>Positions the list box using partial text matching.</short>
<descr>
<p>
<var>AutoComplete</var> is a <var>Boolean</var> property which indicates if 
partial text matching is used to locate values in the Items displayed for the 
control. When set to <b>True</b>, keystrokes entered in the edit box for the 
control are used to locate a value in Items which begins with the entered 
value. The <var>ItemIndex</var> property is updated with the ordinal position 
for the matching item, or -1 if an entry is not found that starts with the 
partial value.
</p>
<p>
Reading the value in AutoComplete causes the <var>AutoCompleteText</var> 
property to be examined, and returns <b>True</b> when the value 
<var>cbactEnabled</var> is included in the auto-complete options. Assigning a 
value to AutoComplete causes the AutoCompleteText property to include or 
exclude the corresponding value as needed.
</p>
<p>
Use AutoCompleteText to enable or disable other auto-complete features and 
behaviors in the control.
</p>
<p>
Auto-completion related tasks are performed when the <var>KeyUp</var> method 
handles valid keystrokes for the control.
</p>
<p>
Use <var>AutoSelect</var> to control whether text is automatically 
highlighted in the edit box when a new list item is selected in the control.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.AutoCompleteText"/>
<link id="TCustomComboBox.AutoSelect"/>
<link id="TCustomComboBox.Items"/>
<link id="TCustomComboBox.ItemIndex"/>
<link id="TCustomComboBox.KeyUp"/>
</seealso>
</element>

<element name="TCustomComboBox.AutoCompleteText">
<short>Options for the behavior of the Auto-Complete feature.</short>
<descr>
<dl>
<dt>Enabled</dt>
<dd> Enable Auto-Completion features.</dd>
<dt>EndOfLineComplete</dt>
<dd>Perform Auto-Complete only when cursor is at the end of the string.</dd>
<dt>RetainPrefixCase</dt>
<dd>
Retains the case of characters user has typed. This option has no effect if 
cbactEndOfLineComplete is <b>False</b>.
</dd>
<dt>SearchCaseSensitive</dt>
<dd>Search completion string with case sensitivity.</dd>
<dt>SearchAscending</dt>
<dd>
Search completion string in ascending order. <b>False</b> will search in 
descending order.
</dd>
</dl>
<p>
This property exists as a <var>Set</var> of <var>Options</var>, so zero or 
more options may be operational.
</p>
</descr>
<seealso>
<link id="TComboBoxAutoCompleteTextOption"/>
</seealso>
</element>

<element name="TCustomComboBox.AutoDropDown">
<short>
Makes the drop-down list appear as soon as the user starts entering text.
</short>
<descr>
<p>
<var>AutoDropDown</var> is a <var>Boolean</var> property which indicates if 
the drop-down list for the control is automatically displayed. When set to 
<b>False</b>, the drop-down list appears when the down button is clicked, or 
the Alt+Down key sequence is entered. The value in AutoDropDown is 
maintained, based on the <var>Style</var> for the control, when 
<var>KeyDown</var> is called to handle key events.
</p>
<p>
Use <var>DroppedDown</var> to show or hide the list box for the control.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Style"/>
<link id="TCustomComboBox.KeyDown"/>
<link id="TCustomComboBox.DroppedDown"/>
</seealso>
</element>

<element name="TCustomComboBox.AutoSelect">
<short>
Selects the entire content of the edit box when the control receives the 
focus.
</short>
<descr>
<p>
When <b>True</b>, the edit control will select all its text when:
</p>
<ul>
<li>It receives focus</li>
<li>The Enter key is pressed.</li>
<li>A new item is selected.</li>
</ul>
</descr>
<seealso>
<link id="TCustomComboBox.AutoSelected"/>
</seealso>
</element>

<element name="TCustomComboBox.AutoSelected">
<short>
<b>True</b> indicates that the selection was marked automatically by the 
control.
</short>
<descr>
<p>
<b>True</b> indicates that the combo-box control has just performed an 
<var>AutoSelect</var> operation so that subsequent mouse-clicks and 
keystrokes proceed normally without selecting the text.
</p>
<p>
<b>False</b> is set when the combo-box control loses focus.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.AutoSelect"/>
</seealso>
</element>

<element name="TCustomComboBox.AutoSize" link="#lcl.controls.TControl.AutoSize"/>

<element name="TCustomComboBox.ArrowKeysTraverseList">
<short>
Indicates if keyboard Arrow (or cursor) keys can be used to move through the 
list.
</short>
<descr>
<p>
<var>ArrowKeysTraverseList</var> indicates if Arrow (or Cursor) keys on the 
keyboard can be used to navigate the <var>Items</var> displayed in the 
drop-down list box for the control. The default value for the property is 
<b>True</b>.
</p>
<p>
The value in the property is passed to the widgetset class when the LCL 
interface object is created. Changing the value for the property causes the 
widgetset class to be notified using its <var>SetArrowKeysTraverseList</var> 
method.
</p>
<p>
The property value is used in the implementation of the <var>KeyDown</var> 
method, and may be updated as the drop-down list for the control is displayed 
or hidden. For some widgetsets (Darwin), the arrow keys cannot be handled in 
the LCL and the keyboard message(s) are ignored.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Items"/>
<link id="TCustomComboBox.KeyDown"/>
</seealso>
</element>

<element name="TCustomComboBox.Canvas">
<short>Provides access to the drawing surface for the control.</short>
<descr>
<p>
<var>Canvas</var> is a read-only <var>TCanvas</var> property which provides 
access to the drawing surface used for the control. The class implementation 
actually uses a <var>TControlCanvas</var> instance in the member.
</p>
<p>
Canvas is used in methods like <var>DrawItem</var>, and in private methods 
which handle the <b>LM_DrawListItem</b> message for the control. Canvas is 
also passed as an argument to methods in the ancestor class like 
<var>PaintTo</var>. Canvas can be useful in <var>OnDrawItem</var> event 
handler when used to render list items for the control.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Items"/>
<link id="TCustomComboBox.DrawItem"/>
<link id="TCustomComboBox.OnDrawItem"/>
<link id="#lcl.controls.TWinControl.PaintTo">TWinControl.PaintTo</link>
<link id="#lcl.graphics.TCanvas">TCanvas</link>
<link id="#lcl.controls.TControlCanvas">TControlCanvas</link>
</seealso>
</element>

<element name="TCustomComboBox.DropDownCount">
<short>
The maximum number of Items visible in the drop-down list for the control.
</short>
<descr>
<p>
<var>DropDownCount</var> is an <var>Integer</var> property which specifies 
the maximum number of values from <var>Items</var> that can be displayed in 
the drop-down list for the control. Setting a new value for the property 
causes the widgetset class to be notified using its 
<var>SetDropDownCount</var> method when a handle has been allocated for the 
control.
</p>
<p>
DropDownCount is used (along with the item count and <var>ItemHeight</var>) 
in the <var>AdjustDropDown</var> method to set the minimum dimensions for the 
drop-down list.
</p>
<p>
The default value for the property is <b>8</b>.
</p>
<remark>
For the macOS Carbon and GTK2 widgetsets, changing the value in DropDownCount 
does not affect the control. This attribute is determined by the native 
control.
</remark>
</descr>
<seealso>
<link id="TCustomComboBox.Items"/>
<link id="TCustomComboBox.ItemHeight"/>
<link id="TCustomComboBox.GetItemCount"/>
<link id="TCustomComboBox.AdjustDropDown"/>
</seealso>
</element>

<element name="TCustomComboBox.EmulatedTextHintStatus">
<short>Status for the emulated TextHint in the control.</short>
<descr>
<p>
<var>EmulatedTextHintStatus</var> is a read-only 
<var>TEmulatedTextHintStatus</var> property which contains the status value 
for an emulated TextHint display in the control. EmulatedTextHintStatus is 
used when a value has been assigned to the <var>TextHint</var> property and 
the widgetset does not natively implement the capability. The LCL emulates 
the TextHint display by assigning the value in TextHint to the 
<var>Text</var> for the control.
</p>
<p>
EmulatedTextHintStatus is updated in the private 
<var>ShowEmulatedTextHint</var> and <var>HideEmulatedTextHint</var> methods.
</p>
</descr>
<seealso>
<link id="TEmulatedTextHintStatus"/>
<link id="TCustomComboBox.TextHint"/>
<link id="TCustomComboBox.Text"/>
</seealso>
</element>

<element name="TCustomComboBox.Items">
<short>The list of items displayed in the combo-box control.</short>
<descr>
<p>
<var>Items</var> is a <var>TStrings</var> property which contains the strings 
displayed in the static or drop-down list for the control. Settings a new 
TStrings value for the property causes the Assign method to be called to load 
the string values into the current class instance.
</p>
<p>
As an alternative, use the <var>OnGetItems</var> event handler to dynamically 
populate the values in Items when the drop-down list for the control is 
displayed (or created).
</p>
<p>
String values in Items can be ordered alphabetically by setting the 
<var>Sorted</var> property to <b>True</b>. This also affects the ordinal 
position for new values added to Items. Its index will be the position in the 
sorted order, and not necessarily at the end of the list.
</p>
<p>
Use ItemIndex to determine the ordinal position in Items with the value 
displayed the edit box for the control.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.ItemIndex"/>
<link id="TCustomComboBox.Sorted"/>
<link id="TCustomComboBox.OnGetItems"/>
<link id="TCustomComboBox.Text"/>
<link id="#rtl.classes.TStrings">TStrings</link>
</seealso>
</element>

<element name="TCustomComboBox.ItemIndex">
<short>
The index of the currently selected item, or -1 if no item is selected.
</short>
<descr>
<p>
<var>ItemIndex</var> is an <var>Integer</var> property which contains the 
ordinal position in <var>Items</var> for the current selection in the drop-down 
list. The first value in Items is at index position <b>0</b> (<b>zero</b>). The 
final value in Items is at the index position <var>ItemCount</var><b>-1</b>. 
When no value is selected in the drop-down list, ItemIndex is set to <b>-1</b>. 
The default value for the property is <b>-1</b>.
</p>
<p>
When the value for the property is read, the widgetset class is queried if a 
handle has been assigned for the control.
</p>
<p>
Assigning a new value to the property causes the value in <var>Text</var> to 
be updated to reflect the new selection in the control. When ItemIndex is set 
to <b>-1</b>, Text is set to an empty string ('') and the TextHint for the 
control is displayed (when assigned).
</p>
<p>
For platforms which use emulated text hints, the non-native placeholder is 
displayed or hidden when ItemIndex or Text is changed. <b>-1</b> causes the
value in TextHint to be displayed on the control. Any other value causes the 
emulated text hint to be hidden. Platforms which support native TextHint 
placeholders control the hint display in the widget instance.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Items"/>
<link id="TCustomComboBox.AddItem"/>
<link id="TCustomComboBox.Text"/>
<link id="TCustomComboBox.TextHint"/>
<link id="TCustomComboBox.CanShowEmulatedTextHint"/>
<link id="TCustomComboBox.EmulatedTextHintStatus"/>
<link id="TCustomComboBox.AddHistoryItem"/>
</seealso>
</element>

<element name="TCustomComboBox.ReadOnly">
<short>
Disallows free-form entry of Text into the combo-box edit field.
</short>
<descr>
<p>
When <b>True</b>, the text can be changed only by selecting an item from the 
combo-box items list. When <b>False</b>, the text can be changed by free-form 
entry of a value in the edit field.
</p>
<p>
Changing the property value doesn't affect the style for the control in any 
manner. Changing the style doesn't affect the value in the property, as well. 
For some styles (such as csDropDownList) the property might have no effect 
because it is ignored.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Text"/>
<link id="TCustomComboBox.Style"/>
<link id="TCustomComboBox.AutoComplete"/>
</seealso>
</element>

<element name="TCustomComboBox.SelLength">
<short>The number of selected UTF-8 characters in the edit box.</short>
<descr>
<p>
<var>SelLength</var> is an <var>Integer</var> property which indicates the 
number of UTF-8-encoded characters selected in the edit box for the control. 
SelLength is used along with <var>SelStart</var> to determine the value in 
<var>SelText</var>.
</p>
<p>
Use SelStart to determine the position in Text for the selected value in the 
edit box for the control.
</p>
<p>
Use SelText to get the content selected in the edit box. Assigning a new 
value to SelText causes the value in SelLength to be updated.
</p>
<p>
SelLength is updated in the <var>SelectAll</var> method after the selection 
text is updated. It is also updated when <var>KeyUp</var> performs 
auto-completion for alphanumeric values entered in the control.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.SelStart"/>
<link id="TCustomComboBox.SelText"/>
<link id="TCustomComboBox.Text"/>
<link id="TCustomComboBox.SelectAll"/>
<link id="TCustomComboBox.KeyUp"/>
<link id="TCustomComboBox.AutoComplete"/>
<link id="TCustomComboBox.AutoCompleteText"/>
</seealso>
</element>

<element name="TCustomComboBox.SelStart">
<short>
<b>zero-based</b> index to the UTF-8 character at the beginning of the 
selected text in the edit box.
</short>
<descr>
<p>
If text is selected in the edit box for the control, this is the starting 
position. When no text is selected, SelStart is the cursor position and 
SelLength is 0 (zero).
</p>
<p>
Writing a new value to the property moves the cursor, and removes the current 
text selection. Set SelLength after changing SelStart, to establish a new 
text selection.
</p>
<p>
SelStart is a <b>zero-based</b> index to UTF-8 character in the Text, in 
contrast to the usual <b>1-based</b> string indices. The value 0 means the 
first UTF-8 character, the value 1 means the second UTF-8 character, etc.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.SelLength"/>
<link id="TCustomComboBox.SelText"/>
</seealso>
</element>

<element name="TCustomComboBox.SelText">
<short>The selected text in the edit box for the control.</short>
<descr>
<p>
<var>SelText</var> is a <var>String</var> property which contains the 
selected text in the edit box for the control. The property value is 
determined by the values in <var>SelStart</var> and <var>SelLength</var>. 
Assign a new string value to replace the selected text within the 
<var>Text</var> for the control.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.SelStart"/>
<link id="TCustomComboBox.SelLength"/>
<link id="TCustomComboBox.Text"/>
</seealso>
</element>

<element name="TCustomComboBox.Style">
<short>
Controls the appearance and behavior for the combo-box.
</short>
<descr>
<p>
Style is quite Windows-centric, reflecting the evolution of combo-box styles. 
The basic styles are:
</p>
<dl>
<dt>csSimple</dt>
<dd>Displays an edit box with an attached list (not a drop-down list).</dd>
<dt>csDropDown</dt>
<dd>Displays an edit box with a drop-down list.</dd>
<dt>csDropDownList</dt>
<dd>
Values cannot be entered by the user in the edit box, only selected from the 
drop-down list.
</dd>
</dl>
<p>
Owner-drawn drop-down lists have been added, with the values:
</p>
<dl>
<dt>csOwnerDrawFixed</dt>
<dd>All items in the drop-down list are drawn with the same height.</dd>
<dt>csOwnerDrawVariable</dt>
<dd>Each item in the list can have a different height.</dd>
</dl>
<remark>
For the macOS Carbon widgetset, the following style values are not recognized: 
csSimple, csOwnerDrawFixed and csOwnerDrawVariable. They are not supported in 
the native control.
</remark>
</descr>
</element>

<element name="TCustomComboBox.TabStop">
<short>
Enables or disables keyboard navigation using the Tab or Shift+Tab keys.
</short>
<descr>
<p>
Allows the user to navigate to or from this control by pressing the Tab or 
Shift+Tab keys. The default value for the property is <b>True</b> in 
TCustomComboBox.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.TabStop">TWinControl.TabStop</link>
</seealso>
</element>

<element name="TCustomComboBox.Text">
<short>The value in the edit box for the control.</short>
<descr>
<p>
<var>Text</var> is a public property in <var>TCustomComboBox</var> and 
contains the <var>TCaption</var> value for the control. It is the value 
displayed in the edit box for the control.
</p>
<p>
Setting a new value for Text in program code causes the 
<var>RealSetText</var> method to be called. The new property value is located 
in the <var>Items</var> property, and the value in <var>ItemIndex</var> is 
updated with the ordinal position for the found value. A case-insensitive 
comparison is used to locate the value in Items. The value applied to Text 
retains the original case used in the new property value. ItemIndex is set to 
<b>-1</b> if a value is not located in Items that is a case-insensitive match 
the new property value.
</p>
<p>
At run-time, the value in Text can be updated using the edit box for the 
control when it is enabled for the selected <var>Style</var> (such as 
<var>csDropDown</var> and <var>csSimple</var>). When Style contains 
<var>csDropDownList</var>, the edit box is not displayed. But the button for 
the drop-down list handles the first character key pressed, and locates a 
value in Items when the button has focus.
</p>
<p>
<var>AutoComplete</var> enables or disables auto-completion for the value in 
Text. When set to <b>True</b>, the first item that matches the entered 
character(s) is located in Items and the value is highlighted in the 
drop-down list for the control. By default, a case-insensitive comparison is 
used to find the entered value. Case sensitivity can be enabled using 
<var>cbactSearchCaseSensitive</var> in the <var>AutoCompleteText</var> 
options, and requires the value in Items to be an exact case-sensitive match 
for the character(s) entered in the edit box. Text is updated to contain the 
complete value for the entry in Items. By default, the case for the value in 
Items is retained and applied to Text. Include 
<var>cbactRetainPrefixCase</var> in AutoCompleteText options to use the value 
as entered in the edit box in the Text property.
</p>
<p>
When the edit box loses input focus, ItemIndex is updated with the ordinal 
position in Items where the partial value was found. It is set to <b>-1</b> 
when a matching value could not be located in Items.
</p>
<p>
When AutoComplete is disabled (set to <b>False</b>), the entered value is 
still located located and highlighted in the drop-down list for Items. 
However, the value in Text is not expanded and the value in ItemIndex is 
not updated. The item must be selected using the drop-down list to apply the 
value to Text and update the value in ItemIndex.
</p>
<p>
Use ItemIndex to select one of the Items by its ordinal position, and apply 
the value to the Text property.
</p>
</descr>
<notes>
<note>
A test application was used to verify the described functionality on the 
Windows platform. It has been attached to Issue #39413 to allow testing for 
other platforms / widgetsets.
</note>
</notes>
<seealso>
<link id="TCustomComboBox.Style"/>
<link id="TCustomComboBox.AutoComplete"/>
<link id="TCustomComboBox.AutoCompleteText"/>
<link id="TCustomComboBox.Items"/>
<link id="TCustomComboBox.ItemIndex"/>
<link id="TCustomComboBox.ReadOnly"/>
<link id="TComboBoxAutoCompleteText"/>
<link id="TComboBoxAutoCompleteTextOption"/>
</seealso>
</element>

<element name="TCustomComboBox.TextHint">
<short>
Default hint text shown when the Text property is empty for the control.
</short>
<descr>
<p>
<var>TextHint</var> is a <var>TTranslateString</var> property which contains 
the inline hint text displayed for the control. It is displayed in the 
editable area for the <var>TCustomComboBox</var> when the Text property is 
empty. Some platforms may refer to this feature as a "placeholder" or "editing 
hint". As a TTranslateString value, it can be translated using the LCL 
localization mechanism when enabled for the project.
</p>
<p>
The value in TextHint is normally displayed using the color in clGrayText.
</p>
<p>
The display behavior for TextHint is platform-specific. On some platforms, the 
text hint is displayed any time the value in Text is empty. For others, it is 
displayed only when the control does not have focus.
</p>
<p>
Setting a new value in TextHint causes the widgetset class to be notified, 
and the value is displayed in the edit control when allowed. If the new 
property value is an empty string (''), the text hint is removed from the 
control.
</p>
<p>
For platforms that do not provide native support for TextHint, an emulated 
text hint is displayed. This is a TCustomEdit control created to enable the 
feature, and can be displayed only when the original control does not have 
focus.
</p>
<p>
TextHint is different than Hint, which displays a balloon tip when ShowHint is 
set to <b>True</b> and the mouse is over the control.
</p>
</descr>
<seealso>
<link id="TCustomComboBox.Text"/>
<link id="TCustomComboBox.CanShowEmulatedTextHint"/>
<link id="#lcl.controls.TControl.Hint">TControl.Hint</link>
<link id="#lcl.controls.TControl.ShowHint">TControl.ShowHint</link>
</seealso>
</element>

<element name="TComboBox">
<short>
Implements a control with an edit box and a drop-down list allowing one of 
several options to be chosen.
</short>
<descr>
<p>
<var>TComboBox</var> is a <var>TCustomComboBox</var> descendant which 
implements the a combo-box component in the LCL (Lazarus Component Library).
</p>
<p>
A combo-box is visually represented as an edit control and a scrollable list 
of items which can be selected. The list can always be visible, or opened 
when needed using a drop-down indicator. In addition, the items displayed on 
the control be drawn using using the built-in mechanisms for the widgetset 
class or using an owner-drawn style.
</p>
<p>
Despite similarities in appearance to <var>TCustomEdit</var> and 
<var>TCustomList</var>, the class inherits no properties from these classes 
(Delphi compatible).
</p>
<p>
Use <var>Items</var> to access the entries displayed in the drop-down list. Use 
<var>AddItem</var> or <var>AddHistoryItem</var> to add entries to 
the list of items. Use <var>OnGetItems</var> to dynamically populate the Items 
in the control when the drop-down list is displayed.
</p>
<p>
The selectable values in <var>Items</var> can be maintained at design-time by 
clicking on the ellipsis character (<b>...</b>) displayed next to Items in the 
Object Inspector.
</p>
<p>
The <var>Text</var> property reflects the text entered directly into the edit 
box, or selected either manually or by auto-completion from the Items in the 
list. At run-time, the entry selected from the list replaces the text in the 
edit box, and <var>ItemIndex</var> holds the (zero-based) index number of the 
selected item. If no value is selected from the drop-down list, the default 
text (if any) remains for any information typed directly into the control Text, 
and ItemIndex takes the value of -1.
</p>
<p>
Use <var>Style</var> to control the display style and drawing mechanism enabled 
for the drop-down list on the control.
</p>
<p>
Use <var>AutoDropDown</var>, <var>AutoComplete</var>, 
<var>AutoCompleteText</var>, and <var>AutoDropDown</var> to control the
behavior of the edit box and its interaction with the drop-down list on the 
control.
</p>
<p>
Use <var>ItemHeight</var> and <var>ItemWidth</var> to control the appearance 
for the Items displayed on the drop-down list.
</p>
<remark>
The Height property in TCustomComboBox / TComboBox cannot be changed for some 
platforms, including Windows and macOS. It is best to set AutoSize to 
<b>True</b> to ensure consistent size handling on the supported platforms.
</remark>
<remark>
Changing the value in BorderStyle to bsNone has no effect for the Windows 
widgetset. It is not possible to remove the border on the Windows platform.
</remark>
</descr>
<seealso>
<link id="TComboBox.Items"/>
<link id="TComboBox.ItemIndex"/>
<link id="TComboBox.Style"/>
<link id="TComboBox.Text"/>
<link id="#lcl.comboex.TComboBoxEx">TComboBoxEx</link>
<link id="HowToUseStdCtrls"/>
</seealso>
</element>

<element name="TComboBox.Align" link="#lcl.controls.TControl.Align"/>
<element name="TComboBox.Anchors" link="#lcl.controls.TControl.Anchors"/>
<element name="TComboBox.ArrowKeysTraverseList" link="#lcl.stdctrls.TCustomComboBox.ArrowKeysTraverseList"/>
<element name="TComboBox.AutoComplete" link="#lcl.stdctrls.TCustomComboBox.AutoComplete"/>
<element name="TComboBox.AutoCompleteText" link="#lcl.stdctrls.TCustomComboBox.AutoCompleteText"/>
<element name="TComboBox.AutoDropDown" link="#lcl.stdctrls.TCustomComboBox.AutoDropDown"/>
<element name="TComboBox.AutoSelect" link="#lcl.stdctrls.TCustomComboBox.AutoSelect"/>
<element name="TComboBox.AutoSize" link="#lcl.controls.TControl.AutoSize"/>
<element name="TComboBox.BidiMode" link="#lcl.controls.TControl.BiDiMode"/>
<element name="TComboBox.BorderSpacing" link="#lcl.controls.TControl.BorderSpacing"/>
<element name="TComboBox.BorderStyle" link="#lcl.controls.TWinControl.BorderStyle"/>
<element name="TComboBox.CharCase" link="#lcl.stdctrls.TCustomComboBox.CharCase"/>
<element name="TComboBox.Color" link="#lcl.controls.TControl.Color"/>
<element name="TComboBox.Constraints" link="#lcl.controls.TControl.Constraints"/>
<element name="TComboBox.DoubleBuffered" link="#lcl.controls.TWinControl.DoubleBuffered"/>
<element name="TComboBox.DragCursor" link="#lcl.controls.TControl.DragCursor"/>
<element name="TComboBox.DragKind" link="#lcl.controls.TControl.DragKind"/>
<element name="TComboBox.DragMode" link="#lcl.controls.TControl.DragMode"/>
<element name="TComboBox.DropDownCount" link="#lcl.stdctrls.TCustomComboBox.DropDownCount"/>
<element name="TComboBox.Enabled" link="#lcl.controls.TControl.Enabled"/>
<element name="TComboBox.Font" link="#lcl.controls.TControl.Font"/>
<element name="TComboBox.ItemHeight" link="#lcl.stdctrls.TCustomComboBox.ItemHeight"/>
<element name="TComboBox.ItemIndex" link="#lcl.stdctrls.TCustomComboBox.ItemIndex"/>
<element name="TComboBox.Items" link="#lcl.stdctrls.TCustomComboBox.Items"/>
<element name="TComboBox.ItemWidth" link="#lcl.stdctrls.TCustomComboBox.ItemWidth"/>
<element name="TComboBox.MaxLength" link="#lcl.stdctrls.TCustomComboBox.MaxLength"/>
<element name="TComboBox.OnChange" link="#lcl.stdctrls.TCustomComboBox.OnChange"/>
<element name="TComboBox.ParentBidiMode" link="#lcl.controls.TControl.ParentBiDiMode"/>
<element name="TComboBox.ParentColor" link="#lcl.stdctrls.TCustomComboBox.ParentColor"/>
<element name="TComboBox.ParentDoubleBuffered" link="#lcl.controls.TWinControl.ParentDoubleBuffered"/>
<element name="TComboBox.ParentFont" link="#lcl.controls.TControl.ParentFont"/>
<element name="TComboBox.ParentShowHint" link="#lcl.controls.TControl.ParentShowHint"/>
<element name="TComboBox.PopupMenu" link="#lcl.controls.TControl.PopupMenu"/>
<element name="TComboBox.ReadOnly" link="#lcl.stdctrls.TCustomComboBox.ReadOnly"/>
<element name="TComboBox.ShowHint" link="#lcl.controls.TControl.ShowHint"/>
<element name="TComboBox.Sorted" link="#lcl.stdctrls.TCustomComboBox.Sorted"/>
<element name="TComboBox.Style" link="#lcl.stdctrls.TCustomComboBox.Style"/>
<element name="TComboBox.TabOrder" link="#lcl.controls.TWinControl.TabOrder"/>
<element name="TComboBox.TabStop" link="#lcl.stdctrls.TCustomComboBox.TabStop"/>
<element name="TComboBox.Text" link="#lcl.stdctrls.TCustomComboBox.Text"/>
<element name="TComboBox.TextHint" link="#lcl.stdctrls.TCustomComboBox.TextHint"/>
<element name="TComboBox.Visible" link="#lcl.controls.TControl.Visible"/>
<element name="TComboBox.OnChangeBounds" link="#lcl.controls.TControl.OnChangeBounds"/>
<element name="TComboBox.OnClick" link="#lcl.controls.TControl.OnClick"/>
<element name="TComboBox.OnCloseUp" link="#lcl.stdctrls.TCustomComboBox.OnCloseUp"/>
<element name="TComboBox.OnContextPopup" link="#lcl.controls.TControl.OnContextPopup"/>
<element name="TComboBox.OnDblClick" link="#lcl.controls.TControl.OnDblClick"/>
<element name="TComboBox.OnDragDrop" link="#lcl.controls.TControl.OnDragDrop"/>
<element name="TComboBox.OnDragOver" link="#lcl.controls.TControl.OnDragOver"/>
<element name="TComboBox.OnDrawItem" link="#lcl.stdctrls.TCustomComboBox.OnDrawItem"/>
<element name="TComboBox.OnDropDown" link="#lcl.stdctrls.TCustomComboBox.OnDropDown"/>
<element name="TComboBox.OnEndDrag" link="#lcl.controls.TControl.OnEndDrag"/>
<element name="TComboBox.OnEditingDone" link="#lcl.controls.TControl.OnEditingDone"/>
<element name="TComboBox.OnEnter" link="#lcl.controls.TWinControl.OnEnter"/>
<element name="TComboBox.OnExit" link="#lcl.controls.TWinControl.OnExit"/>
<element name="TComboBox.OnGetItems" link="#lcl.stdctrls.TCustomComboBox.OnGetItems"/>
<element name="TComboBox.OnKeyDown" link="#lcl.controls.TWinControl.OnKeyDown"/>
<element name="TComboBox.OnKeyPress" link="#lcl.controls.TWinControl.OnKeyPress"/>
<element name="TComboBox.OnKeyUp" link="#lcl.controls.TWinControl.OnKeyUp"/>
<element name="TComboBox.OnMeasureItem" link="#lcl.stdctrls.TCustomComboBox.OnMeasureItem"/>
<element name="TComboBox.OnMouseDown" link="#lcl.controls.TControl.OnMouseDown"/>
<element name="TComboBox.OnMouseEnter" link="#lcl.controls.TControl.OnMouseEnter"/>
<element name="TComboBox.OnMouseLeave" link="#lcl.controls.TControl.OnMouseLeave"/>
<element name="TComboBox.OnMouseMove" link="#lcl.controls.TControl.OnMouseMove"/>
<element name="TComboBox.OnMouseUp" link="#lcl.controls.TControl.OnMouseUp"/>
<element name="TComboBox.OnMouseWheel" link="#lcl.controls.TControl.OnMouseWheel"/>
<element name="TComboBox.OnMouseWheelDown" link="#lcl.controls.TControl.OnMouseWheelDown"/>
<element name="TComboBox.OnMouseWheelUp" link="#lcl.controls.TControl.OnMouseWheelUp"/>
<element name="TComboBox.OnSelect" link="#lcl.stdctrls.TCustomComboBox.OnSelect"/>
<element name="TComboBox.OnStartDrag" link="#lcl.controls.TControl.OnStartDrag"/>
<element name="TComboBox.OnUTF8KeyPress" link="#lcl.controls.TWinControl.OnUTF8KeyPress"/>

<element name="TListBoxStyle">
<short>Determines how items are drawn in a list box control.</short>
<descr>
<p>
<var>TListBoxStyle</var> is an enumerated type with values that determine how 
items in the list box control are populated and drawn. TListBoxStyle is the 
type used to implement the <var>Style</var> property in 
<var>TCustomListBox</var>.
</p>
</descr>
<seealso>
<link id="TCustomListBox.Items"/>
<link id="TCustomListBox.Style"/>
</seealso>
</element>
<element name="TListBoxStyle.lbStandard">
<short>Items drawn by the widgetset class.</short>
</element>
<element name="TListBoxStyle.lbOwnerDrawFixed">
<short>Items drawn by user code, and all items have the same height.</short>
</element>
<element name="TListBoxStyle.lbOwnerDrawVariable">
<short>
Items drawn by user code, and each item can have a different height.
</short>
</element>
<element name="TListBoxStyle.lbVirtual">
<short>Not used in the current LCL version.</short>
</element>

<element name="TSelectionChangeEvent">
<short>
Specifies an event handler for change notifications from a list box control.
</short>
<descr>
<p>
<var>TSelectionChangeEvent</var> is an object procedure type which specifies 
an event handler signalled when a selection is changed for a list box control. 
Arguments passed to the handler identify the list box control, and the origin 
for the change notification.
</p>
<p>
The <var>User</var> argument is <b>True</b> when the action performed includes 
one of the following:
</p>
<ul>
<li>An alpha-numeric key is pressed.</li>
<li>A cursor navigation key is pressed.</li>
<li>The Home, End, Page Up, or Page Down key is pressed.</li>
</ul>
<p>
TSelectionChangeEvent is the type used to implement the 
<var>OnSelectionChange</var> property in <var>TCustomListBox</var>. The 
application must implement and assign an object procedure using the signature 
for the handler to respond to the event notification.
</p>
</descr>
<seealso/>
</element>
<element name="TSelectionChangeEvent.Sender">
<short>The list box control for the notification.</short>
</element>
<element name="TSelectionChangeEvent.User">
<short>
<b>True</b> on entry if the change was caused by user interaction with the 
control. <b>False</b> if the selection was changed in program code, like 
setting the selected item index for the list box control.
</short>
</element>

<element name="TListBoxOption">
<short>Represents options available in a list box control.</short>
<descr/>
<seealso>
<link id="TListBoxOptions"/>
</seealso>
</element>
<element name="TListBoxOption.lboDrawFocusRect">
<short>Draws a focus rectangle when owner draw is enabled.</short>
</element>

<element name="TListBoxOptions">
<short>
Set type used to store values from the TListBoxOption enumeration.
</short>
<descr>
<p>
Set type used to store zero or more values for the <var>TListBoxOption</var> 
enumeration. <var>TListBoxOptions</var> is the type used for the 
<var>Options</var> property in <var>TCustomListBox</var>.
</p>
</descr>
<seealso>
<link id="TListBoxOption"/>
<link id="TCustomListBox.Options"/>
</seealso>
</element>

<element name="TCustomListBox">
<short>The base class for <var>TListBox</var>.</short>
<descr>
<p>
<var>TCustomListBox</var> is a <var>TWinControl</var> descendant which 
specifies the base class used for a list box control. A list box displays a 
scrollable list which allows selection of one or more of the item values.
</p>
<p>
TCustomListBox provides methods, properties, and events used to display, 
order, and select item values. The Items for the control can be assigned at 
design-time in the Lazarus IDE, or stored at run-time. Owner-drawn styles are 
available to render icons or bitmaps along with the text for the items, or 
using a variable height for list items. A Canvas property is provided for 
owner-drawn usage. Items in the list box can be display in one or more 
columns.
</p>
<p>
Do not create instances of TCustomListBox; use the <var>TListBox</var> 
descendant.
</p>
</descr>
<seealso>
<link id="TListBox"/>
<link id="#lcl.controls.TWinControl">TWinControl</link>
</seealso>
</element>

<element name="TCustomListBox.FCacheValid"/>
<element name="TCustomListBox.FCanvas"/>

<element name="TCustomListBox.FClickOnSelChange" link="#lcl.stdctrls.TCustomListBox.ClickOnSelChange"/>
<element name="TCustomListBox.FClickTriggeredBySelectionChange"/>
<element name="TCustomListBox.FColumns" link="#lcl.stdctrls.TCustomListBox.Columns"/>
<element name="TCustomListBox.FExtendedSelect" link="#lcl.stdctrls.TCustomListBox.ExtendedSelect"/>
<element name="TCustomListBox.FIntegralHeight" link="#lcl.stdctrls.TCustomListBox.IntegralHeight"/>
<element name="TCustomListBox.FItemHeight" link="#lcl.stdctrls.TCustomListBox.ItemHeight"/>
<element name="TCustomListBox.FItemIndex" link="#lcl.stdctrls.TCustomListBox.ItemIndex"/>
<element name="TCustomListBox.FItems" link="#lcl.stdctrls.TCustomListBox.Items"/>
<element name="TCustomListBox.FLockSelectionChange"/>
<element name="TCustomListBox.FMultiSelect" link="#lcl.stdctrls.TCustomListBox.MultiSelect"/>
<element name="TCustomListBox.FOnDrawItem" link="#lcl.stdctrls.TCustomListBox.OnDrawItem"/>
<element name="TCustomListBox.FOnMeasureItem" link="#lcl.stdctrls.TCustomListBox.OnMeasureItem"/>
<element name="TCustomListBox.FOnSelectionChange" link="#lcl.stdctrls.TCustomListBox.OnSelectionChange"/>
<element name="TCustomListBox.FScrollWidth" link="#lcl.stdctrls.TCustomListBox.ScrollWidth"/>
<element name="TCustomListBox.FSorted" link="#lcl.stdctrls.TCustomListBox.Sorted"/>
<element name="TCustomListBox.FStyle" link="#lcl.stdctrls.TCustomListBox.Style"/>
<element name="TCustomListBox.FTopIndex" link="#lcl.stdctrls.TCustomListBox.TopIndex"/>

<element name="TCustomListBox.GetCount" link="#lcl.stdctrls.TCustomListBox.Count"/>
<element name="TCustomListBox.GetCount.Result">
<short>Value for the Count property.</short>
</element>

<element name="TCustomListBox.GetScrollWidth" link="#lcl.stdctrls.TCustomListBox.ScrollWidth"/>
<element name="TCustomListBox.GetScrollWidth.Result">
<short>Value for the ScrollWidth property.</short>
</element>

<element name="TCustomListBox.GetTopIndex" link="#lcl.stdctrls.TCustomListBox.TopIndex"/>
<element name="TCustomListBox.GetTopIndex.Result">
<short>Value for the TopIndex property.</short>
</element>

<element name="TCustomListBox.RaiseIndexOutOfBounds">
<short>
Raises an exception if an invalid index position is used to access Items in 
the list box control.
</short>
<descr/>
<seealso/>
</element>
<element name="TCustomListBox.RaiseIndexOutOfBounds.AIndex">
<short>Index position generating the exception.</short>
</element>

<element name="TCustomListBox.SetColumns" link="#lcl.stdctrls.TCustomListBox.Columns"/>
<element name="TCustomListBox.SetColumns.AValue">
<short>New value for the Columns property.</short>
</element>

<element name="TCustomListBox.SetScrollWidth" link="#lcl.stdctrls.TCustomListBox.ScrollWidth"/>
<element name="TCustomListBox.SetScrollWidth.AValue">
<short>New value for the ScrollWidth property.</short>
</element>

<element name="TCustomListBox.SetTopIndex" link="#lcl.stdctrls.TCustomListBox.TopIndex"/>
<element name="TCustomListBox.SetTopIndex.AValue">
<short>New value for the TopIndex property.</short>
</element>

<element name="TCustomListBox.UpdateSelectionMode">
<short>
Sends values for ExtendedSelect and MultiSelect to the widgetset class.
</short>
<descr/>
<seealso/>
</element>

<element name="TCustomListBox.UpdateSorted">
<short>Sends values in Items and Sorted to the widgetset class.</short>
<descr/>
<seealso/>
</element>

<element name="TCustomListBox.LMDrawListItem">
<short>Handles the LM_DrawListItem message for the control.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomListBox.LMDrawListItem.TheMessage">
<short>Message handled in the method.</short>
</element>

<element name="TCustomListBox.LMMeasureItem">
<short>Handles the LM_MeasureItem message for the control.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomListBox.LMMeasureItem.TheMessage">
<short>Message handled in the method.</short>
</element>

<element name="TCustomListBox.LMSelChange">
<short>Handles the LM_SelChange message for the control.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomListBox.LMSelChange.TheMessage">
<short>Message handled in the method.</short>
</element>

<element name="TCustomListBox.WMLButtonUp">
<short>
Handles Left mouse button Up events for the control.
</short>
<descr>
Prevents Click from being called twice when using ClickOnSelChange to trigger 
a click event.
</descr>
<seealso>
<link id="#lcl.controls.TControl.WMLButtonUp">TControl.WMLButtonUp</link>
</seealso>
</element>
<element name="TCustomListBox.WMLButtonUp.Message">
<short>Message handled in the method.</short>
</element>

<element name="TCustomListBox.SendItemSelected">
<short>
Notifies the widgetset class when the selected item in the control is changed.
</short>
<descr/>
<seealso/>
</element>
<element name="TCustomListBox.SendItemSelected.Index">
<short>Ordinal position for the item.</short>
</element>
<element name="TCustomListBox.SendItemSelected.IsSelected">
<short>
<b>True</b> when the item is selected; <b>False</b> when it is not selected.
</short>
</element>

<element name="TCustomListBox.ClearSelectedCache">
<short>Resets cached item selections for the control.</short>
<descr/>
<seealso/>
</element>

<element name="TCustomListBox.SetSelectedCache">
<short>Sets the cached selection state for the specified item.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomListBox.SetSelectedCache.Index">
<short>Ordinal position in Items to update in the cache.</short>
</element>
<element name="TCustomListBox.SetSelectedCache.IsSelected">
<short>Selection state for the cached item.</short>
</element>

<element name="TCustomListBox.GetSelectedCache">
<short>Gets the selection state for the specified item from the cache.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomListBox.GetSelectedCache.Result">
<short><b>True</b> when the item is selected in the cache.</short>
</element>
<element name="TCustomListBox.GetSelectedCache.Index">
<short>Ordinal position in Items for the cached item.</short>
</element>

<element name="TCustomListBox.WSRegisterClass" link="#lcl.lclclasses.TLCLComponent.WSRegisterClass"/>

<element name="TCustomListBox.AssignItemDataToCache">
<short>Copies selected state for an item to the cache.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomListBox.AssignItemDataToCache.AIndex">
<short>Ordinal position in Items for the entry updated in the cache.</short>
</element>
<element name="TCustomListBox.AssignItemDataToCache.AData">
<short>Pointer to the data stored in the cache for the specified item.</short>
</element>

<element name="TCustomListBox.AssignCacheToItemData">
<short>Sends the cached selection state to the widget.</short>
<descr>Called to restore the ItemData after a handle is created.</descr>
<seealso/>
</element>
<element name="TCustomListBox.AssignCacheToItemData.AIndex">
<short>Ordinal position for the item data read from the cache.</short>
</element>
<element name="TCustomListBox.AssignCacheToItemData.AData">
<short>Pointer to the data read from the cache for the specified item.</short>
</element>

<element name="TCustomListBox.BeforeDragStart">
<short>
Notifies the widgetset class that a Drag operation is starting.
</short>
<descr>
<p>
<var>BeforeDragStart</var> is an overridden method in 
<var>TCustomListBox</var> used to perform actions needed to start a drag 
operation for the control. In TCustomListBox, this means that the DragStart 
method in the widgetset class is called. No actions are performed in the 
method if the Handle has not been allocated for the control.
</p>
<p>
BeforeDragStart is called when mouse up, down, and move messages are handled 
by the DragManager for an application.
</p>
</descr>
<seealso>
<link id="TControl.BeforeDragStart"/>
</seealso>
</element>

<element name="TCustomListBox.BeginAutoDrag">
<short>
Starts a non-immediate drag / dock operation for the control.
</short>
<descr>
<p>
Calls the inherited <var>BeginDrag</var> method with the <var>Immediate</var> 
argument set to <b>False</b>. The drag operation is detected and handled by 
the DragManager for the application.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.BeginAutoDrag">TControl.BeginAutoDrag</link>
</seealso>
</element>

<element name="TCustomListBox.CalculateStandardItemHeight">
<short>
Determines the standard Height of the items, when the widget has yet been 
created.
</short>
<descr>
<p>
<var>CalculateStandardItemHeight</var> is an <var>Integer</var> function used 
to get the standard height for items in the control. 
CalculateStandardItemHeight is used in descendent classes, like 
<var>TCustomCheckListBox</var>, when its Style property is set to
<var>lbStandard</var> and the Handle for the control (and its Canvas) has not 
been allocated.
</p>
<p>
CalculateStandardItemHeight gets the height for items using a temporary 
TBitmap instance. The Font for the control is assigned to the Canvas in the 
the bitmap instance, and its TextHeight method is called to get the return 
value.
</p>
<p>
CalculateStandardItemHeight is called from the FontChanged method in the 
TCustomCheckListBox descendent.
</p>
</descr>
<seealso>
<link id="#lcl.checklst.TCustomCheckListBox.FontChanged">TCustomCheckListBox.FontChanged</link>
</seealso>
</element>
<element name="TCustomListBox.CalculateStandardItemHeight.Result">
<short>Height for the items in the control.</short>
</element>

<element name="TCustomListBox.CreateParams">
<short>
Initializes the creation parameters for the class instance.
</short>
<descr>
<p>
<var>CreateParams</var> is an overridden method used initialize the creation 
parameters for the class instance.
</p>
<p>
CreateParams calls the inherited method, and ensures that the 
<var>Params</var> argument is updated to include style constants needed for 
properties in the list box control. These include the constants needed for 
the <var>Sorted</var>, <var>MultiSelect</var>, and <var>Columns</var> 
properties. Owner-drawn constants are also included based on the value in 
<var>Style</var>. Style constants are always included for scrollbars 
(horizontal and vertical), non-integral item height, string content, and 
notify events.
</p>
</descr>
<seealso>
<link id="TCustomListBox.Sorted"/>
<link id="TCustomListBox.MultiSelect"/>
<link id="TCustomListBox.Columns"/>
<link id="TCustomListBox.Style"/>
<link id="#lcl.controls.TWinControl.CreateParams">TWinControl.CreateParams</link>
</seealso>
</element>
<element name="TCustomListBox.CreateParams.Params">
<short>The creation parameters and flags for the instance.</short>
</element>

<element name="TCustomListBox.InitializeWnd">
<short>
Updates Items from the widgetset class and invalidates the item cache.
</short>
<descr>
<p>
<var>InitializeWnd</var> is an overridden method used to synchronize the 
control and the widgetset class. InitializeWnd copies values for the 
<var>Items</var> property from the ones allocated in the widgetset class. The 
value in <var>ItemIndex</var> is passed to the widgetset class when needed. 
An internal flag is reset to invalidate the item cache for the control, and 
the item data from the widgetset class is applied. Finally, the value in 
<var>ScrollWidth</var> is passed to the widgetset class.
</p>
</descr>
<seealso>
<link id="TCustomListBox.Items"/>
<link id="TCustomListBox.Sorted"/>
<link id="TCustomListBox.ItemIndex"/>
<link id="TCustomListBox.ScrollWidth"/>
<link id="#lcl.controls.TWinControl.InitializeWnd">TWinControl.InitializeWnd</link>
</seealso>
</element>

<element name="TCustomListBox.DestroyWnd">
<short>Frees the handle for the window and its canvas.</short>
<descr>
<p>
Calls the inherited method to free the window handle and update flags for the 
control. Frees the handle for the <var>Canvas</var> when assigned.
</p>
</descr>
<seealso>
<link id="TCustomListBox.Canvas"/>
<link id="#lcl.controls.TWinControl.DestroyWnd">TWinControl.DestroyWnd</link>
</seealso>
</element>

<element name="TCustomListBox.FinalizeWnd">
<short>Caches the Items stored in the widgetset class.</short>
<descr>
<p>
<var>FinalizeWnd</var> is an overridden method used to capture values from 
the widgetset class when the handle is destroyed or re-created. FinalizeWnd 
gets the value for <var>ItemIndex</var> when the handle is being re-created. 
Values in <var>Items</var> (and its cached item data) are copied before they 
are freed in the widgetset class. The value in <var>Sorted</var> is 
re-applied to the new values in Items.
</p>
<p>
FinalizeWnd calls the inherited method prior to exit.
</p>
</descr>
<seealso>
<link id="TCustomListBox.Items"/>
<link id="TCustomListBox.Sorted"/>
<link id="#lcl.controls.TWinControl.FinalizeWnd">TWinControl.FinalizeWnd</link>
</seealso>
</element>

<element name="TCustomListBox.GetControlClassDefaultSize" link="#lcl.controls.TControl.GetControlClassDefaultSize"/>
<element name="TCustomListBox.GetControlClassDefaultSize.Result">
<short>Default dimensions for a new instance of the class.</short>
</element>

<element name="TCustomListBox.CheckIndex">
<short>
Ensures that the Item index is within the bounds for the Items in the control.
</short>
<descr>
<p>
<var>CheckIndex</var> is a procedure used to ensure that the specified index 
value is within the range of values allowed for the Items in the control. 
CheckIndex examines the value in <var>AIndex</var>, and raises an 
<var>IndexOutOfBounds</var> exception if it is not in the range 0 (zero) to 
Items.Count-1.
</p>
<p>
CheckIndex is used in the access specifiers for the <var>Selected</var> 
property (GetSelected, SetSelected).
</p>
</descr>
<errors>
Raises an <var>IndexOutOfBounds</var> exception when the index is out of 
bounds.
</errors>
<seealso>
<link id="TCustomListBox.Items"/>
<link id="TCustomListBox.Selected"/>
<link id="TCustomListBox.GetSelected"/>
<link id="TCustomListBox.SetSelected"/>
</seealso>
</element>
<element name="TCustomListBox.CheckIndex.AIndex">
<short>Index position examined in the method.</short>
</element>

<element name="TCustomListBox.GetItemHeight">
<short>Gets the value for the ItemHeight property.</short>
<descr/>
<seealso>
<link id="TCustomListBox.ItemHeight"/>
</seealso>
</element>
<element name="TCustomListBox.GetItemHeight.Result">
<short>Value for the ItemHeight property.</short>
</element>

<element name="TCustomListBox.GetItemIndex">
<short>Gets the value for the ItemIndex property.</short>
<descr/>
<seealso>
<link id="TCustomListBox.ItemIndex"/>
</seealso>
</element>
<element name="TCustomListBox.GetItemIndex.Result">
<short>Value for the ItemIndex property.</short>
</element>

<element name="TCustomListBox.GetSelCount">
<short>Gets the value for the SelCount property.</short>
<descr/>
<seealso>
<link id="TCustomListBox.SelCount"/>
</seealso>
</element>
<element name="TCustomListBox.GetSelCount.Result">
<short>Value for the SelCount property.</short>
</element>

<element name="TCustomListBox.GetSelected">
<short>Gets the value for the Selected property.</short>
<descr/>
<seealso>
<link id="TCustomListBox.Selected"/>
</seealso>
</element>
<element name="TCustomListBox.GetSelected.Result">
<short>Value for the Selected property.</short>
</element>
<element name="TCustomListBox.GetSelected.Index">
<short>
Ordinal position for the item returned as the property value.
</short>
</element>

<element name="TCustomListBox.GetCachedDataSize">
<short>Returns the size for cached item data in the control.</short>
<descr>
<p>
Passed as an argument when creating the <var>TExtendedStringList</var> 
instance used in the Items property.
</p>
</descr>
<seealso>
<link id="#lazutils.extendedstrings.TExtendedStringList">TExtendedStringList</link>
</seealso>
</element>
<element name="TCustomListBox.GetCachedDataSize.Result">
<short>Number f bytes required for the item data in the cache.</short>
</element>

<element name="TCustomListBox.GetCachedData">
<short>Returns a pointer to the cached item data.</short>
<descr>
<p>
Gets a pointer to the item data for the specified list box item. The return 
value contains the attributes stored in Items at the position in AIndex. 
Items is cast to a TExtendedStringList instance to access its indexed Records 
property.
</p>
</descr>
<errors>
Raises an InvalidOperation exception when the cache is marked as invalid, i. 
e. when the widgetset class has already been created.
</errors>
<seealso>
<link id="TCustomListBox.Items"/>
<link id="#lazutils.extendedstrings.TExtendedStringList.Records">TExtendedStringList.Records</link>
</seealso>
</element>
<element name="TCustomListBox.GetCachedData.Result">
<short>Pointer to the item data in the cache.</short>
</element>
<element name="TCustomListBox.GetCachedData.AIndex">
<short>
Ordinal position in Items for the values retrieved in the method.
</short>
</element>

<element name="TCustomListBox.SetExtendedSelect">
<short>Sets the value for the ExtendedSelect property.</short>
<descr/>
<seealso>
<link id="TCustomListBox.ExtendedSelect"/>
</seealso>
</element>
<element name="TCustomListBox.SetExtendedSelect.Val">
<short>New value for the ExtendedSelect property.</short>
</element>

<element name="TCustomListBox.SetItemIndex">
<short>Sets the value for the ItemIndex property.</short>
<descr/>
<seealso>
<link id="TCustomListBox.ItemIndex"/>
</seealso>
</element>
<element name="TCustomListBox.SetItemIndex.AIndex">
<short>New value for the ItemIndex property.</short>
</element>

<element name="TCustomListBox.SetItems">
<short>Sets the value for the Items property.</short>
<descr/>
<seealso>
<link id="TCustomListBox.Items"/>
</seealso>
</element>
<element name="TCustomListBox.SetItems.Value">
<short>New value for the Items property.</short>
</element>

<element name="TCustomListBox.SetItemHeight">
<short>Sets the value for the ItemHeight property.</short>
<descr/>
<seealso>
<link id="TCustomListBox.ItemHeight"/>
</seealso>
</element>
<element name="TCustomListBox.SetItemHeight.Value">
<short>New value for the ItemHeight property.</short>
</element>

<element name="TCustomListBox.SetMultiSelect">
<short>Sets the value for the MultiSelect property.</short>
<descr/>
<seealso>
<link id="TCustomListBox.MultiSelect"/>
</seealso>
</element>
<element name="TCustomListBox.SetMultiSelect.Val">
<short>New value for the MultiSelect property.</short>
</element>

<element name="TCustomListBox.SetSelected">
<short>Sets the value for the Selected property.</short>
<descr/>
<seealso>
<link id="TCustomListBox.Selected"/>
</seealso>
</element>
<element name="TCustomListBox.SetSelected.Index">
<short>Ordinal position for the item updated in the method.</short>
</element>
<element name="TCustomListBox.SetSelected.Val">
<short>New value for the Selected property.</short>
</element>

<element name="TCustomListBox.SetSorted">
<short>Sets the value for the Sorted property.</short>
<descr/>
<seealso>
<link id="TCustomListBox.Sorted"/>
</seealso>
</element>
<element name="TCustomListBox.SetSorted.Val">
<short>New value for the Sorted property.</short>
</element>

<element name="TCustomListBox.SetStyle">
<short>Sets the value for the Style property.</short>
<descr/>
<seealso>
<link id="TCustomListBox.Style"/>
</seealso>
</element>
<element name="TCustomListBox.SetStyle.Val">
<short>New value for the Style property.</short>
</element>

<element name="TCustomListBox.DrawItem">
<short>Paints an item in owner-draw mode.</short>
<descr>
<p>
<var>DrawItem</var> is a procedure used to render an item in the list box 
control using the owner-draw mode.
</p>
<p>
<var>Item</var> contains the ordinal position in Items for the item drawn in 
the method.
</p>
<p>
<var>ARect</var> is a <var>TRect</var> instance with the canvas coordinates 
where the drawing operation is performed.
</p>
<p>
<var>State</var> contains the drawing state for the owner-drawn item.
</p>
<p>
DrawItem signals the <var>OnDrawItem</var> event handler (when assigned). An 
internal default drawing method is used when the event handler has not been 
implemented.
</p>
<p>
DrawItem is called when the <b>LM_DrawListItem</b> message is handled for the 
control.
</p>
</descr>
<seealso>
<link id="TCustomListBox.OnDrawItem"/>
<link id="TCustomListBox.Canvas"/>
<link id="TDrawItemEvent"/>
</seealso>
</element>
<element name="TCustomListBox.DrawItem.Index">
<short>Ordinal position for the item drawn in the method.</short>
</element>
<element name="TCustomListBox.DrawItem.ARect">
<short>Canvas rectangle with the coordinate for the drawing operation.</short>
</element>
<element name="TCustomListBox.DrawItem.State">
<short>Drawing state for the item.</short>
</element>

<element name="TCustomListBox.DoAutoAdjustLayout">
<short>
Performs actions needed to auto-adjust the control using the specified layout 
policy.
</short>
<descr>
<p>
<var>DoAutoAdjustLayout</var> is an overridden method used to apply an 
auto-adjust layout policy to the control. DoAutoAdjustLayout calls the 
inherited method on entry.
</p>
<p>
DoAutoAdjustLayout ensures that the item height for the control is scaled 
using the factor in <var>AYProportion</var> when <var>AMode</var> contains 
the <var>lapAutoAdjustWithoutHorizontalScrolling</var> or 
<var>lapAutoAdjustForDPI</var> layout adjustment policy values.
</p>
<p>
DoAutoAdjustLayout is called from the <var>AutoAdjustLayout</var> method.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.DoAutoAdjustLayout">TControl.DoAutoAdjustLayout</link>
</seealso>
</element>
<element name="TCustomListBox.DoAutoAdjustLayout.AMode">
<short>Layout adjustment policy applied in the method.</short>
</element>
<element name="TCustomListBox.DoAutoAdjustLayout.AXProportion">
<short>Factor used to scale horizontal dimensions.</short>
</element>
<element name="TCustomListBox.DoAutoAdjustLayout.AYProportion">
<short>Factor used to scale vertical dimensions.</short>
</element>

<element name="TCustomListBox.DoSelectionChange">
<short>Signals the OnSelectionChange handler.</short>
<descr>
<p>
<var>DoSelectionChange</var> performs actions needed when the selected item 
in the list box control has been changed. DoSelectionChange signals the 
<var>OnSelectionChange</var> event handler (when assigned).
</p>
<p>
<var>User</var> indicates if the selection was changed as a result of user 
interaction with the control, as opposed to a change performed in code at 
run-time. When User is set to <b>True</b>, and <var>ClickOnSelChange</var> is 
enabled, an internal flag is set to prevent execution of the method by a 
subsequent mouse click.
</p>
<p>
DoSelectionChange is called when the <b>LM_SelChange</b> message is handled 
for the control, and when a new value is assigned to the <var>ItemIndex</var> 
property. User is set to <b>False</b> when the selection change is caused by 
setting a new value in ItemIndex.
</p>
</descr>
<seealso>
<link id="TCustomListBox.OnSelectionChange"/>
<link id="TCustomListBox.ItemIndex"/>
<link id="TCustomListBox.ClickOnSelChange"/>
</seealso>
</element>
<element name="TCustomListBox.DoSelectionChange.User">
<short>
<b>True</b> when the selection change results from user interaction with the 
control.
</short>
</element>

<element name="TCustomListBox.SendItemIndex">
<short>Sends the value in ItemIndex to the widgetset class instance.</short>
<descr>
<p>
Called at run-time when a new value is assigned to the <var>ItemIndex</var> 
property and the <var>Handle</var> is valid for the widgetset class instance. 
It is called before the <var>OnSelectionChange</var> event handler is 
signalled.
</p>
</descr>
<seealso>
<link id="TCustomListBox.ItemIndex"/>
<link id="TCustomListBox.OnSelectionChange"/>
</seealso>
</element>

<element name="TCustomListBox.WMGetDlgCode">
<short>
Handles Tab, Return, Cursor keys, and Escape characters in control messages.
</short>
<descr/>
<seealso/>
</element>
<element name="TCustomListBox.WMGetDlgCode.Message">
<short>Message examined in the method.</short>
</element>

<element name="TCustomListBox.Create">
<short>Constructor for the class instance.</short>
<descr>
<p>
<var>Create</var> is the overridden constructor for the class instance, and 
calls the inherited constructor on entry. Create sets the component style to 
<b>csListBox</b>, and allocates resources needed for the <var>Items</var> and 
<var>Canvas</var> properties. Create sets the default values for properties, 
including:
</p>
<dl>
<dt>BorderStyle</dt>
<dd>Set to bsSingle.</dd>
<dt>ClickOnSelChange</dt>
<dd>Set to <b>True</b>.</dd>
<dt>ItemIndex</dt>
<dd>Set to -1 to indicate no item is selected.</dd>
<dt>ExtendedSelect</dt>
<dd>Set to <b>True</b>.</dd>
<dt>Options</dt>
<dd>Set to DefOptions.</dd>
<dt>Canvas</dt>
<dd>Cast to a TControlCanvas instance for the current class instance.</dd>
<dt>ParentColor</dt>
<dd>Set to <b>False</b>.</dd>
<dt>TabStop</dt>
<dd>Set to <b>True</b>.</dd>
</dl>
<p>
Create calls <var>SetInitialBounds</var> to assign the dimensions from the 
<var>GetControlClassDefaultSize</var> method.
</p>
</descr>
<seealso>
<link id="TCustomListBox.Items"/>
<link id="TCustomListBox.Canvas"/>
<link id="#lcl.controls.TWinControl.Create">TWinControl.Create</link>
</seealso>
</element>
<element name="TCustomListBox.Create.TheOwner">
<short>Owner of the class instance.</short>
</element>

<element name="TCustomListBox.Destroy">
<short>Destructor for the class instance.</short>
<descr>
<p>
<var>Destroy</var> is the overridden destructor for the class instance. 
Destroy frees resources allocated for the <var>Items</var> and 
<var>Canvas</var> properties. Destroy calls the inherited destructor prior to 
exiting from the method.
</p>
</descr>
<seealso>
<link id="TCustomListBox.Create"/>
<link id="TCustomListBox.Items"/>
<link id="TCustomListBox.Canvas"/>
</seealso>
</element>

<element name="TCustomListBox.AddItem">
<short>Adds an item to the list.</short>
<descr>
<p>
<var>AddItem</var> is a method used to add a string (and an optional 
associated object) to the <var>Items</var> for the control. AddItem calls the 
<var>AddObject</var> method in Items using <var>Item</var> and 
<var>AnObject</var> as arguments.
</p>
<p>
<var>Item</var> contains the string value added to the Items in the control.
</p>
<p>
<var>AnObject</var> is an optional object instance associated with the item, 
and contains <b>Nil</b> when an object instance has not been assigned. The 
object can be retrieved using the <var>Items.Objects</var> property for the 
<var>ItemIndex</var>, and must be cast to the required class type to access 
values in the object instance.
</p>
</descr>
<seealso>
<link id="TCustomListBox.Items"/>
</seealso>
</element>
<element name="TCustomListBox.AddItem.Item">
<short>The item text.</short>
</element>
<element name="TCustomListBox.AddItem.AnObject">
<short>The associated object, or <b>Nil</b> when not used.</short>
</element>

<element name="TCustomListBox.Click">
<short>Performs the Changed method when the control is clicked.</short>
<descr>
<p>
<var>Click</var> is an overridden method in <var>TCustomListBox</var>, and 
calls the inherited method on entry. Click calls the <var>Changed</var> 
method (inherited from <var>TControl</var>) to perform the <b>CM_CHANGED</b> 
control message. Click is used in the implementation of the 
<var>DoSelectionChange</var> method when the control is changed by a user 
interaction.
</p>
</descr>
<seealso>
<link id="TCustomListBox.DoSelectionChange"/>
<link id="#lcl.controls.TControl.Changed">TControl.Changed</link>
<link id="#lcl.controls.TControl.Click">TControl.Click</link>
</seealso>
</element>

<element name="TCustomListBox.Clear">
<short>Removes all items from the list box control.</short>
<descr>
<p>
<var>Clear</var> is a procedure used to remove all values stored in the 
<var>Items</var> property. Clear calls the Clear method in Items, and sets 
the value in <var>ItemIndex</var> to <b>-1</b> to indicate that no item is 
selected in the control.
</p>
</descr>
<seealso>
<link id="TCustomListBox.Items"/>
<link id="TCustomListBox.ItemIndex"/>
<link id="#lazutils.extendedstrings.TExtendedStringList.Clear">TExtendedStringList.Clear</link>
<link id="#rtl.classes.TStrings.Clear">TStrings.Clear</link>
</seealso>
</element>

<element name="TCustomListBox.ClearSelection">
<short>Unselects all items in the control.</short>
<descr>
<p>
<var>ClearSelection</var> is a procedure used to clear one or more selected 
items in the control. When <var>MultiSelect</var> is enabled, values in the 
<var>Selected</var> property are reset to <b>False</b>. Otherwise, the 
<var>ItemIndex</var> property is set to <b>-1</b> to indicate that no item is 
selected in the control.
</p>
</descr>
<seealso>
<link id="TCustomListBox.Items"/>
<link id="TCustomListBox.ItemIndex"/>
<link id="TCustomListBox.Selected"/>
<link id="TCustomListBox.SelectRange"/>
</seealso>
</element>

<element name="TCustomListBox.GetIndexAtXY">
<short>Gets the index for the item at the given client coordinates.</short>
<descr>
<p>
<var>GetIndexAtXY</var> is an <var>Integer</var> function used to get the 
ordinal position in <var>Items</var> for the list item at the specified 
coordinates. No actions are performed in the method if a handle has not been 
allocated for the control (the widgetset class instance). GetIndexAtXY calls 
the <var>GetIndexAtXY</var> method in the widgetset class to get the return 
value.
</p>
</descr>
<seealso>
</seealso>
</element>
<element name="TCustomListBox.GetIndexAtXY.Result">
<short>The item index, -1 if an item could not be found.</short>
</element>
<element name="TCustomListBox.GetIndexAtXY.X">
<short>The X client coordinate.</short>
</element>
<element name="TCustomListBox.GetIndexAtXY.Y">
<short>The Y client coordinate.</short>
</element>

<element name="TCustomListBox.GetIndexAtY">
<short>
Gets the index position for the item at the specified vertical coordinate.
</short>
<descr>
<p>
Calls GetIndextAtXY to get the return value using the vertical coordinate in 
Y. The value 1 is used as the horizontal coordinate.
</p>
</descr>
<seealso>
<link id="TCustomListBox.GetIndexAtXY"/>
</seealso>
</element>
<element name="TCustomListBox.GetIndexAtY.Result">
<short>The item index, -1 if no item could be found.</short>
</element>
<element name="TCustomListBox.GetIndexAtY.Y">
<short>The vertical client coordinate.</short>
</element>

<element name="TCustomListBox.GetSelectedText">
<short>Get the text for all selected items as a string value.</short>
<descr>
<p>
<var>GetSelectedText</var> is a <var>String</var> function used to retrieve a 
string with all selected items in the control. The return values uses each 
selected entry in Items separated by the LineEnding character sequence for 
the platform or operating system. The return value is an empty string ('') 
when <var>ItemIndex</var> does not contain a positive non-zero value (no item 
is selected) or <var>SelCount</var> contain 0 (zero).
</p>
<p>
GetSelectedText iterates over the values in Items, and includes the string 
when its <var>Selected</var> property is set to <b>True</b>. This is useful 
when <var>MultiSelect</var> is enabled for the control.
</p>
</descr>
<seealso>
<link id="TCustomListBox.Items"/>
<link id="TCustomListBox.Selected"/>
<link id="TCustomListBox.MultiSelect"/>
<link id="TCustomListBox.SelCount"/>
</seealso>
</element>
<element name="TCustomListBox.GetSelectedText.Result">
<short>The item strings, one per line.</short>
</element>

<element name="TCustomListBox.ItemAtPos">
<short>Get the item index for the given client coordinates.</short>
<descr>
<p>
<var>ItemAtPos</var> is an <var>Integer</var> function used to get the index 
position in Items for the value at the specified screen coordinates.
</p>
<p>
<var>Pos</var> is <var>TPoint</var> instance with the X and Y coordinates 
used in the method.
</p>
<p>
<var>Existing</var> indicates whether the return value is set to -1 or the 
number of entries in <var>Items</var> when Pos refers to entry which does not 
exist. When Existing is set to <b>True</b>, -1 is returned for an invalid 
entry. Otherwise, the value in <var>Item.Count</var> is returned.
</p>
<p>
ItemAtPos calls <var>GetIndexAtXY</var> using the X and Y values in Pos to 
locate the index for the item.
</p>
</descr>
<seealso>
<link id="TCustomListBox.GetIndexAtXY"/>
</seealso>
</element>
<element name="TCustomListBox.ItemAtPos.Result">
<short>The calculated item index, can be out of the Items bounds.</short>
</element>
<element name="TCustomListBox.ItemAtPos.Pos">
<short>The item position.</short>
</element>
<element name="TCustomListBox.ItemAtPos.Existing">
<short>
<b>True</b> when the index is requested for insertion of a new item.
</short>
</element>

<element name="TCustomListBox.ItemRect">
<short>
Returns the client rectangle for an item (including scrollbar area).
</short>
<descr>
<p>
<var>Index</var> must be in the range 0 to <var>ItemCount</var> to be 
considered valid. The result is valid also for the next item, that will be 
added subsequently.
</p>
</descr>
<seealso/>
</element>
<element name="TCustomListBox.ItemRect.Result">
<short>The item area; all zeroes for an invalid item index.</short>
</element>
<element name="TCustomListBox.ItemRect.Index">
<short>The tentative item index.</short>
</element>

<element name="TCustomListBox.ItemVisible">
<short>
Returns <b>True</b> if the item is at least partially visible in the 
scrollable list.
</short>
<descr>
<p>
<var>ItemVisible</var> is a <var>Boolean</var> function used to determine if 
the item at the position in <var>Index</var> is at least partially visible in 
the list box control. The return value is <b>False</b> for the following 
conditions:
</p>
<ul>
<li>Index is out of range for the values in Items.</li>
<li>An item rectangle could not be retrieved from the widgetset class.</li>
<li>
The item rectangle is invalid for the control (where Bottom &lt; 0 or Top 
&gt; ClientHeight).
</li>
</ul>
<p>
Use <var>ItemFullyVisible</var> to determine if the specified list box item 
is fully visible in the control.
</p>
</descr>
<seealso>
<link id="TCustomListBox.ItemFullyVisible"/>
</seealso>
</element>
<element name="TCustomListBox.ItemVisible.Result">
<short>
<b>True</b> when the specified item is at least partially visible in the 
control.
</short>
</element>
<element name="TCustomListBox.ItemVisible.Index">
<short>Ordinal position for the item examined in the method.</short>
</element>

<element name="TCustomListBox.ItemFullyVisible">
<short>
Returns <b>True</b> if the item is fully visible in the scrollable list.
</short>
<descr>
<p>
<var>ItemFullyVisible</var> is a <var>Boolean</var> function used to 
determine the item at the position in <var>Index</var> is fully visible in 
the list box control. The return value is <b>False</b> under the following 
conditions:
</p>
<ul>
<li>Index is out of range for the values in Items.</li>
<li>An item rectangle could not be retrieved from the widgetset class.</li>
<li>
The item rectangle is invalid or obscured in the control (where Top &lt; 0 or 
Bottom &gt; ClientHeight).
</li>
</ul>
<p>
Use <var>ItemVisible</var> to determine if the specified item is at least 
partially visible in the list box control.
</p>
</descr>
<seealso>
<link id="TCustomListBox.ItemVisible"/>
</seealso>
</element>
<element name="TCustomListBox.ItemFullyVisible.Result">
<short>
<b>True</b> when the specified item is fully visible in the list box control.
</short>
</element>
<element name="TCustomListBox.ItemFullyVisible.Index">
<short>Ordinal position for the item examined in the method.</short>
</element>

<element name="TCustomListBox.LockSelectionChange">
<short>Blocks selection changes during update to the widgetset class.</short>
<descr>
<p>
Increments the internal counter used to track selection change events. Used 
in the implementation of the <var>AssignCacheToItemData</var>, 
<var>InitializeWnd</var>, <var>FinalizeWnd</var>, 
<var>UpdateSelectionMode</var>, <var>UpdateSorted</var>, and 
<var>SetItems</var> methods.
</p>
<p>
The value is examined when the <b>LM_SelChange</b> message is handled for the 
control.
</p>
<p>
<var>UnlockSelectionChange</var> is used to decrement the internal counter.
</p>
</descr>
<seealso>
<link id="TCustomListBox.UnlockSelectionChange"/>
</seealso>
</element>

<element name="TCustomListBox.MakeCurrentVisible">
<short>
Makes the item at ItemIndex visible, possibly scrolling the list.
</short>
<descr>
<p>
<var>MakeCurrentVisible</var> is a procedure used to ensure that the current 
item selected in the control is also visible. The current selection is the 
value in Items stored at the position in ItemIndex. No actions are performed 
in the method when ItemIndex is out of bounds.
</p>
<p>
MakeCurrentVisible calls <var>ItemFullyVisible</var> to determine if the item 
at <var>ItemIndex</var> is already visible in the scrollable list. No 
additional actions are needed in the method when the item is already visible. 
Otherwise, the value in ItemIndex is assigned to the <var>TopIndex</var> 
property which causes the selected item to scroll to the top of the visible 
area in the list box.
</p>
</descr>
<seealso>
<link id="TCustomListBox.ItemIndex"/>
<link id="TCustomListBox.ItemFullyVisible"/>
<link id="TCustomListBox.ItemVisible"/>
<link id="TCustomListBox.TopIndex"/>
<link id="TCustomListBox.Items"/>
</seealso>
</element>

<element name="TCustomListBox.MeasureItem">
<short>Gets the height for an item in the list.</short>
<descr>
<p>
<var>MeasureItem</var> is a procedure used to get the height for an item 
displayed in the list box control.
</p>
<p>
<var>Integer</var> is the ordinal position in <var>Items</var> for the value 
measured in the method.
</p>
<p>
<var>TheHeight</var> is a variable parameter which contains the calculated 
height for the text in the item. The value on entry is the text height for 
the current font calculated using the <var>Canvas</var> for the control. The 
value returned in TheHeight is assigned to the <var>ItemHeight</var> property 
when it is a non-zero value.
</p>
<p>
MeasureItems signals the <var>OnMeasureItem</var> event handler (when 
assigned) using the arguments passed to the method. An application must 
implement an object procedure to calculate the height for the requested item 
using the logic required.
</p>
<p>
MeasureItem is called when the <b>LM_MeasureItem</b> message is handled for 
the control.
</p>
</descr>
<seealso>
<link id="TCustomListBox.OnMeasureItem"/>
<link id="TCustomListBox.ItemHeight"/>
<link id="TCustomListBox.Items"/>
<link id="TCustomListBox.Font"/>
<link id="TCustomListBox.Canvas"/>
</seealso>
</element>
<element name="TCustomListBox.MeasureItem.Index">
<short>
Ordinal position in Items for the string examined in the method.
</short>
</element>
<element name="TCustomListBox.MeasureItem.TheHeight">
<short>
The height of the item in pixels, can be changed by the event handler.
</short>
</element>

<element name="TCustomListBox.SelectAll">
<short>Selects all items in the list (in ExtendedSelect mode).</short>
<descr>
<p>
<var>SelectAll</var> is a procedure used to mark all of the values defined in 
the <var>Items</var> property as <var>Selected</var>. No actions are 
performed in the method when Items is empty (Count is 0). SelectAll calls the 
<var>SelectRange</var> method to select items at position 0 (zero) through 
Count-1 (inclusive).
</p>
<p>
Use Selected to change the selection state for an individual item when 
<var>MultiSelect</var> is enabled. Set <var>ItemIndex</var> to -1 to clear 
the current selection when MultiSelect is not used.
</p>
</descr>
<seealso>
<link id="TCustomListBox.ExtendedSelect"/>
<link id="TCustomListBox.SelectRange"/>
<link id="TCustomListBox.Count"/>
<link id="TCustomListBox.Selected"/>
<link id="TCustomListBox.MultiSelect"/>
<link id="TCustomListBox.ItemIndex"/>
</seealso>
</element>

<element name="TCustomListBox.SelectRange">
<short>
Changes the selection state for a range of Items in the control.
</short>
<descr>
<p>
<var>SelectRange</var> is a procedure used to change the selection state for 
a range of <var>Items</var> in the list box control to the value specified in 
<var>ASelected</var>.
</p>
<p>
<var>ALow</var> and <var>AHigh</var> contain the ordinal positions in Items 
affected in the method. ALow must be a positive integer value or zero 
(<b>0</b>). AHigh must be less than the value in the Count property for 
Items. When either value is out of range, no actions are performed in the 
method.
</p>
<p>
When <var>MultiSelect</var> is set to <b>True</b>, the widgetset class is 
notified of the changes to item selection state and 
<var>DoSelectionChange</var> is called to trigger the 
<var>OnSelectionChange</var> event handler (when assigned). No actions are 
performed in the method when MultiSelect is set to <b>False</b>.
</p>
<p>
SelectRange is similar to the <var>SelectAll</var> method, but limits the 
affected items to the specified range of values - and only when MultiSelect 
is enabled.
</p>
<p>
Use <var>SelCount</var> to determine the number of Items selected in the 
control when MultiSelect is enabled.
</p>
<p>
Use <var>Selected</var> to maintain the selection state for a single entry in 
the Items property.
</p>
</descr>
<seealso>
<link id="TCustomListBox.Items"/>
<link id="TCustomListBox.SelectAll"/>
<link id="TCustomListBox.DoSelectionChange"/>
<link id="TCustomListBox.OnSelectionChange"/>
<link id="TCustomListBox.ClickOnSelChange"/>
<link id="TCustomListBox.Selected"/>
<link id="TCustomListBox.SelCount"/>
</seealso>
</element>
<element name="TCustomListBox.SelectRange.ALow">
<short>Ordinal position for the initial item changed in the method.</short>
</element>
<element name="TCustomListBox.SelectRange.AHigh">
<short>Ordinal position for the final item changed in the method.</short>
</element>
<element name="TCustomListBox.SelectRange.ASelected">
<short>
<b>True</b> if the items are selected; <b>False</b> when they are unselected.
</short>
</element>

<element name="TCustomListBox.DeleteSelected">
<short>Removes one or more selected entries from the Items property.</short>
<descr>
<p>
<var>DeleteSelected</var> is a procedure used to delete one or more entries 
in the <var>Items</var> property based on their selection state.
</p>
<p>
DeleteSelected uses the value in <var>MultiSelect</var> to determine if 
multiple values in Items are examined and removed. When MultiSelect is 
<b>True</b>, the values in Items are visited in reverse order and the Delete 
method in Items is called if the item is <var>Selected</var>. When 
MultiSelect is not enabled, the value in the <var>ItemIndex</var> property is 
used to examine a single entry and remove it when it is Selected.
</p>
<p>
No values are removed from Items when none of the entries in Selected are 
<b>True</b>.
</p>
</descr>
<seealso>
<link id="TCustomListBox.Items"/>
<link id="TCustomListBox.Selected"/>
<link id="TCustomListBox.MultiSelect"/>
</seealso>
</element>

<element name="TCustomListBox.UnlockSelectionChange">
<short>Removes a previous selection change lock.</short>
<descr/>
<seealso/>
</element>

<element name="TCustomListBox.Align" link="#lcl.controls.TControl.Align"/>
<element name="TCustomListBox.Anchors" link="#lcl.controls.TControl.Anchors"/>

<element name="TCustomListBox.BorderStyle">
<short>Line style used for the border on the control.</short>
<descr>
<p>
Indicates the line style drawn as a border around the control. The default 
value for the property is bsSingle in TCustomListBox.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.BorderStyle">TWinControl.BorderStyle</link>
</seealso>
</element>

<element name="TCustomListBox.Canvas">
<short>Drawing surface where the control is drawn.</short>
<descr>
<p>
<var>Canvas</var> is a read-only <var>TCanvas</var> property with the drawing 
surface where the control is drawn.
</p>
<p>
Its value is assigned the constructor for the class instance, and uses a 
<var>TControlCanvas</var> instance to maintain an association between the 
control and its device context. It is freed when the control is destroyed.
</p>
<p>
Values in the <var>Font</var> and <var>Brush</var> properties are assigned to 
Canvas, and used to measure and draw the Items for the control.
</p>
</descr>
<seealso>
<link id="TCustomListBox.DrawItem"/>
<link id="TCustomListBox.MeasureItem"/>
<link id="#lcl.controls.TWinControl.Brush">TWinControl.Brush</link>
<link id="#lcl.controls.TControl.Font">TControl.Font</link>
<link id="#lcl.controls.TControlCanvas">TControlCanvas</link>
<link id="#lcl.graphics.TCanvas">TCanvas</link>
</seealso>
</element>

<element name="TCustomListBox.ClickOnSelChange">
<short>Allows selection changes to generate a Click event.</short>
<descr>
<p>
Delphi generates an <var>OnClick</var> event when the selection changes. The 
LCL adds a more specific <var>OnSelectionChange</var> event.
</p>
<p>
Set <var>ClickOnSelChange</var> to <b>False</b> when selection changes should 
be handled by the OnSelectionChange event, and should not generate an OnClick 
event. Setting ClickOnSelChange to <b>True</b> gives the Delphi compatible 
behavior. The default value for the property is <b>True</b>.
</p>
</descr>
<seealso>
<link id="TCustomListBox.OnClick"/>
<link id="TCustomListBox.OnSelectionChange"/>
</seealso>
</element>

<element name="TCustomListBox.Columns">
<short>
The number of visible columns displayed on the control.
</short>
<descr>
<p>
A list box can have multiple columns, as well as multiple rows. When 
<var>Columns</var> is greater than 0 (zero), it specifies the number of 
columns that are visible without horizontal scrolling. i. e. the width of a 
single column becomes Width/Columns. Setting a new value for Columns causes 
the widgetset class to be notified when a handle has been allocated for the 
control.
</p>
<remark>
The Columns property is not supported for the macOS Carbon, Cocoa, GTK2, QT4, QT5, and QT6 widgetsets.
</remark>
</descr>
</element>

<element name="TCustomListBox.Constraints" link="#lcl.controls.TControl.Constraints"/>

<element name="TCustomListBox.Count">
<short>The number of items defined in the scrollable list box.</short>
<descr>
<p>
<var>Count</var> is a read-only <var>Integer</var> property which indicates 
the number of <var>Items</var> defined in the control. Count is provided for 
Delphi compatibility, and redirects access to the Count property in Items.
</p>
</descr>
<seealso>
<link id="TCustomListBox.Items"/>
</seealso>
</element>

<element name="TCustomListBox.ExtendedSelect">
<short>
<b>True</b> when a contiguous range of items can be selected using 
Shift+Click. The default value is <b>True</b>.
</short>
<descr>
<p>
Normally a click into the list selects one item, and deselects all other 
items.
</p>
<p>
When <var>MultiSelect</var> is <b>True</b>, the user can select/deselect 
further items with Ctrl+Click.
</p>
<p>
When <var>ExtendedSelect</var> is also <b>True</b>, the user can Shift-click 
on an item, to select all items between this and the last selected item.
</p>
</descr>
</element>

<element name="TCustomListBox.Font" link="#lcl.controls.TControl.Font"/>

<element name="TCustomListBox.IntegralHeight">
<short>
Not implemented: shrink the Height of the widget, so that it only shows fully 
visible rows.
</short>
<descr/>
<seealso/>
</element>

<element name="TCustomListBox.ItemHeight">
<short>The default height for an item displayed in the list.</short>
<descr>
<p>
<var>ItemHeight</var> is an <var>Integer</var> property which contains the 
default height for an item displayed in the list box control. For a list box 
using the <b>lbStandard</b> <var>Style</var>, the property value is derived 
using the dimensions in the <var>ItemRect</var> for the item stored at 
<var>TopIndex</var>. For other styles, the stored property`value is used. 
Setting a new value for the property causes the <var>RecreateWnd</var> method 
to be called when a handle has been allocated for the control.
</p>
</descr>
<seealso>
<link id="TCustomListBox.ItemRect"/>
<link id="TCustomListBox.TopIndex"/>
<link id="TCustomListBox.CalculateStandardItemHeight"/>
</seealso>
</element>

<element name="TCustomListBox.ItemIndex">
<short>Ordinal position for the currently selected item, -1 if none.</short>
<descr>
<p>
<var>ItemIndex</var> is an <var>Integer</var> property which contains the 
position for the current selection in the control. If <var>MultiSelect</var> 
is <b>True</b>, ItemIndex represents the selected item which also has focus. 
Use the <var>Selected</var> property to access individual items when 
MultiSelect is enabled.
</p>
</descr>
<seealso>
<link id="TCustomListBox"/>
<link id="TCustomListBox.Items"/>
<link id="TCustomListBox.MultiSelect"/>
<link id="TCustomListBox.ExtendedSelect"/>
</seealso>
</element>

<element name="TCustomListBox.Items">
<short>The list of all items defined in the control.</short>
<descr>
<p>
<var>Items</var> is a <var>TStrings</var> property which contains the string 
values (and associated objects) displayed in the list box control. Reading 
allows access to the contents of the list (TStrings compatible). Assign 
another string list to the property to replace the Items in the control. 
Internally, Items is cast to a <var>TExtendedStringList</var> type to access 
the item attribute data for the entries.
</p>
<p>
Use <var>ItemIndex</var> to access the selected item in the list box control. 
Use the <var>Selected</var> property to select or de-select values in Items 
when <var>MultiSelect</var> is enabled. Use <var>SelectRange</var> to select 
a range of Items in the control.
</p>
</descr>
<seealso>
<link id="TCustomListBox.ItemIndex"/>
<link id="TCustomListBox.Selected"/>
<link id="TCustomListBox.MultiSelect"/>
<link id="TCustomListBox.SelectRange"/>
<link id="#rtl.classes.TStrings">TStrings</link>
</seealso>
</element>

<element name="TCustomListBox.MultiSelect">
<short>Allows selection of more than one item from the list.</short>
<descr>
<p>
<var>MultiSelect</var> is a <var>Boolean</var> property which indicates if 
multiple values in <var>Items</var> can be selected using the Ctrl+Click 
mouse button, or by setting values in the indexed <var>Selected</var> 
property. When set to <b>True</b>, selection state is determined by reading / 
writing the cached item data for the Selected items in the widgetset class. 
When set to <b>False</b>, the value in <var>ItemIndex</var> is used to 
determine the selected item.
</p>
<p>
The default value for the property is <b>False</b>. Setting a new value for 
the property causes <var>UpdateSelectionMode</var> to be called to notify the 
widgetset class of the change.
</p>
</descr>
<seealso>
<link id="TCustomListBox.ExtendedSelect"/>
<link id="TCustomListBox.Items"/>
<link id="TCustomListBox.ItemIndex"/>
<link id="TCustomListBox.MultiSelect"/>
<link id="TCustomListBox.Selected"/>
<link id="TCustomListBox.SelectRange"/>
<link id="TCustomListBox.DeleteSelected"/>
<link id="TCustomListBox.ClearSelection"/>
</seealso>
</element>

<element name="TCustomListBox.OnChangeBounds" link="#lcl.controls.TControl.OnChangeBounds"/>
<element name="TCustomListBox.OnClick" link="#lcl.controls.TControl.OnClick"/>
<element name="TCustomListBox.OnDblClick" link="#lcl.controls.TControl.OnDblClick"/>

<element name="TCustomListBox.OnDrawItem">
<short>Handler for painting of a list item in owner-draw mode.</short>
<descr>
<p>
<var>OnDrawItem</var> is a <var>TDrawItemEvent</var> property with the event 
handler signalled to render a list item when an owner-drawn method is used in 
the <var>Style</var> property. OnDrawItem is signalled (when assigned) from 
the <var>DrawItem</var> method. DrawItem provides the arguments for the event 
handler.
</p>
<p>
An application should implement an object procedure to respond to the event 
notification. Use the Canvas for the control to get text metrics or render 
the control and any graphic images. An internal drawing routine which uses 
the Font, Color, Layout and Alignment in the control is called when 
OnDrawItem has not been assigned.
</p>
</descr>
<seealso>
<link id="TCustomListBox.Style"/>
<link id="TCustomListBox.DrawItem"/>
<link id="TCustomListBox.Canvas"/>
<link id="TCustomListBox.Font"/>
<link id="TCustomListBox.Align"/>
<link id="TListBoxStyle"/>
<link id="TDrawItemEvent"/>
<link id="#lcl.controls.TControl.Color">TControl.Color</link>
<link id="#lcl.graphics.TCanvas.TextStyle">TCanvas.TextStyle</link>
<link id="#lcl.graphics.TTextStyle">TTextStyle</link>
</seealso>
</element>

<element name="TCustomListBox.OnEnter" link="#lcl.controls.TWinControl.OnEnter"/>
<element name="TCustomListBox.OnExit" link="#lcl.controls.TWinControl.OnExit"/>
<element name="TCustomListBox.OnKeyDown" link="#lcl.controls.TWinControl.OnKeyDown"/>
<element name="TCustomListBox.OnKeyPress" link="#lcl.controls.TWinControl.OnKeyPress"/>
<element name="TCustomListBox.OnKeyUp" link="#lcl.controls.TWinControl.OnKeyUp"/>

<element name="TCustomListBox.OnMeasureItem">
<short>Handler invoked when the height for an item is needed.</short>
<descr>
<p>
<var>OnMeasureItem</var> is a <var>TMeasureItemEvent</var> property with the 
event handler signalled to get the height for specified item in the list box 
control. OnMeasureItem is signalled (when assigned) from the 
<var>MeasureItem</var> method, and occurs when the <b>LM_MeasureItem</b> 
message is handled for the control. MeasureItem provides the arguments passed 
to the event handler, while the message handler stores the calculated height 
in <var>ItemHeight</var> when it is not 0 (zero).
</p>
<p>
An application must implement an object procedure to respond to the event 
notification. <var>Index</var> contains the position in <var>Items</var> with 
the string to examine in the event handler. On entry, <var>TheHeight</var> 
contains the text height for the current <var>Font</var> calculated using the 
<var>Canvas</var> in the control. The value in TheHeight can be updated with 
the value derived in the event handler.
</p>
</descr>
<seealso>
<link id="TCustomListBox.MeasureItem"/>
<link id="TCustomListBox.ItemHeight"/>
<link id="TCustomListBox.Style"/>
<link id="TCustomListBox.Font"/>
<link id="TCustomListBox.Canvas"/>
<link id="TMeasureItemEvent"/>
</seealso>
</element>

<element name="TCustomListBox.OnMouseDown" link="#lcl.controls.TControl.OnMouseDown"/>
<element name="TCustomListBox.OnMouseMove" link="#lcl.controls.TControl.OnMouseMove"/>
<element name="TCustomListBox.OnMouseUp" link="#lcl.controls.TControl.OnMouseUp"/>
<element name="TCustomListBox.OnMouseEnter" link="#lcl.controls.TControl.OnMouseEnter"/>
<element name="TCustomListBox.OnMouseLeave" link="#lcl.controls.TControl.OnMouseLeave"/>
<element name="TCustomListBox.OnMouseWheel" link="#lcl.controls.TControl.OnMouseWheel"/>
<element name="TCustomListBox.OnMouseWheelDown" link="#lcl.controls.TControl.OnMouseWheelDown"/>
<element name="TCustomListBox.OnMouseWheelUp" link="#lcl.controls.TControl.OnMouseWheelUp"/>
<element name="TCustomListBox.OnResize" link="#lcl.controls.TControl.OnResize"/>

<element name="TCustomListBox.OnSelectionChange">
<short>Handler invoked when an item is selected in the control.</short>
<descr>
<p>
<var>OnSelectionChange</var> is a <var>TSelectionChangeEvent</var> property 
with the event handler signalled when an item selection on the control has been 
changed. OnSelectionChange is signalled (when assigned) from the 
<var>DoSelectionChange</var> method, and occurs prior to calling the 
<var>Click</var> method for the control.
</p>
<p>
The <var>User</var> argument indicates whether the selection change results 
from user interaction with the control (<b>True</b>), or from code or methods 
called at run-time (<b>False</b>).
</p>
<remark>
On the Windows platform, OnSelectionChange is signalled when the user clicks on 
a list item that is already selected. It is also signalled when a mouse click 
occurs on an unused area on the list box control. These behaviors are built in 
to the native control on the platform, and are not configurable.
</remark>
<p>
Use OnClick to perform actions when the mouse is clicked on an item on the list 
box control.
</p>
<p>
Use ClickOnSelChange to indicate whether Click / OnClick are called when the 
left mouse button is released during a click action or when OnSelectionChanged 
is performed for the control.
</p>
</descr>
<seealso>
<link id="TCustomListBox.DoSelectionChange"/>
<link id="TCustomListBox.Click"/>
<link id="TCustomListBox.OnClick"/>
<link id="TCustomListBox.ClickOnSelChange"/>
<link id="TCustomListBox.SelectRange"/>
<link id="TCustomListBox.MultiSelect"/>
</seealso>
</element>

<element name="TCustomListBox.ParentColor">
<short>Use the Color from the Parent control, when enabled.</short>
<descr>
<p>
ParentColor determines if the control should use the Color from the Parent 
control, when enabled. The default value for the property is <b>False</b> in 
TCustomListBox.
</p>
<p>
When this property is <b>True</b>, all changes to the Color of the parent 
will also be applied to the Color of the control, ensuring that they both 
contain same value. If the Color of the control is changed by the 
application, then ParentColor will be automatically set to <b>False</b>.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.ParentColor">TControl.ParentColor</link>
</seealso>
</element>

<element name="TCustomListBox.ParentFont" link="#lcl.controls.TControl.ParentFont"/>
<element name="TCustomListBox.ParentShowHint" link="#lcl.controls.TControl.ParentShowHint"/>
<element name="TCustomListBox.PopupMenu" link="#lcl.controls.TControl.PopupMenu"/>

<element name="TCustomListBox.ScrollWidth">
<short>The virtual width of the list box, in pixels.</short>
<descr>
<p>
<var>ScrollWidth</var> is an <var>Integer</var> property with the logical 
horizontal extent for the list box, or the scrollable area inside the 
control. When ScrollWidth is set to a value larger than 
<var>ClientWidth</var>, the horizontal scrollbar is displayed for the control.
</p>
<p>
The value for ScrollWidth is read from the widgetset class (at run-time) when 
a Handle has been allocated for the control. Changing the value for the 
property causes the value in the widgetset class to be updated.
</p>
<p>
The default value for the property is <b>0</b> (<b>zero</b>).
</p>
<p>
Use <var>Columns</var> to set the number of adjacent vertical columns used to 
display the items in the control.
</p>
</descr>
<seealso>
<link id="TCustomListBox.Columns"/>
</seealso>
</element>

<element name="TCustomListBox.SelCount">
<short>
The number of selected items in the list box control.
</short>
<descr>
<p>
<var>SelCount</var> is a read-only <var>Integer</var> property which contains 
the number of <var>Items</var> selected in the list box control. The property 
value is the result returned by the <var>GetSelCount</var> method 
in the widgetset class when its Handle has been allocated. 
</p>
<p>
If the widget Handle is unassigned, the property value is determined using 
either the value in ItemIndex or the list items in the local cache. If 
MultiSelect has not been enabled, the property value is either 0 or 1; 0 when 
<b>ItemIndex = -1</b> and 1 when <b>ItemIndex &gt; -1</b>. If MultiSelect is 
<b>True</b>, the local item cache is searched to get the number of items 
selected in the control. The value is 0 if the local cache is invalid or none 
of the cached items are in the selected state.
</p>
<p>
Use <var>Selected</var> to get or set the selected state for an item on the 
control.
</p>
<p>
Use <var>SelectRange</var> to set or reset the selected state for Items in a 
specified range of positions.
</p>
<p>
Use <var>SelectAll</var> to select all Items in the control.
</p>
<p>
Use <var>ClearSelection</var> to remove all item selections in the control.
</p>
</descr>
<seealso>
<link id="TCustomListBox.Selected"/>
<link id="TCustomListBox.ItemIndex"/>
<link id="TCustomListBox.Items"/>
<link id="TCustomListBox.MultiSelect"/>
<link id="TCustomListBox.SelectRange"/>
<link id="TCustomListBox.SelectAll"/>
<link id="TCustomListBox.ClearSelection"/>
<link id="TCustomListBox.ExtendedSelect"/>
</seealso>
</element>

<element name="TCustomListBox.Selected">
<short>The Selected state for an item in the control.</short>
<descr>
<p>
<var>Selected</var> is an indexed <var>Boolean</var> property used to set the 
selection state for an item defined in the list box control.
</p>
<p>
The index value is the ordinal position in <var>Items</var> with the 
selection state value. Read and write access for the property value call the 
<var>CheckIndex</var> method to verify that the index is in bounds for the 
defined Items in the control. CheckIndex raises an exception if an index 
value is not in the required range.
</p>
<p>
Property values are read from the widgetset class when it has been created, 
or from the cached selection values when it has not. Write access ensures 
that <var>ItemIndex</var> is updated as needed, and notifies the widgetset 
class and/or the item selection cache when a value is changed.
</p>
<p>
Use <var>SelectAll</var> to set the selection state for all Items in the 
control.
</p>
<p>
Use <var>SelectRange</var> to set the selection state for Items in the 
specified range of positions in the control.
</p>
<p>
Use <var>ClearSelection</var> to reset the selection state for all Items in 
the list box control.
</p>
</descr>
<seealso>
<link id="TCustomListBox.CheckIndex"/>
<link id="TCustomListBox.Items"/>
<link id="TCustomListBox.ItemIndex"/>
<link id="TCustomListBox.SelectAll"/>
<link id="TCustomListBox.SelectRange"/>
<link id="TCustomListBox.ClearSelection"/>
</seealso>
</element>
<element name="TCustomListBox.Selected.Index">
<short>Ordinal position in the item list.</short>
</element>

<element name="TCustomListBox.ShowHint" link="#lcl.controls.TControl.ShowHint"/>

<element name="TCustomListBox.Sorted">
<short>
Determines whether the list entries are sorted in alphanumeric order.
</short>
<descr>
<p>
<var>Sorted</var> is a <var>Boolean</var> property which determines whether 
the values in <var>Items</var> are sorted and stored in alphanumeric order in 
the control.
</p>
<p>
Setting this property to <b>True</b> enables use of ascending alphanumeric 
case-insensitive sorting of items in the list. When <b>True</b>, new entries 
are added in sort order, and are not necessarily stored at the end of the 
list.
</p>
<p>
Setting a new value for the property causes the private 
<var>UpdateSorted</var> method to be called to notify the widgetset class of 
the change in order, or to update the <var>Sorted</var> property in 
<var>Items</var> when needed.
</p>
</descr>
<seealso>
<link id="TCustomListBox.Items"/>
<link id="TCustomListBox.AddItem"/>
</seealso>
</element>

<element name="TCustomListBox.Style">
<short>
Appearance of the list box (standard, owner-draw fixed, or owner-draw 
variable).
</short>
<descr>
<p>
<var>Style</var> is a <var>TListBoxStyle</var> property which controls the 
appearance of the <var>Items</var> drawn in the list box control. The default 
value for the property is <var>lbStandard</var>, and causes the appearance 
and text height native to the widgetset to be used. When another value from 
TListBoxStyle is used, Items are drawn using the routine assigned to the 
<var>OnDrawItem</var> event handler.
</p>
</descr>
<seealso>
<link id="TCustomListBox.Items"/>
<link id="TCustomListBox.ItemHeight"/>
<link id="TCustomListBox.OnDrawItem"/>
<link id="TListBoxStyle"/>
</seealso>
</element>

<element name="TCustomListBox.TabOrder" link="#lcl.controls.TWinControl.TabOrder"/>

<element name="TCustomListBox.TabStop">
<short>Enables keyboard navigation using the Tab or Shift+Tab keys.</short>
<descr>
<p>
Allows the user to navigate to this control, by pressing the Tab or Shift+Tab 
keys.
The default value for the property is <b>True</b> in 
<var>TCustomListBox</var>.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.TabStop">TWinControl.TabStop</link>
</seealso>
</element>

<element name="TCustomListBox.TopIndex">
<short>Index of the first visible (or top-most) item.</short>
<descr>
<p>
<var>TopIndex</var> is an <var>Integer</var> property which contains the 
ordinal position in <var>Items</var> for the first visible list item in the 
scrollable control. The default value for the property is <b>0</b> (the first 
value in Items).
</p>
<p>
The property value is retrieved from the widgetset class when a handle has 
been allocated for the control. Setting a new value for the property causes 
the widgetset class to be notified of the value change when a handle has been 
allocated for the control.
</p>
<p>
The value in TopIndex is updated in the <var>MakeCurrentVisible</var> method 
where the current selection in <var>ItemIndex</var> is assigned to the 
property.
</p>
</descr>
<seealso>
<link id="TCustomListBox.Items"/>
<link id="TCustomListBox.ItemHeight"/>
<link id="TCustomListBox.MakeCurrentVisible"/>
</seealso>
</element>

<element name="TCustomListBox.OnUTF8KeyPress" link="#lcl.controls.TWinControl.OnUTF8KeyPress"/>

<element name="TCustomListBox.Options">
<short>Contains options enabled for the list box control.</short>
<descr>
<p>
<var>Options</var> is a <var>TListBoxOptions</var> property with the options 
enabled for the list box control. The values in the property are assigned in 
the <var>Create</var> constructor, and used when the 
<var>LM_DrawListItem</var> message is handled for the control.
</p>
<p>
The default value for the property is <b>[lboDrawFocusRect]</b>, and draws a 
focus rectangle for the selected item in the list box.
</p>
</descr>
<seealso/>
</element>

<element name="TCustomListBox.Visible" link="#lcl.controls.TControl.Visible"/>

<element name="TListBox">
<short>Control which displays a scrollable list of strings.</short>
<descr>
<p>
The strings are stored in the <var>Items</var> list.
</p>
<p>
At design time, a click on the ellipsis character (<b>...</b>) next to the 
<var>Items</var> entry in the Object Inspector opens a string-list editor in 
which the individual text-strings for the list items can be entered or 
edited. The editor also allows the entries to be sorted alphabetically in 
normal or reverse order.
</p>
</descr>
<seealso>
<link id="TComboBox"/>
<link id="HowToUseStdCtrls"/>
</seealso>
</element>

<element name="TListBox.Align" link="#lcl.controls.TControl.Align"/>
<element name="TListBox.Anchors" link="#lcl.controls.TControl.Anchors"/>
<element name="TListBox.BidiMode" link="#lcl.controls.TControl.BiDiMode"/>
<element name="TListBox.BorderSpacing" link="#lcl.controls.TControl.BorderSpacing"/>
<element name="TListBox.BorderStyle" link="#lcl.stdctrls.TCustomListBox.BorderStyle"/>
<element name="TListBox.ClickOnSelChange" link="#lcl.stdctrls.TCustomListBox.ClickOnSelChange"/>
<element name="TListBox.Color" link="#lcl.controls.TControl.Color"/>
<element name="TListBox.Columns" link="#lcl.stdctrls.TCustomListBox.Columns"/>
<element name="TListBox.Constraints" link="#lcl.controls.TControl.Constraints"/>
<element name="TListBox.DoubleBuffered" link="#lcl.controls.TWinControl.DoubleBuffered"/>
<element name="TListBox.DragCursor" link="#lcl.controls.TControl.DragCursor"/>
<element name="TListBox.DragKind" link="#lcl.controls.TControl.DragKind"/>
<element name="TListBox.DragMode" link="#lcl.controls.TControl.DragMode"/>
<element name="TListBox.ExtendedSelect" link="#lcl.stdctrls.TCustomListBox.ExtendedSelect"/>
<element name="TListBox.Enabled" link="#lcl.controls.TControl.Enabled"/>
<element name="TListBox.Font" link="#lcl.controls.TControl.Font"/>
<element name="TListBox.IntegralHeight" link="#lcl.stdctrls.TCustomListBox.IntegralHeight"/>
<element name="TListBox.Items" link="#lcl.stdctrls.TCustomListBox.Items"/>

<element name="TListBox.ItemHeight">
<short>Get or set the height of a single item in the control.</short>
<descr>
<p>
<var>ItemHeight</var> is an <var>Integer</var> property which contains the 
height used to render the <var>Items</var> in the control.
</p>
<p>
The property value is used when the drawing <var>Style</var> for the control 
is set to <var>lbStandard</var>, or when the handle has not been allocated 
for the control. For other drawing styles, the property value is determined 
using the item rectangle used for the first visible item in the list or by 
using the <var>OnMeasureItem</var> event handler.
</p>
<p>
Changing the value for the property causes <var>RecreateWnd</var> to be 
called to re-create the widgetset handle for the control.
</p>
<p>
The value in ItemHeight may be scaled when <var>AutoAdjustLayout</var> is 
called using a layout policy that includes auto-adjustment for display 
density.
</p>
</descr>
<seealso>
<link id="TCustomListBox.ItemHeight"/>
</seealso>
</element>

<element name="TListBox.ItemIndex" link="#lcl.stdctrls.TCustomListBox.ItemIndex"/>
<element name="TListBox.MultiSelect" link="#lcl.stdctrls.TCustomListBox.MultiSelect"/>
<element name="TListBox.ParentBidiMode" link="#lcl.controls.TControl.ParentBiDiMode"/>
<element name="TListBox.ParentColor" link="#lcl.stdctrls.TCustomListBox.ParentColor"/>
<element name="TListBox.ParentDoubleBuffered" link="#lcl.controls.TWinControl.ParentDoubleBuffered"/>
<element name="TListBox.ParentShowHint" link="#lcl.controls.TControl.ParentShowHint"/>
<element name="TListBox.ParentFont" link="#lcl.controls.TControl.ParentFont"/>
<element name="TListBox.PopupMenu" link="#lcl.controls.TControl.PopupMenu"/>
<element name="TListBox.ScrollWidth" link="#lcl.stdctrls.TCustomListBox.ScrollWidth"/>
<element name="TListBox.ShowHint" link="#lcl.controls.TControl.ShowHint"/>
<element name="TListBox.Sorted" link="#lcl.stdctrls.TCustomListBox.Sorted"/>
<element name="TListBox.Style" link="#lcl.stdctrls.TCustomListBox.Style"/>
<element name="TListBox.TabOrder" link="#lcl.controls.TWinControl.TabOrder"/>
<element name="TListBox.TabStop" link="#lcl.stdctrls.TCustomListBox.TabStop"/>
<element name="TListBox.TopIndex" link="#lcl.stdctrls.TCustomListBox.TopIndex"/>
<element name="TListBox.Visible" link="#lcl.controls.TControl.Visible"/>
<element name="TListBox.OnChangeBounds" link="#lcl.controls.TControl.OnChangeBounds"/>
<element name="TListBox.OnClick" link="#lcl.controls.TControl.OnClick"/>
<element name="TListBox.OnContextPopup" link="#lcl.controls.TControl.OnContextPopup"/>
<element name="TListBox.OnDblClick" link="#lcl.controls.TControl.OnDblClick"/>
<element name="TListBox.OnDragDrop" link="#lcl.controls.TControl.OnDragDrop"/>
<element name="TListBox.OnDragOver" link="#lcl.controls.TControl.OnDragOver"/>
<element name="TListBox.OnDrawItem" link="#lcl.stdctrls.TCustomListBox.OnDrawItem"/>
<element name="TListBox.OnEnter" link="#lcl.controls.TWinControl.OnEnter"/>
<element name="TListBox.OnEndDrag" link="#lcl.controls.TControl.OnEndDrag"/>
<element name="TListBox.OnExit" link="#lcl.controls.TWinControl.OnExit"/>
<element name="TListBox.OnKeyPress" link="#lcl.controls.TWinControl.OnKeyPress"/>
<element name="TListBox.OnKeyDown" link="#lcl.controls.TWinControl.OnKeyDown"/>
<element name="TListBox.OnKeyUp" link="#lcl.controls.TWinControl.OnKeyUp"/>
<element name="TListBox.OnMeasureItem" link="#lcl.stdctrls.TCustomListBox.OnMeasureItem"/>
<element name="TListBox.OnMouseMove" link="#lcl.controls.TControl.OnMouseMove"/>
<element name="TListBox.OnMouseDown" link="#lcl.controls.TControl.OnMouseDown"/>
<element name="TListBox.OnMouseUp" link="#lcl.controls.TControl.OnMouseUp"/>
<element name="TListBox.OnMouseEnter" link="#lcl.controls.TControl.OnMouseEnter"/>
<element name="TListBox.OnMouseLeave" link="#lcl.controls.TControl.OnMouseLeave"/>
<element name="TListBox.OnMouseWheel" link="#lcl.controls.TControl.OnMouseWheel"/>
<element name="TListBox.OnMouseWheelDown" link="#lcl.controls.TControl.OnMouseWheelDown"/>
<element name="TListBox.OnMouseWheelUp" link="#lcl.controls.TControl.OnMouseWheelUp"/>
<element name="TListBox.OnMouseWheelHorz" link="#lcl.controls.TControl.OnMouseWheelHorz"/>
<element name="TListBox.OnMouseWheelLeft" link="#lcl.controls.TControl.OnMouseWheelLeft"/>
<element name="TListBox.OnMouseWheelRight" link="#lcl.controls.TControl.OnMouseWheelRight"/>
<element name="TListBox.OnResize" link="#lcl.controls.TControl.OnResize"/>
<element name="TListBox.OnSelectionChange" link="#lcl.stdctrls.TCustomListBox.OnSelectionChange"/>
<element name="TListBox.OnShowHint" link="#lcl.controls.TControl.OnShowHint"/>
<element name="TListBox.OnStartDrag" link="#lcl.controls.TControl.OnStartDrag"/>
<element name="TListBox.OnUTF8KeyPress" link="#lcl.controls.TWinControl.OnUTF8KeyPress"/>
<element name="TListBox.Options" link="#lcl.stdctrls.TCustomListBox.Options"/>

<element name="TCustomEdit">
<short>The base class for controls presenting editable text.</short>
<descr>
<p>
<var>TCustomEdit</var> is a <var>TWinControl</var> descendant which 
implements the base class for an edit control presenting a single line of 
text. TCustomEdit provides properties, methods, and events needed for common 
editing features in the control, including:
</p>
<ul>
<li>Text</li>
<li>TextHint</li>
<li>Modified</li>
<li>ReadOnly</li>
<li>MaxLength</li>
<li>Clear</li>
<li>NumbersOnly</li>
<li>CharCase</li>
<li>EchoMode</li>
<li>PasswordChar</li>
<li>AutoSelect</li>
<li>SelectAll</li>
<li>SelStart</li>
<li>SelLength</li>
<li>SelText</li>
<li>HideSelection</li>
<li>ClearSelection</li>
<li>CaretPos</li>
<li>CopyToClipboard</li>
<li>CutToClipboard</li>
<li>PasteFromClipboard</li>
<li>Undo</li>
</ul>
<p>
Do not create instances of TCustomEdit in an application; use one of the 
descendent classes like <var>TEdit</var>, <var>TLabeledEdit</var>, 
<var>TMaskEdit</var>, or <var>TMemo</var>.
</p>
</descr>
<seealso>
<link id="TEdit"/>
<link id="TMemo"/>
<link id="#lcl.extctrls.TLabeledEdit">TLabeledEdit</link>
<link id="#lcl.maskedit.TMaskEdit">TMaskEdit</link>
<link id="#lcl.controls.TWinControl">TWinControl</link>
</seealso>
</element>

<element name="TCustomEdit.FAlignment" link="#lcl.stdctrls.TCustomEdit.Alignment"/>
<element name="TCustomEdit.FAutoSelect" link="#lcl.stdctrls.TCustomEdit.AutoSelect"/>
<element name="TCustomEdit.FAutoSelected" link="#lcl.stdctrls.TCustomEdit.AutoSelected"/>
<element name="TCustomEdit.FCharCase" link="#lcl.stdctrls.TCustomEdit.CharCase"/>
<element name="TCustomEdit.fCaretPos" link="#lcl.stdctrls.TCustomEdit.CaretPos"/>
<element name="TCustomEdit.FEchoMode" link="#lcl.stdctrls.TCustomEdit.EchoMode"/>

<element name="TCustomEdit.FEmulatedTextHintStatus">
<short>Status for the emulated TextHint for the control.</short>
<descr/>
<seealso/>
</element>

<element name="TCustomEdit.FHideSelection" link="#lcl.stdctrls.TCustomEdit.HideSelection"/>
<element name="TCustomEdit.FMaxLength" link="#lcl.stdctrls.TCustomEdit.MaxLength"/>
<element name="TCustomEdit.FModified" link="#lcl.stdctrls.TCustomEdit.Modified"/>
<element name="TCustomEdit.FOnChangeHandler" link="#lcl.stdctrls.TCustomEdit.AddHandlerOnChange"/>
<element name="TCustomEdit.FPasswordChar" link="#lcl.stdctrls.TCustomEdit.PasswordChar"/>
<element name="TCustomEdit.FReadOnly" link="#lcl.stdctrls.TCustomEdit.ReadOnly"/>
<element name="TCustomEdit.FNumbersOnly" link="#lcl.stdctrls.TCustomEdit.NumbersOnly"/>
<element name="TCustomEdit.FOnChange" link="#lcl.stdctrls.TCustomEdit.OnChange"/>
<element name="TCustomEdit.FSelLength" link="#lcl.stdctrls.TCustomEdit.SelLength"/>
<element name="TCustomEdit.FSelStart" link="#lcl.stdctrls.TCustomEdit.SelStart"/>
<element name="TCustomEdit.FTextChangedByRealSetText" link="#lcl.stdctrls.TCustomEdit.RealSetText"/>
<element name="TCustomEdit.FTextChangedLock" link="#lcl.stdctrls.TCustomEdit.TextChanged"/>
<element name="TCustomEdit.FTextHint" link="#lcl.stdctrls.TCustomEdit.TextHint"/>

<element name="TCustomEdit.ShowEmulatedTextHintIfYouCan">
<short>Displays an emulated text hint when possible.</short>
<descr/>
<seealso/>
</element>

<element name="TCustomEdit.ShowEmulatedTextHint">
<short>Displays a TextHint using the hint font for the control.</short>
<descr>
<p>
<var>ShowEmulatedTextHint</var> is a method used to display an emulated Text 
hint using the hint font for the control. Emulated text hints are used for 
widgetsets that do not natively support the <var>TextHint</var> capability.
</p>
<p>
ShowEmulatedTextHint gets the Hint font for the display by calling 
<var>CreateEmulatedTextHintFont</var>, and passes the value to the widgetset 
class. The value in <var>Text</var> is set to the text in the TextHint 
property. The widgetset class is notified of the property changes, and an 
internal flag used to track emulated hint display is set to <b>True</b>.
</p>
<p>
The compliment to ShowEmulatedTextHint is <var>HideEmulatedTextHint</var>.
</p>
<p>
ShowEmulatedTextHint is used in the implementation of the private 
<var>ShowEmulatedTextHintIfYouCan</var> method.
</p>
</descr>
<seealso>
<link id="TCustomEdit.TextHint"/>
<link id="TCustomEdit.HideEmulatedTextHint"/>
<link id="TCustomEdit.Text"/>
<link id="CreateEmulatedTextHintFont"/>
</seealso>
</element>

<element name="TCustomEdit.HideEmulatedTextHint">
<short>
Hides an emulated TextHint display, and restores the Font and PasswordChar in 
the control.
</short>
<descr/>
<seealso/>
</element>

<element name="TCustomEdit.SetAlignment">
<short>Sets the value for the Alignment property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.Alignment"/>
</seealso>
</element>
<element name="TCustomEdit.SetAlignment.AValue">
<short>New value for the Alignment property.</short>
</element>

<element name="TCustomEdit.GetCanUndo">
<short>Gets the value for the CanUndo property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.CanUndo"/>
</seealso>
</element>
<element name="TCustomEdit.GetCanUndo.Result">
<short>Value for the CanUndo property.</short>
</element>

<element name="TCustomEdit.GetModified">
<short>Gets the value for the Modified property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.Modified"/>
</seealso>
</element>
<element name="TCustomEdit.GetModified.Result">
<short>Value for the Modified property.</short>
</element>

<element name="TCustomEdit.SetHideSelection">
<short>Sets the value for the HideSelection property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.HideSelection"/>
</seealso>
</element>
<element name="TCustomEdit.SetHideSelection.AValue">
<short>New value for the HideSelection property.</short>
</element>

<element name="TCustomEdit.SetMaxLength">
<short>Sets the value for the MaxLength property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.MaxLength"/>
</seealso>
</element>
<element name="TCustomEdit.SetMaxLength.Value">
<short>New value for the MaxLength property.</short>
</element>

<element name="TCustomEdit.SetModified">
<short>Sets the value for the Modified property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.Modified"/>
</seealso>
</element>
<element name="TCustomEdit.SetModified.Value">
<short>New value for the Modified property.</short>
</element>

<element name="TCustomEdit.SetPasswordChar">
<short>Sets the value for the PasswordChar property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.PasswordChar"/>
</seealso>
</element>
<element name="TCustomEdit.SetPasswordChar.AValue">
<short>New value for the PasswordChar property.</short>
</element>

<element name="TCustomEdit.WSRegisterClass" link="#lcl.lclclasses.TLCLComponent.WSRegisterClass"/>

<element name="TCustomEdit.CanShowEmulatedTextHint">
<short>
Indicates if the value in TextHint can be displayed in the edit control.
</short>
<descr>
<p>
<var>CanShowEmulatedTextHint</var> is a <var>Boolean</var> function which 
indicates if the value in TextHint can be emulated for the edit control. The 
return value is <b>True</b> when the following conditions are met:
</p>
<ul>
<li>A handle has been allocated for the control.</li>
<li>
The widgetset class does <b>NOT</b> include the lcTextHint LCL capability 
flag (the lack of native widgetset support for the feature is why it's being 
emulated).
</li>
<li>
ComponentState indicates that the component is not being loaded using LCL 
streaming, and is not being edited at design-time.
</li>
<li>TextHint is <b>not</b> an empty string ('').</li>
<li>Text <b>is</b> an empty string ('').</li>
<li>The control is not Focused.</li>
</ul>
<p>
CanShowEmulatedTextHint is used in the <var>WMKillFocus</var> method, and 
when the values in <var>Text</var> or <var>TextHint</var> are applied for the 
control.
</p>
<remark>
In the current LCL implementation, TextHint display is emulated for all 
widgetsets except Win32/Win64 (since ComCtlVersionIE6) and QT5/QT6.
</remark>
</descr>
<seealso>
<link id="TCustomEdit.Text"/>
<link id="TCustomEdit.TextHint"/>
<link id="#lcl.controls.TWinControl.Focused">TWinControl.Focused</link>
<link id="#rtl.classes.TComponent.ComponentState">TComponent.ComponentState</link>
</seealso>
</element>
<element name="TCustomEdit.CanShowEmulatedTextHint.Result">
<short><b>True</b> when the emulated text hint can be displayed.</short>
</element>

<element name="TCustomEdit.CalculatePreferredSize">
<short>Gets the preferred size for a new instance of the class.</short>
<descr>
<p>
<var>CalculatePreferredSize</var> is overridden in <var>TCustomEdit</var>, 
and calls the inherited method on entry. CalculatePreferredSize sets the 
value in the <var>PreferredWidth</var> parameter to <b>0</b> (<b>zero</b>).
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.CalculatePreferredSize">TWinControl.CalculatePreferredSize</link>
</seealso>
</element>
<element name="TCustomEdit.CalculatePreferredSize.PreferredWidth">
<short>Preferred width calculated for the control.</short>
</element>
<element name="TCustomEdit.CalculatePreferredSize.PreferredHeight">
<short>Preferred height calculated for the control.</short>
</element>
<element name="TCustomEdit.CalculatePreferredSize.WithThemeSpace">
<short><b>True</b> when space is reserved for theme element details.</short>
</element>

<element name="TCustomEdit.CreateParams">
<short>
Ensures the required creation parameters are set for handle creation.
</short>
<descr>
<p>
<var>CreateParams</var> is an overridden method used to ensure that the 
creation parameters for the control are updated to reflect property values in 
the control instance. CreateParams is called when the handle for the control 
is create (or re-created).
</p>
<p>
CreateParams calls the inherited method on entry, and updates the Style flags 
in <var>Params</var> to include values required for the control. The 
following edit style flags are included in the method:
</p>
<dl>
<dt>ES_AUTOHSCROLL</dt>
<dd>Always included in TCustomEdit.</dd>
<dt>ES_LEFT</dt>
<dd>Included when Alignment contains taLeftJustify.</dd>
<dt>ES_RIGHT</dt>
<dd>Included when Alignment contains taRightJustify.</dd>
<dt>ES_CENTER</dt>
<dd>Included when Alignment contains taCenter.</dd>
<dt>ES_READONLY</dt>
<dd>Included when ReadOnly is set to <b>True</b>.</dd>
<dt>ES_NUMBER</dt>
<dd>Included when NumbersOnly is set to <b>True</b>.</dd>
<dt>ES_NOHIDESEL</dt>
<dd>Included when HideSelection is set to <b>False</b>.</dd>
</dl>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.CreateParams">TWinControl.CreateParams</link>
</seealso>
</element>
<element name="TCustomEdit.CreateParams.Params">
<short>Creation parameters updated in the method.</short>
</element>

<element name="TCustomEdit.InitializeWnd">
<short>Initializes the window handle for the control.</short>
<descr>
<p>
<var>InitializeWnd</var> is an overridden method used to ensure that property 
values from the class instance are stored in the widgetset class when the 
handle for the control is created (or re-created). InitializeWnd calls the 
inherited method on entry.
</p>
<p>
Values in the following properties are posted using methods in the widgetset 
class:
</p>
<ul>
<li>CharCase</li>
<li>EchoMode</li>
<li>MaxLength</li>
<li>PasswordChar</li>
<li>ReadOnly</li>
<li>Alignment</li>
<li>CaretPos</li>
<li>SelStart</li>
<li>SelLength</li>
<li>TextHint</li>
</ul>
<p>
The ShowEmulatedTextHintIfYouCan method is called when inline hints are 
emulated for the widgetset.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.InitializeWnd">TWinControl.InitializeWnd</link>
</seealso>
</element>

<element name="TCustomEdit.TextChanged">
<short>
Applies case conversion (if needed), and updates the editing cursor selection 
text.
</short>
<descr>
<p>
<var>TextChanged</var> is a an overridden method used to perform actions 
needed when the <b>CM_TEXTCHANGED</b> message is handled for the control. No 
actions are performed in the method when a previous call to TextChanged has 
not been completed.
</p>
<p>
TextChanged uses the value in <var>CharCase</var> to determine if case 
conversion is applied to the value in Text. When CharCase contains 
<var>ecUpperCase</var> or <var>ecLowerCase</var>, the corresponding UTF-8 
conversion routine is called. When Text is modified in the method, the values 
in <var>CaretPos</var>, <var>SelStart</var>, and <var>SelLength</var> are 
re-applied to the control. At run-time, the value in <var>Modified</var> is 
set to <b>True</b> when Text has been changed in the method.
</p>
</descr>
<seealso>
<link id="TCustomEdit.CharCase"/>
<link id="TCustomEdit.Text"/>
<link id="TCustomEdit.CaretPos"/>
<link id="TCustomEdit.SelStart"/>
<link id="TCustomEdit.SelLength"/>
<link id="TCustomEdit.Modified"/>
<link id="TCustomEdit.RealSetText"/>
<link id="#lazutils.lazutf8.UTF8UpperCase">UTF8UpperCase</link>
<link id="#lazutils.lazutf8.UTF8LowerCase">UTF8LowerCase</link>
<link id="#lcl.controls.TControl.TextChanged">TControl.TextChanged</link>
</seealso>
</element>

<element name="TCustomEdit.FontChanged">
<short>Handles changes to the font used in the control.</short>
<descr>
<p>
<var>FontChanged</var> is an overridden method in <var>TCustomEdit</var>. It 
ensures that the <var>Font</var> used for an emulated <var>TextHint</var> 
display is (re-)created when visible by calling 
<var>CreateEmulatedTextHintFont</var>.
</p>
<p>
FontChanged calls the inherited method to set flags in the control, and to 
perform notifications of the changed value to any child controls. The hint 
font is freed when the inherited method is completed.
</p>
<p>
FontChanged is assigned as the <var>OnChange</var> event handler for the 
<var>TFont</var> class instance in the Font property.
</p>
</descr>
<seealso>
<link id="TCustomEdit.TextHint"/>
<link id="#lcl.controls.TWinControl.FontChanged">TWinControl.FontChanged</link>
<link id="#lcl.controls.TControl.Font">TControl.Font</link>
<link id="CreateEmulatedTextHintFont"/>
</seealso>
</element>
<element name="TCustomEdit.FontChanged.Sender">
<short>Object for the event notification.</short>
</element>

<element name="TCustomEdit.Change">
<short>
Performs actions needed when the text in the control is changed.
</short>
<descr>
<p>
<var>Change</var> is a procedure used to perform actions need when the 
<b>CM_CHANGED</b> message is handled in the control. Change calls the 
inherited <var>Changed</var> method, and signals the <var>OnChange</var> 
and/or the internal FOnChangeHandler event handlers (when assigned).
</p>
<p>
Change is called from the <var>TextChanged</var> method after case conversion 
and updates to the editing cursor and text selection.
</p>
</descr>
<seealso>
<link id="TCustomEdit.OnChange"/>
<link id="TCustomEdit.TextChanged"/>
<link id="#lcl.controls.TControl.Changed">TControl.Changed</link>
</seealso>
</element>

<element name="TCustomEdit.DoEnter" >
<short>
Signals the OnEnter event handler, and selects the entire text when 
AutoSelect is <b>True</b>.
</short>
<descr>
<p>
This special handling is required when the control is entered using 
keystrokes (keyboard navigation), and not by a mouse click.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.DoEnter">TWinControl.DoEnter</link>
</seealso>
</element>

<element name="TCustomEdit.DoExit">
<short>Clears the value in AutoSelected when the control loses focus.</short>
<descr>
<p>
<var>DoExit</var> is an overridden method in <var>TCustomEdit</var>. It 
ensures that the AutoSelected property is set to <b>False</b> prior to 
signalling the OnExit event handler (when assigned) in the ancestor class. 
DoExit is called when the <b>CM_EXIT</b> control message is handled in the 
ancestor class.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.DoExit">TWinControl.DoExit</link>
<link id="#lcl.controls.TWinControl.OnExit">TWinControl.OnExit</link>
<link id="#lcl.controls.TWinControl.CMExit">TWinControl.CMExit</link>
</seealso>
</element>

<element name="TCustomEdit.EditingDone">
<short>
Enforces the setting in the ReadOnly property when editing is finished in the 
control.
</short>
<descr>
<p>
<var>EditingDone</var> is an overridden method in <var>TCustomEdit</var>. It 
ensures that the inherited method is <b>NOT</b> called when the value in 
<var>ReadOnly</var> is <b>True</b>. EditingDone is called from the 
<var>KeyUpAfterInterface</var> method when the <var>VK_RETURN</var> key code 
is handled.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.EditingDone">TControl.EditingDone</link>
</seealso>
</element>

<element name="TCustomEdit.GetCaretPos">
<short>Gets the value for the CaretPos property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.CaretPos"/>
</seealso>
</element>
<element name="TCustomEdit.GetCaretPos.Result">
<short>Value for the CaretPos property.</short>
</element>

<element name="TCustomEdit.GetNumbersOnly">
<short>Gets the value for the NumbersOnly property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.NumbersOnly"/>
</seealso>
</element>
<element name="TCustomEdit.GetNumbersOnly.Result">
<short>Value for the NumbersOnly property.</short>
</element>

<element name="TCustomEdit.GetReadOnly">
<short>Gets the value for the ReadOnly property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.ReadOnly"/>
</seealso>
</element>
<element name="TCustomEdit.GetReadOnly.Result">
<short>Value for the ReadOnly property.</short>
</element>

<element name="TCustomEdit.GetSelLength">
<short>Gets the value for the SelLength property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.SelLength"/>
</seealso>
</element>
<element name="TCustomEdit.GetSelLength.Result">
<short>The number of selected UTF-8 characters in the control.</short>
</element>

<element name="TCustomEdit.GetSelStart">
<short>Gets the value for the SelStart property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.SelStart"/>
</seealso>
</element>
<element name="TCustomEdit.GetSelStart.Result">
<short>Value for the SelStart property.</short>
</element>

<element name="TCustomEdit.GetSelText">
<short>Gets the value for the SelText property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.SelText"/>
</seealso>
</element>
<element name="TCustomEdit.GetSelText.Result">
<short>Value for the SelText property.</short>
</element>

<element name="TCustomEdit.GetTextHint">
<short>Gets the value for the TextHint property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.TextHint"/>
</seealso>
</element>
<element name="TCustomEdit.GetTextHint.Result">
<short>Value for the TextHint property.</short>
</element>

<element name="TCustomEdit.SetCaretPos">
<short>Sets the value for the CaretPos property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.CaretPos"/>
</seealso>
</element>
<element name="TCustomEdit.SetCaretPos.Value">
<short>New value for the CaretPos property.</short>
</element>

<element name="TCustomEdit.SetCharCase">
<short>Sets the value for the CharCase property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.CharCase"/>
</seealso>
</element>
<element name="TCustomEdit.SetCharCase.Value">
<short>New value for the CharCase property.</short>
</element>

<element name="TCustomEdit.SetEchoMode">
<short>Sets the value for the EchoMode property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.EchoMode"/>
</seealso>
</element>
<element name="TCustomEdit.SetEchoMode.Val">
<short>New value for the EchoMode property.</short>
</element>

<element name="TCustomEdit.SetNumbersOnly">
<short>Sets the value for the NumbersOnly property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.NumbersOnly"/>
</seealso>
</element>
<element name="TCustomEdit.SetNumbersOnly.Value">
<short>New value for the NumbersOnly property.</short>
</element>

<element name="TCustomEdit.SetReadOnly">
<short>Sets the value for the ReadOnly property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.ReadOnly"/>
</seealso>
</element>
<element name="TCustomEdit.SetReadOnly.Value">
<short>New value for the ReadOnly property.</short>
</element>

<element name="TCustomEdit.SetSelLength">
<short>Sets the value for the SelLength property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.SelLength"/>
</seealso>
</element>
<element name="TCustomEdit.SetSelLength.Val">
<short>New value for the SelLength property.</short>
</element>

<element name="TCustomEdit.SetSelStart">
<short>Sets the value for the SelStart property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.SelStart"/>
</seealso>
</element>
<element name="TCustomEdit.SetSelStart.Val">
<short>New value for the SelStart property.</short>
</element>

<element name="TCustomEdit.SetSelText">
<short>Sets the value for the SelText property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.SelText"/>
</seealso>
</element>
<element name="TCustomEdit.SetSelText.Val">
<short>New value for the SelText property.</short>
</element>

<element name="TCustomEdit.SetTextHint">
<short>Sets the value for the TextHint property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.TextHint"/>
</seealso>
</element>
<element name="TCustomEdit.SetTextHint.AValue">
<short>New value for the TextHint property.</short>
</element>

<element name="TCustomEdit.ChildClassAllowed">
<short>
Indicates whether child controls using the specified class are allowed.
</short>
<descr>
<p>
<var>ChildClassAllowed</var> is overridden in <var>TCustomEdit</var> to use 
the widgetset class to determine whether child controls can be embedded 
within the control. The return value is <b>True</b> when the 
<var>GetLCLCapability</var> method in the widgetset class returns 
<var>LCL_CAPABILITY_YES</var> for the lcAllowChildControlsInNativeControls 
query.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.ChildClassAllowed">TWinControl.ChildClassAllowed</link>
</seealso>
</element>
<element name="TCustomEdit.ChildClassAllowed.Result">
<short>
<b>True</b> if a child control using the specified class type are allowed for 
the control.
</short>
</element>
<element name="TCustomEdit.ChildClassAllowed.ChildClass">
<short>Class type for the child control.</short>
</element>

<element name="TCustomEdit.GetControlClassDefaultSize" link="#lcl.controls.TControl.GetControlClassDefaultSize"/>

<element name="TCustomEdit.MouseUp">
<short>Handles mouse up events for the control.</short>
<descr>
<p>
Selects all of the Text in the control when a left mouse button event occurs 
in the focused control and AutoSelect is set to <b>True</b>.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.MouseUp">TControl.MouseUp</link>
</seealso>
</element>
<element name="TCustomEdit.MouseUp.Button">
<short>Mouse button examined in the method.</short>
</element>
<element name="TCustomEdit.MouseUp.Shift">
<short>Shift / Ctrl / Alt modifier for the mouse event.</short>
</element>
<element name="TCustomEdit.MouseUp.X">
<short>Horizontal screen coordinate for the mouse event.</short>
</element>
<element name="TCustomEdit.MouseUp.Y">
<short>Vertical screen coordinate for the mouse event.</short>
</element>

<element name="TCustomEdit.RealGetText">
<short>
Uses the TextHint display status when getting the value for Text.
</short>
<descr>
<p>
<var>RealGetText</var> is an overridden method in <var>TCustomEdit</var>. It 
ensures that an emulated <var>TextHint</var> display status is considered 
when getting the value for the <var>Text</var> property. In other words, the 
inherited method is <b>not</b> called when the TextHint display is visible. 
The return value is an empty string (<b>''</b>) in this case.
</p>
</descr>
<seealso>
<link id="TCustomEdit.Text"/>
<link id="TCustomEdit.TextHint"/>
<link id="#lcl.controls.TControl.RealGetText">TControl.RealGetText</link>
</seealso>
</element>
<element name="TCustomEdit.RealGetText.Result">
<short>Value used for the Text property.</short>
</element>

<element name="TCustomEdit.RealSetText">
<short>
Updates Modified and the TextHint display when storing the new Text value.
</short>
<descr>
<p>
<var>RealSetText</var> is an overridden method in <var>TCustomEdit</var>. It 
ensures that the value in <var>Modified</var> is updated when a new value in 
<var>Text</var> is applied to the <var>Caption</var> for the control. It also 
hides the <var>TextHint</var> display when the new value is not an empty 
string (<b>''</b>) by calling <var>HideEmulatedTextHint</var>.
</p>
<p>
RealSetText calls the inherited method to store the Text value, and to adjust 
the control size when needed.
</p>
<p>
The TextHint is re-displayed when it is hidden and 
<var>CanShowEmulatedTextHint</var> returns <b>True</b>.
</p>
</descr>
<seealso>
<link id="TCustomEdit.CanShowEmulatedTextHint"/>
<link id="TCustomEdit.Modified"/>
<link id="TCustomEdit.Text"/>
<link id="TCustomEdit.TextHint"/>
<link id="#lcl.controls.TWinControl.RealSetText">TWinControl.RealSetText</link>
<link id="#lcl.controls.TControl.Caption">TControl.Caption</link>
</seealso>
</element>
<element name="TCustomEdit.RealSetText.AValue">
<short>New value stored as the text/caption for the control.</short>
</element>

<element name="TCustomEdit.KeyUpAfterInterface">
<short>Handles Key Up events forwarded from the LCL interface.</short>
<descr>
<p>
<var>KeyUpAfterInterface</var> handles the <var>VK_RETURN</var> key code for 
the control. It calls <var>EditingDone</var> to signal the 
<var>OnEditingDone</var> event handler (when assigned). When 
<var>AutoSelect</var> is set to <b>True</b>, the <var>SelectAll</var> method 
is called to select all of the <var>Text</var> in the control. 
<var>AutoSelected</var> is updated to reflect the action.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.KeyUpAfterInterface">TWinControl.KeyUpAfterInterface</link>
</seealso>
</element>
<element name="TCustomEdit.KeyUpAfterInterface.Key">
<short>Virtual key code examined in the method.</short>
</element>
<element name="TCustomEdit.KeyUpAfterInterface.Shift">
<short>Shift, Ctrl, or Alt modifier for the key code.</short>
</element>

<element name="TCustomEdit.WMChar">
<short>Handles a WM_CHAR window message for the control.</short>
<descr>
<p>
Prevents keystrokes for normal characters from acting as accelerator keys. 
When the Shift state in Message contains ssCtrl or ssAlt, the inherited 
method is called to handle the WM_CHAR message.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.WMChar">TWinControl.WMChar</link>
</seealso>
</element>
<element name="TCustomEdit.WMChar.Message">
<short>Window message examined in the method.</short>
</element>

<element name="TCustomEdit.CMWantSpecialKey">
<short>Handles the CM_WANTSPECIALKEY message for the control.</short>
<descr>
<p>
For the Darwin platform/widgetset, the LCL must be prevented from handling 
the arrow (cursor) keys VK_LEFT, VK_RIGHT, VK_UP, and VK_DOWN. The Result in 
Message is set to 1 to indicate that these keys have already been handled.
</p>
</descr>
<seealso/>
</element>
<element name="TCustomEdit.CMWantSpecialKey.Message">
<short>Message handled in the method.</short>
</element>

<element name="TCustomEdit.WndProc">
<short>
Suppresses the CM_CHANGED control message when an emulated TextHint is 
visible.
</short>
<descr>
<p>
<var>WndProc</var> is an overridden method in <var>TCustomEdit</var>. It 
ensures that the <b>CM_CHANGED</b> message is suppressed when an emulated 
<var>TextHint</var> is visible for the control. Otherwise, the inherited 
method is called to dispatch the control <var>Message</var>.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.WndProc">TWinControl.WndProc</link>
</seealso>
</element>
<element name="TCustomEdit.WndProc.Message">
<short>Message examined and handled for the control.</short>
</element>

<element name="TCustomEdit.ShouldAutoAdjust">
<short>
Determines if the control should auto-adjust its Height and/or Width.
</short>
<descr>
<p>
<var>ShouldAutoAdjust</var> is an overridden method in <var>TCustomEdit</var> 
used to determine if the control can auto-adjust its Height and/or Width.
</p>
<p>
<var>AWidth</var> and <var>AHeight</var> are variable Boolean parameters 
which indicate if the corresponding property can be auto-sized. AWidth is 
always set to <b>True</b> for TCustomEdit. AHeight is set to the inverse of 
the value in <var>AutoSize</var>.
</p>
<p>
ShouldAutoAdjust does <b>NOT</b> call the inherited method.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.ShouldAutoAdjust">TControl.ShouldAutoAdjust</link>
</seealso>
</element>
<element name="TCustomEdit.ShouldAutoAdjust.AWidth">
<short><b>True</b> when Width can be auto-adjusted.</short>
</element>
<element name="TCustomEdit.ShouldAutoAdjust.AHeight">
<short><b>True</b> when Height can be auto-adjusted.</short>
</element>

<element name="TCustomEdit.WMSetFocus">
<short>Handles the LM_SETFOCUS message for the control.</short>
<descr>
<p>
<var>WMSetFocus</var> is an overridden method in <var>TCustomEdit</var>. It 
is used to hide a visible emulated <var>TextHint</var> display when the 
control is focused. Calls <var>HideEmulatedTextHint</var> to remove the 
TextHint display. Calls the inherited method prior to exit.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.WMSetFocus">TWinControl.WMSetFocus</link>
</seealso>
</element>
<element name="TCustomEdit.WMSetFocus.Message">
<short>Message handled in the method.</short>
</element>

<element name="TCustomEdit.WMKillFocus">
<short>Handles the LM_KILLFOCUS message for the control.</short>
<descr>
<p>
Calls the inherited WMKillFocus method on entry to perform the EditingDone 
method when the parent form is Active. Ensures that an emulated TextHint is 
displayed when needed and allowed.
</p>
</descr>
<seealso>
<link id="TCustomEdit.CanShowEmulatedTextHint"/>
<link id="TCustomEdit.TextHint"/>
<link id="TCustomEdit.EditingDone"/>
<link id="#lcl.controls.TWinControl.WMKillFocus">TWinControl.WMKillFocus</link>
</seealso>
</element>
<element name="TCustomEdit.WMKillFocus.Message">
<short>Message handled in the method.</short>
</element>

<element name="TCustomEdit.AutoSelect">
<short>Enables auto-selection of text when focused.</short>
<descr>
<p>
<var>AutoSelect</var> is a <var>Boolean</var> property which enables or 
disables auto-selection of text when the control receives focus. If 
<b>True</b>, the edit control will select all its text when it receives focus 
or when the Enter key is pressed. The default value for the property is 
<b>True</b>.
</p>
<p>
AutoSelect is used in the KeyUpAfterInterface method, and determines if the 
SelectAll method is called when editing is completed in the control. It is 
used in MouseUp to determine if SelectAll is called when the Left mouse 
button is clicked. It is also used in DoEnter to determine if SelectAll is 
called when the Enter key is pressed.
</p>
</descr>
<seealso>
<link id="TCustomEdit.SelectAll"/>
<link id="TCustomEdit.AutoSelected"/>
<link id="TCustomEdit.KeyUpAfterInterface"/>
<link id="TCustomEdit.MouseUp"/>
<link id="TCustomEdit.DoEnter"/>
</seealso>
</element>

<element name="TCustomEdit.AutoSelected">
<short>
Set to <b>True</b> when the text selection was made automatically.
</short>
<descr>
<p>
<var>AutoSelected</var> is a <var>Boolean</var> property which indicates if 
the text selection in the control was made automatically after handling key 
press or mouse events.
</p>
<p>
AutoSelected is used in conjunction with the <var>AutoSelect</var> property 
which enables the capability. AutoSelected is not set to <b>True</b> when 
AutoSelect has not been enabled. AutoSelect is enabled by default in 
<var>TCustomEdit</var>.
</p>
<p>
AutoSelected is updated when the <b>Enter</b> (<b>^M</b>) key is handled for 
the control, or when a left mouse up event is handled for an already focused 
control. When AutoSelect is set to <b>True</b>, the <var>SelectAll</var> 
method is called to select all of the text in the control. AutoSelected 
is set to <b>True</b> when <var>SelText</var> has the same value as the 
<var>Text</var> property.
</p>
<p>
AutoSelected is set to <b>False</b> when focus leaves the control.
</p>
</descr>
<seealso>
<link id="TCustomEdit.AutoSelect"/>
<link id="TCustomEdit.SelectAll"/>
<link id="TCustomEdit.SelText"/>
<link id="TCustomEdit.KeyUpAfterInterface"/>
<link id="TCustomEdit.MouseUp"/>
<link id="TCustomEdit.DoEnter"/>
<link id="TCustomEdit.DoExit"/>
</seealso>
</element>

<element name="TCustomEdit.ParentColor">
<short>Uses the Color from the Parent control, when enabled.</short>
<descr>
<p>
ParentColor determines if the control should use the Color from the Parent 
control, when enabled. The default value is <b>False</b> in TCustomEdit.
</p>
<p>
When this property is <b>True</b>, all changes to the Color of the parent 
will also be applied to the Color of the control, ensuring that they both 
contain same value. If the Color of the control is changed by the 
application, then ParentColor will be automatically set to <b>False</b>.
</p>
<p>
Using ParentColor when the Color value is clDefault can cause problems in 
resolving the actual color value. To obtain the Color property of a control 
while taking into account clDefault and ParentColor, use the 
GetColorResolvingParent method. This method might return a non-RGB color, but 
will never return clDefault. To obtain a purely RGB result use the 
GetRGBColorResolvingParent method.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.ParentColor">TControl.ParentColor</link>
<link id="#lcl.controls.TControl.Color">TControl.Color</link>
<link id="#lcl.controls.TControl.GetColorResolvingParent">TControl.GetColorResolvingParent</link>
<link id="#lcl.controls.TControl.GetRGBColorResolvingParent">TControl.GetRGBColorResolvingParent</link>
</seealso>
</element>

<element name="TCustomEdit.Create">
<short>Constructor for the class instance.</short>
<descr>
<p>
<var>Create</var> is an overridden constructor in <var>TCustomEdit</var>, and 
calls the inherited constructor on entry. Create ensures that component and 
control styles are set to the values needed for the edit control; csEdit in 
component style, csRequiresKeyboardInput is included in ControlStyle. Please 
note that these values may be changed in descendent classes; i. e. TCustomMemo 
uses csMemo instead of csEdit in the component style.
</p>
<p>
The default values for properties are assigned, including:
</p>
<ul>
<li>MaxLength</li>
<li>HideSelection</li>
<li>ParentColor</li>
<li>TabStop</li>
<li>EchoMode</li>
<li>BorderStyle</li>
<li>AutoSelect</li>
<li>AutoSelected</li>
<li>AutoSize</li>
<li>AccessibleRole</li>
<li>TextHint</li>
</ul>
</descr>
<seealso>
<link id="TCustomEdit.AutoSelect"/>
<link id="TCustomEdit.AutoSelected"/>
<link id="TCustomEdit.AutoSize"/>
<link id="TCustomEdit.BorderStyle"/>
<link id="TCustomEdit.Destroy"/>
<link id="TCustomEdit.EchoMode"/>
<link id="TCustomEdit.HideSelection"/>
<link id="TCustomEdit.MaxLength"/>
<link id="TCustomEdit.ParentColor"/>
<link id="TCustomEdit.TabStop"/>
<link id="TCustomMemo"/>
<link id="#lcl.extctrls.TCustomLabeledEdit">TCustomLabeledEdit</link>
<link id="#lcl.maskedit.TCustomMaskEdit">TCustomMaskEdit</link>
<link id="#lcl.spin.TCustomFloatSpinEdit">TCustomFloatSpinEdit</link>
<link id="#lcl.controls.TControl.AccessibleRole">TControl.AccessibleRole</link>
<link id="#lcl.controls.TControl.ControlStyle">TControl.ControlStyle</link>
<link id="#lcl.controls.TWinControl.Create">TWinControl.Create</link>
</seealso>
</element>
<element name="TCustomEdit.Create.AOwner">
<short>Owner of the class instance.</short>
</element>

<element name="TCustomEdit.Destroy">
<short>Destructor for the class instance.</short>
<descr>
<p>
<var>Destroy</var> is the overridden destructor for the class instance. 
Destroy ensures that resources allocated for the internal change handler are 
freed, and calls the inherited destructor prior to exit.
</p>
</descr>
<seealso/>
</element>

<element name="TCustomEdit.Clear">
<short>Deletes all text in the edit box for the control.</short>
<descr>
<p>
<var>Clear</var> is a procedure used to remove the text in the control. Clear 
sets the value in <var>Text</var> to an empty string (<b>''</b>).
</p>
</descr>
<seealso>
<link id="TCustomEdit.Text"/>
</seealso>
</element>

<element name="TCustomEdit.SelectAll">
<short>Selects the entire text in the edit control.</short>
<descr>
<p>
<var>SelectAll</var> is a procedure used to select all of the text content in 
the edit box for the control.
</p>
<p>
SelectAll checks the value in <var>Text</var> to ensure that content is 
available for the selection. No actions are performed in the method when Text 
is an empty string (<b>''</b>).
</p>
<p>
When Text is not empty, the values in <var>SelStart</var> and 
<var>SelLength</var> are updated to use the content in Text starting at the 
first UTF-8-encoded character. UTF8Length is called to get the length for 
Text, and the value stored in SelLength.
</p>
</descr>
<seealso>
<link id="TCustomEdit.Text"/>
<link id="TCustomEdit.SelStart"/>
<link id="TCustomEdit.SelLength"/>
<link id="TCustomEdit.SelText"/>
</seealso>
</element>

<element name="TCustomEdit.ClearSelection">
<short>Clears the current text selection in the edit control.</short>
<descr>
<p>
<var>ClearSelection</var> is a procedure used to clear the currently selected 
text in the edit control. ClearSelection sets the value in <var>SelText</var> 
to an empty string ('') to discard selected value in the edit control. It 
does <b>not</b> affect the values in the <var>Text</var> property.
</p>
<p>
No actions are performed in the method when <var>SelLength</var> contains 
<b>0</b> (<b>zero</b>).
</p>
<p>
Use <var>HideSelection</var> to disable text selection in the edit control.
</p>
</descr>
<seealso>
<link id="TCustomEdit.SelText"/>
<link id="TCustomEdit.SelStart"/>
<link id="TCustomEdit.SelLength"/>
<link id="TCustomEdit.HideSelection"/>
</seealso>
</element>

<element name="TCustomEdit.CopyToClipboard">
<short>Copies the selected text in the control to the clipboard.</short>
<descr>
<p>
<var>CopyToClipboard</var> is a procedure used to copy the selected text in 
the control to the clipboard. CopyToClipboard is performed for selected text 
when the <b>Ctrl+C</b> or <b>Ctrl+Insert</b> key combination is handled for 
the edit control. <b>Meta+C</b> or <b>Meta+Insert</b> is used for macOS. No 
actions are performed when text is not selected in the control.
</p>
<p>
CopyToClipboard calls the <var>Copy</var> method in the widgetset class when 
a handle has been allocated for the control.
</p>
<p>
Use <var>CutToClipboard</var> to copy the selected text to the clipboard, and 
delete it from the text in the edit control.
</p>
<p>
Use <var>PasteFromClipboard</var> to insert the contents of the clipboard 
into the text for the edit control.
</p>
<p>
Use <var>Undo</var> to revert the last editing action performed in the 
control.
</p>
</descr>
<seealso>
<link id="TCustomEdit.CutToClipboard"/>
<link id="TCustomEdit.PasteFromClipboard"/>
</seealso>
</element>

<element name="TCustomEdit.CutToClipboard">
<short>
Moves the selected text into the clipboard (removes it from the control).
</short>
<descr>
<p>
<var>CutToClipboard</var> is a method used to move the current text selection 
in the control to the clipboard. The selected value is removed from the Text 
in the control.
</p>
<p>
CutToClipboard is performed when the <b>Ctrl+X</b> or <b>Shift+Delete</b> key 
combination is handled in the control (macOS uses <b>Meta+X</b> or 
<b>Shift+Delete</b>). Pressing <b>Shift+Delete</b> when text is not selected 
(<var>SelLength</var> is 0) causes the character prior to the editing 
cursor to be deleted but not copied to the clipboard. No actions are 
performed if the editing cursor is positioned before the first character in 
the Text for the control.
</p>
<p>
CutToClipboard calls the <var>Cut</var> method in the widgetset class when 
its handle has been allocated.
</p>
<p>
Use <var>CopyToClipboard</var> to copy the current text selection in the 
control to the clipboard.
</p>
<p>
Use <var>PasteFromClipboard</var> to insert the contents of the clipboard at 
the current position in the edit control.
</p>
<p>
Use <var>Undo</var> to revert the last editing action performed in the 
control.
</p>
</descr>
<seealso/>
</element>

<element name="TCustomEdit.PasteFromClipboard">
<short>
Inserts text from the clipboard at the current position in the control.
</short>
<descr>
<p>
<var>PasteFromClipboard</var> is a method used to insert the contents of the 
clipboard at the current position in the edit control. If Text is selected in 
the control, the SelText is replaced with the clipboard content. When 
SelLength is 0, the clipboard values are inserted at the position for the 
editing cursor.
</p>
<p>
PasteFromClipboard is performed when the <b>Ctrl+V</b> or <b>Shift+Insert</b> 
key combination is handled for the control (macOS uses <b>Meta+V</b> or 
<b>Shift+Insert</b>).
</p>
<p>
PasteFromClipboard calls the <var>Paste</var> method in the widgetset class 
when its handle has been allocated.
</p>
<p>
Use <var>CopyToClipboard</var> to copy the current text selection in the 
control to the clipboard.
</p>
<p>
Use <var>CutToClipboard</var> to copy the selected text to the clipboard, and 
delete it from the text in the edit control.
</p>
<p>
Use <var>Undo</var> to revert the last editing action performed in the 
control.
</p>
</descr>
<seealso/>
</element>

<element name="TCustomEdit.Undo">
<short>Reverts the last editing action in the control.</short>
<descr>
<p>
<var>Undo</var> is a method used to revert the last editing action performed 
in the control. Undo is performed when the <b>Ctrl+Z</b> (or <b>Meta+Z</b> on 
macOS) key combination is handled for the control. Pressing <b>Ctrl+Z</b> 
causes the value in Text to revert to its value before editing. A subsequent 
<b>Ctrl+Z</b> key press causes the edited value to be toggled.
</p>
<p>
Undo calls the <var>Undo</var> method in the widgetset class when its handle 
has been allocated.
</p>
</descr>
<seealso/>
</element>

<element name="TCustomEdit.RemoveAllHandlersOfObject">
<short>Removes all event handlers assigned for the specified object.</short>
<descr>
<p>
<var>RemoveAllHandlersOfObject</var> is an overridden method in TCustomEdit, 
and calls the inherited method on entry to remove handlers for the specified 
object.
</p>
<p>
RemoveAllHandlersOfObject uses the internal <var>TMethodList</var> instance 
(when assigned) and calls its RemoveAllMethodsOfObject method to remove 
entries where the <var>TMethod</var> data points to the object specified in 
AnObject.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.RemoveAllHandlersOfObject">TControl.RemoveAllHandlersOfObject</link>
</seealso>
</element>
<element name="TCustomEdit.RemoveAllHandlersOfObject.AnObject">
<short>
Object instance to remove for the list of handlers in the control.
</short>
</element>

<element name="TCustomEdit.AddHandlerOnChange">
<short>Adds the specified OnChange event handler to the control.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomEdit.AddHandlerOnChange.AnOnChangeEvent">
<short>Event handler added in the method.</short>
</element>
<element name="TCustomEdit.AddHandlerOnChange.AsFirst">
<short>
<b>True</b> if the handler is stored at the top of the method list for the 
handler type.
</short>
</element>

<element name="TCustomEdit.RemoveHandlerOnChange">
<short>
Removes the specified OnChange event handler for the list of handlers in the 
control.
</short>
<descr>
<p>
<var>RemoveHandlerOnChange</var> is a method used to remove the event handler 
specified in <var>AnOnChangeEvent</var> from the list of <var>OnChange</var> 
handlers for the control. AnOnChangeEvent is a <var>TNotifyEvent</var> 
instance, and it is used to locate and remove the <var>TMethod</var> entry 
registered for the handler. RemoveHandlerOnChange reverses the actions 
performed in <var>AddHandlerOnChange</var>, called when an OnChange event 
handler is assigned to the control.
</p>
<p>
No actions are performed in the method when the internal OnChange method list 
has not been assigned (contains <b>Nil</b>).
</p>
</descr>
<seealso>
<link id="#lazutils.lazmethodlist.TMethodList">TMethodList</link>
<link id="#lazutils.lazmethodlist.TMethodList.Remove">TMethodList.Remove</link>
<link id="#rtl.system.TMethod">TMethod</link>
<link id="#rtl.classes.TNotifyEvent">TNotifyEvent</link>
</seealso>
</element>
<element name="TCustomEdit.RemoveHandlerOnChange.AnOnChangeEvent">
<short>Event handler removed from the list of handlers in the control.</short>
</element>

<element name="TCustomEdit.Alignment">
<short>
The horizontal alignment for the text in the control (left, right, or 
centered).
</short>
<descr>
<p>
<var>Alignment</var> is a <var>TAlignment</var> property which controls the 
horizontal alignment of text in the control. The default value for the 
property is taLeftJustify. See <link 
id="#rtl.classes.TAlignment">TAlignment</link> for more information about the 
enumeration values and their meanings.
</p>
<p>
Alignment is used in <var>CreateParams</var> when alignment style flags are 
added to the creation parameters for the method. The value is also passed to 
the widgetset class then the handle is created (or re-created) for the class 
instance. Changing the value in the property causes the widgetset class to be 
notified when a handle has been allocated for the control.
</p>
</descr>
<seealso/>
</element>

<element name="TCustomEdit.AutoSize">
<short>
Allows automatic adjustment of the size for the control, according to its 
content.
</short>
<descr>
<p>
The action performed depends on the control type. For example, a label or 
button can become bigger or smaller to accommodate a longer or shorter 
caption. The default value for the property is <b>True</b> in TCustomEdit. 
and enables auto-sizing the control instance to its content.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.AutoSize">TControl.AutoSize</link>
</seealso>
</element>

<element name="TCustomEdit.BorderStyle">
<short>Indicates the line style drawn as a border around the control.</short>
<descr>
<p>
<var>BorderStyle</var> is a <var>TBorderStyle</var> property with the line 
style used for borders on the control. The default value for the property is 
bsSingle in TCustomEdit, and causes the control to be drawn with the client 
edges style enabled. Use bsNone if borders are not needed for the control.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.BorderStyle">TWinControl.BorderStyle</link>
<link id="#lcl.controls.TBorderStyle">TBorderStyle</link>
</seealso>
</element>

<element name="TCustomEdit.CanUndo">
<short>
Indicates whether the last change can be reverted in the control.
</short>
<descr>
<p>
<var>CanUndo</var> is a read-only <var>Boolean</var> property which indicates 
whether the last editing change can be reverted in the control using the Undo 
method.
</p>
<p>
The property value is <b>False</b> if a handle has not been allocated for the 
widgetset class. Otherwise, the property value is determined by calling the 
<var>GetCanUndo</var> method in the widgetset class.
</p>
</descr>
<seealso/>
</element>

<element name="TCustomEdit.CaretPos">
<short>The position of the editing cursor in the control.</short>
<descr>
<p>
CaretPos is a TPoint property which contains the coordinates for the caret 
(or editing cursor) in the control. The coordinates reflects logical (UTF-8) 
characters and lines.
</p>
<dl>
<dt>TPoint.X</dt>
<dd>
Contains the zero-based offset into the UTF-8-encoded characters in the 
control Text. Position 0 is immediately prior to the first UTF-8 character in 
Text. If there is selected text in the control, the caret is considered to be 
positioned right <b>after</b> the last selected character. Character 
positions are independent of the LTR/RTL BiDi-ness for the control.
</dd>
<dt>TPoint.Y</dt>
<dd>
Contains the zero-based relative line number for the editing cursor. For 
single-line edits the value is normally 0.
</dd>
</dl>
<p>
The value in CaretPos is updated by the widgetset class when key and 
selection control messages are handled.
</p>
</descr>
</element>

<element name="TCustomEdit.CharCase">
<short>
Controls the character case applied to values entered in the control.
</short>
<descr>
<p>
CharCase is a TEditCharCase property which indicates how values in Text are 
converted and displayed in the control.
</p>
<dl>
<dt>ecNormal</dt>
<dd>
Normal letter case is applied; no conversion is applied. Use the Shift key to 
change the case for a character entered in the control.
</dd>
<dt>ecUpperCase</dt>
<dd>
Values in Text are converted to uppercase letters. Shift key state is ignored.
</dd>
<dt>ecLowerCase</dt>
<dd>
Values in Text are converted to lowercase letters. Shift key state is ignored.
</dd>
</dl>
<p>
The default value for the property is ecNormal. Changing the value for the 
property causes the existing values in Text to be converted to the case 
indicated in the new property value.
</p>
<remark>
Conversions apply to the entire value in Text, and <b>cannot</b> be reverted.
</remark>
</descr>
<seealso>
<link id="#lcl.controls.TControl.Text">TControl.Text</link>
<link id="#lcl.stdctrls.TEditCharCase">TEditCharCase</link>
</seealso>
</element>

<element name="TCustomEdit.EchoMode">
<short>
Allows to modify the text display, useful for entering passwords.
</short>
<descr>
<p>
The following conversions can be specified:
</p>
<dl>
<dt>emNormal</dt>
<dd>No changes are performed.</dd>
<dt>emNone</dt>
<dd>Spaces are echoed instead for the control value.</dd>
<dt>emPassword</dt>
<dd>The value in PasswordChar is echoed.</dd>
</dl>
<remark>Conversions apply to the entire text, and <b>cannot</b> be 
reverted.</remark>
</descr>
</element>

<element name="TCustomEdit.EmulatedTextHintStatus">
<short>Status for the emulated TextHint in the control.</short>
<descr>
<p>
<var>EmulatedTextHintStatus</var> is a read-only 
<var>TEmulatedTextHintStatus</var> property which contains the status value 
for an emulated TextHint display in the control. EmulatedTextHintStatus is 
used when a value has been assigned to the <var>TextHint</var> property and 
the widgetset does not natively implement the capability. The LCL emulates 
the TextHint display by assigning the value in TextHint to the 
<var>Text</var> for the control.
</p>
<p>
EmulatedTextHintStatus is updated in the <var>ShowEmulatedTextHint</var> and 
<var>HideEmulatedTextHint</var> methods.
</p>
</descr>
<seealso>
<link id="TEmulatedTextHintStatus"/>
<link id="TCustomEdit.TextHint"/>
<link id="TCustomEdit.Text"/>
</seealso>
</element>

<element name="TCustomEdit.HideSelection">
<short>
Determines if selected text to be hidden when the control does not have focus.
</short>
<descr>
<p>
<var>HideSelection</var> is a <var>Boolean</var> property which determines 
whether the selected text in the control is hidden when the control does not 
have focus.
</p>
<p>
HideSelection negates the default behavior in the edit control. The default 
behavior hides the selection when the control loses focus, and displays the 
text selection when the control receives focus. When set to <b>False</b>, the 
selected text (if any) is <b>always</b> displayed in the selected state - 
even when the control loses focus.
</p>
<p>
The default value for the property is <b>True</b>.
</p>
<p>
Changing the value for the property causes the <var>SetHideSelection</var> 
method in the widgetset class to be called when its handle has been 
allocated. No actions are performed in the method when the handle has not 
been allocated for the widgetset class.
</p>
<p>
The value in HideSelection is used in the <var>CreateParams</var> method to 
determine whether the <var>ES_NOHIDESEL</var> edit style flag is included in 
or omitted from the creation parameters for the control. When HideSelection 
is set to <b>False</b>, the ES_NOHIDESEL edit style is included in the flag 
values.
</p>
<p>
Use SelText, SelStart, and SelLength to change the text selection in program 
code. Use ClearSelection to remove the current text selection in the edit 
control.
</p>
<remark>
HideSelection is not supported for the GTK2, QT4, QT5, and QT6 widgetsets.
</remark>
</descr>
<seealso>
<link id="TCustomEdit.Text"/>
<link id="TCustomEdit.SelText"/>
<link id="TCustomEdit.SelStart"/>
<link id="TCustomEdit.SelLength"/>
<link id="TCustomEdit.ClearSelection"/>
<link id="TCustomEdit.CreateParams"/>
</seealso>
</element>

<element name="TCustomEdit.MaxLength">
<short>
The maximum length of the value entered in Text, or 0 (zero) for unlimited 
length.
</short>
<descr>
<p>
In Delphi MaxLength only limits user input. The LCL actually restricts the 
maximum length of the stored text; this simplifies the implementation for 
non-Win32 widgetsets.
</p>
<remark>
MaxLength is not supported for the QT4 widgetset.
</remark>
</descr>
</element>

<element name="TCustomEdit.Modified">
<short>
<b>True</b> when the value in Text has been changed using the keyboard.
</short>
<descr>
<p>
<var>Modified</var> is a <var>Boolean</var> property which indicates if the 
value in <var>Text</var> has been changed when a <b>CM_TEXTCHANGED</b> 
message is handled for the control. The value is set to <b>True</b> in the 
<var>TextChanged</var> method. The value is reset to <b>False</b> when 
<var>RealSetText</var> is called to store the value in Text to the buffer for 
the control.
</p>
<p>
In short, Modified is set to <var>True</var> if the value in Text is changed 
by user interaction with the control (keyboard or clipboard). It is set to 
<var>False</var> if the value in Text was assigned in program code.
</p>
<p>
Use event handlers, like OnEditingDone or OnChange, to perform actions needed 
when the value for the control has been changed.
</p>
</descr>
<seealso>
<link id="TCustomEdit.Text"/>
<link id="TCustomEdit.TextChanged"/>
<link id="TCustomEdit.RealSetText"/>
<link id="TCustomEdit.OnChange"/>
<link id="#lcl.controls.TControl.OnEditingDone">TControl.OnEditingDone</link>
</seealso>
</element>

<element name="TCustomEdit.NumbersOnly">
<short>
Indicates if the edit control accepts numeric values only.
</short>
<descr>
<p>
<var>NumbersOnly</var> is a <var>Boolean</var> property which controls 
whether Text is limited to characters which represent numeric digits. The 
default value for the property is <b>False</b>, and allows any character 
valid for the type to be entered. When set to <b>True</b>, only the 
characters '0'..'9' are accepted in Text. '+', '-', ',', and '.' are 
<b>not</b> numeric digits.
</p>
<p>
Changing the property value causes the widgetset class to be notified when a 
handle has been allocated for the control.
</p>
<p>
NumbersOnly is used in <var>CreateParams</var> to include the 
<b>ES_NUMBER</b> edit style in the creation parameters for the control when 
set to <b>True</b>.
</p>
<p>
NumbersOnly is not supported on all platform for the LCL; GTK 2 does not 
support the property.
</p>
<p>
Versions of Windows prior to Windows 95 did not enforce the ES_NUMBER style 
flag. It could be specified, but still allowed any value to be manually 
entered into the edit control. Some version of Windows allowed copy (Ctrl+C) 
and paste (Ctrl+V) to be used to insert non-numeric values - even when 
NumbersOnly is set to <b>True</b>.
</p>
<p>
For inputs that require both numeric and punctuation digits, use one of the 
keyboard event handlers like OnKeyPress or OnKeyDown to filter values as they 
are entered into a control. Or, use TMaskEdit which supports using an edit 
mask for the input values.
</p>
<remark>
NumbersOnly is not supported for the GTK2 or GTK3 widgetset.
</remark>
</descr>
<seealso>
<link id="TCustomEdit.Text"/>
<link id="TCustomEdit.CreateParams"/>
<link id="#lcl.controls.TWinControl.OnKeyPress">TWinControl.OnKeyPress</link>
<link id="#lcl.controls.TWinControl.OnKeyDown">TWinControl.OnKeyDown</link>
<link id="#lcl.maskedit.TMaskEdit">TMaskEdit</link>
</seealso>
</element>

<element name="TCustomEdit.OnChange">
<short>
Event handler signalled when the text for the control is changed.
</short>
<descr>
<p>
<var>OnChange</var> is a <var>TNotifyEvent</var> property with the event 
handler signalled when the text for the control is changed.
</p>
<p>
OnChange is triggered when the value in <var>Text</var> is modified either by 
using the keyboard or assigning a new value in program code. Please note that 
this differs from controls, like <var>TCustomComboBox</var> / 
<var>TComboBox</var>, where the event is not signalled when the control value 
is changed in program code.
</p>
<p>
When the control value is edited using the keyboard, OnChange is signalled 
after each character or keystroke is handled and applied to the value in 
Text. To avoid visible delays during editing, the event handler should not be 
too time or resource intensive.
</p>
<p>
Use the Modified property to determine whether the change is the result of 
user interaction with the control, or setting the control value in program 
code. Modified contains <b>False</b> if the value was assigned in program code.
</p>
<p>
OnChange is signalled (when assigned) from the <var>Change</var> method, and 
occurs after the <var>Changed</var> method is used to post the 
<var>CM_CHANGED</var> control message.
</p>
<p>
Use the OnEditingDone event handler to perform actions needed when editing has 
been completed in the control. For example: when the Enter key is pressed or 
the focus is changed to another control.
</p>
</descr>
<seealso>
<link id="TCustomEdit.Change"/>
<link id="TCustomEdit.Text"/>
<link id="TCustomEdit.Modified"/>
<link id="#lcl.controls.TControl.Changed">TControl.Changed</link>
<link id="#lcl.controls.TControl.OnEditingDone">TControl.OnEditingDone</link>
</seealso>
</element>

<element name="TCustomEdit.PasswordChar">
<short>
Allows obfuscation of the displayed text, showing all characters as 
PasswordChar.
</short>
<descr>
<p>
Typically used in password input, to hide the input from other viewers. The 
value in <var>Text</var> is still available for the <b>WM_GETTEXT</b> message.
</p>
<remark>
For the macOS Carbon widgetset, changing the default value for the property is not supported.
</remark>
</descr>
<seealso>
<link id="TCustomEdit.EchoMode"/>
</seealso>
</element>

<element name="TCustomEdit.PopupMenu" link="#lcl.controls.TControl.PopupMenu"/>

<element name="TCustomEdit.ReadOnly">
<short>
Indicates if the user is prevented from changing the value for the Text in 
the control.
</short>
<descr>
<p>
<var>ReadOnly</var> is a <var>Boolean</var> property which indicates if the 
user is prevented from changing the value in the control.
</p>
<p>
ReadOnly is used in the <var>CreateParams</var> method to determine if the 
<b>ES_READONLY</b> edit style flag is included in the creation parameters for 
the control. The value is also passed to the widgetset class in the 
<var>InitializeWnd</var> method, and when the value for the property is 
changed.
</p>
<p>
When ReadOnly is <b>True</b>, the <var>EditingDone</var> method does not 
signal the <var>OnEditingDone</var> event handler (in the ancestor).
</p>
<p>
The default value for the property is <b>False</b>, and indicates that the 
value can be edited in the control.
</p>
</descr>
<seealso>
<link id="TCustomEdit.CreateParams"/>
<link id="TCustomEdit.InitializeWnd"/>
<link id="TCustomEdit.EditingDone"/>
<link id="#lcl.controls.TControl.EditingDone">TControl.EditingDone</link>
<link id="#lcl.controls.TControl.OnEditingDone">TControl.OnEditingDone</link>
</seealso>
</element>

<element name="TCustomEdit.SelLength">
<short>
The number of currently selected UTF-8-encoded characters in the control.
</short>
<descr>
<p>
<var>SelLength</var> is an <var>Integer</var> property which contains the 
number of UTF-8-encoded characters currently selected in the edit box for the 
control. The current selection is the value in <var>Text</var> starting at 
the ordinal position in <var>SelStart</var> and continuing for the number of 
characters in the property.
</p>
<p>
The value for the property is read from the widgetset class when a handle has 
been allocated for the control. Otherwise, the internal member is read get 
the value for the property. Setting a new value for the property notifies the 
widgetset class when a handle has been allocated for the control.
</p>
<p>
Use <var>SelStart</var> to set the zero-based position in Text for the first 
UTF-8-encoded character in the current text selection.
</p>
<p>
Use <var>SelText</var> to examine the values selected in the control, or to 
replace the value in the current text selection. <var>ClearSelection</var> 
can be used to remove the characters in the current text selection for the 
control.
</p>
<p>
Use <var>SelectAll</var> to make all values in Text the current text 
selection in the control.
</p>
<p>
Use <var>HideSelection</var> to un-select the current text selection in the 
control.
</p>
</descr>
<seealso>
<link id="TCustomEdit.SelText"/>
<link id="TCustomEdit.SelStart"/>
<link id="TCustomEdit.SelectAll"/>
<link id="TCustomEdit.HideSelection"/>
<link id="TCustomEdit.ClearSelection"/>
</seealso>
</element>

<element name="TCustomEdit.SelStart">
<short>
The zero-based index for the first UTF-8 character in the current text 
selection.
</short>
<descr>
<p>
<var>SelStart</var> is an <var>Integer</var> property which contains the 
ordinal position in <var>Text</var> for the UTF-8-encoded character at the 
start of the current text selection. The current text selection includes the 
number of characters in <var>SelLength</var>. SelStart is a zero-based value.
</p>
<p>
The value for SelStart is read from the widgetset class when a handle has 
been allocated for the control. Otherwise, the value is read from the 
internal member for the property. Setting a new value for the property 
notifies the widgetset class when a handle has been allocated for the control.
</p>
<p>
Use <var>SelLength</var> for the number of UTF-8-encoded characters in the 
current text selection.
</p>
<p>
Use <var>SelText</var> to examine the values selected in the control, or to 
replace the value in the current text selection. <var>ClearSelection</var> 
can be used to remove the characters in the current text selection for the 
control.
</p>
<p>
Use <var>SelectAll</var> to make all values in Text the current text 
selection in the control.
</p>
<p>
Use <var>HideSelection</var> to un-select the current text selection in the 
control.
</p>
</descr>
<seealso>
<link id="TCustomEdit.SelLength"/>
<link id="TCustomComboBox.SelStart"/>
</seealso>
</element>

<element name="TCustomEdit.SelText">
<short>The currently selected text in the edit box for the control.</short>
<descr>
<p>
<var>SelText</var> is a <var>String</var> property which contains the current 
text selection in the control. The current text selection is the 
UTF-8-encoded characters in <var>Text</var> identified by the 
<var>SelStart</var> and <var>SelLength</var> properties.
</p>
<p>
The property value is derived by calling the <var>UTF8Copy</var> routine in 
<file>lazutf8.pas</file>. Setting a new value for the property causes the 
text selection in Text to be replaced with the specified value. The widgetset 
class is notified when a handle has been allocated for the control.
</p>
<p>
Values must assigned to the SelStart and SelLength property before accessing 
SelText.
</p>
<p>
SelText is updated when the <var>ClearSelection</var> is called to remove the 
text selection value from the content in Text. SelText is compared to Text to 
determine the value for <var>AutoSelected</var> when <b>VK_RETURN</b> key or 
<b>MouseUp</b> messages are handled.
</p>
</descr>
<seealso>
<link id="TCustomEdit.SelLength"/>
<link id="TCustomEdit.SelStart"/>
<link id="TCustomEdit.Text"/>
<link id="TCustomEdit.AutoSelected"/>
<link id="TCustomEdit.ClearSelection"/>
<link id="#lazutils.lazutf8.UTF8Copy">UTF8Copy</link>
</seealso>
</element>

<element name="TCustomEdit.TabOrder" link="#lcl.controls.TWinControl.TabOrder"/>

<element name="TCustomEdit.TabStop">
<short>Enables keyboard navigation using the Tab or Shift+Tab keys.</short>
<descr>
<p>
Allows the user to navigate to this control by pressing the Tab or Shift+Tab 
keys. The default value for the property is <b>True</b> in 
<var>TCustomEdit</var>.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.TabStop">TWinControl.TabStop</link>
</seealso>
</element>

<element name="TCustomEdit.Text">
<short>The text displayed and edited for the control.</short>
<descr>
<p>
<var>Text</var> is a <var>TCaption</var> property which contains the 
UTF-8-encoded characters maintained as the value for the edit control. The 
property value can be assigned at design-time using the Object Inspector in 
the Lazarus IDE, or at run-time in program code. For example:
</p>
<code>
Edit1.Text := 'Volts DC';
ShowMessage('Unit Measure = ' + Edit1.Text);
</code>
<p>
The value in Text is read and written using the <var>RealGetText</var> and
<var>RealSetText</var> methods. Not only do they provide code compatibility 
with the Delphi VCL, they support use of emulated <var>TextHint</var> 
displays. The value in TextHint is temporarily assigned to Text when an 
inline hint is displayed for the control.
</p>
<p>
The value in Text may be altered in the <var>TextChanged</var> method when 
the setting in <var>CharCase</var> requires case conversion for the value in 
the control.
</p>
</descr>
<seealso>
<link id="TCustomEdit.TextChanged"/>
<link id="TCustomEdit.CharCase"/>
<link id="TCustomEdit.TextHint"/>
<link id="TCustomEdit.RealGetText"/>
<link id="TCustomEdit.RealSetText"/>
<link id="#lcl.controls.TControl.Text">TControl.Text</link>
</seealso>
</element>

<element name="TCustomEdit.TextHint">
<short>
Default hint text shown when the Text property is empty for the control.
</short>
<descr>
<p>
<var>TextHint</var> is a <var>TTranslateString</var> property which contains 
the inline hint text displayed for the control. It is displayed in the 
editable area for the <var>TCustomEdit</var> when the Text property is empty. 
Some platforms may refer to this feature as a "placeholder" or "editing hint". 
The value in TextHint is normally displayed using the color in clGrayText.
</p>
<p>
The display behavior for TextHint is platform-specific. On some platforms, the 
text hint is displayed any time the value in Text is empty. For others, it is 
displayed only when the control does not have focus.
</p>
<p>
Setting a new value in TextHint causes the widgetset class to be notified, 
and the value is displayed in the edit control when allowed. If the new 
property value is an empty string (''), the text hint is removed from the 
control.
</p>
<p>
For platforms that do not provide native support for TextHint, an emulated 
text hint is displayed. This is a TCustomEdit control created to enable the 
feature, and can be displayed only when the original control does not have 
focus.
</p>
<p>
TextHint is different than Hint, which displays a balloon tip when ShowHint is 
set to <b>True</b> and the mouse is over the control.
</p>
</descr>
<seealso>
<link id="TCustomEdit.Text"/>
<link id="TCustomEdit.CanShowEmulatedTextHint"/>
<link id="#lcl.controls.TControl.Hint">TControl.Hint</link>
<link id="#lcl.controls.TControl.ShowHint">TControl.ShowHint</link>
</seealso>
</element>

<element name="TMemoScrollbar">
<short>A scrollbar for use in Memo controls.</short>
<descr>
<p>
<var>TMemoScrollbar</var> is a scrollbar specifically for use with 
<var>TMemo</var> controls. It provides overridden GetHorzScrollBar and 
GetVertScrollBar methods used to access the individual scrollbars in the 
associated TCustomMemo/TMemo control. TMemoScrollbar inherits its properties 
from its ancestor, <link 
id="#lcl.forms.TControlScrollBar">TControlScrollBar</link>.
</p>
</descr>
<seealso>
<link id="TCustomMemo"/>
<link id="TMemo"/>
<link id="#lcl.forms.TControlScrollBar">TControlScrollBar</link>
</seealso>
</element>

<element name="TMemoScrollbar.GetHorzScrollBar">
<short>Gets the HorzScrollBar in the associated memo control.</short>
<descr/>
<seealso>
<link id="TCustomMemo.HorzScrollBar"/>
</seealso>
</element>
<element name="TMemoScrollbar.GetHorzScrollBar.Result">
<short>Value for the HorzScrollBar property in the memo control.</short>
</element>

<element name="TMemoScrollbar.GetVertScrollBar">
<short>Gets the VertScrollBar in the associated memo control.</short>
<descr/>
<seealso>
<link id="TCustomMemo.VertScrollBar"/>
</seealso>
</element>
<element name="TMemoScrollbar.GetVertScrollBar.Result">
<short>Value for the VertScrollBar property in the memo control.</short>
</element>

<element name="TMemoScrollbar.Increment" link="#lcl.forms.TControlScrollBar.Increment"/>
<element name="TMemoScrollbar.Page" link="#lcl.forms.TControlScrollBar.Page"/>
<element name="TMemoScrollbar.Smooth" link="#lcl.forms.TControlScrollBar.Smooth"/>
<element name="TMemoScrollbar.Position" link="#lcl.forms.TControlScrollBar.Position"/>
<element name="TMemoScrollbar.Range" link="#lcl.forms.TControlScrollBar.Range"/>
<element name="TMemoScrollbar.Size" link="#lcl.forms.TControlScrollBar.Size"/>
<element name="TMemoScrollbar.Visible" link="#lcl.forms.TControlScrollBar.Visible"/>

<element name="TCustomMemo">
<short>The base class for multi-line text controls.</short>
<descr>
<p>
<var>TCustomMemo</var> is a <var>TCustomEdit</var> descendant which 
implements the base class used for a multi-line edit control. TCustomMemo 
extends TCustomEdit with additional properties and methods needed for the 
control. Overridden methods are provided to create and initialize the control 
using style flags needed for the widgetset class.
</p>
<p>
The textual values in the multi-line control can be accessed using the 
<var>Lines</var> property. An individual line of text can be accessed by its 
ordinal position in the list of values. For example:
</p>
<code>
// var sContent: String;
sContent := AMemo.Lines[2];
</code>
<p>
This provides access to the third value in List (index positions are 
zero-based).
</p>
<p>
The values for all of the text in Lines can be retrieved as a single String 
using the <var>Text</var> property in the <var>TStrings</var> class instance. 
Each line of text is separated by the <var>LineEnding</var> character 
sequence for the host platform or operating system. For example:
</p>
<code>
// var sContent: String; ...
sContent := AMemo.Lines.Text;
</code>
<p>
Please note: There is a difference in TCustomMemo / TMemo between the 
<var>Text</var> and <var>Lines</var> properties. Text is actually the Caption 
for the control as inherited from TControl. Lines is the multi-line TStrings 
instance specific to the memo control. Setting the control value using Text 
does <b>NOT</b> cause the <var>Modified</var> property to be updated. Setting 
the value using the Lines property does cause the Modified property to be 
updated.
</p>
<p>
This is important if an <var>OnChange</var> event handler is used to detect 
changes to the value in the control, and you need to identify whether the 
change was performed in program code. You can identify a programmatic change 
by manipulating the value in Modified.
</p>
<p>
For changes in program code, set Modified to <b>False</b> before setting the 
value using the Text property. If Modified is <b>False</b> when OnChange is 
signalled, the change occurred in program code. Modified can be set as 
desired in your program code after the value is assigned to Text. For example:
</p>
<code>
// use Modified and Text to track program changes
procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Modified := False;
  Memo1.Text := 'Whiskey' + LineEnding + 'Tango' + LineEnding + 'Foxtrot';
  Memo1.Modified := True;
end;

procedure TForm1.Memo1Change(Sender: TObject);
begin
  if not TCustomMemo(Sender).Modified then
    StaticText1.Caption := 'Memo changed in code'
  else
    StaticText1.Caption := 'Memo changed by user';
end;
</code>
<p>
Changes entered by the user are applied when methods update the Lines 
property in the control. As a result, Modified is set to <b>True</b>. If 
Modified is <b>True</b> in OnChange, the change was triggered by user 
interaction with the control.
</p>
<p>
The value in Modified is retained when the control gains or loses focus 
whether by keyboard navigation or by using the mouse.
</p>
<p>
The text displayed in the control uses the attributes defined in the 
<var>Font</var> property. No capabilities are provided for formatting 
individual characters, words, or lines in the content for the control.
</p>
<p>
Both horizontal and vertical scrollbars can be used in the control. Use the 
<var>ScrollBar</var> property to define the scrollbars displayed for the 
control. It can be used to enable automatic scrollbars which are only 
displayed when the content for the control does not fit within its bounds.
</p>
<p>
Use the <var>Append</var> method to add a line of text to the values in Lines.
</p>
<p>
Use the <var>WantTabs</var> and <var>WantReturns</var> properties to 
determine whether the corresponding keys are captured and stored in Lines. 
This affects the way control messages are applied to the control.
</p>
<p>
Use <var>WordWrap</var> to indicate if the control should automatically wrap 
a line of text longer than the visible area for the control.
</p>
<p>
Applications should not create instances of TCustomMemo; use <var>TMemo</var> 
instead.
</p>
</descr>
<seealso>
<link id="TCustomMemo.ScrollBars"/>
<link id="TCustomMemo.HorzScrollBar"/>
<link id="TCustomMemo.VertScrollBar"/>
<link id="TCustomMemo.Lines"/>
<link id="TCustomMemo.WordWrap"/>
<link id="TCustomMemo.WantTabs"/>
<link id="TCustomMemo.WantReturns"/>
<link id="TCustomEdit.Modified"/>
<link id="TCustomEdit.Text"/>
<link id="TCustomEdit.OnChange"/>
<link id="TCustomEdit"/>
<link id="TMemo"/>
<link id="#lcl.controls.TControl.Font">TControl.Font</link>
</seealso>
</element>

<element name="TCustomMemo.FHorzScrollBar" link="#lcl.stdctrls.TCustomMemo.HorzScrollBar"/>
<element name="TCustomMemo.FLines" link="#lcl.stdctrls.TCustomMemo.Lines"/>
<element name="TCustomMemo.FScrollBars" link="#lcl.stdctrls.TCustomMemo.ScrollBars"/>
<element name="TCustomMemo.FVertScrollBar" link="#lcl.stdctrls.TCustomMemo.VertScrollBar"/>
<element name="TCustomMemo.FWantReturns" link="#lcl.stdctrls.TCustomMemo.WantReturns"/>
<element name="TCustomMemo.FWantTabs" link="#lcl.stdctrls.TCustomMemo.WantTabs"/>
<element name="TCustomMemo.FWordWrap" link="#lcl.stdctrls.TCustomMemo.WordWrap"/>

<element name="TCustomMemo.WSRegisterClass" link="#lcl.lclclasses.TLCLComponent.WSRegisterClass"/>

<element name="TCustomMemo.CreateParams">
<short>
Updates creation flags used to create the handle for the control.
</short>
<descr>
<p>
<var>CreateParams</var> is overridden in <var>TCustomMemo</var>, and calls 
the inherited method on entry. CreateParams ensures that style flags needed 
for the multi-line control are included in the <var>Style</var> property in 
the <var>Params</var> argument.
</p>
<p>
Values from the <var>ScrollBars</var> and <var>WordWrap</var> properties are 
checked, and flags are added as needed. ScrollBars causes window style flags 
to be added like WS_HSCROLL and/or WS_VSCROLL. When <var>WordWrap</var> is 
set to <b>True</b>, the WS_HSCROLL window style is removed from the creation 
parameters. Otherwise, the edit style ES_AUTOHSCROLL is added to the creation 
parameters.
</p>
</descr>
<seealso>
<link id="TCustomEdit.CreateParams"/>
<link id="TCustomMemo.ScrollBars"/>
<link id="TCustomMemo.WordWrap"/>
</seealso>
</element>
<element name="TCustomMemo.CreateParams.Params">
<short>Creation parameters for the control.</short>
</element>

<element name="TCustomMemo.InitializeWnd">
<short>Copies existing string values from the widgetset class.</short>
<descr>
<p>
<var>InitializeWnd</var> is an overridden method in <var>TCustomMemo</var>. 
InitializeWnd ensures that property values from widgetset class are stored in 
the current class instance when handle for the control is created (or 
re-created). InitializeWnd is called after the handle for the control was 
created, but before the handle for child controls is created.
</p>
<p>
InitializeWnd ensures that string values in the widgetset class (if any) are 
copied to a new <var>TStrings</var> instance and assigned to the 
<var>Lines</var> property. The previous TStrings instance in Lines is freed.
</p>
<p>
InitializeWnd calls the inherited method prior to exit.
</p>
</descr>
<seealso>
<link id="TCustomMemo.Lines"/>
<link id="TCustomEdit.InitializeWnd"/>
<link id="#rtl.classes.TStrings">TStrings</link>
</seealso>
</element>

<element name="TCustomMemo.FinalizeWnd">
<short>
Maintains resources in the class instance when the handle for the control is 
destroyed or re-created.
</short>
<descr>
<p>
<var>FinalizeWnd</var> ensures that existing string values assigned to the 
<var>Lines</var> property are captured, stored locally, and freed in the 
widget class instance before the handle is destroyed or re-created for the 
control. It ensures that scroll bar information stored in either HorzScrollBar 
or VertScrollBar is invalidated when the handle is finalized.
</p>
<p>
FinalizeWnd calls the inherited method prior to exit.
</p>
</descr>
<seealso>
<link id="TCustomMemo.Lines"/>
<link id="TCustomMemo.HorzScrollBar"/>
<link id="TCustomMemo.VertScrollBar"/>
<link id="#lcl.controls.TWinControl.FinalizeWnd">TWinControl.FinalizeWnd</link>
</seealso>
</element>

<element name="TCustomMemo.RealGetText">
<short>
Returns the textual content stored in Lines as a single String value.
</short>
<descr/>
<seealso>
<link id="#rtl.classes.TStrings.Text">TStrings.Text</link>
<link id="#LCL.Controls.TControl.RealGetText">TControl.RealGetText</link>
</seealso>
</element>
<element name="TCustomMemo.RealGetText.Result">
<short>The entire text in a single string.</short>
</element>

<element name="TCustomMemo.RealSetText">
<short>Replaces the value in <var>Lines.Text</var>.</short>
<descr/>
<seealso>
<link id="#LCL.Controls.TControl.RealSetText">TControl.RealSetText</link>
</seealso>
</element>
<element name="TCustomMemo.RealSetText.AValue">
<short>
Sets the value for the control from a single string.
</short>
<descr>
<p>
Sets the value for the control from a single string. Lines are separated by 
LineFeed (LF) and/or CarriageReturn (CR) characters.
</p>
</descr>
</element>

<element name="TCustomMemo.GetCachedText" link="#lcl.controls.TControl.GetCachedText"/>
<element name="TCustomMemo.GetCachedText.Result">
<short>Always <b>False</b>; a cache is not implemented in TCustomMemo.</short>
</element>
<element name="TCustomMemo.GetCachedText.CachedText">
<short>TCaption instance with the cached value for the control.</short>
</element>

<element name="TCustomMemo.GetCaretPos">
<short>Get the value for the CaretPos property.</short>
<descr>
<p>
<var>GetCaretPosition</var> is an overridden method in <var>TCustomMemo</var> 
used to get the value for the <var>CaretPos</var> property. It calls the 
GetCaretPos method in the widgetset class to get the return value for the 
method.
</p>
</descr>
<seealso>
<link id="TCustomEdit.CaretPos"/>
<link id="TCustomMemo.GetCaretPos"/>
<link id="TCustomMemo.SetCaretPos"/>
</seealso>
</element>
<element name="TCustomMemo.GetCaretPos.Result">
<short>Returns the position of the editing cursor or caret.</short>
</element>

<element name="TCustomMemo.KeyUpAfterInterface">
<short>Handles Key Up events forwarded from the LCL interface.</short>
<descr>
<p>
<var>KeyUpAfterInterface</var> handles the <var>VK_RETURN</var> key code for 
the control when WantReturns is set to <b>True</b>. It sets the value in Key 
to 0 to indicate that the key code does not finish editing in the control.
</p>
<p>
It calls the inherited method prior to exit to handle the key code normally 
when WantReturns is set to <b>False</b>.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.KeyUpAfterInterface">TWinControl.KeyUpAfterInterface</link>
</seealso>
</element>
<element name="TCustomMemo.KeyUpAfterInterface.Key">
<short>Virtual key code examined in the method.</short>
</element>
<element name="TCustomMemo.KeyUpAfterInterface.Shift">
<short>Shift, Ctrl, or Alt modifier for the key code.</short>
</element>

<element name="TCustomMemo.SetCaretPos">
<short>
Sets the position for the editing cursor or caret to the specified location.
</short>
<descr>
<p>
<var>SetCaretPos</var> is an overridden method in <var>TCustomMemo</var> used 
to set the position for the editing cursor (or caret).
</p>
<p>
<var>AValue</var> is a <var>TPoint</var> instance with the character and line 
coordinates for the editing cursor. The X member contains the 0-based 
relative column offset to the UTF-8-encoded character where the caret is 
positioned. 0 is immediately before the first character in the current line 
of text. The Y member contains the 0-based offset to the line where the caret 
is positioned.
</p>
<p>
SetCaretPos ensures that the widgetset class is cast to a TWSCustomMemoClass 
instance, and calls its SetCaretPos method.
</p>
</descr>
<seealso>
<link id="TCustomEdit.SetCaretPos"/>
</seealso>
</element>
<element name="TCustomMemo.SetCaretPos.AValue">
<short>New position for the editing cursor or caret.</short>
</element>

<element name="TCustomMemo.SetLines">
<short>Sets the value for the Lines property.</short>
<descr/>
<seealso>
<link id="TCustomMemo.Lines"/>
</seealso>
</element>
<element name="TCustomMemo.SetLines.Value">
<short>New value for the Lines property.</short>
</element>

<element name="TCustomMemo.SetSelText">
<short>Sets the value for the SelText property.</short>
<descr/>
<seealso>
<link id="TCustomEdit.SelText"/>
</seealso>
</element>
<element name="TCustomMemo.SetSelText.AValue">
<short>New value for the SelText property.</short>
</element>

<element name="TCustomMemo.SetWantReturns">
<short>Sets the value for the WantReturns property.</short>
<descr/>
<seealso>
<link id="TCustomMemo.WantReturns"/>
</seealso>
</element>
<element name="TCustomMemo.SetWantReturns.AValue">
<short>New value for the WantReturns property.</short>
</element>

<element name="TCustomMemo.SetWantTabs">
<short>Sets the value for the WantTabs property.</short>
<descr/>
<seealso>
<link id="TCustomMemo.WantTabs"/>
</seealso>
</element>
<element name="TCustomMemo.SetWantTabs.NewWantTabs">
<short>New value for the WantTabs property.</short>
</element>

<element name="TCustomMemo.SetWordWrap">
<short>Sets the value for the WordWrap property.</short>
<descr/>
<seealso>
<link id="TCustomMemo.WordWrap"/>
</seealso>
</element>
<element name="TCustomMemo.SetWordWrap.AValue">
<short>New value for the WordWrap property.</short>
</element>

<element name="TCustomMemo.SetScrollBars">
<short>Sets the value for the ScrollBars property.</short>
<descr/>
<seealso>
<link id="TCustomMemo.ScrollBars"/>
</seealso>
</element>
<element name="TCustomMemo.SetScrollBars.AValue">
<short>New value for the ScrollBars property.</short>
</element>

<element name="TCustomMemo.Loaded">
<short>
Performs actions needed when the component has been loaded using the LCL 
streaming mechanism.
</short>
<descr>
<p>
<var>Loaded</var> is an overridden method in <var>TCustomMemo</var>, and 
calls the inherited method on entry. When a handle has been allocated for the 
control, the widgetset class is notified of the current values in the 
<var>ScrollBars</var> and <var>WordWrap</var> properties.
</p>
</descr>
<seealso>
<link id="TCustomMemo.ScrollBars"/>
<link id="TCustomMemo.WordWrap"/>
<link id="#lcl.controls.TWinControl.Loaded">TWinControl.Loaded</link>
</seealso>
</element>

<element name="TCustomMemo.CMWantSpecialKey">
<short>
Handles control messages for Return and Tab keys when enabled in the control.
</short>
<descr>
<p>
<var>CMWantSpecialKey</var> is an overridden method in 
<var>TCustomMemo</var>. It ensures that control messages for VK_RETURN and 
VK_TAB keys are marked as handled when WantReturns or WantTabs are enabled in 
the control. All other messages are handled by calling the inherited method.
</p>
</descr>
<seealso>
<link id="TCustomEdit.CMWantSpecialKey"/>
</seealso>
</element>
<element name="TCustomMemo.CMWantSpecialKey.Message">
<short>Message examined and updated in the method.</short>
</element>

<element name="TCustomMemo.WMGetDlgCode">
<short>Handles Tab, Return, and Escape characters in control messages.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomMemo.WMGetDlgCode.Message">
<short>Message examined in the method.</short>
</element>

<element name="TCustomMemo.GetControlClassDefaultSize">
<short>Gets the default size used for new instances of the class.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomMemo.GetControlClassDefaultSize.Result">
<short>Returns the default size for the control as a TPoint value.</short>
<descr/>
<seealso/>
</element>

<element name="TCustomMemo.UTF8KeyPress">
<short>
Implements the handler for UTF8 key press events in the control.
</short>
<descr>
<p>
<var>UTF8KeyPress</var> is an overridden method in <var>TCustomMemo</var> 
which implements the handler for UTF-8-encoded key press events in the 
control.
</p>
<p>
UTF8KeyPress calls the inherited method on entry to signal the OnUTF8KeyPress 
event handler (when assigned). It ensures that a <b>Carriage Return</b> 
(decimal character 13) key is handled using the setting specified in the 
<var>WantReturns</var> property. When WantReturns is set to <b>False</b>, the 
value in <var>UTF8Key</var> is set to an empty string (<b>''</b>) to discard 
the character.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.UTF8KeyPress">TWinControl.UTF8KeyPress</link>
</seealso>
</element>
<element name="TCustomMemo.UTF8KeyPress.UTF8Key">
<short>Key examined in the method.</short>
</element>

<element name="TCustomMemo.CanShowEmulatedTextHint">
<short>
Indicates if an emulated TextHint can be displayed for the control.
</short>
<descr>
<p>
<var>CanShowEmulatedTextHint</var> is an overridden <var>Boolean</var> 
function in <var>TCustomMemo</var>, and does <b>not</b> call the inherited 
method in its implementation.
</p>
<p>
CanShowEmulatedTextHint determines whether an emulated <var>TextHint</var> 
can be displayed for the control. Normally, this requires a control handle 
and an unassigned value in the control text. In addition, some widgetsets 
implement text hints natively, and do not require LCL to emulate the 
capability (Windows, QT5, QT6). Emulated hint displays can also be suppressed 
when the widgetset class is being freed (when the Lines in the control have 
already been destroyed).
</p>
<p>
The current implementation always returns <b>False</b> for Memo controls.
</p>
</descr>
<seealso>
<link id="TCustomEdit.CanShowEmulatedTextHint"/>
</seealso>
</element>
<element name="TCustomMemo.CanShowEmulatedTextHint.Result">
<short>
<b>True</b> when an emulated TextHint can be displayed for the control.
</short>
</element>

<element name="TCustomMemo.Create">
<short>Constructor for the class instance.</short>
<descr>
<p>
<var>Create</var> is the overridden constructor for the class instance, and 
calls the inherited constructor on entry.
</p>
<p>
Create allocates resources needed for the <var>Lines</var>, 
<var>HorzScrollBar</var>, and <var>VertScrollBar</var> properties. It also 
sets the default values for properties, including: <var>WantTabs</var>, 
<var>WantReturns</var>, <var>WordWrap</var>, <var>AutoSelect</var>, and 
<var>AutoSize</var>.
</p>
</descr>
<seealso>
<link id="TCustomMemo.Destroy"/>
</seealso>
</element>
<element name="TCustomMemo.Create.AOwner">
<short>Owner of the class instance.</short>
</element>

<element name="TCustomMemo.Destroy">
<short>Destructor for the class instance.</short>
<descr>
<p>
<var>Destroy</var> is the overridden destructor for the class instance. 
Destroy ensures that resources allocated for the <var>Lines</var>, 
<var>HorzScrollBar</var>, and <var>VertScrollBar</var> properties are freed 
by calling the <var>FreeThenNil</var> routine in 
<file>lazutilities.pas</file>.
</p>
<p>
Destroy calls the inherited destructor prior to exiting from the method.
</p>
</descr>
<seealso>
<link id="TCustomMemo.Create"/>
</seealso>
</element>

<element name="TCustomMemo.Append">
<short>Appends the specified text to the Lines in the control.</short>
<descr>
<p>
<var>Append</var> is a procedure used to append the line of text in 
<var>AValue</var> to the end of the values in the <var>Lines</var> property. 
It is a convenience method, and calls the <var>Add</var> method in the Lines 
member.
</p>
<code>
// var sLine: String;
// the following are equivalent
AMemo.Append(sLine);
AMemo.Lines.Add(sLine);
</code>
</descr>
<seealso/>
</element>
<element name="TCustomMemo.Append.AValue">
<short>The text value added to Lines in the method.</short>
</element>

<element name="TCustomMemo.ScrollBy">
<short>
Scrolls the visible area in the control by the specified amounts.
</short>
<descr>
<p>
<var>ScrollBy</var> is an overridden method in <var>TCustomMemo</var> used to 
scroll the visible area for the control by the specified amounts.
</p>
<p>
<var>DeltaX</var> and <var>DeltaY</var> contain the number of pixels the 
content in the control is scrolled. DeltaX is applied to the horizontal 
position. DeltaY is applied to the vertical position. A positive value means 
that he control scrolls towards its bottom or right (respectively). 
Conversely, a negative value scrolls the content towards its top or left.
</p>
<p>
ScrollBy calls the <var>ScrollBy_WS</var> method in the ancestor class. It 
essentially replaces the method in the ancestor with the same name, and does 
not call the inherited method.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.ScrollBy">TWinControl.ScrollBy</link>
<link id="#lcl.controls.TWinControl.ScrollBy_WS">TWinControl.ScrollBy_WS</link>
</seealso>
</element>
<element name="TCustomMemo.ScrollBy.DeltaX">
<short>Amount to scroll horizontally.</short>
</element>
<element name="TCustomMemo.ScrollBy.DeltaY">
<short>Amount to scroll vertically.</short>
</element>

<element name="TCustomMemo.Lines">
<short>
Contains the individual lines of text in the multi-line edit control.
</short>
<descr>
<p>
<var>Lines</var> is a <var>TStrings</var> property which contains the 
individual lines of text in the multi-line edit control. The values in Lines 
can be accessed using the <var>Strings</var> and <var>Text</var> properties 
defined in TStrings. The Strings property in Lines allows an individual line 
of text to be accessed by its ordinal position. For example:
</p>
<code>
// var sContent: String;
sContent := AMemo.Lines.Strings[2];
// equivalent to preceding since Strings is the default property
sContent := AMemo.Lines[2];
</code>
<p>
The Text property in Lines allows access to all of the values stored in 
Lines. Text lines are separated by the <var>LineEnding</var> character 
sequence defined for the host platform or operating system. For example:
</p>
<code>
// var sContent: String;
sContent := AMemo.Lines.Text;
</code>
<p>
Changing the values in Lines causes the Modified property to be set to 
<b>True</b>. Use Text to make changes to the control value that do not cause 
the Modified property to be updated.
</p>
<p>
Use the <var>Append</var> method to add a line of text to the end of the 
values in Lines.
</p>
<p>
Set values in the <var>WantTabs</var>, <var>WantReturns</var>, and 
<var>WordWrap</var> properties to control the content and behavior for the 
multi-line edit control.
</p>
<p>
Use the <var>OnChange</var> event handler to perform actions needed when the 
value for the control has been changed.
</p>
</descr>
<seealso>
<link id="TCustomMemo.Append"/>
<link id="TCustomMemo.WantTabs"/>
<link id="TCustomMemo.WantReturns"/>
<link id="TCustomMemo.WordWrap"/>
<link id="TCustomEdit.OnChange"/>
<link id="TCustomEdit.Modified"/>
<link id="#rtl.classes.TStrings">TStrings</link>
<link id="#lazutils.textstrings.TTextStrings">TTextStrings</link>
</seealso>
</element>

<element name="TCustomMemo.HorzScrollBar">
<short>The horizontal scrollbar for the control.</short>
<descr>
<p>
<var>HorzScrollBar</var> is a <var>TMemoScrollBar</var> property which 
contains the horizontal scrollbar displayed for the control. Resources are 
allocated to the property in the constructor, and freed in the destructor.
</p>
<p>
Use ScrollBars to determine the scrollbars visible for the control.
</p>
</descr>
<seealso>
<link id="TCustomMemo.ScrollBars"/>
<link id="TCustomMemo.VertScrollBar"/>
</seealso>
</element>

<element name="TCustomMemo.VertScrollBar">
<short>The vertical scrollbar for the control.</short>
<descr>
<p>
<var>VertScrollBar</var> is a <var>TMemoScrollBar</var> property which 
contains the vertical scrollbar displayed for the control. Resources are 
allocated to the property in the constructor, and freed in the destructor.
</p>
<p>
Use ScrollBars to determine the scrollbars visible for the control.
</p>
</descr>
<seealso>
<link id="TCustomMemo.ScrollBars"/>
<link id="TCustomMemo.HorzScrollBar"/>
</seealso>
</element>

<element name="TCustomMemo.ScrollBars">
<short>
Defines the vertical and/or horizontal scrollbars used in the control.
</short>
<descr>
<p>
<var>ScrollBars</var> is a <var>TScrollStyle</var> property which defines 
whether the horizontal and vertical scrollbars are displayed for the control. 
It is a single value from the <link id="TScrollStyle">TScrollStyle</link> 
enumeration.
</p>
<p>
The default value for the property is <var>ssNone</var>, and disables both 
horizontal and vertical scrollbars in the control.
</p>
<p>
Setting a new value for the property causes the widgetset class to be 
notified when a handle has been allocated for the control.
</p>
</descr>
<seealso/>
</element>

<element name="TCustomMemo.WantReturns">
<short>
Allows the user to insert Return characters (line breaks) into the text.
</short>
<descr>
<p>
The <b>Enter</b> key is normally used to press the default button in a form, 
so it cannot be used to add line breaks into the text by default. Set 
<var>WantReturns</var> to <b>True</b> to allow line breaks to be entered 
using <b>Enter</b> when the control has the input focus. <b>Ctrl+Enter</b> 
can be used to insert a line break, even if WantReturns is set to 
<b>False</b>.
</p>
</descr>
<seealso>
<link id="TCustomMemo.WantTabs"/>
</seealso>
</element>

<element name="TCustomMemo.WantTabs">
<short>Allows Tab characters to be entered into the text.</short>
<descr>
<p>
The Tab key is normally used to move the input focus to the next control, and 
does not add Tab characters to the text.
</p>
<p>
When <var>WantTabs</var> is <b>True</b>, the Tab key inserts a Tab character 
into the text, instead of moving the focus to then next control. Even if 
WantTabs is <b>True</b>, the Tab key can be used to navigate <b>into</b> the 
control. But it prevents use of Tab to <b>exit</b> the control.
</p>
</descr>
<seealso>
<link id="TCustomMemo.WantReturns"/>
</seealso>
</element>

<element name="TCustomMemo.WordWrap">
<short>
Allows long lines (paragraphs) to wrap into multiple display lines.
</short>
<descr>
<p>
When <b>False</b>, the display for long lines is truncated at the right 
margin for the control. It can be made visible when the text can be scrolled 
horizontally.
</p>
<remark>
For the macOS Carbon widgetset, changing the property value to <b>False</b> 
does not allow long text lines to be scrolled horizontally.
</remark>
</descr>
<seealso>
<link id="TCustomMemo.ScrollBars"/>
</seealso>
</element>

<element name="TEdit">
<short>Implements an edit control with a single line of text.</short>
<descr>
<p>
<var>TEdit</var> is a <var>TCustomEdit</var> descendant which implements an 
edit control presenting a single line of text. TEdit sets the visibility for 
properties and events introduced in the TCustomEdit ancestor, and does not 
introduce any new methods.
</p>
</descr>
<seealso>
<link id="HowToUseStdCtrls"/>
<link id="TCustomEdit"/>
<link id="TMemo"/>
<link id="#lcl.extctrls.TLabeledEdit">TLabeledEdit</link>
<link id="#lcl.maskedit.TMaskEdit">TMaskEdit</link>
</seealso>
</element>

<element name="TEdit.Action" link="#lcl.controls.TControl.Action"/>
<element name="TEdit.Align" link="#lcl.controls.TControl.Align"/>
<element name="TEdit.Alignment" link="#lcl.stdctrls.TCustomEdit.Alignment"/>
<element name="TEdit.Anchors" link="#lcl.controls.TControl.Anchors"/>
<element name="TEdit.AutoSelect" link="#lcl.stdctrls.TCustomEdit.AutoSelect"/>
<element name="TEdit.AutoSelected" link="#lcl.stdctrls.TCustomEdit.AutoSelected"/>
<element name="TEdit.AutoSize" link="#lcl.stdctrls.TCustomEdit.AutoSize"/>
<element name="TEdit.BidiMode" link="#lcl.controls.TControl.BiDiMode"/>
<element name="TEdit.BorderSpacing" link="#lcl.controls.TControl.BorderSpacing"/>
<element name="TEdit.BorderStyle" link="#lcl.stdctrls.TCustomEdit.BorderStyle"/>
<element name="TEdit.Color" link="#lcl.controls.TControl.Color"/>
<element name="TEdit.Constraints" link="#lcl.controls.TControl.Constraints"/>
<element name="TEdit.DoubleBuffered" link="#lcl.controls.TWinControl.DoubleBuffered"/>
<element name="TEdit.CharCase" link="#lcl.stdctrls.TCustomEdit.CharCase"/>
<element name="TEdit.DragCursor" link="#lcl.controls.TControl.DragCursor"/>
<element name="TEdit.DragMode" link="#lcl.controls.TControl.DragMode"/>
<element name="TEdit.DragKind" link="#lcl.controls.TControl.DragKind"/>
<element name="TEdit.EchoMode" link="#lcl.stdctrls.TCustomEdit.EchoMode"/>
<element name="TEdit.Enabled" link="#lcl.controls.TControl.Enabled"/>
<element name="TEdit.Font" link="#lcl.controls.TControl.Font"/>
<element name="TEdit.HideSelection" link="#lcl.stdctrls.TCustomEdit.HideSelection"/>
<element name="TEdit.MaxLength" link="#lcl.stdctrls.TCustomEdit.MaxLength"/>
<element name="TEdit.NumbersOnly" link="#lcl.stdctrls.TCustomEdit.NumbersOnly"/>
<element name="TEdit.ParentBidiMode" link="#lcl.controls.TControl.ParentBiDiMode"/>
<element name="TEdit.ParentColor" link="#lcl.stdctrls.TCustomEdit.ParentColor"/>
<element name="TEdit.ParentDoubleBuffered" link="#lcl.controls.TWinControl.ParentDoubleBuffered"/>
<element name="TEdit.ParentFont" link="#lcl.controls.TControl.ParentFont"/>
<element name="TEdit.ParentShowHint" link="#lcl.controls.TControl.ParentShowHint"/>
<element name="TEdit.PasswordChar" link="#lcl.stdctrls.TCustomEdit.PasswordChar"/>
<element name="TEdit.PopupMenu" link="#lcl.controls.TControl.PopupMenu"/>
<element name="TEdit.ReadOnly" link="#lcl.stdctrls.TCustomEdit.ReadOnly"/>
<element name="TEdit.ShowHint" link="#lcl.controls.TControl.ShowHint"/>
<element name="TEdit.TabOrder" link="#lcl.controls.TWinControl.TabOrder"/>
<element name="TEdit.TabStop" link="#lcl.stdctrls.TCustomEdit.TabStop"/>
<element name="TEdit.Text" link="#lcl.stdctrls.TCustomEdit.Text"/>
<element name="TEdit.TextHint" link="#lcl.stdctrls.TCustomEdit.TextHint"/>
<element name="TEdit.OnUTF8KeyPress" link="#lcl.controls.TWinControl.OnUTF8KeyPress"/>
<element name="TEdit.Visible" link="#lcl.controls.TControl.Visible"/>
<element name="TEdit.OnChange" link="#lcl.stdctrls.TCustomEdit.OnChange"/>
<element name="TEdit.OnChangeBounds" link="#lcl.controls.TControl.OnChangeBounds"/>
<element name="TEdit.OnClick" link="#lcl.controls.TControl.OnClick"/>
<element name="TEdit.OnContextPopup" link="#lcl.controls.TControl.OnContextPopup"/>
<element name="TEdit.OnDblClick" link="#lcl.controls.TControl.OnDblClick"/>
<element name="TEdit.OnDragDrop" link="#lcl.controls.TControl.OnDragDrop"/>
<element name="TEdit.OnDragOver" link="#lcl.controls.TControl.OnDragOver"/>
<element name="TEdit.OnEditingDone" link="#lcl.controls.TControl.OnEditingDone"/>
<element name="TEdit.OnEndDrag" link="#lcl.controls.TControl.OnEndDrag"/>
<element name="TEdit.OnEnter" link="#lcl.controls.TWinControl.OnEnter"/>
<element name="TEdit.OnExit" link="#lcl.controls.TWinControl.OnExit"/>
<element name="TEdit.OnKeyDown" link="#lcl.controls.TWinControl.OnKeyDown"/>
<element name="TEdit.OnKeyPress" link="#lcl.controls.TWinControl.OnKeyPress"/>
<element name="TEdit.OnKeyUp" link="#lcl.controls.TWinControl.OnKeyUp"/>
<element name="TEdit.OnMouseDown" link="#lcl.controls.TControl.OnMouseDown"/>
<element name="TEdit.OnMouseEnter" link="#lcl.controls.TControl.OnMouseEnter"/>
<element name="TEdit.OnMouseLeave" link="#lcl.controls.TControl.OnMouseLeave"/>
<element name="TEdit.OnMouseMove" link="#lcl.controls.TControl.OnMouseMove"/>
<element name="TEdit.OnMouseUp" link="#lcl.controls.TControl.OnMouseUp"/>
<element name="TEdit.OnMouseWheel" link="#lcl.controls.TControl.OnMouseWheel"/>
<element name="TEdit.OnMouseWheelDown" link="#lcl.controls.TControl.OnMouseWheelDown"/>
<element name="TEdit.OnMouseWheelUp" link="#lcl.controls.TControl.OnMouseWheelUp"/>
<element name="TEdit.OnResize" link="#lcl.controls.TControl.OnResize"/>
<element name="TEdit.OnStartDrag" link="#lcl.controls.TControl.OnStartDrag"/>

<element name="TMemo">
<short>Control used to display and edit multi-line text.</short>
<descr>
<p>
<var>TMemo</var> is a <var>TCustomMemo</var> descendant which implements a 
multi-line text edit control. TMemo sets the visibility for properties 
introduced in TCustomMemo, but does not introduce any new methods.
</p>
<p>
The textual values in the multi-line control can be accessed using the 
<var>Lines</var> property. An individual line of text can be accessed by its 
ordinal position in the list of values. For example:
</p>
<code>
// var sContent: String; ...
sContent := AMemo.Lines[2];
</code>
<p>
This provides access to the third value in List (index positions are 
zero-based).
</p>
<p>
The values for all of the text in Lines can be retrieved as a single String 
using the <var>Text</var> property in the <var>TStrings</var> class instance. 
Each line of text is separated by the <var>LineEnding</var> character 
sequence for the host platform or operating system. For example:
</p>
<code>
// var sContent: String;
sContent := AMemo.Lines.Text;
</code>
<p>
Please note: There is a difference in TCustomMemo / TMemo between the 
<var>Text</var> and <var>Lines</var> properties. Text is actually the Caption 
for the control as inherited from TControl. Lines is the multi-line TStrings 
instance specific to the memo control. Setting the control value using Text 
does <b>NOT</b> cause the <var>Modified</var> property to be updated. Setting 
the value using the Lines property does cause the Modified property to be 
updated.
</p>
<p>
This is important if an <var>OnChange</var> event handler is used to detect 
changes to the value in the control, and you need to identify whether the 
change was performed in program code. You can identify a programmatic change 
by manipulating the value in Modified.
</p>
<p>
For changes in program code, set Modified to <b>False</b> before setting the 
value using the Text property. If Modified is <b>False</b> when OnChange is 
signalled, the change occurred in program code. Modified can be set as 
desired in your program code after the value is assigned to Text. For example:
</p>
<code>
// use Modified and Text to track program changes
procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Modified := False;
  Memo1.Text := 'Whiskey' + LineEnding + 'Tango' + LineEnding + 'Foxtrot';
  Memo1.Modified := True;
end;

procedure TForm1.Memo1Change(Sender: TObject);
begin
  if not TCustomMemo(Sender).Modified then
     StaticText1.Caption := 'Memo changed in code'
  else
     StaticText1.Caption := 'Memo changed by user';
end;
</code>
<p>
Changes entered by the user are applied when methods update the Lines 
property in the control. As a result, Modified is set to <b>True</b>. If 
Modified is <b>True</b> in OnChange, the change was triggered by user 
interaction with the control.
</p>
<p>
The value in Modified is retained when the control gains or loses focus 
whether by keyboard navigation or by using the mouse.
</p>
<p>
The text displayed in the control uses the attributes defined in the 
<var>Font</var> property. No capabilities are provided for formatting 
individual characters, words, or lines in the content for the control.
</p>
<p>
Both horizontal and vertical scrollbars can be used in the control. Use the 
<var>ScrollBar</var> property to define the scrollbars displayed for the 
control. It can be used to enable automatic scrollbars which are only 
displayed when the content for the control does not fit within its bounds.
</p>
<p>
Use the <var>Append</var> method to add a line to text to the values in Lines.
</p>
<p>
Use the <var>WantTabs</var> and <var>WantReturns</var> properties to 
determine whether the corresponding keys are captured and stored in Lines. 
This affects the way control messages are applied to the control.
</p>
<p>
Use <var>WordWrap</var> to indicate if the control should automatically wrap 
a line of text longer than the visible area for the control.
</p>
<p>
Applications should use TEdit for a single line edit control.
</p>
</descr>
<seealso>
<link id="HowToUseStdCtrls"/>
<link id="TCustomMemo"/>
<link id="TEdit"/>
</seealso>
</element>

<element name="TMemo.Align" link="#lcl.controls.TControl.Align"/>
<element name="TMemo.Alignment" link="#lcl.stdctrls.TCustomEdit.Alignment"/>
<element name="TMemo.Anchors" link="#lcl.controls.TControl.Anchors"/>
<element name="TMemo.BidiMode" link="#lcl.controls.TControl.BiDiMode"/>
<element name="TMemo.BorderSpacing" link="#lcl.controls.TControl.BorderSpacing"/>
<element name="TMemo.BorderStyle" link="#lcl.stdctrls.TCustomEdit.BorderStyle"/>
<element name="TMemo.CharCase" link="#lcl.stdctrls.TCustomEdit.CharCase"/>
<element name="TMemo.Color" link="#lcl.controls.TControl.Color"/>
<element name="TMemo.Constraints" link="#lcl.controls.TControl.Constraints"/>
<element name="TMemo.DoubleBuffered" link="#lcl.controls.TWinControl.DoubleBuffered"/>
<element name="TMemo.DragCursor" link="#lcl.controls.TControl.DragCursor"/>
<element name="TMemo.DragKind" link="#lcl.controls.TControl.DragKind"/>
<element name="TMemo.DragMode" link="#lcl.controls.TControl.DragMode"/>
<element name="TMemo.Enabled" link="#lcl.controls.TControl.Enabled"/>
<element name="TMemo.Font" link="#lcl.controls.TControl.Font"/>
<element name="TMemo.HideSelection" link="#lcl.stdctrls.TCustomEdit.HideSelection"/>
<element name="TMemo.Lines" link="#lcl.stdctrls.TCustomMemo.Lines"/>
<element name="TMemo.MaxLength" link="#lcl.stdctrls.TCustomEdit.MaxLength"/>
<element name="TMemo.ParentBidiMode" link="#lcl.controls.TControl.ParentBiDiMode"/>
<element name="TMemo.ParentColor" link="#lcl.controls.TControl.ParentColor"/>
<element name="TMemo.ParentDoubleBuffered" link="#lcl.controls.TWinControl.ParentDoubleBuffered"/>
<element name="TMemo.ParentFont" link="#lcl.controls.TControl.ParentFont"/>
<element name="TMemo.ParentShowHint" link="#lcl.controls.TControl.ParentShowHint"/>
<element name="TMemo.PopupMenu" link="#lcl.controls.TControl.PopupMenu"/>
<element name="TMemo.ReadOnly" link="#lcl.stdctrls.TCustomEdit.ReadOnly"/>
<element name="TMemo.ScrollBars" link="#lcl.stdctrls.TCustomMemo.ScrollBars"/>
<element name="TMemo.ShowHint" link="#lcl.controls.TControl.ShowHint"/>
<element name="TMemo.TabOrder" link="#lcl.controls.TWinControl.TabOrder"/>
<element name="TMemo.TabStop" link="#lcl.stdctrls.TCustomEdit.TabStop"/>
<element name="TMemo.Visible" link="#lcl.controls.TControl.Visible"/>
<element name="TMemo.WantReturns" link="#lcl.stdctrls.TCustomMemo.WantReturns"/>
<element name="TMemo.WantTabs" link="#lcl.stdctrls.TCustomMemo.WantTabs"/>
<element name="TMemo.WordWrap" link="#lcl.stdctrls.TCustomMemo.WordWrap"/>
<element name="TMemo.OnChange" link="#lcl.stdctrls.TCustomEdit.OnChange"/>
<element name="TMemo.OnClick" link="#lcl.controls.TControl.OnClick"/>
<element name="TMemo.OnContextPopup" link="#lcl.controls.TControl.OnContextPopup"/>
<element name="TMemo.OnDblClick" link="#lcl.controls.TControl.OnDblClick"/>
<element name="TMemo.OnDragDrop" link="#lcl.controls.TControl.OnDragDrop"/>
<element name="TMemo.OnDragOver" link="#lcl.controls.TControl.OnDragOver"/>
<element name="TMemo.OnEditingDone" link="#lcl.controls.TControl.OnEditingDone"/>
<element name="TMemo.OnEndDrag" link="#lcl.controls.TControl.OnEndDrag"/>
<element name="TMemo.OnEnter" link="#lcl.controls.TWinControl.OnEnter"/>
<element name="TMemo.OnExit" link="#lcl.controls.TWinControl.OnExit"/>
<element name="TMemo.OnKeyDown" link="#lcl.controls.TWinControl.OnKeyDown"/>
<element name="TMemo.OnKeyPress" link="#lcl.controls.TWinControl.OnKeyPress"/>
<element name="TMemo.OnKeyUp" link="#lcl.controls.TWinControl.OnKeyUp"/>
<element name="TMemo.OnMouseDown" link="#lcl.controls.TControl.OnMouseDown"/>
<element name="TMemo.OnMouseEnter" link="#lcl.controls.TControl.OnMouseEnter"/>
<element name="TMemo.OnMouseLeave" link="#lcl.controls.TControl.OnMouseLeave"/>
<element name="TMemo.OnMouseMove" link="#lcl.controls.TControl.OnMouseMove"/>
<element name="TMemo.OnMouseUp" link="#lcl.controls.TControl.OnMouseUp"/>
<element name="TMemo.OnMouseWheel" link="#lcl.controls.TControl.OnMouseWheel"/>
<element name="TMemo.OnMouseWheelDown" link="#lcl.controls.TControl.OnMouseWheelDown"/>
<element name="TMemo.OnMouseWheelUp" link="#lcl.controls.TControl.OnMouseWheelUp"/>
<element name="TMemo.OnMouseWheelHorz" link="#lcl.controls.TControl.OnMouseWheelHorz"/>
<element name="TMemo.OnMouseWheelLeft" link="#lcl.controls.TControl.OnMouseWheelLeft"/>
<element name="TMemo.OnMouseWheelRight" link="#lcl.controls.TControl.OnMouseWheelRight"/>
<element name="TMemo.OnResize" link="#lcl.controls.TControl.OnResize"/>
<element name="TMemo.OnStartDrag" link="#lcl.controls.TControl.OnStartDrag"/>
<element name="TMemo.OnUTF8KeyPress" link="#lcl.controls.TWinControl.OnUTF8KeyPress"/>

<element name="TStaticBorderStyle">
<short>Contains border styles used for static text controls.</short>
<descr>
<p>
<var>TStaticBorderStyle</var> is an enumerated type with values that 
represents border styles used for static text controls. TStaticBorderStyle is 
the type used for the <var>BorderStyle</var> property in 
<var>TCustomStaticText</var> and descendants.
</p>
</descr>
<seealso>
<link id="TCustomStaticText.BorderStyle"/>
</seealso>
</element>
<element name="TStaticBorderStyle.sbsNone">
<short>No border.</short>
</element>
<element name="TStaticBorderStyle.sbsSingle">
<short>Single line border.</short>
</element>
<element name="TStaticBorderStyle.sbsSunken">
<short>Sunken 3-D border.</short>
</element>

<element name="TCustomStaticText">
<short>The base class for <var>TStaticText</var>.</short>
<descr>
<p>
Specifies the base ancestor for TStaticText, a control used to display static 
text. TCustomStaticText is a TWinControl descendant. It can be used in place 
of TLabel for situations where a TWinControl descendant is required.
</p>
</descr>
<seealso/>
</element>

<element name="TCustomStaticText.FAlignment"/>
<element name="TCustomStaticText.FFocusControl"/>
<element name="TCustomStaticText.FShowAccelChar"/>
<element name="TCustomStaticText.FStaticBorderStyle"/>

<element name="TCustomStaticText.GetTransparent" link="#lcl.stdctrls.TCustomStaticText.Transparent">
<short>Gets the value for the Transparent property.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomStaticText.GetTransparent.Result">
<short>Value for the Transparent property.</short>
</element>

<element name="TCustomStaticText.SetAlignment">
<short>Sets the value for the Alignment property.</short>
<descr/>
<seealso>
<link id="TCustomStaticText.Alignment"/>
</seealso>
</element>
<element name="TCustomStaticText.SetAlignment.Value">
<short>New value for the Alignment property.</short>
</element>

<element name="TCustomStaticText.SetStaticBorderStyle">
<short>Sets the value for the BorderStyle property.</short>
<descr/>
<seealso>
<link id="TCustomStaticText.BorderStyle"/>
</seealso>
</element>
<element name="TCustomStaticText.SetStaticBorderStyle.Value">
<short>New value for the StaticBorderStyle property.</short>
</element>

<element name="TCustomStaticText.SetTransparent">
<short>Sets the value for the Transparent property.</short>
<descr/>
<seealso>
<link id="TCustomStaticText.Transparent"/>
</seealso>
</element>
<element name="TCustomStaticText.SetTransparent.AValue">
<short>New value for the Transparent property.</short>
</element>

<element name="TCustomStaticText.WMActivate">
<short>Handles the window activate message for the control.</short>
<descr>
<p>
Received when the control has a registered activation shortcut for the 
FocusControl. Defers the focus to FocusControl when assigned and enabled.
</p>
</descr>
<seealso>
<link id="TCustomStaticText.FocusControl"/>
</seealso>
</element>
<element name="TCustomStaticText.WMActivate.Message">
<short>Window message examined in the method.</short>
</element>

<element name="TCustomStaticText.WSRegisterClass" link="#lcl.lclclasses.TLCLComponent.WSRegisterClass"/>

<element name="TCustomStaticText.GetLabelText">
<short>Returns the Caption for the control.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomStaticText.GetLabelText.Result">
<short>The text stored in Caption.</short>
</element>

<element name="TCustomStaticText.RealSetText" link="#lcl.controls.TControl.RealSetText"/>
<element name="TCustomStaticText.RealSetText.AValue"/>

<element name="TCustomStaticText.Notification">
<short>
Handles a notification that a component used in the control has been added or 
removed.
</short>
<descr>
<p>
<var>Notification</var> is an overridden method in 
<var>TCustomStaticText</var>, and calls the inherited method on entry. 
Notification ensures that <var>FocusControl</var> is set to <b>Nil</b> when 
it is the component for the <var>opRemove</var> <var>Operation</var>.
</p>
</descr>
<seealso>
<link id="TCustomStaticText.FocusControl"/>
<link id="#lcl.controls.TControl.Notification">TControl.Notification</link>
</seealso>
</element>
<element name="TCustomStaticText.Notification.AComponent">
<short>Component for the notification.</short>
</element>
<element name="TCustomStaticText.Notification.Operation">
<short>Operation for the notification.</short>
</element>

<element name="TCustomStaticText.SetFocusControl">
<short>Sets the value for the FocusControl property.</short>
<descr/>
<seealso>
<link id="TCustomStaticText.FocusControl"/>
</seealso>
</element>
<element name="TCustomStaticText.SetFocusControl.Val">
<short>New value for the FocusControl property.</short>
</element>

<element name="TCustomStaticText.SetShowAccelChar">
<short>Sets the value for the ShowAccelChar property.</short>
<descr/>
<seealso>
<link id="TCustomStaticText.ShowAccelChar"/>
</seealso>
</element>
<element name="TCustomStaticText.SetShowAccelChar.Val">
<short>New value for the ShowAccelChar property.</short>
</element>

<element name="TCustomStaticText.DialogChar">
<short>Handles an accelerator key for the control.</short>
<descr>
<p>
<var>DialogChar</var> is an overridden method in 
<var>TCustomStaticText</var>. It checks the character code in 
<var>Message</var> to determine if it is used as the accelerator (shortcut) 
in the <var>Caption</var> for the control. When the character code is found, 
the <var>FocusControl</var> is given focus and the return value is set to 
<b>True</b>.
</p>
<p>
If the character code is not found, the inherited method is called to 
broadcast the Message to child controls and get the return value.
</p>
</descr>
<seealso>
<link id="TCustomStaticText.FocusControl"/>
<link id="#lcl.forms.IsAccel">IsAccel</link>
<link id="#lcl.controls.TWinControl.CanFocus">TWinControl.CanFocus</link>
<link id="#lcl.controls.TControl.Caption">TControl.Caption</link>
<link id="#lcl.controls.TControl.DialogChar">TControl.DialogChar</link>
</seealso>
</element>
<element name="TCustomStaticText.DialogChar.Result">
<short><b>True</b> if the message was handled as an accelerator key.</short>
</element>
<element name="TCustomStaticText.DialogChar.Message">
<short>Message examined in the method.</short>
</element>

<element name="TCustomStaticText.GetControlClassDefaultSize" link="#lcl.controls.TControl.GetControlClassDefaultSize"/>
<element name="TCustomStaticText.GetControlClassDefaultSize.Result">
<short>
TSize instance with the default size for new instances of the class.
</short>
</element>

<element name="TCustomStaticText.Create">
<short>Constructor for the class instance.</short>
<descr>
<p>
<var>Create</var> is the overridden constructor for the class instance. It 
sets the default values for properties and component style flags, as well as 
the initial bounds for the control.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.Create">TWinControl.Create</link>
</seealso>
</element>
<element name="TCustomStaticText.Create.AOwner">
<short>Owner of the class instance.</short>
</element>

<element name="TCustomStaticText.Alignment">
<short>
The horizontal alignment for the text; centered, left- or right-justified.
</short>
<descr>
<p>
The default value for the property is taLeftJustify. Changing the value for 
the property causes the widgetset class instance to be updated when its 
Handle has been allocated.
</p>
</descr>
<seealso/>
</element>

<element name="TCustomStaticText.BorderStyle">
<short>The border drawn around the control.</short>
<descr>
<p>
<var>BorderStyle</var> is a <var>TStaticBorderStyle</var> property in 
<var>TCustomStaticText</var>. it contains the line style used to draw the 
borders around the static text control. It allows an additional border style 
(<var>sbsSunken</var>) that is not available in its <var>TBorderStyle</var> 
counterpart.
</p>
<p>
The default value for the property is <var>sbsNone</var>. Changing the value 
for the property causes the widgetset class instance to be updated and 
optionally resized when its Handle has been allocated.
</p>
</descr>
<seealso>
<link id="TStaticBorderStyle"/>
<link id="#lcl.controls.TBorderStyle">TBorderStyle</link>
<link id="#lcl.controls.TWinControl.BorderStyle">TWinControl.BorderStyle</link>
<link id="#lcl.controls.TControl.AutoSize">TControl.AutoSize</link>
</seealso>
</element>

<element name="TCustomStaticText.FocusControl">
<short>The control that receives focus instead of this control.</short>
<descr>
<p>
<var>FocusControl</var> is a <var>TWinControl</var> property with the control 
given focus when the accelerator (shortcut) key is handled for the control. 
The accelerator is defined using the '&amp;' character in the 
<var>Caption</var> for the control. If the key is detected and handled in 
<var>DialogChar</var>, the control in FocusControl is given focus.
</p>
</descr>
<seealso/>
<link id="TCustomStaticText.DialogChar"/>
<link id="TCustomStaticText.ShowAccelChar"/>
<link id="#lcl.controls.TControl.Caption">TControl.Caption</link>
<link id="#lcl.controls.TWinControl.Focused">TWinControl.Focused</link>
<link id="#lcl.controls.TWinControl.CanFocus">TWinControl.CanFocus</link>
</element>

<element name="TCustomStaticText.ShowAccelChar">
<short>
Indicates if an accelerator character is drawn in the displayed text.
</short>
<descr>
<p>
<var>ShowAccelChar</var> is a <var>Boolean</var> property which indicates if 
the character used as an accelerator key is drawn with an underline in the 
control.
</p>
<p>
An accelerator is defined in <var>Caption</var> using a leading Ampersand 
(&amp;) character. The character immediately after the Ampersand character 
sets the key value for the short cut. As an example: Setting Caption to 
'&amp;User Name' causes Alt+U to be used as the accelerator key. Any 
occurrences of Ampersand (&amp;) followed by a Space (#32) are <b>not</b> 
displayed in the Caption value.
</p>
<p>
To display an Ampersand character in Caption, it must be entered as two 
adjacent Ampersand characters (&amp;&amp;).
</p>
<p>
Set ShowAccelChar to <b>True</b> to enable underline drawing for the 
accelerator character. The default value for the property is <b>True</b>. 
Changing the value in the property causes the 
<var>InvalidatePreferredSize</var> method to be called to update the bounds 
for the control.
</p>
<p>
The value in ShowAccelChar is used in widgetset class methods, such as when 
the text value is assigned and when the handle for the control is created (or 
re-created).
</p>
<p>
Use <var>FocusControl</var> to specify the control which receives focus when 
the accelerator key is handled in <var>DialogChar</var>.
</p>
</descr>
<seealso>
<link id="TCustomStaticText.FocusControl"/>
<link id="TCustomStaticText.DialogChar"/>
<link id="TCustomStaticText.GetLabelText"/>
<link id="#lcl.controls.TControl.Caption">TControl.Caption</link>
<link id="#lcl.controls.TControl.InvalidatePreferredSize">TControl.InvalidatePreferredSize</link>
</seealso>
</element>

<element name="TCustomStaticText.Transparent">
<short>
Makes the background color for the control transparent when <b>True</b>.
</short>
<descr>
<p>
The property value is <b>True</b> when the <var>csOpaque</var> flag is not 
present in the <var>ControlStyle</var> property. Changing the value for the 
property causes ControlStyle to be updated accordingly, and the control is 
redrawn. The default value for the property is <b>True</b>.
</p>
<p>
Transparent is used when the <var>InvalidateControl</var> and 
<var>InvalidateRect</var> methods are called to paint the control.
</p>
</descr>
<seealso/>
</element>

<element name="TStaticText">
<short>Control used to display a text value which does not change.</short>
<descr>
<p>
<var>TStaticText</var> is a <var>TCustomStaticText</var> descendant which 
implements a control used to display text that does not change. It can be 
used in place of TLabel for situations where a TWinControl descendant is 
required. It has a window handle, and allows the accelerator key for the 
control to be forwarded to another windowed control.
</p>
</descr>
<seealso>
<link id="HowToUseStdCtrls"/>
<link id="TCustomLabel"/>
<link id="TLabel"/>
</seealso>
</element>

<element name="TStaticText.Align" link="#lcl.controls.TControl.Align"/>
<element name="TStaticText.Alignment" link="#lcl.stdctrls.TCustomStaticText.Alignment"/>
<element name="TStaticText.Anchors" link="#lcl.controls.TControl.Anchors"/>
<element name="TStaticText.AutoSize" link="#lcl.controls.TControl.AutoSize"/>
<element name="TStaticText.BidiMode" link="#lcl.controls.TControl.BiDiMode"/>
<element name="TStaticText.BorderSpacing" link="#lcl.controls.TControl.BorderSpacing"/>
<element name="TStaticText.BorderStyle" link="#lcl.stdctrls.TCustomStaticText.BorderStyle"/>
<element name="TStaticText.Caption" link="#lcl.controls.TControl.Caption"/>
<element name="TStaticText.Color" link="#lcl.controls.TControl.Color"/>
<element name="TStaticText.Constraints" link="#lcl.controls.TControl.Constraints"/>
<element name="TStaticText.DoubleBuffered" link="#lcl.controls.TWinControl.DoubleBuffered"/>
<element name="TStaticText.DragCursor" link="#lcl.controls.TControl.DragCursor"/>
<element name="TStaticText.DragKind" link="#lcl.controls.TControl.DragKind"/>
<element name="TStaticText.DragMode" link="#lcl.controls.TControl.DragMode"/>
<element name="TStaticText.Enabled" link="#lcl.controls.TControl.Enabled"/>
<element name="TStaticText.FocusControl" link="#lcl.stdctrls.TCustomStaticText.FocusControl"/>
<element name="TStaticText.Font" link="#lcl.controls.TControl.Font"/>

<element name="TStaticText.ParentBidiMode" link="#lcl.controls.TControl.ParentBiDiMode"/>
<element name="TStaticText.ParentColor" link="#lcl.controls.TControl.ParentColor"/>
<element name="TStaticText.ParentDoubleBuffered" link="#lcl.controls.TWinControl.ParentDoubleBuffered"/>
<element name="TStaticText.ParentFont" link="#lcl.controls.TControl.ParentFont"/>
<element name="TStaticText.ParentShowHint" link="#lcl.controls.TControl.ParentShowHint"/>
<element name="TStaticText.PopupMenu" link="#lcl.controls.TControl.PopupMenu"/>
<element name="TStaticText.ShowAccelChar" link="#lcl.stdctrls.TCustomStaticText.ShowAccelChar"/>
<element name="TStaticText.ShowHint" link="#lcl.controls.TControl.ShowHint"/>
<element name="TStaticText.TabOrder" link="#lcl.controls.TWinControl.TabOrder"/>
<element name="TStaticText.TabStop" link="#lcl.controls.TWinControl.TabStop"/>
<element name="TStaticText.Transparent" link="#lcl.stdctrls.TCustomStaticText.Transparent"/>
<element name="TStaticText.Visible" link="#lcl.controls.TControl.Visible"/>
<element name="TStaticText.OnChangeBounds" link="#lcl.controls.TControl.OnChangeBounds"/>
<element name="TStaticText.OnClick" link="#lcl.controls.TControl.OnClick"/>
<element name="TStaticText.OnContextPopup" link="#lcl.controls.TControl.OnContextPopup"/>
<element name="TStaticText.OnDblClick" link="#lcl.controls.TControl.OnDblClick"/>
<element name="TStaticText.OnDragDrop" link="#lcl.controls.TControl.OnDragDrop"/>
<element name="TStaticText.OnDragOver" link="#lcl.controls.TControl.OnDragOver"/>
<element name="TStaticText.OnEndDrag" link="#lcl.controls.TControl.OnEndDrag"/>
<element name="TStaticText.OnMouseDown" link="#lcl.controls.TControl.OnMouseDown"/>
<element name="TStaticText.OnMouseEnter" link="#lcl.controls.TControl.OnMouseEnter"/>
<element name="TStaticText.OnMouseLeave" link="#lcl.controls.TControl.OnMouseLeave"/>
<element name="TStaticText.OnMouseMove" link="#lcl.controls.TControl.OnMouseMove"/>
<element name="TStaticText.OnMouseUp" link="#lcl.controls.TControl.OnMouseUp"/>
<element name="TStaticText.OnMouseWheel" link="#lcl.controls.TControl.OnMouseWheel"/>
<element name="TStaticText.OnMouseWheelDown" link="#lcl.controls.TControl.OnMouseWheelDown"/>
<element name="TStaticText.OnMouseWheelUp" link="#lcl.controls.TControl.OnMouseWheelUp"/>
<element name="TStaticText.OnMouseWheelHorz" link="#lcl.controls.TControl.OnMouseWheelHorz"/>
<element name="TStaticText.OnMouseWheelLeft" link="#lcl.controls.TControl.OnMouseWheelLeft"/>
<element name="TStaticText.OnMouseWheelRight" link="#lcl.controls.TControl.OnMouseWheelRight"/>
<element name="TStaticText.OnResize" link="#lcl.controls.TControl.OnResize"/>
<element name="TStaticText.OnStartDrag" link="#lcl.controls.TControl.OnStartDrag"/>

<element name="TButtonControl">
<short>Specifies a base class for button controls.</short>
<descr>
<p>
<var>TButtonControl</var> is a <var>TWinControl</var> descendant which 
specifies the base class used for controls with button-like behavior, such 
as: <var>TCustomButton</var>, <var>TButton</var>, <var>TCustomCheckBox</var>, 
<var>TCheckBox</var>, <var>TToggleBox</var>, and <var>TRadioButton</var>.
</p>
<p>
TButtonControl introduces properties, methods, and events needed to read and 
write the Checked state for the control, handle Click events, and perform 
actions using OnChange or an action link.
</p>
<p>
Do not create instances of TButtonControl in an application; use one of the 
descendent classes.
</p>
</descr>
<seealso>
</seealso>
</element>

<element name="TButtonControl.FClicksDisabled" link="#lcl.stdctrls.TButtonControl.ClicksDisabled"/>
<element name="TButtonControl.FOnChange" link="#lcl.stdctrls.TButtonControl.OnChange"/>

<element name="TButtonControl.IsCheckedStored" link="#lcl.stdctrls.TButtonControl.Checked"/>
<element name="TButtonControl.IsCheckedStored.Result">
<short>
<b>True</b> when the value in Checked is included in the LCL streaming 
mechanism.
</short>
</element>

<!-- protected -->
<element name="TButtonControl.WMDefaultClicked">
<short>Implements the default handler for the LM_CLICKED message.</short>
</element>
<element name="TButtonControl.WMDefaultClicked.Message">
<short>Message handled in the method.</short>
</element>

<element name="TButtonControl.WSRegisterClass" link="#lcl.lclclasses.TLCLComponent.WSRegisterClass"/>

<element name="TButtonControl.GetActionLinkClass" link="#lcl.controls.TControl.GetActionLinkClass"/>
<element name="TButtonControl.GetActionLinkClass.Result"/>

<element name="TButtonControl.GetChecked">
<short>Gets the value for the Checked property.</short>
<descr/>
<seealso>
<link id="TButtonControl.Checked"/>
</seealso>
</element>
<element name="TButtonControl.GetChecked.Result">
<short>Value for the property.</short>
</element>

<element name="TButtonControl.SetChecked">
<short>Sets the value for the Checked property.</short>
<descr/>
<seealso>
<link id="TButtonControl.Checked"/>
</seealso>
</element>
<element name="TButtonControl.SetChecked.Value">
<short>New value for the Checked property.</short>
</element>

<element name="TButtonControl.DoOnChange">
<short>
Signals the OnEditingDone and OnChange event handlers (when assigned).
</short>
<descr>
<p>
<var>DoOnChange</var> performs actions needed when the button control is 
clicked. DoOnChange calls <var>EditingDone</var> to signal the 
<var>OnEditingDone</var> event handler (when assigned). The 
<var>OnChange</var> event handler is also signalled (when assigned).
</p>
<p>
DoOnChange is called from the <var>Click</var> method before the inherited 
method in TControl is executed. DoOnChange performs no actions at 
design-time, during component streaming, or when the component is freed.
</p>
</descr>
<seealso>
<link id="TButtonControl.OnChange"/>
<link id="#lcl.controls.TControl.EditingDone">TControl.EditingDone</link>
<link id="#lcl.controls.TControl.OnEditingDone">TControl.OnEditingDone</link>
<link id="#lcl.controls.TControl.Click">TControl.Click</link>
<link id="#rtl.classes.TComponent.ComponentState">TComponent.ComponentState</link>
</seealso>
</element>

<element name="TButtonControl.Click">
<short>
Performs actions needed when a click message is handled for the control.
</short>
<descr>
<p>
<var>Click</var> is an overridden method in <var>TButtonControl</var>. Click 
calls the <var>DoOnChange</var> method which signals the 
<var>OnEditingDone</var> and <var>OnChange</var> event handlers (when 
assigned).
</p>
<p>
Click calls the inherited method prior to exit. The inherited method (in 
TControl) signals either the OnClick event handler or the OnExecute handler 
in the Action. OnClick is used when Action has not been assigned, or when 
OnClick contains a handler routine that differs from the one assigned to the 
OnExecute handler in the Action.
</p>
<p>
Click can be called in two different usage scenarios. If standard click 
events have been enabled in ControlStyle, it is called when the left mouse 
button is released. It can also be called from a private LM_CLICKED message 
handler in the control when standard click events are <b>not</b> enabled in 
ControlStyle. This avoids duplicate click notifications when csClickEvents 
is enabled in ControlStyle and Click is handled when the WMLButtonUp method 
is executed.
</p>
</descr>
<seealso>
<link id="TButtonControl.DoOnChange"/>
<link id="TButtonControl.OnChange"/>
<link id="#lcl.controls.TControl.Click">TControl.Click</link>
<link id="#lcl.controls.TControl.Action">TControl.Action</link>
<link id="#lcl.controls.TControl.OnEditingDone">TControl.OnEditingDone</link>
<link id="#lcl.controls.TControl.WMLButtonUp">TControl.WMLButtonUp</link>
<link id="#lcl.controls.TControl.ControlStyle">TControl.ControlStyle</link>
<link id="#lcl.controls.TControl.ControlState">TControl.ControlState</link>
<link id="#lcl.lmessages.LM_CLICKED">LM_CLICKED</link>
<link id="#rtl.classes.TBasicAction.OnExecute">TBasicAction.OnExecute</link>
</seealso>
</element>

<element name="TButtonControl.Create">
<short>Constructor for the class instance.</short>
<descr>
<p>
<var>Create</var> is the overridden constructor for the class instance, and 
calls the inherited method on entry. <var>TheOwner</var> is the owner for the 
new class instance, or <b>Nil</b>.
</p>
<p>
Create ensures that values in ControlStyle are updated to remove the 
csMultiClicks, csAcceptsControls, and csCaptureMouse style flags. The 
accessibility role and description are set to "Button" for the new class 
instance.
</p>
</descr>
<seealso/>
</element>
<element name="TButtonControl.Create.TheOwner">
<short>Owner of the class instance.</short>
</element>

<element name="TButtonControl.Checked">
<short>
Indicates the checked state for the control as a Boolean value.
</short>
<descr>
<p>
<var>Checked</var> is a <var>Boolean</var> property which indicates if the 
control is displayed using its "checked" or "unchecked" state. The value for 
the property is always <b>False</b> in <var>TButtonControl</var>, and is 
overridden in descendent classes like 
<var>TCustomCheckBox</var>/<var>TCheckBox</var>.
</p>
</descr>
</element>

<element name="TButtonControl.ClicksDisabled">
<short>
Disables calling the Click method without changing the Enabled state for 
the control.
</short>
<descr>
<p>
<var>ClicksDisabled</var> is a <var>Boolean</var> property which controls 
whether the Click method is called when a the Checked property is changed in 
the control. It is a protected property accessible in the TButtonControl and 
TButtonActionLink classes.
</p>
<p>
The TCustomCheckBox descendant uses ClicksDisabled in its DoClickOnChange 
method; when set to <b>False</b>, the Click method is called to signal both 
the OnChange and OnClick handlers for the control. When set to <b>True</b>, 
only the OnChange event handler is signalled. 
</p>
<p>
ClicksDisabled is also used to prevent calling Click when the Checked 
property in a linked button action is updated. This prevents duplicate OnChange / OnClick calls when Checked is updated in the control.
</p>
</descr>
<seealso>
<link id="TCustomCheckBox.DoClickOnChange"/>
<link id="TCustomCheckBox.Click"/>
<link id="TButtonControl.DoOnChange"/>
<link id="TButtonActionLink.SetChecked"/>
<link id="TButtonActionLink.IsCheckedLinked"/>
</seealso>
</element>

<element name="TButtonControl.OnChange">
<short>
Event handler signalled when the button control is clicked.
</short>
<descr>
<p>
<var>OnChange</var> is signalled from the DoOnChange method, and occurs when 
the Click method is called for the class instance. It is signalled after the 
OnEditingDone event handler. The Sender argument contains the current button 
control class instance (Self).
</p>
<p>
The OnClick event handler can also be used for the notification when 
ClicksDisabled is set to <b>False</b>.
</p>
</descr>
<seealso>
<link id="TButtonControl.Click"/>
<link id="TButtonControl.DoOnChange"/>
<link id="TButtonControl.ClicksDisabled"/>
<link id="#lcl.controls.TControl.OnEditingDone">TControl.OnEditingDone</link>
<link id="#lcl.controls.TControl.OnClick">TControl.OnClick</link>
</seealso>
</element>

<element name="TButtonActionLink">
<short>Links a button control to a basic action.</short>
<descr>
<p>
<var>TButtonActionLink</var> is a <var>TWinControlActionLink</var> descendant 
which links a <var>TButtonControl</var> to a <var>TBasicAction</var> 
component.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControlActionLink">TWinControlActionLink</link>
<link id="#rtl.classes.TBasicAction">TBasicAction</link>
</seealso>
</element>

<element name="TButtonActionLink.FClientButton">
<short>The button control for the action link.</short>
</element>

<element name="TButtonActionLink.AssignClient">
<short>Assigns the button control for the action link.</short>
<descr/>
<seealso/>
</element>
<element name="TButtonActionLink.AssignClient.AClient">
<short>Button assigned in the method.</short>
</element>

<element name="TButtonActionLink.SetChecked">
<short>Sets the value in the Checked property for the linked button.</short>
<descr/>
<seealso>
<link id="#LCL.ActnList.TActionLink.SetChecked">TActionLink.SetChecked</link>
</seealso>
</element>
<element name="TButtonActionLink.SetChecked.Value">
<short>New value for the checked property.</short>
</element>

<element name="TButtonActionLink.IsCheckedLinked" link="#LCL.ActnList.TActionLink.IsCheckedLinked"/>
<element name="TButtonActionLink.IsCheckedLinked.Result" link="#LCL.ActnList.TActionLink.IsCheckedLinked.Result"/>

<element name="TButtonActionLinkClass">
<short>
Class reference used to create new instances of TButtonActionLink.
</short>
<descr/>
<seealso>
<link id="TButtonActionLink"/>
</seealso>
</element>

<element name="TCustomButton">
<short>The base class for a push button control.</short>
<descr>
<p>
<var>TCustomButton</var> is a <var>TButtonControl</var> descendant which 
provides the base class for a push button control.
</p>
<p>
TCustomButton / TButton are used to perform an action when the control is 
clicked. An <var>OnClick</var> event handler is provided to perform actions 
needed when the push button is clicked.
</p>
<p>
Properties are provided to control the appearance and behavior for the 
control. This includes whether it is the Default or Cancel button on a modal 
form, and the modal result returned when the push button is clicked.
</p>
<p>
The control displays a text-based caption and is drawn using a style 
appropriate for the platform or widgetset. An accelerator key can be defined 
in the caption which simulates clicking on the push button when the shortcut 
key is pressed. Support for TBasicAction from the FPC Run-time Library (RTL) 
is present, but not published in the control.
</p>
<p>
Please note that the Caption is always center aligned on the push button. The 
values in properties like BiDiMode and UseRightToLeftAlignment are ignored in 
the control.
</p>
<p>
Please note that the Color for the control defaults to the system-defined 
color used for button controls (clDefault or clBtnFace).
</p>
<p>
Do not create instances of TCustomButton; use the TButton descendant instead.
</p>
<p>
Use TBitBtn for a push button control which displays a bitmap instead of a 
text-based caption.
</p>
<p>
Use TSpeedButton for a push button control which can remain in the pressed or 
down state.
</p>
</descr>
<seealso>
<link id="TButton"/>
<link id="TButtonControl"/>
</seealso>
</element>

<element name="TCustomButton.FModalResult"/>
<element name="TCustomButton.FShortCut"/>
<element name="TCustomButton.FShortCutKey2"/>
<element name="TCustomButton.FCancel"/>
<element name="TCustomButton.FDefault"/>
<element name="TCustomButton.FActive"/>

<element name="TCustomButton.SetCancel">
<short>Sets the value for the Cancel property.</short>
<descr/>
<seealso>
<link id="TCustomButton.Cancel"/>
</seealso>
</element>
<element name="TCustomButton.SetCancel.NewCancel">
<short>New value for the Cancel property.</short>
</element>

<element name="TCustomButton.SetDefault">
<short>Sets the value for the Default property.</short>
<descr/>
<seealso>
<link id="TCustomButton.Default"/>
</seealso>
</element>
<element name="TCustomButton.SetDefault.Value">
<short>New value for the Default property.</short>
</element>

<element name="TCustomButton.SetModalResult">
<short>Sets the value for the ModalResult property.</short>
<descr/>
<seealso>
<link id="TCustomButton.ModalResult"/>
</seealso>
</element>
<element name="TCustomButton.SetModalResult.AValue">
<short>New value for the ModalResult property.</short>
</element>

<element name="TCustomButton.CMUIActivate">
<short>Handles a UIActivate control message.</short>
<descr>
<p>
Calls <var>UpdateFocus</var> to make the button the active control in the 
parent form.
</p>
</descr>
<seealso>
<link id="TCustomButton.UpdateFocus"/>
</seealso>
</element>
<element name="TCustomButton.CMUIActivate.Message">
<short>Message handled in the method.</short>
</element>

<element name="TCustomButton.WMSetFocus">
<short>Handles a set focus window message for the control.</short>
<descr>
<p>
<var>WMSetFocus</var> calls the inherited method in <var>TWinControl</var> on 
entry. Calls <var>UpdateFocus</var> to make the button the active control in 
the parent form.
</p>
</descr>
<seealso>
<link id="TCustomButton.UpdateFocus"/>
<link id="#lcl.controls.TWinControl.WMSetFocus">TWinControl.WMSetFocus</link>
</seealso>
</element>
<element name="TCustomButton.WMSetFocus.Message">
<short>Message handled in the method.</short>
</element>

<element name="TCustomButton.WMKillFocus">
<short>Handles a kill focus message for the control.</short>
<descr>
<p>
<var>WMKillFocus</var> calls the inherited method in <var>TWinControl</var> 
on entry. When the window handle in <var>Message</var> is the 
<var>Handle</var> for the control, the <var>UpdateFocus</var> method is 
called to remove the button as the active default control in the parent form.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.WMKillFocus">TWinControl.WMKillFocus</link>
<link id="#lcl.controls.TWinControl.Handle">TWinControl.Handle</link>
<link id="#lcl.lmessages.TLMKillFocus">TLMKillFocus</link>
</seealso>
</element>
<element name="TCustomButton.WMKillFocus.Message">
<short>Message handled in the method.</short>
</element>

<element name="TCustomButton.UpdateFocus">
<short>Handles changes to the focus for the control.</short>
<descr>
<p>
<var>UpdateFocus</var> is a method used to update the control and its parent 
form when the control gets or loses focus on its form.
</p>
<p>
<var>AFocused</var> indicates whether the control is getting or losing focus.
</p>
<p>
UpdateFocus calls GetParentForm to get the parent form for the control. No 
additional actions are performed in the method when the parent form has not 
been assigned for the control.
</p>
<p>
When AFocused is <b>True</b>, <var>ActiveDefaultControlChanged</var> is 
called to synchronize values in the control and the parent form. Active (in 
the control) is updated to reflect its use as the ActiveControl on the parent 
form. ActiveDefaultControl (in the parent form) is updated when the control 
is focused.
</p>
<p>
UpdateFocus is called when the LM_SETFOCUS or LM_KILLFOCUS messages are 
handled for the control. It is also called when the <var>CM_UIACTIVATE</var> 
message is dispatched by the parent form when it is focused.
</p>
</descr>
<seealso>
<link id="TCustomButton.Active"/>
<link id="TCustomButton.Default"/>
<link id="TCustomButton.ActiveDefaultControlChanged"/>
<link id="#lcl.forms.GetParentForm">GetParentForm</link>
<link id="#lcl.forms.TCustomForm.SetWindowFocus">TCustomForm.SetWindowFocus</link>
</seealso>
</element>
<element name="TCustomButton.UpdateFocus.AFocused">
<short>
<b>True</b> when the button is focused, <b>False</b> when it loses focus.
</short>
</element>

<element name="TCustomButton.WSRegisterClass" link="#lcl.lclclasses.TLCLComponent.WSRegisterClass"/>

<element name="TCustomButton.CreateWnd">
<short>Creates the handle for the widgetset class instance.</short>
<descr>
<p>
Calls the inherited method on entry. Calls UpdateDefaultCancel to set the 
Default and Cancel controls on the Parent form (when needed).
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.CreateWnd">TWinControl.CreateWnd</link>
</seealso>
</element>

<element name="TCustomButton.CreateParams">
<short>
Updates creation parameters to use values needed for the control.
</short>
<descr>
<p>
Calls the inherited method on entry. Ensures that the style flags in 
<var>Params</var> is updated to include <var>BS_DEFPUSHBUTTON</var> when the 
<var>Default</var> property is <b>True</b>. Otherwise, 
<var>BS_PUSHBUTTON</var> is included in the style flags.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.CreateParams">TWinControl.CreateParams</link>
</seealso>
</element>
<element name="TCustomButton.CreateParams.Params">
<short>Creation parameters updated in the method.</short>
</element>

<element name="TCustomButton.ControlKeyDown" link="#lcl.controls.TWinControl.ControlKeyDown"/>
<element name="TCustomButton.ControlKeyDown.Key">
<short>Virtual key code examined in the method.</short>
</element>
<element name="TCustomButton.ControlKeyDown.Shift">
<short>Shift, Ctrl, or Alt modifier for the key.</short>
</element>

<element name="TCustomButton.ControlKeyUp" link="#lcl.controls.TWinControl.ControlKeyUp"/>
<element name="TCustomButton.ControlKeyUp.Key">
<short>Virtual key code examined in the method.</short>
</element>
<element name="TCustomButton.ControlKeyUp.Shift">
<short>Shift, Ctrl, or Alt modifier for the key.</short>
</element>

<element name="TCustomButton.DialogChar">
<short>Handles an accelerator key for the control.</short>
<descr>
<p>
<var>DialogChar</var> is an overridden <var>Boolean</var> function used to 
handle a <var>TLMKey</var> message received for the control.
</p>
<p>
DialogChar examines the <var>CharCode</var> member in <var>Message</var> to 
determine if it contains the accelerator key defined in the 
<var>Caption</var> for the control. If it is found, and the control can 
receive focus, the <var>Click</var> method is called and the return value is 
set to <b>True</b>. If the Message has a CharCode that is not the accelerator 
key, the inherited method is called to handle the message and get the return 
value for the method.
</p>
<p>
The return value is <b>True</b> when the Message is successfully handled for 
the control.
</p>
</descr>
<seealso>
<link id="TCustomButton.Click"/>
<link id="#lcl.controls.TControl.DialogChar">TControl.DialogChar</link>
<link id="#lcl.controls.TControl.Caption">TControl.Caption</link>
<link id="#lcl.controls.TControl.OnClick">TControl.OnClick</link>
</seealso>
</element>
<element name="TCustomButton.DialogChar.Result">
<short><b>True</b> if the message was handled as an accelerator key.</short>
</element>
<element name="TCustomButton.DialogChar.Message">
<short>Message examined in the method.</short>
</element>

<element name="TCustomButton.ChildClassAllowed" link="#lcl.controls.TWinControl.ChildClassAllowed"/>
<element name="TCustomButton.ChildClassAllowed.Result">
<short>
<b>True</b> when the widgetset class indicates child controls are allowed.
</short>
</element>
<element name="TCustomButton.ChildClassAllowed.ChildClass">
<short>Not used in the current implementation.</short>
</element>

<element name="TCustomButton.GetControlClassDefaultSize">
<short>Gets the default size for new instances of the control.</short>
<descr>
<p>
<var>GetControlClassDefaultSize</var> is an overridden <var>TSize</var> class 
function used to get the default height and width for new instances of the 
control. GetControlClassDefaultSize sets the <var>CX</var> and <var>CY</var> 
members in the return value to the defaults used for the control. CX contains 
the width and is set to 75 (pixels). CY contains the height and is set to 25 
(pixels).
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.GetControlClassDefaultSize">TControl.GetControlClassDefaultSize</link>
<link id="#rtl.types.TSize">TSize</link>
</seealso>
</element>
<element name="TCustomButton.GetControlClassDefaultSize.Result">
<short>TSize instance with the width and height for the new control.</short>
</element>

<element name="TCustomButton.WSSetDefault">
<short>
Notifies the widgetset class of a change to the Default property.
</short>
<descr>
<p>
<var>WSSetDefault</var> is a method used to notify the widgetset class when 
the value in the <var>Default</var> property has been changed.
</p>
<p>
WSSetDefault calls the <var>SetDefault</var> method in the widgetset class 
using the value in the <var>Active</var> property. Active is used because 
Default represents the design-time setting for the control. At run-time, 
Active contains the default button clicked when the Enter key is pressed.
</p>
<p>
Called when a new value is assigned to the <var>Default</var> property. 
Called when the value in <var>Active</var> is changed in the 
<var>ActiveDefaultControlChanged</var> method. Called when 
<var>UpdateDefaultCancel</var> sets the default and cancel controls on the 
parent form.
</p>
</descr>
<seealso>
<link id="TCustomButton.Default"/>
<link id="TCustomButton.Active"/>
<link id="TCustomButton.ActiveDefaultControlChanged"/>
<link id="TCustomButton.UpdateDefaultCancel"/>
</seealso>
</element>

<element name="TCustomButton.WSSetText">
<short>
Notifies the widgetset class of a change to the caption text for the control.
</short>
<descr>
<p>
<var>WSSetText</var> is an overridden method used to notify the widgetset 
class instance when the value in the caption text has been changed. No 
actions are performed in the method when the handle for the control has not 
been allocated, or at design-time.
</p>
<p>
WSSetText ensures that <b>Ampersand</b> (<b>&amp;</b>) characters used to 
define an accelerator key in <var>AText</var> are handled for the widgetset 
class. The Ampersand character(s) are removed from AText, and the virtual key 
code equivalent is stored in the <var>Shortcut</var> property. By default, 
the Shortcut uses the <var>ssAlt</var> shift modifier for the accelerator 
key.
</p>
<p>
The <var>SetShortCut</var> method in the widgetset class is called to store 
values from both <var>Shortcut</var> and <var>ShortCutKey2</var>.
</p>
<p>
The inherited <var>WSSetText</var> method is called prior to exit.
</p>
</descr>
<seealso>
<link id="TCustomButton.Shortcut"/>
<link id="TCustomButton.ShortCutKey2"/>
<link id="#lcl.controls.TControl.Text">TControl.Text</link>
<link id="#lcl.controls.TControl.Caption">TControl.Caption</link>
<link id="#lcl.menus.ShortCut">ShortCut</link>
<link id="#lcl.lcltype.Char2VK">Char2VK</link>
</seealso>
</element>
<element name="TCustomButton.WSSetText.AText">
<short>New value for the caption text in the control.</short>
</element>

<element name="TCustomButton.TextChanged">
<short>
Performs actions needed when the CM_TEXTCHANGED message is handled in the 
control.
</short>
<descr>
<p>
<var>TextChanged</var> is an overridden method used to performs actions 
needed when the <var>CM_TEXTCHANGED</var> message is handled in the control.
</p>
<p>
TextChanged calls <var>InvalidatePreferredSize</var> and causes the preferred 
height and width for the control to be recalculated. When <var>Parent</var> 
has been assigned and its <var>AutoSize</var> property is set to <b>True</b>, 
the <var>AdjustSize</var> method in Parent is called. The AdjustSize method 
for the control is called to resize the control or update control flags when 
delayed auto-sizing is in use.
</p>
<p>
TextChanged calls the inherited method prior to exit.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.TextChanged">TControl.TextChanged</link>
<link id="#lcl.controls.TControl.AdjustSize">TControl.AdjustSize</link>
<link id="#lcl.controls.TControl.AutoSizeDelayed">TControl.AutoSizeDelayed</link>
</seealso>
</element>

<element name="TCustomButton.Loaded">
<short>
Performs actions needed when LCL component streaming has been completed.
</short>
<descr>
<p>
<var>Loaded</var> is an overridden method used to perform actions needed when 
LCL component streaming has been completed.
</p>
<p>
Loaded calls the inherited method on entry. Loaded calls 
<var>UpdateDefaultCancel</var> to update the default and cancel controls on 
the parent form.
</p>
</descr>
<seealso>
<link id="TCustomButton.UpdateDefaultCancel"/>
<link id="#lcl.controls.TWinControl.Loaded">TWinControl.Loaded</link>
</seealso>
</element>

<element name="TCustomButton.UpdateDefaultCancel">
<short>Updates the Default and Cancel properties in the parent form.</short>
<descr>
<p>
<var>UpdateDefaultCancel</var> is a method used to update the default and 
cancel controls on the parent form.
</p>
<p>
UpdateDefaultCancel calls <var>GetParentForm</var> to get the parent for the 
control. When the parent form has been assigned, its 
<var>DefaultControl</var> and <var>CancelControl</var> properties are updated 
when needed. DefaultControl is updated when the <var>Default</var> property 
is set to <b>True</b>. CancelControl is updated when the <var>Cancel</var> 
property is set to <b>True</b>.
</p>
<p>
UpdateDefaultCancel calls <var>WSSetDefault</var> to notify the widgetset 
class when the control is the default control.
</p>
<p>
UpdateDefaultCancel is called from the <var>CreateWnd</var> and 
<var>Loaded</var> methods.
</p>
</descr>
<seealso>
<link id="TCustomButton.Cancel"/>
<link id="TCustomButton.Default"/>
<link id="TCustomButton.Active"/>
<link id="TCustomButton.WSSetDefault"/>
<link id="#lcl.forms.GetParentForm">GetParentForm</link>
<link id="#lcl.forms.TCustomForm.CancelControl">TCustomForm.CancelControl</link>
<link id="#lcl.forms.TCustomForm.DefaultControl">TCustomForm.DefaultControl</link>
</seealso>
</element>

<element name="TCustomButton.Create">
<short>Constructor for the class instance.</short>
<descr>
<p>
Create is the overridden constructor for the class instance, and calls the 
inherited constructor on entry.
</p>
<p>
Create updates the internal component style and <var>ControlStyle</var> with 
values needed for the control. Create sets the default values for properties, 
including:
</p>
<dl>
<dt>Color</dt>
<dd>Set to clDefault or clBtnFace (depending on the platform or 
widgetset).</dd>
<dt>ParentColor</dt>
<dd>Set to <b>False</b>.</dd>
<dt>TabStop</dt>
<dd>Set to <b>True</b>.</dd>
<dt>Align</dt>
<dd>Set to alNone.</dd>
</dl>
<p>
Create calls <var>SetInitialBounds</var> using the height and width returned 
from <var>GetControlClassDefaultSize</var>.
</p>
</descr>
<seealso/>
</element>
<element name="TCustomButton.Create.TheOwner">
<short>Owner of the class instance.</short>
</element>

<element name="TCustomButton.Click">
<short>Handles a button click event for the control.</short>
<descr>
<p>
<var>Click</var> is an overridden method used to handle a button click event 
for the control.
</p>
<p>
Click uses the value in <var>ModalResult</var> to determine if the modal 
result for the button control is posted to the parent form. When ModalResult 
contains a value other than <var>mrNone</var>, it is stored in the 
ModalResult property in the parent form (when assigned).
</p>
<p>
Click calls the inherited method to signal other event handlers or an 
<var>Action</var> used for the control. <var>OnChange</var> is signalled 
first. <var>OnClick</var> is signalled if an Action is not in use, or the 
Action does not have an <var>OnExecute</var> event handler.
</p>
<p>
Click is called from <var>ExecuteDefaultAction</var> when the control is both 
<var>Active</var> and the <var>Default</var> button on the parent form. It is 
called from <var>ExecuteCancelAction</var> when the control is the 
<var>Cancel</var> button on the parent form. It is called from 
<var>DialogChar</var> when the accelerator key in <var>Shortcut</var> is 
handled for the control.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.Click">TControl.Click</link>
</seealso>
</element>

<element name="TCustomButton.ExecuteDefaultAction">
<short>
Performs the Click method if the control is an Active or a Default button.
</short>
<descr>
<p>
<var>ExecuteDefaultAction</var> is an overridden method used to perform the 
<var>Click</var> method when the button control is <var>Active</var> or the 
<var>Default</var> button. No actions are performed in the method when both 
properties are set to <b>False</b>.
</p>
<p>
See <link id="TCustomButton.Click">Click</link> for more information about 
the actions performed in the method.
</p>
<p>
ExecuteDefaultAction is called when a <b>Return</b> (<b>VK_RETURN</b>) key is 
handled in the <var>Application</var> singleton for the ActiveDefaultControl 
in a Form.
</p>
</descr>
<seealso>
<link id="TCustomButton.Click"/>
<link id="TCustomButton.Active"/>
<link id="TCustomButton.Default"/>
<link id="#lcl.controls.TControl.ExecuteDefaultAction">TControl.ExecuteDefaultAction</link>
<link id="#lcl.forms.TApplication.DoReturnKey">TApplication.DoReturnKey</link>
</seealso>
</element>

<element name="TCustomButton.ExecuteCancelAction">
<short>Performs the Click method if the control is the Cancel button.</short>
<descr>
<p>
<var>ExecuteCancelAction</var> is an overridden method used to perform the 
<var>Click</var> method when the control is the <var>Cancel</var> button on 
its parent form. No actions are performed in the method when Cancel is set to 
<b>False</b>.
</p>
<p>
See <link id="TCustomButton.Click">Click</link> for more information about 
the actions performed in the method.
</p>
<p>
ExecuteCancelAction is called when an <b>Escape</b> (<b>VK_ESCAPE</b>) key is 
handled in the <var>Application</var> singleton for the CancelControl in a 
Form.
</p>
</descr>
<seealso>
<link id="TCustomButton.Click"/>
<link id="TCustomButton.Cancel"/>
<link id="#lcl.controls.TControl.ExecuteCancelAction">TControl.ExecuteCancelAction</link>
<link id="#lcl.forms.TApplication.DoEscapeKey">TApplication.DoEscapeKey</link>
</seealso>
</element>

<element name="TCustomButton.ActiveDefaultControlChanged">
<short>
Updates the button and/or parent form when the active default control has 
been changed.
</short>
<descr>
<p>
<var>ActiveDefaultControlChanged</var> is an overridden method used to update 
properties in the control and/or parent form when active default control has 
been changed. <var>NewControl</var> contains the control which is the 
<var>ActiveControl</var> given focus on the parent form, or <b>Nil</b> when a 
button control loses focus.
</p>
<p>
When NewControl is the current class instance, its Active property is set to 
<b>True</b> to reflect the active focused control status. The 
ActiveDefaultControl property in the parent form is set to the current 
control to indicate it is also the active default control for the form.
</p>
<p>
When NewControl is assigned, but a different control than the current 
instance, the button control is not focused and its Active property is set to 
<b>False</b>.
</p>
<p>
When NewControl is unassigned (<b>Nil</b>), the button control has just lost 
focus and Active is set to the value in the Default property. The control is 
also removed as the ActiveDefaultControl in the parent form (when needed).
</p>
<p>
ActiveDefaultControlChanged is called from the <var>UpdateFocus</var> method.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.ActiveDefaultControlChanged">TControl.ActiveDefaultControlChanged</link>
</seealso>
</element>
<element name="TCustomButton.ActiveDefaultControlChanged.NewControl">
<short>
New value assigned as the active default control in the parent form.
</short>
</element>

<element name="TCustomButton.UpdateRolesForForm" link="#lcl.controls.TControl.UpdateRolesForForm"/>

<element name="TCustomButton.UseRightToLeftAlignment" link="#lcl.controls.TControl.UseRightToLeftAlignment"/>
<element name="TCustomButton.UseRightToLeftAlignment.Result">
<short>False; always uses center alignment.</short>
</element>

<element name="TCustomButton.Active">
<short><b>True</b> if the control is the Cancel or Default button.</short>
<descr>
<p>
<var>Active</var> is a read-only <var>Boolean</var> property which indicates 
if the control is the active default control for the parent form.
</p>
<p>
The property value is updated in <var>ActiveDefaultControlChanged</var> when 
the focus for the control has been changed. It is set to <var>True</var> when 
the button gains focus and becomes the <var>ActiveDefaultControl</var> on the 
parent form. It is set to <var>False</var> when another control is set as the 
ActiveDefaultControl on the parent form. It is set to the value in the 
<var>Default</var> property when the ActiveDefaultControl is set to 
<b>Nil</b>.
</p>
</descr>
<seealso>
<link id="TCustomButton.ActiveDefaultControlChanged"/>
<link id="TCustomButton.Default"/>
<link id="#lcl.forms.TCustomForm.ActiveDefaultControl">TCustomForm.ActiveDefaultControl</link>
</seealso>
</element>

<element name="TCustomButton.Cancel">
<short><b>True</b> if the button is the modal Cancel button.</short>
<descr>
<p>
<var>Cancel</var> is a <var>Boolean</var> property which indicates if the 
button is the modal Cancel button on a form. The default value for the 
property is <b>False</b>.
</p>
<p>
Setting a new value for the property causes the <var>CancelControl</var> in 
the parent form to be updated. When set to <b>True</b>, the CancelControl 
property in the parent form is set the current class instance. When set to 
the <b>False</b>, the form property is set to <b>Nil</b>.
</p>
<p>
No actions are performed in the method when <var>NewCancel</var> has the same 
value as the Cancel property, or the parent form has not been assigned.
</p>
<p>
The value in Cancel is automatically updated in methods like 
<var>UpdateRolesForForm</var> and <var>UpdateDefaultCancel</var>. The 
property value is used in <var>ExecuteCancelAction</var> to determine if the 
<var>Click</var> method can be called for the control.
</p>
<p>
Pressing <b>Escape (VK_ESCAPE)</b> in a modal form is equivalent to clicking 
on the Cancel button.
</p>
</descr>
<seealso/>
</element>

<element name="TCustomButton.Color">
<short>Color used for the button face.</short>
<descr>
<p>
<var>Color</var> is a <var>TColor</var> property with color used for the 
surface (or face) on the button control. The default value for the property 
in <var>TCustomButton</var> is <var>clDefault</var> or <var>clBtnFace</var>, 
depending on the platform or widgetset.
</p>
<p>
Changes made to the Color for the control or its Font are ignored in 
TCustomButton. It is always drawn using the color(s) needed for the platform 
or widgetset.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.Color">TControl.Color</link>
</seealso>
</element>

<element name="TCustomButton.Default">
<short>
<b>True</b> if the button is the default button in a modal form.
</short>
<descr>
<p>
<var>Default</var> is a <var>Boolean</var> property which indicates if the 
button can be used as the default button control on a form. Default is 
essentially a design-time setting that indicates an intent. At run-time, the 
default button is the ActiveDefaultControl on the form. The default value for 
the property is <b>False</b>.
</p>
<p>
Setting a new value for the property causes the button control to be assigned 
to the DefaultControl property in the parent form. The widgetset class is 
notified when the property value is set.
</p>
<p>
The value in Default is used in the CreateParams method to determine style 
flags included in the creation parameters for the control. It is used in 
ExecuteDefaultAction to determine if the Click method can be called for the 
control.
</p>
<p>
The value in Default is automatically updated in the UpdateRolesForForm 
method.
</p>
<p>
Pressing <b>Enter</b> in a modal form is equivalent to clicking on the 
Default button.
</p>
</descr>
</element>

<element name="TCustomButton.ModalResult">
<short>Value returned when the control is clicked in a modal form.</short>
<descr>
<p>
<var>ModalResult</var> is a <var>TModalResult</var> property used to provide 
the modal result value when the button control is clicked in a modal form.
</p>
<p>
The value in ModalResult is used in the Click method to update the 
ModalResult value in the parent form (when assigned). The default value for 
the property is mrNone, and indicates that the property value is not used as 
a modal result in the Click method.
</p>
<p>
By convention, the value in ModalResult is associated with the usage and 
caption for the button control. Common values and usage in ModalResult 
includes:
</p>
<dl>
<dt>mrNone</dt>
<dd>ModalResult is not used.</dd>
<dt>mrOK</dt>
<dd>The OK button was clicked.</dd>
<dt>mrCancel</dt>
<dd>The Cancel button was clicked.</dd>
<dt>mrAbort</dt>
<dd>The Abort button was clicked or the modal dialog was aborted.</dd>
<dt>mrRetry</dt>
<dd>The Retry button was clicked.</dd>
<dt>mrIgnore</dt>
<dd>The Ignore button was clicked.</dd>
<dt>mrYes</dt>
<dd>The Yes button was clicked.</dd>
<dt>mrNo</dt>
<dd>The No button was clicked.</dd>
<dt>mrAll</dt>
<dd>The All button was clicked.</dd>
<dt>mrNoToAll</dt>
<dd>The No To All button was clicked.</dd>
<dt>mrYesToAll</dt>
<dd>The Yes To All button was clicked.</dd>
<dt>mrClose</dt>
<dd>The Close button was clicked.</dd>
</dl>
</descr>
<seealso/>
</element>

<element name="TCustomButton.ParentColor">
<short>Indicates if the parent color is used to draw the control.</short>
<descr>
<p>
The default value for the property is <b>False</b> in 
<var>TCustomButton</var>. Changes to the property value are ignored in 
TCustomButton; the control is always drawn using the color(s) needed for the 
platform or widgetset.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.ParentColor">TControl.ParentColor</link>
</seealso>
</element>

<element name="TCustomButton.ShortCut">
<short>Shortcut key for the control.</short>
<descr>
<p>
ShortCut is a TShortCut property with the primary shortcut key or accelerator 
key for the control. The property value contains both the virtual key code 
and the shift modifier for the short cut key.
</p>
<p>
The value in ShortCut is automatically updated when a caption is assigned for 
the control which includes an accelerator key. The accelerator key is 
designated using an Ampersand (&amp;) character before the character used as 
the short cut. A value assigned in this manner always includes the ssCtrl 
modifier in the short cut value by default.
</p>
<p>
The property value (along with ShortcutKey2) is passed to the widgetset class 
when the WSSetText method is called.
</p>
<p>
Use the <var>ShortCut</var> and <var>ShortCutToKey</var> routines in the 
<file>menu.pp</file> unit to convert to and from virtual key codes with shift 
modifiers.
</p>
</descr>
<seealso/>
</element>

<element name="TCustomButton.ShortCutKey2">
<short>Secondary shortcut key for the control.</short>
<descr>
<p>
ShortCutKey2 is a TShortCut property with the secondary shortcut key or 
accelerator key for the control. The property value contains both the virtual 
key code and the shift modifier for the short cut key. The property value 
(along with Shortcut) is passed to the widgetset class when the WSSetText 
method is called.
</p>
<p>
Use the <var>ShortCut</var> and <var>ShortCutToKey</var> routines in the 
<file>menu.pp</file> unit to convert to and from virtual key codes with shift 
modifiers.
</p>
</descr>
<seealso/>
</element>

<element name="TCustomButton.TabStop">
<short>Enables keyboard navigation using the Tab or Shift+Tab keys.</short>
<descr>
<p>
Allows the user to navigate to or from this control by pressing the Tab or 
Shift+Tab keys. The default value for the property is <b>True</b> in 
TCustomButton.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.TabStop">TWinControl.TabStop</link>
</seealso>
</element>

<element name="TButton">
<short>Implements a push button control.</short>
<descr>
<p>
<var>TButton</var> is a <var>TCustomButton</var> descendant which implements 
a push button control. TButton is used to perform an action when the control 
is clicked. An <var>OnClick</var> event handler is provided to perform 
actions needed when the push button is clicked. TButton provides support for 
the <var>TBasicAction</var> class defined in the FPC Run-time Library (RTL).
</p>
<p>
Properties are provided to control the appearance and behavior for the 
control. This includes whether it is the Default or Cancel button on a modal 
form, and the modal result returned when the push button is clicked.
</p>
<p>
The control displays a text-based caption and is drawn using a style 
appropriate for the platform or widgetset. An accelerator key can be defined 
in the caption which simulates clicking on the push button when the shortcut 
key is pressed.
</p>
<p>
Please note that the Caption in the control is always centered. The values in 
properties like BiDiMode and UseRightToLeftAlignment are ignored in the 
control.
</p>
<p>
Please note that the Color for the control defaults to the system-defined 
color used for button controls.
</p>
<p>
TButton sets the visibility for properties defined in the ancestor class, and 
does not introduce any new methods.
</p>
<p>
Use TBitBtn for a push button control which displays a bitmap instead of a 
text-based caption.
</p>
<p>
Use TSpeedButton for a push button control which can remain in the pressed or 
down state.
</p>
</descr>
<seealso>
<link id="TCustomButton"/>
</seealso>
</element>

<element name="TButton.Click" link="#lcl.controls.TControl.Click"/>
<element name="TButton.Action" link="#lcl.controls.TControl.Action"/>
<element name="TButton.Align" link="#lcl.controls.TControl.Align"/>
<element name="TButton.Anchors" link="#lcl.controls.TControl.Anchors"/>
<element name="TButton.AutoSize" link="#lcl.controls.TControl.AutoSize"/>
<element name="TButton.BidiMode" link="#lcl.controls.TControl.BiDiMode"/>
<element name="TButton.BorderSpacing" link="#lcl.controls.TControl.BorderSpacing"/>
<element name="TButton.Cancel" link="#lcl.stdctrls.TCustomButton.Cancel"/>
<element name="TButton.Caption" link="#lcl.controls.TControl.Caption"/>
<element name="TButton.Color" link="#lcl.stdctrls.TCustomButton.Color"/>
<element name="TButton.Constraints" link="#lcl.controls.TControl.Constraints"/>
<element name="TButton.Default" link="#lcl.stdctrls.TCustomButton.Default"/>
<element name="TButton.DoubleBuffered" link="#lcl.controls.TWinControl.DoubleBuffered"/>
<element name="TButton.DragCursor" link="#lcl.controls.TControl.DragCursor"/>
<element name="TButton.DragKind" link="#lcl.controls.TControl.DragKind"/>
<element name="TButton.DragMode" link="#lcl.controls.TControl.DragMode"/>
<element name="TButton.Enabled" link="#lcl.controls.TControl.Enabled"/>
<element name="TButton.Font" link="#lcl.controls.TControl.Font"/>
<element name="TButton.ParentBidiMode" link="#lcl.controls.TControl.ParentBiDiMode"/>
<element name="TButton.ModalResult" link="#lcl.stdctrls.TCustomButton.ModalResult"/>
<element name="TButton.ParentDoubleBuffered" link="#lcl.controls.TWinControl.ParentDoubleBuffered"/>
<element name="TButton.ParentFont" link="#lcl.controls.TControl.ParentFont"/>
<element name="TButton.ParentShowHint" link="#lcl.controls.TControl.ParentShowHint"/>
<element name="TButton.PopupMenu" link="#lcl.controls.TControl.PopupMenu"/>
<element name="TButton.ShowHint" link="#lcl.controls.TControl.ShowHint"/>
<element name="TButton.TabOrder" link="#lcl.controls.TWinControl.TabOrder"/>
<element name="TButton.TabStop" link="#lcl.stdctrls.TCustomButton.TabStop"/>
<element name="TButton.Visible" link="#lcl.controls.TControl.Visible"/>
<element name="TButton.OnChangeBounds" link="#lcl.controls.TControl.OnChangeBounds"/>
<element name="TButton.OnClick" link="#lcl.controls.TControl.OnClick"/>
<element name="TButton.OnContextPopup" link="#lcl.controls.TControl.OnContextPopup"/>
<element name="TButton.OnDragDrop" link="#lcl.controls.TControl.OnDragDrop"/>
<element name="TButton.OnDragOver" link="#lcl.controls.TControl.OnDragOver"/>
<element name="TButton.OnEndDrag" link="#lcl.controls.TControl.OnEndDrag"/>
<element name="TButton.OnEnter" link="#lcl.controls.TWinControl.OnEnter"/>
<element name="TButton.OnExit" link="#lcl.controls.TWinControl.OnExit"/>
<element name="TButton.OnKeyDown" link="#lcl.controls.TWinControl.OnKeyDown"/>
<element name="TButton.OnKeyPress" link="#lcl.controls.TWinControl.OnKeyPress"/>
<element name="TButton.OnKeyUp" link="#lcl.controls.TWinControl.OnKeyUp"/>
<element name="TButton.OnMouseDown" link="#lcl.controls.TControl.OnMouseDown"/>
<element name="TButton.OnMouseEnter" link="#lcl.controls.TControl.OnMouseEnter"/>
<element name="TButton.OnMouseLeave" link="#lcl.controls.TControl.OnMouseLeave"/>
<element name="TButton.OnMouseMove" link="#lcl.controls.TControl.OnMouseMove"/>
<element name="TButton.OnMouseUp" link="#lcl.controls.TControl.OnMouseUp"/>
<element name="TButton.OnMouseWheel" link="#lcl.controls.TControl.OnMouseWheel"/>
<element name="TButton.OnMouseWheelDown" link="#lcl.controls.TControl.OnMouseWheelDown"/>
<element name="TButton.OnMouseWheelUp" link="#lcl.controls.TControl.OnMouseWheelUp"/>
<element name="TButton.OnResize" link="#lcl.controls.TControl.OnResize"/>
<element name="TButton.OnStartDrag" link="#lcl.controls.TControl.OnStartDrag"/>
<element name="TButton.OnUTF8KeyPress" link="#lcl.controls.TWinControl.OnUTF8KeyPress"/>

<element name="TCheckBoxState">
<short>Represents the states for a check box.</short>
<descr>
<p>
<var>TCheckBoxState</var> is an enumerated type with values which represent 
the states for a check box control. TCheckBoxState is the type used to 
implement the <var>State</var> property in <var>TCustomCheckBox</var> and 
descendent classes.
</p>
</descr>
<seealso/>
</element>
<element name="TCheckBoxState.cbUnchecked">
<short>
The check box has no check mark, indicating that the item is not selected.
</short>
</element>
<element name="TCheckBoxState.cbChecked">
<short>
The check box has a check mark in it, indicating that the item is selected.
</short>
</element>
<element name="TCheckBoxState.cbGrayed">
<short>
The check box state cannot be changed by the user, or is disabled.
</short>
</element>

<element name="TCustomCheckBox">
<short>The base class for a check box component.</short>
<descr>
<p>
<var>TCustomCheckBox</var> is a <var>TButtonControl</var> descendant which 
specifies an interface used for a check box control. It is the common 
ancestor for <var>TCheckBox</var>, <var>TToggleBox</var>, 
<var>TRadioButton</var>, and <var>TDBCheckBox</var> descendants.
</p>
<p>
A check box control allows the user to choose the state for the control 
independent of other check box controls (unlike a radio button). 
TCustomCheckBox introduces the <var>State</var> property which contains the 
check, unchecked, or grayed state for the control. The <var>AllowGrayed</var> 
property indicates if the grayed state is allowed in the control; otherwise 
only checked and unchecked are used. The <var>Checked</var> property allows 
the value in State to be updated by setting a <var>Boolean</var> value that 
indicates the check or unchecked state for the control.
</p>
</descr>
<seealso>
<link id="TButtonControl"/>
<link id="TCheckBox"/>
<link id="TToggleBox"/>
<link id="TRadioButton"/>
<link id="#lcl.dbctrls.TDBCheckBox">TDBCheckBox</link>
</seealso>
</element>

<element name="TCustomCheckBox.FAllowGrayed" link="#lcl.stdctrls.TCustomCheckBox.AllowGrayed"/>
<element name="TCustomCheckBox.FState" link="#lcl.stdctrls.TCustomCheckBox.State"/>
<element name="TCustomCheckBox.FShortCut" link="#lcl.stdctrls.TCustomCheckBox.ShortCut"/>
<element name="TCustomCheckBox.FShortCutKey2" link="#lcl.stdctrls.TCustomCheckBox.ShortCutKey2"/>

<element name="TCustomCheckBox.SetState">
<short>Sets the value for the State property.</short>
<descr/>
<seealso>
<link id="TCustomCheckBox.State"/>
</seealso>
</element>
<element name="TCustomCheckBox.SetState.Value">
<short>New value for the State property.</short>
</element>

<element name="TCustomCheckBox.GetState">
<short>Gets the value for the State property.</short>
<descr/>
<seealso>
<link id="TCustomCheckBox.State"/>
</seealso>
</element>
<element name="TCustomCheckBox.GetState.Result">
<short>Value for the property.</short>
</element>

<element name="TCustomCheckBox.DoChange">
<short>Handles the LM_CHANGED message for the control.</short>
<descr>
<p>
Performs either the <var>OnClick</var> or the <var>OnChange</var> event 
handler. Use <var>ClicksDisabled</var> is control the event handler signalled.
</p>
</descr>
<seealso/>
</element>
<element name="TCustomCheckBox.DoChange.Msg">
<short>Message examined in the method.</short>
</element>

<element name="TCustomCheckBox.WSRegisterClass" link="#lcl.lclclasses.TLCLComponent.WSRegisterClass"/>

<element name="TCustomCheckBox.Click">
<short>Performs actions needed when the control is clicked.</short>
<descr>
<p>
<var>Click</var> is an overridden method in <var>TCustomCheckBox</var>. It 
performs actions needed when the value in the Checked or State property is 
changed for the control, whether by mouse click or setting the value in 
program code.
</p>
<p>
TCustomCheckBox re-implements the method from the TButtonControl ancestor to 
ignore the mouse click event. It has an empty implementation, and does not call the inherited method.
</p>
<p>
In TCustomCheckBox, the click action may be handled in two different ways. 
The action may be performed (in TControl) when the left mouse button is 
released and standard click events are enabled in ControlStyle. The click 
action may be performed in DoClickOnChange (by calling the inherited Click 
method) when the value in State is changed and ClicksDisabled is <b>False</b>.
</p>
<p>
This avoids a duplicate click notification when csClickEvents is enabled in 
ControlStyle and Click is handled when the WMLButtonUp method is executed, or 
when the click is triggered by an associated Action.
</p>
</descr>
<seealso>
<link id="TCustomCheckBox.State"/>
<link id="TCustomCheckBox.DoClickOnChange"/>
<link id="TButtonControl.Checked"/>
<link id="TButtonControl.ClicksDisabled"/>
<link id="#lcl.controls.TControl.Click">TControl.Click</link>
<link id="#lcl.controls.TControl.Action">TControl.Action</link>
<link id="#lcl.controls.TControl.ControlState">TControl.ControlState</link>
<link id="#lcl.controls.TControl.ControlStyle">TControl.ControlStyle</link>
<link id="#lcl.controls.TControl.WMLButtonUp">TControl.WMLButtonUp</link>
</seealso>
</element>

<element name="TCustomCheckBox.DoClickOnChange">
<short>Implements the Click behavior for the control.</short>
<descr>
<p>
<var>DoClickOnChange</var> is a procedure used to signal event handler(s) 
when the <b>LM_CHANGED</b> message is handled for the control. 
DoClickOnChange calls the <var>Changed</var> method to dispatch the control 
message.
</p>
<p>
DoClickOnChange uses the value from the inherited <var>ClicksDisabled</var> 
property to determine the event handler(s) signalled in the method. When 
ClicksDisabled is <b>False</b>, the inherited <var>Click</var> method is 
called. When set to <b>True</b>, the <var>DoOnChange</var> method is called 
to signal the <var>OnEditingDone</var> and <var>OnChange</var> event 
handlers. This emulates the <var>OnClick</var> behavior in the Delphi VCL.
</p>
<p>
DoClickOnChange is called when a new value is assigned to the 
<var>Checked</var> property. DoClickOnChange is also called from the DoChange 
method after the value in State has been retrieved for the control. Please 
note that DoChange is not used in the current LCL implementation.
</p>
</descr>
<seealso>
<link id="TCustomCheckBox.State"/>
<link id="TButtonControl.ClicksDisabled"/>
<link id="TButtonControl.Click"/>
<link id="TButtonControl.Checked"/>
<link id="TButtonControl.DoOnChange"/>
<link id="TButtonControl.OnChange"/>
<link id="#lcl.controls.TControl.Changed">TControl.Changed</link>
<link id="#lcl.controls.TControl.EditingDone">TControl.EditingDone</link>
<link id="#lcl.controls.TControl.OnEditingDone">TControl.OnEditingDone</link>
<link id="#lcl.controls.TControl.OnClick">TControl.OnClick</link>
</seealso>
</element>

<element name="TCustomCheckBox.RetrieveState">
<short>
Gets the checked state for the control from the widgetset class.
</short>
<descr>
<p>
<var>RetrieveState</var> is a <var>TCheckBoxState</var> function used to get 
the checked, unchecked, or grayed state for the control from the widgetset 
class. Access to the widgetset class requires a valid handle in the control. 
If the handle has not been assigned, the return value is set to the existing 
value in the <var>State</var> member.
</p>
<p>
RetrieveState calls the RetrieveState method in the widgetset class to get 
the return value for the method.
</p>
<p>
RetrieveState is used to get the value for the <var>State</var> property. It 
is called from <var>DoChange</var> when the <var>LM_CHANGED</var> control 
message is handled for the control. It is also called when setting a new 
value for the <var>Checked</var> property.
</p>
</descr>
<seealso/>
</element>
<element name="TCustomCheckBox.RetrieveState.Result">
<short>TCheckBoxState value returned from the widgetset class.</short>
</element>

<element name="TCustomCheckBox.InitializeWnd" link="#lcl.controls.TWinControl.InitializeWnd"/>

<element name="TCustomCheckBox.Toggle">
<short>
Alternates between the checked and the unchecked state in the control.
</short>
<descr>
<p>
Calls <var>GetChecked</var> to retrieve the current checked <var>State</var> 
for the control. Negates the value and calls <var>SetChecked</var> to store 
the toggled state value. Called from <var>DialogChar</var> when the 
accelerator key is handled for the focused control.
</p>
</descr>
<seealso>
<link id="TCustomCheckBox.DialogChar"/>
<link id="TCustomCheckBox.State"/>
<link id="TCustomCheckBox.GetChecked"/>
<link id="TCustomCheckBox.SetChecked"/>
<link id="TCustomCheckBox.ShortCut"/>
</seealso>
</element>

<element name="TCustomCheckBox.DialogChar">
<short>Implements support for accelerator keys in the control.</short>
<descr>
<p>
<var>DialogChar</var> is an overridden <var>Boolean</var> function in 
<var>TCustomCheckBox</var> which handles accelerator keys in messages for the 
control. The return value is set to <b>True</b> when the check box is 
successfully toggled in the method.
</p>
<p>
<var>Message</var> is the TLMKey instance with the key code examined in the 
method. When the key code matches the accelerator key in <var>Caption</var>, 
the control is focused and its <var>State</var> is toggled. If the control 
cannot be focused, or Message does not represent an accelerator key code, the 
inherited method is called to get the return value.
</p>
<p>
This method is called even if the control is disabled or hidden. Provided for 
Delphi VCL compatibility.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.DialogChar">TControl.DialogChar</link>
</seealso>
</element>
<element name="TCustomCheckBox.DialogChar.Result">
<short>
<b>True</b> when the control state is toggled by the accelerator key.
</short>
</element>
<element name="TCustomCheckBox.DialogChar.Message">
<short>Control message examined in the method.</short>
</element>

<element name="TCustomCheckBox.GetChecked">
<short>Gets the value for the Checked property.</short>
<descr/>
<seealso>
<link id="TCustomCheckBox.State"/>
<link id="TButtonControl.Checked"/>
</seealso>
</element>
<element name="TCustomCheckBox.GetChecked.Result">
<short>Value for the Checked property.</short>
</element>

<element name="TCustomCheckBox.SetChecked">
<short>Sets the value for the Checked property.</short>
<descr/>
<version>
Modified in LCL version 3.0 to remove processing for the linked Action and 
OnChange or OnClick notifications. In 3.0, these actions are performed when 
the State property is updated.
</version>
<seealso>
<link id="TCustomCheckBox.State"/>
<link id="TButtonControl.Checked"/>
</seealso>
</element>
<element name="TCustomCheckBox.SetChecked.Value">
<short>New value for the Checked property.</short>
</element>

<element name="TCustomCheckBox.RealSetText" link="#lcl.controls.TControl.RealSetText"/>
<element name="TCustomCheckBox.RealSetText.Value">
<short>New value stored in the text/caption for the control.</short>
</element>

<element name="TCustomCheckBox.ApplyChanges">
<short>
Sets the checked state in the widgetset class and redraws the control.
</short>
<descr>
<p>
<var>ApplyChanges</var> is a method used to send a SetState message to the 
widgetset class to update the visual appearance for the control. No actions 
are performed in the method if a handle has not been allocated for the 
control, or during component streaming.
</p>
<p>
ApplyChanges is called when a new value is assigned to the <var>Checked</var> 
or <var>State</var> properties.
</p>
</descr>
<seealso>
<link id="TCustomCheckBox.State"/>
<link id="TButtonControl.Checked"/>
</seealso>
</element>

<element name="TCustomCheckBox.GetControlClassDefaultSize" link="#lcl.controls.TControl.GetControlClassDefaultSize"/>
<element name="TCustomCheckBox.GetControlClassDefaultSize.Result">
<short>Size used for new instances of the class.</short>
</element>

<element name="TCustomCheckBox.Loaded">
<short>
Performs actions needed after the control is loaded using LCL component 
streaming.
</short>
<descr>
<p>
<var>Loaded</var> is an overridden method in <var>TCustomCheckBox</var>. 
Loaded ensures that the value in <var>State</var> is passed to the widgetset 
class when a handle has been allocated for the control. This prevents loss of 
the stored value in State during component streaming. The inherited method is 
called prior to exit.
</p>
</descr>
<seealso>
<link id="TCustomCheckBox.State"/>
<link id="#lcl.controls.TWinControl.Loaded">TWinControl.Loaded</link>
</seealso>
</element>

<element name="TCustomCheckBox.WSSetText" link="#lcl.controls.TWinControl.WSSetText"/>
<element name="TCustomCheckBox.WSSetText.AText">
<short>New value for Text.</short>
</element>

<element name="TCustomCheckBox.TextChanged">
<short>
Performs actions needed when the CM_TEXTCHANGED message is handled for the 
control.
</short>
<descr>
<p>
<var>TextChanged</var> is an overridden method in <var>TCustomCheckBox</var> 
used to perform actions needed when the <var>CM_TEXTCHANGED</var> control 
message is handled for the control.
</p>
<p>
TextChanged calls <var>InvalidatePreferredSize</var> to update the sizing 
flags for the control and its Parent. When <var>Parent</var> has been 
assigned and its <var>AutoSize</var> property is <b>True</b>, its 
<var>AdjustSize</var> method is called. The <var>AdjustSize</var> method in 
the control is called to resize the visible control.
</p>
<p>
TextChanged calls the inherited method prior to exit.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.TextChanged">TControl.TextChanged</link>
<link id="#lcl.controls.TControl.InvalidatePreferredSize">TControl.InvalidatePreferredSize</link>
<link id="#lcl.controls.TControl.AdjustSize">TControl.AdjustSize</link>
</seealso>
</element>

<element name="TCustomCheckBox.CreateParams" link="#lcl.controls.TWinControl.CreateParams"/>
<element name="TCustomCheckBox.CreateParams.Params">
<short>Creation parameters updated in the method.</short>
</element>

<element name="TCustomCheckBox.Create">
<short>Constructor for the class instance.</short>
<descr>
<p>
<var>Create</var> is the overridden constructor for the class instance, and 
calls the inherited method on entry. <var>TheOwner</var> is the owner for the 
new class instance. Create sets the default value for the 
<var>Alignment</var> property to <var>taRightJustify</var>. Create calls 
<var>SetInitialBounds</var> to set the initial control size to the values 
returned from the <var>GetControlClassDefaultSize</var> class method.
</p>
</descr>
<seealso/>
</element>
<element name="TCustomCheckBox.Create.TheOwner">
<short>Owner of the class instance.</short>
</element>

<element name="TCustomCheckBox.Alignment">
<short>
Indicates the alignment for the caption text in the control.
</short>
<descr>
<p>
<var>Alignment</var> is a <var>TLeftRight</var> property with the horizontal 
alignment for the caption text relative to the check box. The default value 
for the property is <var>taRightJustify</var>, and causes the text to be 
drawn to the right of the check box. Use <var>taLeftJustify</var> to draw the 
caption text in front of the check box.
</p>
<p>
Changing the value for the property causes the widgetset class to be updated 
when its <var>Handle</var> has been allocated.
</p>
<p>
The value in Alignment is used to set the creation parameters for the control.
</p>
<remark>
The Alignment property is not supported for macOS Carbon, Cocoa, and GTK2 
widgetsets. Set BiDiMode to bdRightToLeft as an alternative.
</remark>
</descr>
<seealso>
<link id="TCustomCheckBox.CreateParams"/>
<link id="#rtl.classes.TLeftRight">TLeftRight</link>
</seealso>
</element>

<element name="TCustomCheckBox.AllowGrayed">
<short>Allows the check box to use a "grayed" state.</short>
<descr>
<p>
If <var>AllowGrayed</var> is set to <b>True</b>, the check box has three 
possible values in the State property: checked, unchecked and grayed. If 
<var>AllowGrayed</var> is set to <b>False</b>, the check box has only two 
possible states: checked and unchecked.
</p>
</descr>
<example file="stdctrls/tcustomcheckbox_allowgrayed.pas"/>
<seealso>
<link id="TCustomCheckBox.State"/>
<link id="TButtonControl.Checked"/>
</seealso>
</element>

<element name="TCustomCheckBox.State">
<short>The check, unchecked, or grayed state for the control.</short>
<descr>
<p>
<var>State</var> is a <var>TCheckBoxState</var> property which indicates 
whether the check box is checked, unchecked or grayed (disabled). The default 
value for the property is cbUnchecked. State allows the control to be set to 
the indeterminate (grayed) state when AllowGrayed is set to <b>True</b>. 
Otherwise, it has the same behavior as using the Checked property.
</p>
<p>
See <var>TCheckBoxState</var> for the available enumeration values and their 
meanings in the <var>State</var> property.
</p>
<p>
Reading the property value calls RetrieveState to get the value from the 
widgetset class when its handle has been allocated. Otherwise, the existing 
value for the member is used.
</p>
<p>
Changing the value for the property causes the Checked property in an 
assigned Action to be updated if the property value is not cbGrayed and the 
ClicksDisabled property is <b>False</b>. The value is applied to the Action 
without updating the value in the control. This prevents recursion when the 
value is changed in the linked action.
</p>
<p>
Otherwise, ApplyChanges is called to update the visual appearance for the 
control. DoClickOnChange is called to post the control message for the 
updated control, and to emulate the OnChange and OnClick behavior in the 
Delphi VCL. When ClicksDisabled is <b>True</b>, only the OnChange event 
handler is signalled. When set to <b>False</b>, the Click method is called to 
signal both the OnChange and OnClick event handlers (when assigned).
</p>
<p>
The Grayed property in Action is set to <b>False</b> when the new property 
value is cbChecked or cbUnchecked.
</p>
</descr>
<version>
Modified in LCL version 3.0 to prevent recursive updates (and event 
notifications) when the action is changed.
</version>
<seealso>
<link id="TCustomCheckBox.AllowGrayed"/>
<link id="TButtonControl.Checked"/>
<link id="TCustomCheckBox.RetrieveState"/>
<link id="TCustomCheckBox.ApplyChanges"/>
<link id="TCustomCheckBox.DoClickOnChange"/>
<link id="TCheckBoxState"/>
<link id="#lcl.actnlist.TCustomAction.Grayed">TCustomAction.Grayed</link>
</seealso>
<example file="stdctrls/tcustomcheckbox_allowgrayed.pas"/>
</element>

<element name="TCustomCheckBox.ShortCut">
<short>Shortcut key for the control.</short>
<descr>
<p>
<var>ShortCut</var> is a <var>TShortCut</var> property with the primary 
shortcut key or accelerator key for the control. The property value contains 
both the virtual key code and the shift modifier for the short cut key.
</p>
<p>
The value in ShortCut is automatically updated when a caption is assigned for 
the control which includes an accelerator key. The accelerator key is 
designated using an Ampersand (&amp;) character before the value used as the 
short cut. A value assigned in this manner always includes the ssCtrl 
modifier in the short cut value by default.
</p>
<p>
Use the <var>ShortCut</var> and <var>ShortCutToKey</var> routines in the 
<file>menu.pp</file> unit to convert to and from virtual key codes with shift 
modifiers.
</p>
</descr>
<seealso/>
</element>

<element name="TCustomCheckBox.ShortCutKey2">
<short>Secondary shortcut key for the control.</short>
<descr>
<p>
<var>ShortCutKey2</var> is a <var>TShortCut</var> property with the secondary 
shortcut key or accelerator key for the control. The property value contains 
both the virtual key code and the shift modifier combined to form the short 
cut key.
</p>
<p>
The property value (along with Shortcut) is passed to the widgetset class 
when the WSSetText method is called.
</p>
<p>
Use the <var>ShortCut</var> and <var>ShortCutToKey</var> routines in the 
<file>menu.pp</file> unit to convert to and from virtual key codes with shift 
modifiers.
</p>
<remark>
ShortCutKey2 may not be implemented for all platforms supported in the LCL.
</remark>
</descr>
<seealso/>
</element>

<element name="TCustomCheckBox.TabStop" link="#lcl.controls.TWinControl.TabStop"/>
<element name="TCustomCheckBox.OnChange" link="#lcl.stdctrls.TButtonControl.OnChange"/>

<element name="TCheckBox">
<short>A label with a box which can contain a check mark.</short>
<descr>
<p>
<var>TCheckBox</var> is a <var>TCustomCheckBox</var> descendant which 
implements a check box component. A check box control allows the user to 
choose the state for the control independent of other check box controls 
(unlike a radio button).
</p>
<p>
The <var>State</var> property contains the checked, unchecked, or grayed 
state for the control. The <var>AllowGrayed</var> property indicates if the 
grayed state is allowed in the control; otherwise only checked and unchecked 
are used. The <var>Checked</var> property allows the value in State to be 
updated by setting a <var>Boolean</var> value that indicates if the control 
is check or unchecked.
</p>
</descr>
<seealso>
<link id="HowToUseStdCtrls"/>
<link id="TButtonControl"/>
<link id="TCustomCheckBox"/>
<link id="TToggleBox"/>
<link id="TRadioButton"/>
</seealso>
</element>

<element name="TCheckBox.Create">
<short>Constructor for the class instance.</short>
<descr>
<p>
<var>Create</var> is the overridden constructor for the class instance, and 
calls the inherited method on entry. Creates sets the internal component 
style for the control to <var>csCheckbox</var>, and sets the default values 
for properties including <var>TabStop</var> (<b>True</b>) and 
<var>AutoSize</var> (<b>True</b>).
</p>
</descr>
<seealso/>
</element>
<element name="TCheckBox.Create.TheOwner">
<short>Owner of the class instance.</short>
</element>

<element name="TCheckBox.Action" link="#lcl.controls.TControl.Action"/>
<element name="TCheckBox.Align" link="#lcl.controls.TControl.Align"/>
<element name="TCheckBox.Alignment" link="#lcl.stdctrls.TCustomCheckBox.Alignment"/>
<element name="TCheckBox.AllowGrayed" link="#lcl.stdctrls.TCustomCheckBox.AllowGrayed"/>
<element name="TCheckBox.Anchors" link="#lcl.controls.TControl.Anchors"/>

<element name="TCheckBox.AutoSize">
<short>
Allows automatic adjustment of the size for the control, according to its 
content.
</short>
<descr>
<p>
The action performed depends on the control type. For example, a label or 
button can become bigger or smaller to accommodate a longer or shorter 
caption. The default value for the property is <b>True</b> in TCheckBox, and 
enables auto-sizing of the text displayed for the control instance.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.AutoSize">TControl.AutoSize</link>
</seealso>
</element>

<element name="TCheckBox.BidiMode" link="#lcl.controls.TControl.BiDiMode"/>
<element name="TCheckBox.BorderSpacing" link="#lcl.controls.TControl.BorderSpacing"/>
<element name="TCheckBox.Caption" link="#lcl.controls.TControl.Caption"/>

<element name="TCheckBox.Checked">
<short>
Indicates the checked state for the control as a Boolean value.
</short>
<descr>
<p>
<var>Checked</var> is a <var>Boolean</var> property which indicates if the 
control is displayed using its "checked" or "unchecked" state. The default 
value for the property is <b>False</b> and indicates the control uses its 
unchecked state.
</p>
<p>
Checked is a published property in TCheckBox and uses the overridden read and 
write access specifiers from TCustomCheckBox (GetChecked and SetChecked). The 
property value is read from and written to the State property using one of 
the TCheckBoxState enumeration values. For example:
</p>
<table>
<tr>
<td><b>State</b> value</td>
<td><b>Checked</b> value</td>
</tr>
<tr>
<td><var>cbUnchecked</var></td>
<td><b>False</b></td>
</tr>
<tr>
<td><var>cbChecked</var></td>
<td><b>True</b></td>
</tr>
<tr>
<td><var>cbGrayed</var></td>
<td>The value in Checked is not significant.</td>
</tr>
</table>
<p>
Changing the value in Checked causes State to be updated with the corresponding 
TCheckBoxState value, which in turn, calls either the Click method or the 
OnChange event handler.
</p>
<p>
See <link id="TCheckBox.State">State</link> and 
<link id="TButtonControl.ClicksDisabled">ClicksDisabled</link> for more information.
</p>
</descr>
<seealso>
<link id="TCheckBox.State"/>
<link id="TCheckBox.Action"/>
<link id="TCheckBox.OnClick"/>
<link id="TCheckBox.OnChange"/>
<link id="TCustomCheckBox.GetChecked"/>
<link id="TCustomCheckBox.SetChecked"/>
<link id="TCheckBoxState"/>
<link id="TButtonControl.Checked"/>
<link id="TButtonControl.ClicksDisabled"/>
<link id="TButtonControl.Click"/>
<link id="TButtonControl.DoOnChange"/>
</seealso>
</element>

<element name="TCheckBox.Color" link="#lcl.controls.TControl.Color"/>
<element name="TCheckBox.Constraints" link="#lcl.controls.TControl.Constraints"/>
<element name="TCheckBox.DoubleBuffered" link="#lcl.controls.TWinControl.DoubleBuffered"/>
<element name="TCheckBox.DragCursor" link="#lcl.controls.TControl.DragCursor"/>
<element name="TCheckBox.DragKind" link="#lcl.controls.TControl.DragKind"/>
<element name="TCheckBox.DragMode" link="#lcl.controls.TControl.DragMode"/>
<element name="TCheckBox.Enabled" link="#lcl.controls.TControl.Enabled"/>
<element name="TCheckBox.Font" link="#lcl.controls.TControl.Font"/>
<element name="TCheckBox.Hint" link="#lcl.controls.TControl.Hint"/>
<element name="TCheckBox.ParentBidiMode" link="#lcl.controls.TControl.ParentBiDiMode"/>
<element name="TCheckBox.ParentColor" link="#lcl.controls.TControl.ParentColor"/>
<element name="TCheckBox.ParentDoubleBuffered" link="#lcl.controls.TWinControl.ParentDoubleBuffered"/>
<element name="TCheckBox.ParentFont" link="#lcl.controls.TControl.ParentFont"/>
<element name="TCheckBox.ParentShowHint" link="#lcl.controls.TControl.ParentShowHint"/>
<element name="TCheckBox.PopupMenu" link="#lcl.controls.TControl.PopupMenu"/>
<element name="TCheckBox.ShowHint" link="#lcl.controls.TControl.ShowHint"/>
<element name="TCheckBox.State" link="#lcl.stdctrls.TCustomCheckBox.State"/>
<element name="TCheckBox.TabOrder" link="#lcl.controls.TWinControl.TabOrder"/>

<element name="TCheckBox.TabStop">
<short>Enables keyboard navigation using the Tab or Shift+Tab keys.</short>
<descr>
<p>
Allows the user to navigate to or from this control by pressing the Tab or 
Shift+Tab keys. The default value for the property is <b>True</b> in 
TCheckBox.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.TabStop">TWinControl.TabStop</link>
</seealso>
</element>

<element name="TCheckBox.Visible" link="#lcl.controls.TControl.Visible"/>
<element name="TCheckBox.OnChange" link="#lcl.stdctrls.TButtonControl.OnChange"/>
<element name="TCheckBox.OnChangeBounds" link="#lcl.controls.TControl.OnChangeBounds"/>
<element name="TCheckBox.OnClick" link="#lcl.controls.TControl.OnClick"/>
<element name="TCheckBox.OnContextPopup" link="#lcl.controls.TControl.OnContextPopup"/>
<element name="TCheckBox.OnDragDrop" link="#lcl.controls.TControl.OnDragDrop"/>
<element name="TCheckBox.OnDragOver" link="#lcl.controls.TControl.OnDragOver"/>
<element name="TCheckBox.OnEditingDone" link="#lcl.controls.TControl.OnEditingDone"/>
<element name="TCheckBox.OnEndDrag" link="#lcl.controls.TControl.OnEndDrag"/>
<element name="TCheckBox.OnEnter" link="#lcl.controls.TWinControl.OnEnter"/>
<element name="TCheckBox.OnExit" link="#lcl.controls.TWinControl.OnExit"/>
<element name="TCheckBox.OnKeyPress" link="#lcl.controls.TWinControl.OnKeyPress"/>
<element name="TCheckBox.OnKeyDown" link="#lcl.controls.TWinControl.OnKeyDown"/>
<element name="TCheckBox.OnKeyUp" link="#lcl.controls.TWinControl.OnKeyUp"/>
<element name="TCheckBox.OnMouseDown" link="#lcl.controls.TControl.OnMouseDown"/>
<element name="TCheckBox.OnMouseEnter" link="#lcl.controls.TControl.OnMouseEnter"/>
<element name="TCheckBox.OnMouseLeave" link="#lcl.controls.TControl.OnMouseLeave"/>
<element name="TCheckBox.OnMouseMove" link="#lcl.controls.TControl.OnMouseMove"/>
<element name="TCheckBox.OnMouseUp" link="#lcl.controls.TControl.OnMouseUp"/>
<element name="TCheckBox.OnMouseWheel" link="#lcl.controls.TControl.OnMouseWheel"/>
<element name="TCheckBox.OnMouseWheelDown" link="#lcl.controls.TControl.OnMouseWheelDown"/>
<element name="TCheckBox.OnMouseWheelUp" link="#lcl.controls.TControl.OnMouseWheelUp"/>
<element name="TCheckBox.OnResize" link="#lcl.controls.TControl.OnResize"/>
<element name="TCheckBox.OnStartDrag" link="#lcl.controls.TControl.OnStartDrag"/>
<element name="TCheckBox.OnUTF8KeyPress" link="#lcl.controls.TWinControl.OnUTF8KeyPress"/>

<element name="TToggleBox">
<short>A labelled box capable of being checked or unchecked.</short>
<descr>
<p>
<var>TToggleBox</var> is <var>TCustomCheckBox</var> descendant which 
implements a labelled control with state values like a check box control. 
TToggleBox differs from <var>TCheckBox</var> in that it displays only the 
<var>Caption</var> text for the control; the graphical check mark 
representation is not used. TToggleBox is similar in appearance to a push 
button control. The control state determines whether the button is drawn 
using its up or down position.
</p>
<p>
The programmer must ensure that the <var>OnClick</var> event handler 
recognizes the <var>State</var> of the control, takes the appropriate 
<var>Action</var>, and stores the <var>State</var> into the appropriate 
storage.
</p>
</descr>
<seealso>
<link id="HowToUseStdCtrls"/>
<link id="TCustomCheckBox"/>
<link id="TCheckBox"/>
<link id="TButton"/>
</seealso>
</element>

<element name="TToggleBox.WSRegisterClass" link="#lcl.lclclasses.TLCLComponent.WSRegisterClass"/>

<element name="TToggleBox.GetControlClassDefaultSize" link="#lcl.controls.TControl.GetControlClassDefaultSize"/>
<element name="TToggleBox.GetControlClassDefaultSize.Result">
<short>Bounds used for new instances of the class.</short>
</element>

<element name="TToggleBox.CreateParams" link="#lcl.controls.TWinControl.CreateParams"/>
<element name="TToggleBox.CreateParams.Params">
<short>Creation parameters with style flags updated in the method.</short>
</element>

<element name="TToggleBox.ParentColor" link="#lcl.controls.TControl.ParentColor"/>

<element name="TToggleBox.Create">
<short>Constructor for the class instance.</short>
<descr>
<p>
<var>Create</var> is the overridden constructor for the class instance, and 
calls the inherited method using <var>TheOwner</var> as the owner for the new 
class instance. Create ensures that the internal component style for the 
control is set to <var>csToggleBox</var>, and sets the default values for the 
TabStop (<b>True</b>) and ParentColor (<b>False</b>) properties.
</p>
</descr>
<seealso/>
</element>
<element name="TToggleBox.Create.TheOwner">
<short>Owner of the class instance.</short>
</element>

<element name="TToggleBox.AllowGrayed" link="#lcl.stdctrls.TCustomCheckBox.AllowGrayed"/>
<element name="TToggleBox.Align" link="#lcl.controls.TControl.Align"/>
<element name="TToggleBox.Anchors" link="#lcl.controls.TControl.Anchors"/>
<element name="TToggleBox.AutoSize" link="#lcl.controls.TControl.AutoSize"/>
<element name="TToggleBox.BidiMode" link="#lcl.controls.TControl.BiDiMode"/>
<element name="TToggleBox.BorderSpacing" link="#lcl.controls.TControl.BorderSpacing"/>
<element name="TToggleBox.Caption" link="#lcl.controls.TControl.Caption"/>
<element name="TToggleBox.Checked" link="#lcl.stdctrls.TButtonControl.Checked"/>
<element name="TToggleBox.Color" link="#lcl.controls.TControl.Color"/>
<element name="TToggleBox.Constraints" link="#lcl.controls.TControl.Constraints"/>
<element name="TToggleBox.DoubleBuffered" link="#lcl.controls.TWinControl.DoubleBuffered"/>
<element name="TToggleBox.DragCursor" link="#lcl.controls.TControl.DragCursor"/>
<element name="TToggleBox.DragKind" link="#lcl.controls.TControl.DragKind"/>
<element name="TToggleBox.DragMode" link="#lcl.controls.TControl.DragMode"/>
<element name="TToggleBox.Enabled" link="#lcl.controls.TControl.Enabled"/>
<element name="TToggleBox.Font" link="#lcl.controls.TControl.Font"/>
<element name="TToggleBox.Hint" link="#lcl.controls.TControl.Hint"/>
<element name="TToggleBox.ParentBidiMode" link="#lcl.controls.TControl.ParentBiDiMode"/>
<element name="TToggleBox.ParentDoubleBuffered" link="#lcl.controls.TWinControl.ParentDoubleBuffered"/>
<element name="TToggleBox.ParentFont" link="#lcl.controls.TControl.ParentFont"/>
<element name="TToggleBox.ParentShowHint" link="#lcl.controls.TControl.ParentShowHint"/>
<element name="TToggleBox.PopupMenu" link="#lcl.controls.TControl.PopupMenu"/>
<element name="TToggleBox.ShowHint" link="#lcl.controls.TControl.ShowHint"/>
<element name="TToggleBox.State" link="#lcl.stdctrls.TCustomCheckBox.State"/>
<element name="TToggleBox.TabOrder" link="#lcl.controls.TWinControl.TabOrder"/>

<element name="TToggleBox.TabStop">
<short>Enables keyboard navigation using the Tab or Shift+Tab keys.</short>
<descr>
<p>
Allows the user to navigate to or from this control by pressing the Tab or 
Shift+Tab keys. The default value for the property is <b>True</b> in 
TToggleBox.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.TabStop">TWinControl.TabStop</link>
</seealso>
</element>

<element name="TToggleBox.Visible" link="#lcl.controls.TControl.Visible"/>
<element name="TToggleBox.OnChange" link="#lcl.stdctrls.TButtonControl.OnChange"/>
<element name="TToggleBox.OnClick" link="#lcl.controls.TControl.OnClick"/>
<element name="TToggleBox.OnContextPopup" link="#lcl.controls.TControl.OnContextPopup"/>
<element name="TToggleBox.OnDragDrop" link="#lcl.controls.TControl.OnDragDrop"/>
<element name="TToggleBox.OnDragOver" link="#lcl.controls.TControl.OnDragOver"/>
<element name="TToggleBox.OnEndDrag" link="#lcl.controls.TControl.OnEndDrag"/>
<element name="TToggleBox.OnEnter" link="#lcl.controls.TWinControl.OnEnter"/>
<element name="TToggleBox.OnExit" link="#lcl.controls.TWinControl.OnExit"/>
<element name="TToggleBox.OnMouseDown" link="#lcl.controls.TControl.OnMouseDown"/>
<element name="TToggleBox.OnMouseEnter" link="#lcl.controls.TControl.OnMouseEnter"/>
<element name="TToggleBox.OnMouseLeave" link="#lcl.controls.TControl.OnMouseLeave"/>
<element name="TToggleBox.OnMouseMove" link="#lcl.controls.TControl.OnMouseMove"/>
<element name="TToggleBox.OnMouseUp" link="#lcl.controls.TControl.OnMouseUp"/>
<element name="TToggleBox.OnMouseWheel" link="#lcl.controls.TControl.OnMouseWheel"/>
<element name="TToggleBox.OnMouseWheelDown" link="#lcl.controls.TControl.OnMouseWheelDown"/>
<element name="TToggleBox.OnMouseWheelUp" link="#lcl.controls.TControl.OnMouseWheelUp"/>
<element name="TToggleBox.OnResize" link="#lcl.controls.TControl.OnResize"/>
<element name="TToggleBox.OnStartDrag" link="#lcl.controls.TControl.OnStartDrag"/>

<element name="TRadioButton">
<short>Implement a radio button control.</short>
<descr>
<p>
<var>TRadioButton</var> is a <var>TCustomCheckBox</var> descendant which 
implements a selection button that works with other radio buttons in a 
mutually exclusive way. If one radio button is selected, none of the others 
in the group can be selected.
</p>
<p>
Ensure that the <var>OnClick</var> event handler for each button has a unique 
<var>Action</var>, and that Actions for the other (deselected and therefore 
inactive) buttons are turned off.
</p>
<p>
<var>TRadioGroup</var> behaves differently from a group of 
<var>TRadioButton</var> controls placed on a form.
</p>
<p>
In the case of <var>TRadioButton</var>, the mutual exclusivity is a feature 
that applies to any <var>RadioButton</var> anywhere in the Form, and the 
<var>RadioButtons</var> can be rearranged in any order or placed anywhere 
within the containing <var>Form</var>, while in <var>TRadioGroup</var> the 
exclusivity applies only to buttons within the Group, which are ordered 
strictly according to their <var>ItemIndex</var> within the <var>Items</var> 
stringlist.
</p>
<p>
<var>TRadioButton</var> is an entity in itself, with a number of additional 
properties, whereas the buttons within <var>TRadioGroup</var> 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 <var>RadioButton</var>.
</p>
<p>
The example shows the difference between the use of <var>TRadioButton</var> 
and <var>TRadioGroup</var>.
</p>
</descr>
<seealso>
<link id="HowToUseStdCtrls"/>
<link id="#lcl.extctrls.TRadioGroup">TRadioGroup</link>
</seealso>
<example file="extctrls/radiobutton.pas"/>
</element>

<element name="TRadioButton.WSRegisterClass" link="#lcl.lclclasses.TLCLComponent.WSRegisterClass"/>

<element name="TRadioButton.ApplyChanges">
<short>Updates the state for sibling radio buttons in the parent.</short>
<descr>
<p>
<var>ApplyChanges</var> is an overridden method in <var>TRadioButton</var>. 
ApplyChanges ensures that other radio buttons in the <var>Parent</var> 
control are unchecked when the current class instance is <var>Checked</var>.
</p>
<p>
The siblings controls are normally unchecked by methods in the widgetset 
class. ApplyChanges performs the actions needed when a handle has not been 
allocated for the control (widgetset class). This involves iterating over the 
controls in Parent, and setting the Checked state for sibling TRadioButton 
instances to <b>False</b>.
</p>
<p>
ApplyChanges is called when the value in the <var>State</var> property is 
changed.
</p>
</descr>
<seealso>
<link id="TRadioButton.Checked"/>
<link id="TCustomCheckBox.State"/>
<link id="TCustomCheckBox.ApplyChanges"/>
<link id="#lcl.controls.TControl.Parent">TControl.Parent</link>
</seealso>
</element>

<element name="TRadioButton.DialogChar">
<short>
Implements support for an accelerator key in the control.
</short>
<descr>
<p>
<var>DialogChar</var> is an overridden <var>Boolean</var> function in 
<var>TRadioButton</var> which handles accelerator keys in messages for the 
control. The return value is set to <b>True</b> when the radio button is 
successfully toggled in the method.
</p>
<p>
<var>Message</var> is the TLMKey instance with the key code examined in the 
method. If the key code matches the accelerator key in <var>Caption</var>, 
the control is focused, its Checked state is enabled, and the return value is 
set to <b>True</b>. 
</p>
<p>
If the control cannot be focused, or Message does not represent the accelerator 
for the control, the inherited method is called to get the return value.
</p>
<p>
This method is called even if the control is disabled or hidden. Provided for 
Delphi VCL compatibility.
</p>
</descr>
<seealso>
<link id="TRadioButton.Caption"/>
<link id="TRadioButton.Checked"/>
<link id="TCustomCheckBox.DialogChar"/>
<link id="#lcl.forms.IsAccel">IsAccel</link>
<link id="#lcl.controls.TWinControl.Focused">TWinControl.Focused</link>
</seealso>
</element>
<element name="TRadioButton.DialogChar.Result">
<short>
<b>True</b> when the message is handled and the control is focused and checked.
</short>
</element>
<element name="TRadioButton.DialogChar.Message">
<short>Message examined for the accelerator key.</short>
</element>

<element name="TRadioButton.RealSetText">
<short>Sets the value for the text and/or caption in the control.</short>
<descr>
<p>
<var>RealSetText</var> is an overridden method used to set value for the 
control using the <var>TCaption</var> instance in <var>Value</var>. In 
TRadioButton, the method ensures that the value in the caption is updated and 
that the control size is invalidated and adjusted using auto-sizing.
</p>
</descr>
<seealso>
<link id="TCustomCheckBox.RealSetText"/>
</seealso>
</element>
<element name="TRadioButton.RealSetText.Value">
<short>New value for the control.</short>
</element>

<element name="TRadioButton.DoClickOnChange">
<short>
Performs actions needed when the control has been changed using a mouse click.
</short>
<descr>
<p>
<var>DoClickOnChange</var> is an overridden method used to signal an 
<var>OnChange</var> event handler when the mouse is clicked on the control. 
DoClickOnChange ensures the value in <var>TabStop</var> is updated to reflect 
the <var>State</var> for the control. When State contains 
<var>cbChecked</var>, TabStop is set to <b>True</b>. Otherwise, it is set to 
<b>False</b>.
</p>
<p>
DoClickOnChange also ensures that the correct click/change behavior is used 
for the current control State. If the control is Checked, the inherited 
DoClickOnChange method is called. This also emulates the Delphi click 
behavior where the <var>OnChange</var> event handler is signalled when 
<var>ClicksDisabled</var> is <b>True</b>. When the control is not Checked, 
the <var>DoOnChange</var> method is called to signal both the 
<var>OnEditingDone</var> and <var>OnChange</var> event handlers.
</p>
<p>
DoClickOnChange is called from the <var>DoChange</var> method in the 
<var>TCustomCheckBox</var> ancestor class.
</p>
</descr>
<seealso>
<link id="TCustomCheckBox.DoClickOnChange"/>
<link id="TButtonControl.DoOnChange"/>
</seealso>
</element>

<element name="TRadioButton.CreateParams">
<short>Initializes the creation parameters for the class instance.</short>
<descr>
<p>
<var>CreateParams</var> is an overridden method used to update creation 
parameters for the class instance, and calls the inherited method on entry. 
CreateParams ensures that <var>Style</var> flags in the <var>Params</var> 
argument are updated to include the <var>BS_RADIOBUTTON</var> style flag, and 
to exclude the <var>BS_3STATE</var> style flag.
</p>
</descr>
<seealso>
<link id="TCustomCheckBox.CreateParams"/>
</seealso>
</element>
<element name="TRadioButton.CreateParams.Params">
<short>Creation parameters updated in the method.</short>
</element>

<element name="TRadioButton.Create">
<short>Constructor for the class instance.</short>
<descr>
<p>
<var>Create</var> is the overridden constructor for the class instance, and 
calls the inherited constructor on entry. Create ensures that the 
<var>csRadioButton</var> style flag is included in the component style flags 
for the control. The default value for the <var>AutoSize</var> property is 
set to <b>True</b>.
</p>
</descr>
<seealso/>
</element>
<element name="TRadioButton.Create.TheOwner">
<short>Owner of the class instance.</short>
</element>

<element name="TRadioButton.Align" link="#lcl.controls.TControl.Align"/>
<element name="TRadioButton.Alignment" link="#lcl.stdctrls.TCustomCheckBox.Alignment"/>
<element name="TRadioButton.Anchors" link="#lcl.controls.TControl.Anchors"/>

<element name="TRadioButton.AutoSize">
<short>Enables or disables auto-sizing the control to its content.</short>
<descr>
<p>
The default value for the property is <b>True</b> in <var>TRadioButton</var>.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.AutoSize">TControl.AutoSize</link>
</seealso>
</element>

<element name="TRadioButton.BidiMode" link="#lcl.controls.TControl.BiDiMode"/>
<element name="TRadioButton.BorderSpacing" link="#lcl.controls.TControl.BorderSpacing"/>
<element name="TRadioButton.Caption" link="#lcl.controls.TControl.Caption"/>
<element name="TRadioButton.Checked" link="#lcl.stdctrls.TButtonControl.Checked"/>
<element name="TRadioButton.Color" link="#lcl.controls.TControl.Color"/>
<element name="TRadioButton.Constraints" link="#lcl.controls.TControl.Constraints"/>
<element name="TRadioButton.DoubleBuffered" link="#lcl.controls.TWinControl.DoubleBuffered"/>
<element name="TRadioButton.DragCursor" link="#lcl.controls.TControl.DragCursor"/>
<element name="TRadioButton.DragKind" link="#lcl.controls.TControl.DragKind"/>
<element name="TRadioButton.DragMode" link="#lcl.controls.TControl.DragMode"/>
<element name="TRadioButton.Enabled" link="#lcl.controls.TControl.Enabled"/>
<element name="TRadioButton.Font" link="#lcl.controls.TControl.Font"/>
<element name="TRadioButton.Hint" link="#lcl.controls.TControl.Hint"/>

<element name="TRadioButton.ParentBidiMode" link="#lcl.controls.TControl.ParentBiDiMode"/>
<element name="TRadioButton.ParentColor" link="#lcl.controls.TControl.ParentColor"/>
<element name="TRadioButton.ParentDoubleBuffered" link="#lcl.controls.TWinControl.ParentDoubleBuffered"/>
<element name="TRadioButton.ParentFont" link="#lcl.controls.TControl.ParentFont"/>
<element name="TRadioButton.ParentShowHint" link="#lcl.controls.TControl.ParentShowHint"/>
<element name="TRadioButton.PopupMenu" link="#lcl.controls.TControl.PopupMenu"/>
<element name="TRadioButton.ShowHint" link="#lcl.controls.TControl.ShowHint"/>
<element name="TRadioButton.TabOrder" link="#lcl.controls.TWinControl.TabOrder"/>

<element name="TRadioButton.TabStop">
<short>Enables keyboard navigation using the Tab or Shift+Tab keys.</short>
<descr>
<p>
Allows the user to navigate to or from this control by pressing the Tab or 
Shift+Tab keys. The default value for the property is <b>True</b> in 
TRadioButton.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.TabStop">TWinControl.TabStop</link>
</seealso>
</element>

<element name="TRadioButton.Visible" link="#lcl.controls.TControl.Visible"/>
<element name="TRadioButton.OnChange" link="#lcl.stdctrls.TButtonControl.OnChange"/>
<element name="TRadioButton.OnChangeBounds" link="#lcl.controls.TControl.OnChangeBounds"/>
<element name="TRadioButton.OnClick" link="#lcl.controls.TControl.OnClick"/>
<element name="TRadioButton.OnContextPopup" link="#lcl.controls.TControl.OnContextPopup"/>
<element name="TRadioButton.OnDragDrop" link="#lcl.controls.TControl.OnDragDrop"/>
<element name="TRadioButton.OnDragOver" link="#lcl.controls.TControl.OnDragOver"/>
<element name="TRadioButton.OnEndDrag" link="#lcl.controls.TControl.OnEndDrag"/>
<element name="TRadioButton.OnEnter" link="#lcl.controls.TWinControl.OnEnter"/>
<element name="TRadioButton.OnExit" link="#lcl.controls.TWinControl.OnExit"/>
<element name="TRadioButton.OnKeyDown" link="#lcl.controls.TWinControl.OnKeyDown"/>
<element name="TRadioButton.OnKeyPress" link="#lcl.controls.TWinControl.OnKeyPress"/>
<element name="TRadioButton.OnKeyUp" link="#lcl.controls.TWinControl.OnKeyUp"/>
<element name="TRadioButton.OnMouseDown" link="#lcl.controls.TControl.OnMouseDown"/>
<element name="TRadioButton.OnMouseEnter" link="#lcl.controls.TControl.OnMouseEnter"/>
<element name="TRadioButton.OnMouseLeave" link="#lcl.controls.TControl.OnMouseLeave"/>
<element name="TRadioButton.OnMouseMove" link="#lcl.controls.TControl.OnMouseMove"/>
<element name="TRadioButton.OnMouseUp" link="#lcl.controls.TControl.OnMouseUp"/>
<element name="TRadioButton.OnMouseWheel" link="#lcl.controls.TControl.OnMouseWheel"/>
<element name="TRadioButton.OnMouseWheelDown" link="#lcl.controls.TControl.OnMouseWheelDown"/>
<element name="TRadioButton.OnMouseWheelUp" link="#lcl.controls.TControl.OnMouseWheelUp"/>
<element name="TRadioButton.OnResize" link="#lcl.controls.TControl.OnResize"/>
<element name="TRadioButton.OnStartDrag" link="#lcl.controls.TControl.OnStartDrag"/>

<element name="TCustomLabel">
<short>
Control used to show static text optionally using multiple lines.
</short>
<descr>
<p>
<var>TCustomLabel</var> is a <var>TWinControl</var> descendant which 
specifies a control to display static text on a form. The value in the 
control is not editable visually, and can be used to label or describe 
another control or a container on the form. Since it cannot be edited, it is 
not allowed to receive the input focus. It can, however, be used to set focus 
to an associated control using an accelerator key defined in the Caption for 
the control.
</p>
<p>
TCustomLabel is the ancestor class for <var>TLabel</var>. Do not create 
instances of TCustomLabel; use the TLabel descendant.
</p>
<p>
Use TStaticText to display static text and respond to keyboard input directly 
in the control.
</p>
</descr>
<seealso>
<link id="HowToUseStdCtrls"/>
<link id="TLabel"/>
<link id="TStaticText"/>
<link id="#lcl.controls.TWinControl">TWinControl</link>
</seealso>
</element>

<element name="TCustomLabel.FAlignment" link="#lcl.stdctrls.TCustomLabel.Alignment"/>
<element name="TCustomLabel.FFocusControl" link="#lcl.stdctrls.TCustomLabel.FocusControl"/>
<element name="TCustomLabel.FOptimalFill" link="#lcl.stdctrls.TCustomLabel.OptimalFill"/>
<element name="TCustomLabel.FShowAccelChar" link="#lcl.stdctrls.TCustomLabel.ShowAccelChar"/>
<element name="TCustomLabel.FWordWrap" link="#lcl.stdctrls.TCustomLabel.WordWrap"/>
<element name="TCustomLabel.FLayout" link="#lcl.stdctrls.TCustomLabel.Layout"/>
<element name="TCustomLabel.FInternalSetBounds"/>

<element name="TCustomLabel.SetAlignment">
<short>Sets the value for the Alignment property.</short>
<descr/>
<seealso>
<link id="TCustomLabel.Alignment"/>
</seealso>
</element>
<element name="TCustomLabel.SetAlignment.Value">
<short>New value for the Alignment property.</short>
</element>

<element name="TCustomLabel.SetOptimalFill">
<short>Sets the value for the OptimalFill property.</short>
<descr/>
<seealso>
<link id="TCustomLabel.OptimalFill"/>
</seealso>
</element>
<element name="TCustomLabel.SetOptimalFill.AValue">
<short>New value for the OptimalFill property.</short>
</element>

<element name="TCustomLabel.WSRegisterClass" link="#lcl.lclclasses.TLCLComponent.WSRegisterClass"/>

<element name="TCustomLabel.CanTab">
<short>Always <b>False</b>, since you cannot tab into a label control.</short>
<descr>
<p>
<var>CanTab</var> is an overridden method in <var>TCustomLabel</var>. The 
return value is always <b>False</b> since the <b>Tab</b> key cannot be used 
to give focus to the control.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.CanTab">TControl.CanTab</link>
</seealso>
</element>
<element name="TCustomLabel.CanTab.Result">
<short>Always <b>False</b> in TCustomLabel.</short>
</element>

<element name="TCustomLabel.DoDrawText">
<short>Performs actions needed to draw the text for the label.</short>
<descr>
<p>
<var>DoDrawText</var> performs action needed to draw the text for the label.
</p>
<p>
The <var>GetLabelText</var> method is called to get the text value drawn in 
the method.
</p>
<p>
The <var>Font</var> color may be temporarily changed when when the 
<var>Enabled</var> property is <b>False</b>. If themes are enabled, the Font 
color is set to <var>clGrayText</var>. When themes are not enabled, the Font 
color is set to <var>clBtnHighlight</var>. The original Font color is 
restored prior to exiting the method.
</p>
<p>
DoDrawText calls the <var>DrawText</var> routine to draw the text on the 
<var>Canvas</var> using the text rectangle and flags passed as arguments. 
DrawText is called a second time to render the shadow for the label text when 
themes are not enabled. The shadow text uses the color <var>clBtnShadow</var>.
</p>
<p>
DoDrawText is called from the <var>Paint</var> method.
</p>
</descr>
<seealso/>
</element>
<element name="TCustomLabel.DoDrawText.Rect">
<short>Text rectangle used to draw the label text.</short>
</element>
<element name="TCustomLabel.DoDrawText.Flags">
<short>DrawText flags used to render the text.</short>
</element>

<element name="TCustomLabel.HasMultiLine">
<short>
Checks for CR or LF characters in the label text for the control.
</short>
<descr>
<p>
<var>HasMultiLine</var> is a <var>Boolean</var> function used to determine if 
<b>CR</b> (Carriage Return, Decimal 13) or <b>LF</b> (LineFeed, Decimal 10) 
characters are included in the text for the control. HasMultiLine calls 
GetLabelText to get the text stored in the label.
</p>
<p>
The return value is <b>True</b> when either character occurs in the text for 
the label.
</p>
<p>
HasMultiLine is used in the <var>CalculateSize</var> method to determine 
whether the <var>DT_SINGLELINE</var> flag is included in the drawing flags 
for the control.
</p>
</descr>
<seealso>
<link id="TCustomLabel.CalculateSize"/>
<link id="TCustomLabel.GetLabelText"/>
<link id="#lcl.lcltype.DT_SINGLELINE">DT_SINGLELINE</link>
</seealso>
</element>
<element name="TCustomLabel.HasMultiLine.Result">
<short>
<b>True</b> when CR or LF characters are used in the text for the label.
</short>
</element>

<element name="TCustomLabel.CalculatePreferredSize">
<short>
Calculates the preferred size for the control using its anchoring and 
constraints.
</short>
<descr>
<p>
<var>CalculatePreferredSize</var> is an overridden method used to calculated 
the preferred size for the control. Values stored in the <var>Anchors</var>, 
<var>Constraints</var>, and <var>WordWrap</var> properties are used to 
determine the effective width for the control. CalculateSize is called to 
calculate the text rectangle for the control using the requested dimensions.
</p>
<p>
CalculatePreferredSize checks the assigned <var>Font</var> for the control to 
determine whether text rotation is used in its <var>Orientation</var> 
property. When a value other than <b>0</b> (<b>zero</b>) is used, the text 
rectangle is rotated by the number of radians needed for the property value. 
The values in <var>PreferredWidth</var> and <var>PreferredHeight</var> are 
updated for the new text rectangle.
</p>
<p>
No actions are performed in the method if <var>Parent</var> has not been 
assigned (contains <b>Nil</b>), or when a handle has not been allocated in 
the Parent control.
</p>
<p>
Please note that CalculatePreferredSize does <b>not</b> call the inherited 
method.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.CalculatePreferredSize">TControl.CalculatePreferredSize</link>
</seealso>
</element>
<element name="TCustomLabel.CalculatePreferredSize.PreferredWidth">
<short>Preferred width calculated for the control.</short>
</element>
<element name="TCustomLabel.CalculatePreferredSize.PreferredHeight">
<short>Preferred height calculated for the control.</short>
</element>
<element name="TCustomLabel.CalculatePreferredSize.WithThemeSpace">
<short><b>True</b> to reserve space for theme element details.</short>
</element>

<element name="TCustomLabel.CalculateSize">
<short>Gets the height and width needed for the label text.</short>
<descr>
<p>
Calculates the size for the label text using the formatting defined in 
related property values.
</p>
<p>
<var>NeededWidth</var> and <var>NeededHeight</var> are variable parameters 
updated in the method to reflect the values needed after applying DrawText 
flags to the label text. The DrawText flags include constants which represent 
the following properties:
</p>
<ul>
<li>WordWrap</li>
<li>HasMultiLine</li>
<li>ShowAccelChar</li>
<li>UseRightToLeftReading</li>
</ul>
<p>
The following constants are also used in the DrawText flags:
</p>
<ul>
<li>DT_CALCRECT</li>
<li>DT_EXPANDTABS</li>
<li>DT_NOCLIP</li>
</ul>
</descr>
<seealso/>
</element>
<element name="TCustomLabel.CalculateSize.MaxWidth">
<short>Maximum width for the text rectangle in the label.</short>
</element>
<element name="TCustomLabel.CalculateSize.NeededWidth">
<short>Width needed for the text.</short>
</element>
<element name="TCustomLabel.CalculateSize.NeededHeight">
<short>Height needed for the text.</short>
</element>

<element name="TCustomLabel.DoAutoSize" link="#lcl.controls.TControl.DoAutoSize"/>

<element name="TCustomLabel.DialogChar" link="#lcl.controls.TControl.DialogChar">
<short>Handles an accelerator key for the control.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomLabel.DialogChar.Result">
<short><b>True</b> when the message is handled as an accelerator key.</short>
</element>
<element name="TCustomLabel.DialogChar.Message">
<short>Message examined in the method.</short>
</element>

<element name="TCustomLabel.TextChanged">
<short>
Performs actions when the CM_TEXTCHANGED message is handled for the control.
</short>
<descr>
<p>
<var>TextChanged</var> is an overridden method used to perform actions needed 
when the <var>CM_TEXTCHANGED</var> message is handled for the control. 
TextChanged calls <var>Invalidate</var> to request the control to be redrawn. 
<var>UpdateSize</var> is called to perform auto-sizing, and recalculate the 
dimensions for the control. The font may be re-sized when OptimalFill is 
enabled.
</p>
<p>
TextChanged does <b>not</b> call the inherited method.
</p>
</descr>
<seealso>
<link id="TCustomLabel.UpdateSize"/>
<link id="TCustomLabel.OptimalFill"/>
<link id="#lcl.controls.TControl.Invalidate">TControl.Invalidate</link>
<link id="#lcl.controls.TControl.TextChanged">TControl.TextChanged</link>
</seealso>
</element>

<element name="TCustomLabel.DoSetBounds">
<short>Performs a bounds change for the control.</short>
<descr>
<p>
<var>DoSetBounds</var> is an overridden method in <var>TCustomLabel</var>. It 
calls the inherited method to store the values in ALeft, ATop, AWidth, and 
AHeight to the corresponding properties in the control. Values in 
<var>OptimalFill</var>, <var>WordWrap</var>, and <var>Autosize</var> are used 
to determine if additional actions are needed for the bounds change.
</p>
<p>
When <var>OptimalFill</var> is <b>True</b> and <var>AutoSize</var> is 
<b>False</b>, the <var>AdjustFontForOptimalFill</var> method is called. If 
<var>Width</var> was changed and <var>WordWrap</var> is <b>True</b>, both the 
<var>InvalidatePreferredSize</var> and <var>AdjustSize</var> methods are 
called.
</p>
<p>
DoSetBounds is called from the <var>ChangeBounds</var> method in an ancestor 
class.
</p>
</descr>
<seealso>
<link id="TCustomLabel.OptimalFill"/>
<link id="TCustomLabel.AutoSize"/>
<link id="TCustomLabel.WordWrap"/>
<link id="TCustomLabel.AdjustFontForOptimalFill"/>
<link id="#lcl.controls.TControl.DoSetBounds">TControl.DoSetBounds</link>
</seealso>
</element>
<element name="TCustomLabel.DoSetBounds.ALeft">
<short>New value for the Left property.</short>
</element>
<element name="TCustomLabel.DoSetBounds.ATop">
<short>New value for the Top property.</short>
</element>
<element name="TCustomLabel.DoSetBounds.AWidth">
<short>New value for the Width property.</short>
</element>
<element name="TCustomLabel.DoSetBounds.AHeight">
<short>New value for the Height property.</short>
</element>

<element name="TCustomLabel.FontChanged">
<short>
Implements the OnChange event handler for the Font in the control.
</short>
<descr>
<p>
<var>FontChanged</var> is an overridden method in <var>TCustomLabel</var> 
which implements the <var>OnChange</var> event handler for the 
<var>Font</var> in the control. FontChanged calls the inherited method on 
entry, and calls <var>UpdateSize</var> to resize the control for any changes 
to font properties.
</p>
</descr>
<seealso>
<link id="TCustomLabel.UpdateSize"/>
<link id="#lcl.controls.TControl.FontChanged">TControl.FontChanged</link>
<link id="#lcl.graphics.TFont">TFont</link>
</seealso>
</element>
<element name="TCustomLabel.FontChanged.Sender">
<short>Object for the event notification.</short>
</element>

<element name="TCustomLabel.GetControlClassDefaultSize">
<short>Gets the size used for new instances of the class.</short>
<descr>
<p>
<var>GetControlClassDefaultSize</var> is an overridden <var>TSize</var> class 
function used to get the height and width for new instances of the control. 
GetControlClassDefaultSize uses 65 pixels for the width, and 17 pixels for 
the height.
</p>
<p>
The return value is the TSize instance where the values are stored; the 
<var>CX</var> member is used for the width and the <var>CY</var> member is 
used for the height.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.GetControlClassDefaultSize">TControl.GetControlClassDefaultSize</link>
</seealso>
</element>
<element name="TCustomLabel.GetControlClassDefaultSize.Result">
<short>Size used for new instances of the class.</short>
</element>

<element name="TCustomLabel.WMActivate">
<short>Defers the focus to the control in the FocusControl property.</short>
<descr>
<p>
<var>WMActivate</var> is a procedure used to handle <b>LM_ACTIVATE</b> 
messages for the control.
</p>
<p>
WMActivate ensures that the control in the <var>FocusControl</var> property 
receives the input focus by calling its <var>SetFocus</var> method. No 
actions are performed in the method when FocusControl has not been assigned 
(contains <b>Nil</b>) or its <var>CanFocus</var> method returns <b>False</b>.
</p>
</descr>
<seealso>
<link id="TCustomLabel.FocusControl"/>
<link id="#lcl.controls.TWinControl.CanFocus">TWinControl.CanFocus</link>
<link id="#lcl.controls.TWinControl.SetFocus">TWinControl.SetFocus</link>
</seealso>
</element>
<element name="TCustomLabel.WMActivate.Message">
<short>Message examined in the method.</short>
</element>

<element name="TCustomLabel.Notification">
<short>
Handles a notification that a component used in the control has been added or 
removed.
</short>
<descr>
<p>
<var>Notification</var> is an overridden method in <var>TCustomLabel</var>, 
and calls the inherited method on entry. Notification ensures that 
<var>FocusControl</var> is set to <b>Nil</b> when it is the component for the 
<var>opRemove</var> <var>Operation</var>.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TControl.Notification">TControl.Notification</link>
</seealso>
</element>
<element name="TCustomLabel.Notification.AComponent">
<short>Component for the notification.</short>
</element>
<element name="TCustomLabel.Notification.Operation">
<short>Operation for the notification.</short>
</element>

<element name="TCustomLabel.GetLabelText">
<short>Returns the string value in the Caption for the control.</short>
<descr/>
<seealso>
<link id="#lcl.controls.TControl.Caption">TControl.Caption</link>
</seealso>
</element>
<element name="TCustomLabel.GetLabelText.Result">
<short>Text displayed in the control.</short>
</element>

<element name="TCustomLabel.GetTransparent">
<short>Gets the value for the Transparent property.</short>
<descr/>
<seealso>
<link id="TCustomLabel.Transparent"/>
</seealso>
</element>
<element name="TCustomLabel.GetTransparent.Result">
<short>Value for the Transparent property.</short>
</element>

<element name="TCustomLabel.SetFocusControl">
<short>Sets the value for the FocusControl property.</short>
<descr/>
<seealso>
<link id="TCustomLabel.FocusControl"/>
</seealso>
</element>
<element name="TCustomLabel.SetFocusControl.Value">
<short>New value for the FocusControl property.</short>
</element>

<element name="TCustomLabel.SetLayout">
<short>Sets the value for the Layout property.</short>
<descr/>
<seealso>
<link id="TCustomLabel.Layout"/>
</seealso>
</element>
<element name="TCustomLabel.SetLayout.Value">
<short>New value for the Layout property.</short>
</element>

<element name="TCustomLabel.SetShowAccelChar">
<short>Sets the value for the ShowAccelChar property.</short>
<descr/>
<seealso>
<link id="TCustomLabel.ShowAccelChar"/>
</seealso>
</element>
<element name="TCustomLabel.SetShowAccelChar.Value">
<short>New value for the ShowAccelChar property.</short>
</element>

<element name="TCustomLabel.SetTransparent">
<short>Sets the value for the Transparent property.</short>
<descr/>
<seealso>
<link id="TCustomLabel.Transparent"/>
</seealso>
</element>
<element name="TCustomLabel.SetTransparent.NewTransparent">
<short>New value for the Transparent property.</short>
</element>

<element name="TCustomLabel.SetWordWrap">
<short>Sets the value for the WordWrap property.</short>
<descr/>
<seealso>
<link id="TCustomLabel.WordWrap"/>
</seealso>
</element>
<element name="TCustomLabel.SetWordWrap.Value">
<short>New value for the WordWrap property.</short>
</element>

<element name="TCustomLabel.Loaded">
<short>
Performs actions when the component has been loaded using LCL component 
streaming.
</short>
<descr>
<p>
<var>Loaded</var> is overridden in <var>TCustomLabel</var>, and calls the 
inherited method on Entry. Loaded calls the <var>AdjustSize</var> method to 
handle delayed calls to <var>AutoSize</var> during component streaming.
</p>
</descr>
<seealso>
<link id="TCustomLabel.AutoSize"/>
<link id="#lcl.controls.TControl.Loaded">TControl.Loaded</link>
<link id="#lcl.controls.TControl.AdjustSize">TControl.AdjustSize</link>
<link id="#lcl.controls.TControl.AutoSizeDelayed">TControl.AutoSizeDelayed</link>
</seealso>
</element>

<element name="TCustomLabel.UpdateSize">
<short>
Adjusts the size for the control based on settings in AutoSize and 
OptimalFill.
</short>
<descr>
<p>
<var>UpdateSize</var> is a method used to adjust the size for the control 
based on settings in the <var>AutoSize</var> and <var>OptimalFill</var> 
properties. UpdateSize calls <var>InvalidatePreferredSize</var>.
</p>
<p>
When <var>OptimalFill</var> is <b>True</b> and <var>AutoSize</var> is 
<b>False</b>, the <var>AdjustFontForOptimalFill</var> method is called to 
adjust the font size used in the control. <var>AdjustSize</var> is called to 
resize the control (and any parent controls). When <var>Alignment</var> is 
set to <var>taRightJustify</var>, the value in <var>Left</var> may be changed 
to reflect the new <var>Width</var> for the control.
</p>
<p>
UpdateSize is called from the implementation of the <var>FontChanged</var> 
and <var>TextChanged</var> methods, and when setting a new value for the 
<var>ShowAccelChar</var> or <var>WordWrap</var> properties.
</p>
</descr>
<seealso/>
</element>

<element name="TCustomLabel.Alignment">
<short>
Horizontal text justification in the control (centered, left- or 
right-justified).
</short>
<descr>
<p>
<var>Alignment</var> is a <var>TAlignment</var> property which controls the 
horizontal justification of the text displayed in the control. The default 
value for the property is <var>taLeftJustify</var>. When a new value is 
assigned to the Alignment property, the <var>Invalidate</var> method is 
called to repaint the control.
</p>
<p>
Alignment (and other properties) are used in the <var>Paint</var> method when 
the text is rendered to the <var>Canvas</var> for the control. It is also 
used in <var>UpdateSize</var> when right alignment needs to be considered for 
an auto-sized or optimal-filled control.
</p>
<p>
Use the <var>Layout</var> property to control the vertical alignment of the 
text displayed in the control.
</p>
<p>
Use <var>OptimalFill</var> to indicate if the font height can be adjusted to 
fill the client area for the control.
</p>
</descr>
<seealso>
<link id="TCustomLabel.AutoSize"/>
<link id="TCustomLabel.Layout"/>
<link id="TCustomLabel.OptimalFill"/>
<link id="TCustomLabel.Paint"/>
<link id="TCustomLabel.UpdateSize"/>
<link id="#lcl.controls.TControl.Invalidate">TControl.Invalidate</link>
<link id="#rtl.classes.TAlignment">TAlignment</link>
</seealso>
</element>

<element name="TCustomLabel.FocusControl">
<short>
The control associated with the label and its accelerator key (AccelChar).
</short>
<descr>
<p>
Set <var>FocusControl</var> to the control which is focused when the 
accelerator key in the label is pressed.
</p>
<p>
A label control cannot receive the input focus (it is read-only), but can 
display an accelerator key indicator, just like a menu entries. A windowed 
control (Edit...) can receive focus, but cannot indicate an accelerator key.
</p>
<p>
Using a combination of a label and another control allows setting the 
accelerator key in the label caption. The other control receives focus when 
the user presses the accelerator key.
</p>
<p>
An accelerator key is marked by an Ampersand '&amp;' in the label caption, 
immediately preceding the character to be used as the accelerator key. The 
marked character appears underlined on screen, when ShowAccelChar is set to 
<b>True</b>.
</p>
<p>
For example: When you have a NameEdit1 control on a form, preceded by a label 
NameLabel1, you can set NameLabel1.FocusControl to NameEdit1, and 
NameLabel1.Caption to '&amp;Name'.
</p>
</descr>
<seealso>
<link id="TCustomLabel.ShowAccelChar"/>
</seealso>
</element>

<element name="TCustomLabel.Layout">
<short>
Vertical alignment for control text (at the top, bottom, or center).
</short>
<descr>
<p>
<var>Layout</var> is a <var>TTextLayout</var> property with the vertical 
alignment used for the text displayed in the control. The default value for 
the property is <var>tlTop</var>. Changing the value in Layout causes the 
<var>Invalidate</var> method to be called to redraw the control.
</p>
<p>
Use the <var>Alignment</var> property to control the horizontal alignment for 
the text in the control.
</p>
<p>
Use <var>OptimalFill</var> to indicate if the font height can be adjusted to 
fill the client area for the control.
</p>
</descr>
<seealso>
<link id="TCustomLabel.Alignment"/>
<link id="TCustomLabel.OptimalFill"/>
<link id="#lcl.graphics.TTextLayout">TTextLayout</link>
<link id="#lcl.controls.TControl.Invalidate">TControl.Invalidate</link>
</seealso>
</element>

<element name="TCustomLabel.ShowAccelChar">
<short>
Underlines the character in the label that acts as the accelerator or short 
cut key.
</short>
<descr>
<p>
When <b>False</b>, an <b>Ampersand (&amp;)</b> character in the label caption 
is displayed as an ordinary character (as used in the Object Inspector).
</p>
<p>
When <b>True</b>, the character following the <b>Ampersand</b> is drawn with 
an underline. When the user presses the accelerator key, input focus is given 
to the associated <var>FocusControl</var>.
</p>
</descr>
<seealso>
<link id="TCustomLabel.FocusControl"/>
<link id="#lcl.controls.TControl.Caption">TControl.Caption</link>
</seealso>
</element>

<element name="TCustomLabel.Transparent">
<short>Indicates whether the viewer can see through the control.</short>
<descr>
<p>
When Transparent is set to <b>False</b>, the enclosing rectangle for the 
control is filled with the background Color for the label. When set to 
<b>True</b>, Color is not used to fill the background for the control and the 
underlying control is visible.
</p>
<p>
The property value is <b>True</b> when csOpaque has not been included in the 
style flags for the control. Changing the value for the property causes 
<var>ControlStyle</var> to be updated. When set to <b>True</b>, csOpaque is 
removed from ControlStyle. When set to <b>False</b>, csOpaque is included in 
ControlStyle. The control is redrawn when a new value is assigned to the 
property.
</p>
<p>
The default value for Transparent in the LCL is <b>True</b>. This differs 
from the default value in the Delphi VCL.
</p>
<p>
Values in Transparent and Color are used in the Paint method when the 
background and text for the control are drawn. When Transparent is 
<b>False</b> and Color has a value other than clNone, a solid brush is used 
to fill the display area with the value in Color.
</p>
</descr>
<version>
Modified in LCL version 3.0. Transparent is no longer toggled when Color is 
changed. Its value is independent of Color.
</version>
<seealso>
<link id="TCustomLabel.Color"/>
<link id="TCustomLabel.Paint"/>
<link id="#lcl.controls.TControl.ControlStyle">TControl.ControlStyle</link>
</seealso>
</element>

<element name="TCustomLabel.WordWrap">
<short>
Allows the caption to wrap to multiple lines when it is longer than the 
available Width.
</short>
<descr>
<p>
<var>WordWrap</var> is a <var>Boolean</var> property which indicates if the 
caption in the control can be wrapped to multiple lines when its length 
exceeds the value in <var>Width</var>. The default value for the property is 
<b>False</b>.
</p>
<p>
When a new value is assigned to the property, the <var>Invalidate</var> and 
<var>UpdateSize</var> methods are called to auto-size and repaint the control.
</p>
<p>
When WordWrap is <b>False</b>, the text is truncated at the right boundary 
when it is too long for the control Width. When WordWrap is <b>True</b> and 
<var>AutoSize</var> is <b>True</b>, the maximum <var>Width</var> is 
determined by anchoring the left and right sides for the control to its 
Parent.
</p>
</descr>
<seealso>
<link id="TCustomLabel.AutoSize"/>
<link id="TCustomLabel.UpdateSize"/>
<link id="#lcl.controls.TControl.Width">TControl.Width</link>
<link id="#lcl.controls.TControl.Invalidate">TControl.Invalidate</link>
</seealso>
</element>

<element name="TCustomLabel.OptimalFill">
<short>
If <b>True</b>, the font size is adjusted for optimal fill of the available 
space.
</short>
<descr>
<p>
<var>OptimalFill</var> is a <var>Boolean</var> property which indicates that 
the <var>Font</var> height should be maximized to fill the available width in 
the control. The default value for the property is <b>False</b>.
</p>
<p>
Setting OptimalFill to <b>True</b> causes <var>AutoSize</var> to be set to 
<b>False</b>. The <var>AdjustFontForOptimalFill</var> method is called to get 
and apply the maximum font height allowed for the <var>Width</var> and 
<var>Height</var> in the control.
</p>
<p>
Changing the value for the property causes <var>Invalidate</var> to be called 
to redraw the control.
</p>
</descr>
<seealso>
<link id="TCustomLabel.AutoSize"/>
<link id="TCustomLabel.AdjustFontForOptimalFill"/>
<link id="#lcl.controls.TControl.Width">TControl.Width</link>
<link id="#lcl.controls.TControl.Height">TControl.Height</link>
<link id="#lcl.controls.TControl.Font">TControl.Font</link>
<link id="#lcl.controls.TControl.Invalidate">TControl.Invalidate</link>
</seealso>
</element>

<element name="TCustomLabel.Create">
<short>Constructor for the class instance.</short>
<descr>
<p>
<var>Create</var> is the overridden constructor for the class instance, and 
calls the inherited constructor on entry to the method.
</p>
<p>
Create updates the values in <var>ControlStyle</var> to enable mouse capture 
and both click and double-click events. Create calls 
<var>SetInitialBounds</var> using the default dimensions for the class 
instance. Create sets the default values for properties, including: 
<var>ShowAccelChar</var>, <var>Color</var>, <var>AutoSize</var>, and 
<var>AccessibleRole</var>.
</p>
</descr>
<seealso/>
</element>
<element name="TCustomLabel.Create.TheOwner">
<short>Owner of the class instance.</short>
</element>

<element name="TCustomLabel.CalcFittingFontHeight">
<short>
Calculates the font height needed to fill the specified width and height 
constraints.
</short>
<descr>
<p>
<var>CalcFittingFontHeight</var> is a <var>Boolean</var> function used to 
calculate the maximum font height needed to make the specified string fill 
the available space, given the MaxWidth and MaxHeight constraints.
</p>
<p>
The return value is <b>True</b> when the text rectangle using the new font 
height fits within the size constraints in MaxWidth and MaxHeight. NeedWidth 
and NeedHeight are set to the values indicated in the text rectangle. The 
return value is <b>False</b> when the text rectangle is either too wide or 
too tall, or cannot be calculated using the specified parameter values.
</p>
<p>
No actions are performed in the method when AutoSizeDelayed is set to 
<b>True</b>, when TheText is an empty string, or when MaxHeight or MaxWidth 
contain 0 or a negative value.
</p>
<p>
The font height is calculated using a temporary TFont instance with the 
current Font for the control, setting its drawing flags to calculate the text 
rectangle. The drawing flags include wrapping when the WordWrap property is 
set to <b>True</b>. The font height is incrementally increased or decreased 
until the maximum font height which fits with MaxHeight and MaxWidth is 
determined.
</p>
<p>
CalcFittingFontHeight is used in the implementation of the 
<var>AdjustFontForOptimalFill</var> method.
</p>
</descr>
<seealso/>
</element>
<element name="TCustomLabel.CalcFittingFontHeight.Result">
<short>
<b>True</b> when the text fits within the size constraints in MaxWidth and 
MaxHeight.
</short>
</element>
<element name="TCustomLabel.CalcFittingFontHeight.TheText">
<short>Text measured in the method.</short>
</element>
<element name="TCustomLabel.CalcFittingFontHeight.MaxWidth">
<short>Width constraint for the text rectangle.</short>
</element>
<element name="TCustomLabel.CalcFittingFontHeight.MaxHeight">
<short>Height constraint for the text rectangle.</short>
</element>
<element name="TCustomLabel.CalcFittingFontHeight.FontHeight">
<short>Font height calculated in the method.</short>
</element>
<element name="TCustomLabel.CalcFittingFontHeight.NeededWidth">
<short>Width needed for the text using the calculated font size.</short>
</element>
<element name="TCustomLabel.CalcFittingFontHeight.NeededHeight">
<short>Height needed for the text using the calculated font size.</short>
</element>

<element name="TCustomLabel.AdjustFontForOptimalFill">
<short>
Adjusts the font height for the control text to fill the available client 
area.
</short>
<descr>
<p>
<var>AdjustFontForOptimalFill</var> is a <var>Boolean</var> function used to 
adjust the font height so that text in the label expands to fill the 
available client area for the control. AdjustFontForOptimalFill calls 
<var>CalcFittingFontHeight</var> to determine the font height needed to make 
the label text (caption) fill the Width for the control. The calculated font 
height is stored in the <var>Font</var> property.
</p>
<p>
The return value is <b>True</b> when the Font height was changed in the 
method.
</p>
<p>
AdjustFontForOptimalFill is called from <var>DoSetBounds</var> and 
<var>UpdateSize</var> when <var>OptimalFill</var> is set to <b>True</b> and 
<var>AutoSize</var> is set to <b>False</b>. It is also called when a new 
value is assigned to the <var>OptimalFill</var> property.
</p>
</descr>
<seealso>
<link id="TCustomLabel.CalcFittingFontHeight"/>
<link id="TCustomLabel.OptimalFill"/>
<link id="TCustomLabel.AutoSize"/>
<link id="TCustomLabel.UpdateSize"/>
<link id="TCustomLabel.DoSetBounds"/>
<link id="#lcl.controls.TControl.Font">TControl.Font</link>
</seealso>
</element>
<element name="TCustomLabel.AdjustFontForOptimalFill.Result">
<short><b>True</b> when the font height was changed in the method.</short>
</element>

<element name="TCustomLabel.Paint">
<short>Performs actions needed to draw the control on its Canvas.</short>
<descr>
<p>
<var>Paint</var> is an overridden method in <var>TCustomLabel</var> used to 
draw the control on its <var>Canvas</var>. Paint ensures that property values 
in the control are applied to the Canvas before measuring and drawing its 
Text, including:
</p>
<ul>
<li>AutoSize</li>
<li>Alignment</li>
<li>Layout</li>
<li>WordWrap</li>
<li>Transparent</li>
<li>Color</li>
<li>Font</li>
<li>ShowAccel</li>
<li>Enabled</li>
<li>Alignment</li>
<li>UseRightToLeftAlignment</li>
<li>UseRightToLeftReading</li>
</ul>
<p>
DoDrawText is called to render the label text using the DrawText flags needed 
for the property values.
</p>
<remark>
Paint does <b>not</b> call the inherited method in 
<var>TGraphicControl</var>. As a result, it does not signal the 
<var>OnPaint</var> event handler in the ancestor class.
</remark>
</descr>
<seealso>
<link id="TCustomLabel.GetLabelText"/>
<link id="#lcl.controls.TControl.Caption">TControl.Caption</link>
<link id="#lcl.controls.TGraphicControl.Canvas">TGraphicControl.Canvas</link>
<link id="#lcl.controls.TGraphicControl.Paint">TGraphicControl.Paint</link>
<link id="#lcl.controls.TGraphicControl.OnPaint">TGraphicControl.OnPaint</link>
</seealso>
</element>

<element name="TCustomLabel.SetBounds">
<short>Sets the bounds (Top, Left, Width, Height) for the control.</short>
<descr>
<p>
Overridden to call <var>InvalidatePreferredSize</var> the first time the 
method is used and both <var>AutoSize</var> and <var>WordWrap</var> are 
enabled in the control. Calls the inherited method prior to exit.
</p>
</descr>
<seealso>
<link id="TCustomLabel.AutoSize"/>
<link id="TCustomLabel.WordWrap"/>
<link id="#lcl.controls.TControl.InvalidatePreferredSize">TControl.InvalidatePreferredSize</link>
<link id="#lcl.controls.TControl.SetBounds">TControl.SetBounds</link>
</seealso>
</element>
<element name="TCustomLabel.SetBounds.aLeft">
<short>Horizontal coordinate for the left-hand edge of the control.</short>
</element>
<element name="TCustomLabel.SetBounds.aTop">
<short>Vertical coordinate for the top edge of the control.</short>
</element>
<element name="TCustomLabel.SetBounds.aWidth">
<short>New width for the control.</short>
</element>
<element name="TCustomLabel.SetBounds.aHeight">
<short>New Height for the control.</short>
</element>

<element name="TCustomLabel.AutoSize">
<short>
Enables or disables auto-sizing the control to its content.
</short>
<descr>
<p>
AutoSize is a Boolean property reintroduced in TCustomLabel to set its default 
value to <b>True</b>. 
</p>
<p>
Auto-sizing behavior in <var>TCustomLabel</var> differs from the 
implementation in the ancestor class (TControl). For example, a label can 
become bigger or smaller to accommodate a longer or shorter caption. In other 
controls, the property may control only the height for the control based on 
the Font size.
</p>
<p>
AutoSize causes the control to be resized to fit the content in the Caption 
property. This can include changing the values in Top, Left, Width, or Height 
if the corresponding edge(s) are not fixed using the Anchors property. Any 
edge included in Anchors is not altered when the control is auto-sized.
</p>
<p>
In addition to Anchors, auto-sizing behavior is also influenced by the 
Alignment and WordWrap properties for the control. When Alignment is set to 
taLeftJust or taRightJustify, and AutoSize is not enabled, the control 
displays the caption value aligned to the edge specified in Alignment. Excess 
characters which do not fit in the Width for the control are truncated.
</p>
<p>
When AutoSize is enabled, the control is resized to fit the characters in 
Caption by repositioning the opposite edge for the Alignment value. For 
taLeftJustify, the right edge is expanded or contracted by changing the value 
in Width. For taRightJustify, the value in Left is repositioned until all 
characters are displayed using the Alignment.
</p>
<p>
Use the Anchors property to fix the position for an edge during auto-sizing 
regardless of the value in the Alignment property. For example, when Anchors 
is set to [akTop, akLeft, akRight], only the height for the control can be 
altered when AutoSize is enabled.
</p>
<p>
When WordWrap is enabled, and both the left and right edges are included in 
Anchors, the height for the label control is adjusted during auto-sizing.
</p>
<p>
Simultaneous use of both AutoSize and OptimalFill can have conflicting 
results. AutoSize tries to use the existing Font to determine the control width
/height. OptimalFill adjusts the Font size to fill the control width/height.
</p>
<p>
Changing the value for the property causes AdjustSize (in TControl) to be 
called when the property is enabled.
</p>
</descr>
<seealso>
<link id="TCustomLabel.Alignment"/>
<link id="TCustomLabel.Layout"/>
<link id="TCustomLabel.WordWrap"/>
<link id="TCustomLabel.OptimalFill"/>
<link id="TCustomLabel.CalculateSize"/>
<link id="TCustomLabel.CalculatePreferredSize"/>
<link id="#lcl.controls.TControl.Caption">TControl.Caption</link>
<link id="#lcl.controls.TControl.Anchors">TControl.Anchors</link>
<link id="#lcl.controls.TControl.AutoSize">TControl.AutoSize</link>
<link id="#lcl.controls.TControl.AdjustSize">TControl.AdjustSize</link>
</seealso>
</element>

<element name="TCustomLabel.Color">
<short>Contains the color used for the background on the control.</short>
<descr>
<p>
<var>Color</var> is <var>TColor</var> property with the background color for 
the control.
</p>
<p>
Setting a new value for the property causes the value in ParentColor to be 
set to <b>False</b>. A CM_COLORCHANGED control message is performed, and the 
control is redrawn.
</p>
<p>
Values in Color and Font are used when the background and text for the 
control are drawn in the Paint method. Color is used when Transparent is set 
to <b>False</b> and the color value is not clNone. Use the Font property to 
assign the typeface and color used for the text displayed on the control.
</p>
<remark>
By default, label controls are transparent in the LCL. This differs from the 
Delphi VCL where the default value for Transparent is <b>False</b>.
</remark>
<p>
Set Transparent to <b>False</b> to make the label opaque.
</p>
</descr>
<seealso>
<version>
Modified in LCL version 3.0 to unbind Color and Transparent properties. 
Setting Color does not automatically change Transparent from <b>True</b> to 
<b>False</b> now.
</version>
<link id="TCustomLabel.Paint"/>
<link id="TCustomLabel.Transparent"/>
<link id="#lcl.controls.TControl.Color">TControl.Color</link>
<link id="#lcl.controls.TControl.Font">TControl.Font</link>
</seealso>
</element>

<element name="TLabel">
<short>
Control used to display static text, possibly in multiple lines.
</short>
<descr>
<p>
<var>TLabel</var> is a <var>TCustomLabel</var> descendant which implements a 
control to display static text on a form. The value in the control is not 
editable visually, and can be used to label or describe another control on 
the form or a container. Since it cannot be edited, it is not allowed to 
receive the input focus. It can, however, be used to set focus to an 
associated control using an accelerator key defined in the Caption for the 
control.
</p>
<p>
Use <var>TStaticText</var> to display static text and respond to keyboard 
input directly in the control.
</p>
</descr>
<seealso>
<link id="HowToUseStdCtrls"/>
<link id="TStaticText"/>
</seealso>
</element>

<element name="TLabel.Align" link="#lcl.controls.TControl.Align"/>
<element name="TLabel.Alignment" link="#lcl.stdctrls.TCustomLabel.Alignment"/>
<element name="TLabel.Anchors" link="#lcl.controls.TControl.Anchors"/>
<element name="TLabel.AutoSize" link="#lcl.stdctrls.TCustomLabel.AutoSize"/>
<element name="TLabel.BidiMode" link="#lcl.controls.TControl.BiDiMode"/>
<element name="TLabel.BorderSpacing" link="#lcl.controls.TControl.BorderSpacing"/>

<element name="TLabel.Caption">
<short>
The text displayed for the control.
</short>
<descr>
<p>
<var>Caption</var> is a <var>TCaption</var> property with the text displayed 
for the control. By default, Caption has the same value as the Name property 
used for the control. An explicit value can be assigned at design-time using 
the Object Inspector, or by the developer in program code.
</p>
<p>
Caption can be used to display an accelerator (or shortcut) key which allows 
an associated control to be given focus or executed. The shortcut key is 
identified by placing an Ampersand (&amp;) character in front of the character 
used as the accelerator key. Use two Ampersand characters to display a single 
Ampersand which is not a shortcut key.
</p>
<p>
Set ShowAccelChar to <b>False</b> to disable display and use of the 
accelerator key in the control. This also allows Caption to display an
Ampersand (&amp;) character without escaping its value.
</p>
<p>
Use FocusControl to specify the control which is focused/activated when the 
accelerator key is detected and ShowAccelerator is enabled.
</p>
<p>
Set values in Font to specify the typeface, size, color, and style used to 
display the Caption text. Use Color to set the background color for the 
control.
</p>
<p>
For example: 
</p>
<code>
{
var
  ALabel: TLabel;
  Form1: TForm;
  Memo1: TMemo;
}

ALabel.ShowAccelerator := True;
ALabel.FocusControl := Memo1;
ALabel.Caption := '&amp;Notes &amp;&amp; Comments';
</code>
<p>
Displays the 'N' character with an underline indicating the accelerator key. 
Pressing Alt+N activates the shortcut key and causes the associated TMemo 
control to be given focus.
</p>
</descr>
<seealso>
<link id="TLabel.ShowAccelChar"/>
<link id="TLabel.FocusControl"/>
<link id="TLabel.Color"/>
<link id="TLabel.Font"/>
<link id="TLabel.Layout"/>
<link id="#lcl.controls.TControl.Caption">TControl.Caption</link>
</seealso>
</element>

<element name="TLabel.Color" link="#lcl.stdctrls.TCustomLabel.Color"/>
<element name="TLabel.Constraints" link="#lcl.controls.TControl.Constraints"/>
<element name="TLabel.DragCursor" link="#lcl.controls.TControl.DragCursor"/>
<element name="TLabel.DragKind" link="#lcl.controls.TControl.DragKind"/>
<element name="TLabel.DragMode" link="#lcl.controls.TControl.DragMode"/>
<element name="TLabel.Enabled" link="#lcl.controls.TControl.Enabled"/>
<element name="TLabel.FocusControl" link="#lcl.stdctrls.TCustomLabel.FocusControl"/>
<element name="TLabel.Font" link="#lcl.controls.TControl.Font"/>
<element name="TLabel.Layout" link="#lcl.stdctrls.TCustomLabel.Layout"/>
<element name="TLabel.OptimalFill" link="#lcl.stdctrls.TCustomLabel.OptimalFill"/>
<element name="TLabel.ParentBidiMode" link="#lcl.controls.TControl.ParentBiDiMode"/>
<element name="TLabel.ParentColor" link="#lcl.controls.TControl.ParentColor"/>
<element name="TLabel.ParentFont" link="#lcl.controls.TControl.ParentFont"/>
<element name="TLabel.ParentShowHint" link="#lcl.controls.TControl.ParentShowHint"/>
<element name="TLabel.PopupMenu" link="#lcl.controls.TControl.PopupMenu"/>
<element name="TLabel.ShowAccelChar" link="#lcl.stdctrls.TCustomLabel.ShowAccelChar"/>
<element name="TLabel.ShowHint" link="#lcl.controls.TControl.ShowHint"/>
<element name="TLabel.Transparent" link="#lcl.stdctrls.TCustomLabel.Transparent"/>
<element name="TLabel.Visible" link="#lcl.controls.TControl.Visible"/>
<element name="TLabel.WordWrap" link="#lcl.stdctrls.TCustomLabel.WordWrap"/>
<element name="TLabel.OnChangeBounds" link="#lcl.controls.TControl.OnChangeBounds"/>
<element name="TLabel.OnClick" link="#lcl.controls.TControl.OnClick"/>
<element name="TLabel.OnContextPopup" link="#lcl.controls.TControl.OnContextPopup"/>
<element name="TLabel.OnDblClick" link="#lcl.controls.TControl.OnDblClick"/>
<element name="TLabel.OnDragDrop" link="#lcl.controls.TControl.OnDragDrop"/>
<element name="TLabel.OnDragOver" link="#lcl.controls.TControl.OnDragOver"/>
<element name="TLabel.OnEndDrag" link="#lcl.controls.TControl.OnEndDrag"/>
<element name="TLabel.OnMouseDown" link="#lcl.controls.TControl.OnMouseDown"/>
<element name="TLabel.OnMouseEnter" link="#lcl.controls.TControl.OnMouseEnter"/>
<element name="TLabel.OnMouseLeave" link="#lcl.controls.TControl.OnMouseLeave"/>
<element name="TLabel.OnMouseMove" link="#lcl.controls.TControl.OnMouseMove"/>
<element name="TLabel.OnMouseUp" link="#lcl.controls.TControl.OnMouseUp"/>
<element name="TLabel.OnMouseWheel" link="#lcl.controls.TControl.OnMouseWheel"/>
<element name="TLabel.OnMouseWheelDown" link="#lcl.controls.TControl.OnMouseWheelDown"/>
<element name="TLabel.OnMouseWheelUp" link="#lcl.controls.TControl.OnMouseWheelUp"/>
<element name="TLabel.OnMouseWheelHorz" link="#lcl.controls.TControl.OnMouseWheelHorz"/>
<element name="TLabel.OnMouseWheelLeft" link="#lcl.controls.TControl.OnMouseWheelLeft"/>
<element name="TLabel.OnMouseWheelRight" link="#lcl.controls.TControl.OnMouseWheelRight"/>
<element name="TLabel.OnResize" link="#lcl.controls.TControl.OnResize"/>
<element name="TLabel.OnStartDrag" link="#lcl.controls.TControl.OnStartDrag"/>

<element name="CreateEmulatedTextHintFont">
<short>Gets the font instance used for an emulated TextHint display.</short>
<descr>
<p>
<var>CreateEmulatedTextHintFont</var> is a <var>TFont</var> function which 
gets the font instance used to display an emulated TextHint in the control. 
It is retrieved by calling the <var>CreateEmulatedTextHintFont</var> method 
in the widgetset class. Widgetset classes use the font assigned to the 
control, but change the font color to <b>clGrayText</b>.
</p>
<p>
CreateEmulatedTextHintFont is called from <var>FontChanged</var>, and the 
private <var>ShowEmulatedTextHint</var> method.
</p>
</descr>
<seealso>
<link id="TCustomEdit.FontChanged"/>
<link id="TCustomEdit.TextHint"/>
</seealso>
</element>
<element name="CreateEmulatedTextHintFont.Result">
<short>TFont instance used for the emulated TextHint.</short>
</element>

<element name="Register">
<short>Registers components declared in the unit.</short>
<descr>
<p>
<var>Register</var> is a procedure used to register components in the 
<file>stdctrls.pp</file> unit for use in the Lazarus IDE.
</p>
<p>
Register calls <var>RegisterComponents</var> to add the following components 
to the <b>Standard</b> tab in the IDE:
</p>
<ul>
<li>TButton</li>
<li>TLabel</li>
<li>TEdit</li>
<li>TMemo</li>
<li>TToggleBox</li>
<li>TCheckBox</li>
<li>TRadioButton</li>
<li>TListBox</li>
<li>TComboBox</li>
<li>TScrollBar</li>
<li>TGroupBox</li>
</ul>
<p>
Register calls RegisterComponents to add the following components to the 
<b>Additional</b> tab in the IDE:
</p>
<ul>
<li>TStaticText</li>
</ul>
</descr>
</element>

<topic name="HowToUseStdCtrls">
<short>
How to use <var>StdCtrls</var>, <var>ComCtrls</var> or <var>ExtCtrls</var>.
</short>
<descr>
<p>
The Units <var>StdCtrls</var>, <var>ComCtrls</var> and <var>ExtCtrls</var> 
contain definitions and descriptions of many of the most commonly used 
controls for constructing Forms and other objects in Lazarus GUI applications.
</p>
<p>
Most controls are split into a final class, such as <var>TButton</var>, 
<var>TMemo</var>, <var>TScrollBar</var> etc., and a corresponding ancestor 
class such as <var>TCustomButton</var>, <var>TCustomMemo</var> or 
<var>TCustomScrollBar</var>. The final class is designed for immediate use, 
it almost only publishes the properties of the control. The corresponding 
custom ancestor class (<var>TCustomXXX</var>) can be used to derive controls 
with special (customized) appearance or behavior.
</p>
<p>
If you drop a component from the component palette on the form editor you 
don't need to add code explicitly to create it. The component is 
automatically created by the IDE together with the form, and destroyed when 
the form is destroyed.
</p>
<p>
However, if you create the component yourself by code, and don't specify an 
Owner for it (Create(<b>Nil</b>)), you are responsible for freeing the 
component when it is no longer needed. You should construct it with 
Create(Self), where Self means the containing Form or Parent control.
</p>
<p>
A control also must have a Parent control, maybe the Form, so that it can 
become visible within the client area of its Parent. The Top and Left 
properties specify the placement of the control within its <b>Parent</b>. The 
Object Tree reflects the Parent-Client relationships of all controls on the 
form.
</p>
<p>
Unlike controls, mere <var>components</var> are invisible at run-time (Open 
Dialogs...). Controls can be made invisible at run-time as well, by setting 
their Visible property to <b>False</b>.
</p>
<p>
If you place a component on the Form Designer and look at the Object 
Inspector, you can observe the Top and Left properties change as you move the 
component around. The same for the Width and Height properties, when you 
resize a control by dragging it's size grips.
</p>
<p>
When you modify the properties in the Object Inspector, the control on the 
form will reflect the changes as well.
</p>
<p>
You can also explicitly change the properties of the object in code by typing 
(in the appropriate Implementation section of the Source editor), for example
</p>
<code>
Form1.Button1.Height := 48;
</code>
<p>
In summary, there are usually about three different ways to determine each 
property of a component:
</p>
<ul>
<li>by using the mouse,</li>
<li>by setting the values in the Object Inspector,</li>
<li>or explicitly by writing code.</li>
</ul>
<p>
The components defined in these Units have several properties that are common 
to most of them, and other properties that are specific to the individual 
components. We shall describe the most common ones here. Unusual or 
control-specific properties will be described for the individual controls.
</p>
<p>
Additional Help can always be obtained by selecting a property or keyword, in 
either the Object Inspector or the Source Editor, and pressing <b>F1</b>. You 
will be taken by your Help browser to the appropriate page in the 
documentation.
</p>
<p>
If the description of a property on that page is insufficient, you can 
navigate to the corresponding description in the ancestor classes, by 
selecting the links in the Inheritance listing or by selecting the ancestor 
Type in the declaration of the object.
</p>
<p>
<b>Some commonly listed properties</b>
</p>
<table>
<th>
<td>Property</td>
<td>Meaning</td>
</th>
<tr>
<td>Action</td>
<td>
Use Action when e.g. a button and a menu entry shall perform the same task, 
e.g. the <var>Close</var> action.
</td>
</tr>
<tr>
<td>Align</td>
<td>
Defines how a control is lined up within its parent control. Possible values 
are alTop, alBottom (stacked at the top or bottom, using the full available 
width), alLeft, alRight (placed at the left or right, using the full 
available height), alNone (place anywhere on parent control) or alClient 
(takes all available space left over by other controls).
</td>
</tr>
<tr>
<td>Anchor</td>
<td>
Used to keep a control at a fixed distance from the edges of its Parent 
control, when the Parent is resized. For example <b>[akBottom, akRight]</b> 
will keep the control a fixed distance from the bottom right corner. 
Anchoring both [akLeft, akRight] will make the control extend or shrink in 
Width, together with its Parent.
</td>
</tr>
<tr>
<td>AutoSelect</td>
<td>
When <b>True</b>, a text control will select all its text when it receives 
focus or when the Enter key is pressed.
</td>
</tr>
<tr>
<td>AutoSelected</td>
<td>
<b>True</b> indicate that the edit or combo-box control has performed an 
AutoSelect operation, so that subsequent mouse-clicks and keystrokes proceed 
normally without selecting the text.
</td>
</tr>
<tr>
<td>BorderSpacing</td>
<td>The space around the edge between an control and its siblings.</td>
</tr>
<tr>
<td>Caption</td>
<td>
The text that is displayed on the control; it should preferably give some 
clue as to the function of the control, or an instruction such as 'Close' or 
'Execute'. By default Caption is set to be the same as the 'Name' property, 
and the application designer should substitute meaningful text instead of the 
default values.
</td>
</tr>
<tr>
<td>CharCase</td>
<td>
Indicates how text is displayed in a text editing control: Normal (retaining 
the case of the letters typed by the user), converted to uppercase, or 
converted to lowercase
</td>
</tr>
<tr>
<td>Constraints</td>
<td>
Sets the minimum and maximum sizes for a control. If a control is resized the 
new dimensions are always within the ranges given here. You should take care 
when setting these options that they do not conflict with the Anchors and 
Align settings.
</td>
</tr>
<tr>
<td>Color</td>
<td>The Color to be used to draw the control's background.
</td>
</tr>
<tr>
<td>Enabled</td>
<td>
Determines whether a control can be selected or perform an action. If it is 
not <var>Enabled</var>, it is often <b>Grayed</b> out on the Form.
</td>
</tr>
<tr>
<td>Font</td>
<td>
The Font to be used for writing the text associated with the control - either 
the caption or label, or the text-strings contained within the control. The 
entry on the Object Inspector usually has a (+) box on the left, and 
selecting this box reveals further options such as character set, color and 
size.
</td>
</tr>
<tr>
<td>Hint</td>
<td>A short informative pop-up text that appears when the mouse-cursor moves 
over the control.</td>
</tr>
<tr>
<td>Items</td>
<td>
The list of 'Things' that the object contains, such as a group of images, a 
series of lines of text, a number of actions in an action list, etc.
</td>
</tr>
<tr>
<td>Lines</td>
<td>
An array of strings, containing the paragraph texts in Memo controls. The 
array index is zero-based, i.e. the lines are numbered 0..numLines-1.
</td>
</tr>
<tr>
<td>Name</td>
<td>
The identifier by which the control is known in the program. The IDE gives it 
a default name based on the underlying type, for example successive instances 
of TBitButton would be named Form1.BitButton1 and Form1.BitButton2; it is up 
to the application programmer to give them more meaningful names such as 
ExitButton or OKButton. By default the Name of the control is applied to the 
Caption for the control, but the text of the Caption may be changed 
separately.
</td>
</tr>
<tr>
<td>PopUpMenu</td>
<td>
A window containing context-sensitive menu entries, that pops up when the 
right mouse button is clicked on the object.
</td>
</tr>
<tr>
<td>Position (or Top, Left)</td>
<td>Determines where the control is located on the parent form or 
control.</td>
</tr>
<tr>
<td>ReadOnly</td>
<td>If <b>True</b>, the user cannot change the text in the control.</td>
</tr>
<tr>
<td>ShowHint</td>
<td>Allows to enable or suppress <var>Hints</var>.</td>
</tr>
<tr>
<td>Size (or Height and Width)</td>
<td>The dimensions of the control</td>
</tr>
<tr>
<td>Style</td>
<td>
The options available for Style depend upon the sort of Control being 
considered: for instance the Style may be defined by TFormStyle, 
TBorderStyle, TButtonStyle etc.
</td>
</tr>
<tr>
<td>TabOrder</td>
<td>
Specifies the sequence of controls, that are entered when the user presses 
the Tab key.
</td>
</tr>
<tr>
<td>TabStop</td>
<td>Specifies whether the control can be reached (or is skipped) by pressing 
the Tab key.</td>
</tr>
<tr>
<td>Text</td>
<td>
Like Caption, the <b>user editable</b> text that appears in the control. 
Applies particularly to Edit, Memo and Combo-Box types of controls. Most of 
the editing operations (such as <var>Select</var>, <var>Clear</var>, 
<var>Cut</var>, <var>Copy</var>) are performed in this property. If the 
control contains more than a single line of text, then the textual elements 
are arranged as a zero-based array of strings in <var>Lines</var> 
(<var>TMemo</var>) or <var>Items</var> (<var>TListBox</var>, 
<var>TComboBox</var>).
</td>
</tr>
<tr>
<td>Visible</td>
<td>If <b>True</b>, the control can be seen on the Form; if <b>False</b>, it 
is hidden.</td>
</tr>
<tr>
<td>WordWrap</td>
<td>
Allows wrapping the Text into multiple lines. When <b>False</b>, the text is 
clipped at the right margin of the control, but it still can be inspected by 
moving the caret within the text.
</td>
</tr>
</table>
<p>
The 'Events' tab in the Object Inspector contains a list with events, which 
can occur for this control. If you select an entry in the list, a combo-box 
appears with a drop-down list showing any event handlers that have already 
been defined, and allowing you to choose one for this event. Alternatively 
you can select the ellipsis (three dots ...) and you will be taken to the 
Source Editor, where the Object Inspector created an new event handler method 
for you. You also can type the name of your handler in the Object Inspector 
and press Enter, to create a new handler method.
</p>
<p>
While a large number of events is available for any given control, in 
practice it is only necessary to populate a few of them. For most controls, 
it is sufficient to provide coding for 'OnClick'; for more complex controls 
it may be necessary also to provide for 'OnEntry' (when the control receives 
the focus) and 'OnExit' (when the control looses the focus); or you may need 
to write an event handler for 'OnChange' or 'OnScroll', depending on the 
nature of the particular control with which you are dealing.
</p>
<p>
Many controls have a default event, usually OnClick, for which an handler is 
created with a double click on the control. Or right click on the control, 
and select the first entry: 'Create default event'.
</p>
<p>
A common strategy in Object-Oriented programming is to provide an <link 
id="#lcl.ActnList.TActionList">ActionList</link> with the facility for 
entering, removing or editing a number of predefined actions, from which the 
most appropriate can be selected to use in any particular instance.
</p>
<p>
<b>Some commonly listed Actions</b>
</p>
<table>
<th>
<td>Event</td>
<td>Meaning</td>
</th>
<tr>
<td>OnChange</td>
<td>
Action to be taken if any change is detected (e.g. by mouse click, key press, 
edit text, etc).
</td>
</tr>
<tr>
<td>OnClick</td>
<td>
Action to be taken when the (left) mouse button is clicked. This is usually 
the main or default action of the control; for example clicking on a button 
or check box initiates the action associated with the check box. It may 
alternatively initiate a process of selection, for instance in a TextBox or 
Memo.
</td>
</tr>
<tr>
<td>Click</td>
<td>
A method to emulate in code the effect of clicking on a control. This method 
is most often found in Button-type controls (TButton, TBitBtn, TSpeedButton 
etc). A procedure can be written that calls the same code as the OnClick 
action. This facility can be particularly useful if the activation of one 
control by clicking causes a cascade of other controls to be activated, and 
the Click method can be used to initiate the action rather than having the 
user explicitly click on a lot of controls.
</td>
</tr>
<tr>
<td>OnDragDrop</td>
<td>
Action to be taken when a dragged control has been dropped onto this control.
</td>
</tr>
<tr>
<td>OnEntry</td>
<td>
Action to be taken when the control receives the focus. This might include 
changes in the appearance of the object such as highlighting or raising the 
border.
</td>
</tr>
<tr>
<td>OnExit</td>
<td>
Action to be taken when control is about to loose the focus. This is the 
right place for validity checks of user input, with a chance to disallow 
moving to a different control when the input is invalid.
</td>
</tr>
<tr>
<td>OnKeyPress</td>
<td>Action to be taken on an entered character. Checks...???</td>
</tr>
<tr>
<td>OnKeyDown</td>
<td>
Action to be taken if a key is down while focus is in this control. This 
allows one to filter or process control characters in a special way.
</td>
</tr>
<tr>
<td>OnKeyUp</td>
<td>
Action to be taken if a key goes up. This event occurs only once, while 
auto-repeated keystrokes trigger multiple OnKeyDown or OnKeyPress events.
</td>
</tr>
<tr>
<td>OnMouseMove</td>
<td>
Action to be taken if the mouse cursor moves over the control. This event 
fires with every small move, while OnMouseEnter and OnMouseLeave occur only 
when the mouse enters or leaves the control.
</td>
</tr>
<tr>
<td>OnMouseDown</td>
<td>Action to be taken when a mouse button is pressed over the control.</td>
</tr>
<tr>
<td>OnMouseUp</td>
<td>Action to be taken if a mouse button goes up over the control.
</td>
</tr>
<tr>
<td>OnResize</td>
<td>
Action to be taken when the control is resized. Might include re-alignment of 
text or selection of a different font size etc. Do not mix up with AutoSize, 
or you ask for trouble!
</td>
</tr>
</table>
<p>
<var>Constructors</var> such as <var>Create</var> allocate memory and system 
resources needed by the object. They also call the constructor of any 
sub-objects present in the class.
</p>
<p>
<var>Destructors</var> remove the object and de-allocate memory and other 
resources. If you call <var>Destroy</var> for an object which hasn't being 
initialized yet it will generate an error. Always use the <var>Free</var> 
method to deallocate objects, because it checks whether an object's value is 
<b>nil</b> before invoking <var>Destroy</var>.
</p>
<p>
Take the following precautions when creating your own <var>Destroy</var> 
method:
</p>
<ul>
<li>
Declare <var>Destroy</var> with the <b>override</b> directive, because it is 
a <b>virtual</b> method.
</li>
<li>
Always call the inherited Destroy method as the last action in the destructor 
code.
</li>
<li>
Be aware that an <var>exception</var> may be raised by the 
<var>constructor</var> when there is not enough memory to create an object, 
or something else goes wrong. If the <var>exception</var> is not handled 
inside the constructor, the object will be destroyed immediately. In this 
case <var>Destroy</var> will be called with a partially initialized object, 
so your destructor must check if the resources were really allocated before 
disposing of them.
</li>
<li>
Remember to call <var>Free</var> for all objects created in the constructor.
</li>
</ul>
</descr>
</topic>

</module>
<!-- StdCtrls -->
</package>
</fpdoc-descriptions>
