<?xml version="1.0" encoding="UTF-8"?>
<fpdoc-descriptions>
<package name="LazControls">
<!-- SpinEx -->
<module name="SpinEx">
<short>Provides extended TSpinEdit- and TFloatSpinEdit-like controls.</short>
<descr>
<p>
Implements <var>TSpinEditEx</var> and <var>TFloatSpinEditEx</var>, which 
allow a <var>NullValue</var> and provide behaviors applied when the text for 
the control is not a valid number.
</p>
<p>
Initial implementation:  2016 by Bart Broersma. Revised in August 2020.
</p>
<p>
<file>spinex.pps</file> is part of the <file>LazControls</file> package.
</p>
</descr>

<!-- unresolved external references -->
<element name="Classes"/>
<element name="SysUtils"/>
<element name="Math"/>
<element name="LCLType"/>
<element name="LCLProc"/>
<element name="Controls"/>
<element name="ClipBrd"/>
<element name="ComCtrls"/>
<element name="GroupedEdit"/>
<element name="LResources"/>
<element name="LazLogger"/>

<element name="TNullValueBehaviour">
<short>
Specifies the behavior applied in a control when its text is not a valid 
number.
</short>
<descr>
<p>
<var>TNullValueBehaviour</var> is an enumerated type with values that control 
the behavior in TSpinEditEx or TFloatSpinEditEx when their value is not a 
valid number, or not within the Min and Max value for the control.
</p>
</descr>
<seealso/>
</element>
<element name="TNullValueBehaviour.nvbShowTextHint">
<short>
Value becomes NullValue, and Text becomes empty. TextHint will show when 
focus is lost.
</short>
</element>
<element name="TNullValueBehaviour.nvbLimitedNullValue">
<short>
Value becomes GetLimitedValue(NullValue), and Text becomes Value.
</short>
</element>
<element name="TNullValueBehaviour.nvbMinValue">
<short>
Value becomes MinValue, and Text becomes Value. Please note that this is the 
default behavior, as used in Delphi.
</short>
</element>
<element name="TNullValueBehaviour.nvbMaxValue">
<short>
Value becomes MaxValue, and Text becomes Value.
</short>
</element>
<element name="TNullValueBehaviour.nvbInitialValue">
<short>
Value becomes InitialValue (OnEnter), and Text becomes Value.
</short>
</element>

<element name="TSpinEditExBase">
<short>
Specifies the base class for extended spin edit controls in the unit.
</short>
<descr>
<p>
<var>TSpinEditExBase</var> is a generic class type, and a descendant of 
<var>TCustomAbstractGroupedEdit</var>. TSpinEditExBase specifies the base 
class for the extended spin edit controls including <var>TSpinEditEx</var> 
and <var>TFloatSpinEditEx</var>. TSpinEditExBase must be specialized in a 
descendent class for a specific data type. The specialization type is used to 
implement properties including: Increment, MinValue, MaxValue, NullValue, and 
Value.
</p>
</descr>
<seealso>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit"/>
<link id="TCustomFloatSpinEditEx"/>
<link id="TCustomSpinEditEx"/>
<link id="TFloatSpinEditEx"/>
<link id="TSpinEditEx"/>
<link id="IntroToSpinEx"/>
</seealso>
</element>

<!-- private constants -->
<element name="TSpinEditExBase.DefIncrement">
<short>Default value for the Increment property.</short>
</element>
<element name="TSpinEditExBase.DefMaxValue">
<short>Default value for the MaxValue property.</short>
</element>
<element name="TSpinEditExBase.DefMinValue">
<short>Default value for the MinValue property.</short>
</element>
<element name="TSpinEditExBase.DefMinRepeatValue">
<short>Default value for the MinRepeatValue property.</short>
</element>

<!-- private members -->
<element name="TSpinEditExBase.FArrowKeys"/>
<element name="TSpinEditExBase.FIncrement"/>
<element name="TSpinEditExBase.FMaxValue"/>
<element name="TSpinEditExBase.FMinValue"/>
<element name="TSpinEditExBase.FMinRepeatValue"/>
<element name="TSpinEditExBase.FNullValue"/>
<element name="TSpinEditExBase.FNullValueBehaviour"/>
<element name="TSpinEditExBase.FOrientation"/>
<element name="TSpinEditExBase.FValue"/>
<element name="TSpinEditExBase.FUpdatePending"/>
<element name="TSpinEditExBase.FSettingValue"/>

<!-- private methods -->
<element name="TSpinEditExBase.GetEdit">
<short>Gets the value for the Edit property.</short>
<descr/>
<seealso>
<link id="TSpinEditExBase.Edit"/>
</seealso>
</element>
<element name="TSpinEditExBase.GetEdit.Result">
<short>Value for the property.</short>
</element>

<element name="TSpinEditExBase.SetMinRepeatValue">
<short>Sets the value for the MinRepeatValue property.</short>
<descr/>
<seealso>
<link id="TSpinEditExBase.MinRepeatValue"/>
</seealso>
</element>
<element name="TSpinEditExBase.SetMinRepeatValue.AValue">
<short>New value for the property.</short>
</element>

<element name="TSpinEditExBase.SpinUpDown">
<short>
Called when one of the buttons in the TUpDown control has been clicked.
</short>
<descr>
<p>
<var>SpinUpDown</var> ensures that the value in <var>Text</var> is a valid 
representation for the numeric type used in the control. It calls 
<var>GetLimitedValue</var> to ensure that <var>Value</var> is in the range 
specified in <var>MinValue</var> and <var>MaxValue</var>. MinValue is used if 
<var>TextIsNumber</var> returns <b>False</b>.
</p>
<p>
SpinUpDown sets the value in <var>Modified</var> to <b>True</b> when Value 
has been updated in the method.
</p>
<p>
Called when key or mouse events are handled in <var>EditKeyDown</var>, 
<var>EditMouseWheelDown</var>, and <var>EditMouseWheelUp</var>. It is also 
assigned as the handler routine for the <var>OnChangingEx</var> event in the 
<var>UpDown</var> property in the constructor for the class instance.
</p>
</descr>
<seealso>
<link id="TSpinEditExBase.UpDown"/>
<link id="TSpinEditExBase.MinValue"/>
<link id="TSpinEditExBase.MaxValue"/>
<link id="TSpinEditExBase.GetLimitedValue"/>
<link id="TSpinEditExBase.TextIsNumber"/>
</seealso>
</element>
<element name="TSpinEditExBase.SpinUpDown.Up">
<short>
<b>True</b> when the Up button in the TUpDown control has been clicked; 
<b>False</b> when the Down button has been clicked.
</short>
</element>

<element name="TSpinEditExBase.GetNullValue">
<short>Gets the value for the NullValue property.</short>
<descr/>
<seealso>
<link id="TSpinEditExBase.NullValue"/>
</seealso>
</element>
<element name="TSpinEditExBase.GetNullValue.Result">
<short>
Returns the generic type with the value for the NullValue property.
</short>
</element>

<element name="TSpinEditExBase.GetOrientation">
<short>
Gets the value for the Orientation property.
</short>
<descr/>
<seealso>
<link id="TSpinEditExBase.Orientation"/>
</seealso>
</element>
<element name="TSpinEditExBase.GetOrientation.Result">
<short>
Value for the Orientation property.
</short>
</element>

<element name="TSpinEditExBase.GetUpDown">
<short>Gets the value for the UpDown property.</short>
<descr/>
<seealso>
<link id="TSpinEditExBase.UpDown"/>
</seealso>
</element>
<element name="TSpinEditExBase.GetUpDown.Result">
<short>Value for the property.</short>
</element>

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

<element name="TSpinEditExBase.IncrementStored">
<short>Gets the storage specifier for the Increment property.</short>
<descr/>
<seealso>
<link id="TSpinEditExBase.Increment"/>
</seealso>
</element>
<element name="TSpinEditExBase.IncrementStored.Result">
<short>
<b>True</b> when a value other than DefIncrement has been assigned to the 
Increment property.
</short>
</element>

<element name="TSpinEditExBase.IsOutOfLimits">
<short>
Determines if the specified value is not within the limits set in MinValue 
and MaxValue.
</short>
<descr/>
<seealso/>
</element>
<element name="TSpinEditExBase.IsOutOfLimits.Result">
<short>
<b>True</b> when the value is outside the limits specified in the MinValue 
and MaxValue properties.
</short>
</element>
<element name="TSpinEditExBase.IsOutOfLimits.AValue">
<short>Value examined in the method.</short>
</element>

<element name="TSpinEditExBase.MaxValueStored">
<short>Gets the storage specifier for the MaxValue property.</short>
<descr/>
<seealso>
<link id="TSpinEditExBase.MaxValue"/>
</seealso>
</element>
<element name="TSpinEditExBase.MaxValueStored.Result">
<short>
<b>True</b> when a value other than DefMaxValue has been assigned to the 
MaxValue property.
</short>
</element>

<element name="TSpinEditExBase.MinValueStored">
<short>Gets the storage specifier for the MaxValue property.</short>
<descr/>
<seealso>
<link id="TSpinEditExBase.MinValue"/>
</seealso>
</element>
<element name="TSpinEditExBase.MinValueStored.Result">
<short>
<b>True</b> when a value other than DefMaxValue has been assigned to the 
MinValue property.
</short>
</element>

<element name="TSpinEditExBase.SetOrientation">
<short>
Sets the value for the Orientation property.
</short>
<descr/>
<seealso/>
</element>
<element name="TSpinEditExBase.SetOrientation.AValue">
<short>
New value for the Orientation property.
</short>
</element>

<element name="TSpinEditExBase.UpDownChangingEx">
<short>Implements the OnChangingEx event handler assigned to UpDown.</short>
<descr>
<p>
No actions are performed in the handler when <var>ReadOnly</var> is set to 
<b>True</b>.
</p>
<p>
When <var>Direction</var> is <var>updUp</var>, the <var>SpinUpDown</var> 
method is called using <b>True</b> as an argument. Otherwise, SpinUpDown is 
called using <b>False</b> as an argument.
</p>
</descr>
<seealso/>
</element>
<element name="TSpinEditExBase.UpDownChangingEx.Sender">
<short>Control for the event notification.</short>
</element>
<element name="TSpinEditExBase.UpDownChangingEx.AllowChange">
<short>Not used in the method.</short>
</element>
<element name="TSpinEditExBase.UpDownChangingEx.NewValue">
<short>Not used in the method.</short>
</element>
<element name="TSpinEditExBase.UpDownChangingEx.Direction">
<short>Indicates whether the up or down button was clicked in UpDown.</short>
</element>

<element name="TSpinEditExBase.UpDownClick">
<short>Implements the OnClick event handler assigned to UpDown.</short>
<descr>
<p>
Calls the <var>BuddyClick</var> method for the grouped edit control.
</p>
</descr>
<seealso>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.BuddyClick"/>
</seealso>
</element>
<element name="TSpinEditExBase.UpDownClick.Sender">
<short>Control for the event notification.</short>
</element>
<element name="TSpinEditExBase.UpDownClick.Button">
<short>The button type for the TUpDown control.</short>
</element>

<!-- protected members and properties -->
<element name="TSpinEditExBase.FInitialValue"/>

<element name="TSpinEditExBase.GetBuddyClassType">
<short>Gets the class type used for Buddy in the grouped edit control.</short>
<descr/>
<seealso>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.GetBuddyClassType"/>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.Buddy"/>
</seealso>
</element>
<element name="TSpinEditExBase.GetBuddyClassType.Result">
<short>Returns a class reference to TUpDown.</short>
</element>

<element name="TSpinEditExBase.DoEnter">
<short>Performs actions needed when the control is focused.</short>
<descr>
<p>
<var>DoEnter</var> is an overridden method in <var>TSpinEditExBase</var>, and 
calls the inherited method on entry. The inherited methods handle the change 
in control focus, and signal the OnEnter event handler (when assigned). 
DoEnter ensures that the initial <var>Value</var> for the control is stored 
internally for use with the <var>NullValueBehaviour</var> used for the 
control instance.
</p>
</descr>
<seealso>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.DoEnter"/>
<link id="TSpinEditExBase.NullValue"/>
<link id="TSpinEditExBase.MinValue"/>
<link id="TSpinEditExBase.MaxValue"/>
<link id="TSpinEditExBase.NullValueBehaviour"/>
</seealso>
</element>

<element name="TSpinEditExBase.RealGetText">
<short>Gets the text displayed for the control.</short>
<descr>
<p>
<var>RealGetText</var> is an overridden <var>TCaption</var> function in 
<var>TSpinEditExBase</var> used to get the text displayed for the control. 
RealGetText checks whether a handle has been allocated for the control in the 
widget set class. When a handle is assigned, the inherited method is called 
to the <var>Text</var> for the <var>Edit</var> in the grouped edit control. 
Otherwise, <var>ValueToStr</var> is called to get the string representation 
for the control <var>Value</var>.
</p>
</descr>
<seealso>
<link id="TSpinEditExBase.Value"/>
<link id="TSpinEditExBase.ValueToStr"/>
<link id="TSpinEditExBase.Edit"/>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.RealGetText">TCustomAbstractGroupedEdit.RealGetText</link>
</seealso>
</element>
<element name="TSpinEditExBase.RealGetText.Result">
<short>Contains the text with the value for the control.</short>
</element>


<element name="TSpinEditExBase.Reset">
<short>Reverts changes made to the value for the control.</short>
<descr>
<p>
<var>Reset</var> is an overridden method in <var>TSpinEditExBase</var> used 
to revert changes made to the <var>Value</var> for the control. The 
<var>IsMasked</var> property is used to determine if an editing mask is in 
use in the <var>Edit</var> for the grouped edit control. When set to 
<b>True</b>, the inherited method is called to revert any changes made in 
Edit. When an editing mask is not in use, the initial value for the control 
(captured when it received focus) is restored in the Value property.
</p>
<p>
Reset is used in the implementation of the <var>EditKeyDown</var> event 
handler assigned to Edit. It is called when the <b>Escape</b> key 
(<b>VK_Escape</b>) is pressed in the Edit control.
</p>
</descr>
<seealso>
<link id="TSpinEditExBase.Value"/>
<link id="TSpinEditExBase.Edit"/>
<link id="TSpinEditExBase.EditKeyDown"/>
<link id="TSpinEditExBase.DoEnter"/>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.Reset"/>
</seealso>
</element>

<element name="TSpinEditExBase.EditChange">
<short>
Signals the OnChange event handler for the Edit in the grouped edit control.
</short>
<descr>
<p>
<var>EditChange</var> is an overridden method in <var>TSpinEditExBase</var>. 
It ensures that <var>Modified</var> is set to <b>True</b> when 
<var>Value</var> has been changed using the <var>UpDown</var> buttons, Up or 
Down cursor keys, or by scrolling the mouse wheel. EditChange calls the 
inherited method prior to exit to signal the <var>OnChange</var> event 
handler (when assigned).
</p>
</descr>
<seealso>
<link id="TSpinEditExBase.Value"/>
<link id="TSpinEditExBase.UpDown"/>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.EditChange"/>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.OnChange"/>
</seealso>
</element>

<element name="TSpinEditExBase.EditKeyDown">
<short>Implements the KeyDown handler for the grouped edit control.</short>
<descr>
<p>
<var>EditKeyDown</var> is an overridden method in <var>TSpinEditExBase</var> 
which implements the <var>KeyDown</var> event handler for the <var>Edit</var> 
control. It calls the inherited method which signals the <var>OnKeyDown</var> 
event handler (when assigned). It also ensures that any keys explicitly 
handled in the grouped edit control are discarded by setting <var>Key</var> 
to <b>0</b> (<b>zero</b>). This includes the following virtual key codes and 
their associated actions:
</p>
<dl>
<dt>VK_Escape</dt>
<dd>Calls Reset.</dd>
<dt>VK_Up</dt>
<dd>
Calls SpinUpDown when ArrowKeys is set to <b>True</b> and the control is not 
ReadOnly.
</dd>
<dt>VK_Down</dt>
<dd>
Calls SpinUpDown when ArrowKeys is set to <b>True</b> and the control is not 
ReadOnly.
</dd>
</dl>
</descr>
<seealso/>
</element>
<element name="TSpinEditExBase.EditKeyDown.Key">
<short>Virtual key code examined in the handler.</short>
</element>
<element name="TSpinEditExBase.EditKeyDown.Shift">
<short>Shift, Ctrl, or Alt modifier for the key code.</short>
</element>

<element name="TSpinEditExBase.EditMouseWheelUp">
<short>Applies a Mouse Wheel Up message to the value for the control.</short>
<descr>
<p>
<var>EditMouseWheelUp</var> is the handler signalled when a Mouse Wheel Up 
message occurs in the <var>Edit</var> for the control. EditMouseWheelUp is 
overridden in <var>TSpinEditExBase</var>, and calls the inherited method. 
<var>Handled</var> is set to <b>True</b> if the mouse wheel message was 
handled in the ancestor class. When set to <b>False</b>, the 
<var>SpinUpDown</var> method is called to increment the value in the control.
</p>
</descr>
<seealso>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.EditMouseWheelUp"/>
</seealso>
</element>
<element name="TSpinEditExBase.EditMouseWheelUp.Shift">
<short>Shift, Alt, or Ctrl modifier for the mouse wheel message.</short>
</element>
<element name="TSpinEditExBase.EditMouseWheelUp.MousePos">
<short>Coordinates for the Mouse pointer.</short>
</element>
<element name="TSpinEditExBase.EditMouseWheelUp.Handled">
<short><b>True</b> when the message is handled in the ancestor class.</short>
</element>


<element name="TSpinEditExBase.EditMouseWheelDown">
<short>Handles mouse wheel down messages for the Edit in the control.</short>
<descr>
<p>
<var>EditMouseWheelDown</var> is the handler signalled when a Mouse Wheel 
Down message occurs in the <var>Edit</var> for the control. 
EditMouseWheelDown is overridden in <var>TSpinEditExBase</var>, and calls the 
inherited method. <var>Handled</var> is set to <b>True</b> if the mouse wheel 
message was handled in the ancestor class. When set to <b>False</b>, the 
<var>SpinUpDown</var> method is called to decrement the value in the control.
</p>
</descr>
<seealso>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.EditMouseWheelUp"/>
</seealso>
</element>
<element name="TSpinEditExBase.EditMouseWheelDown.Shift">
<short>Shift, Alt, or Ctrl modifier for the mouse message.</short>
</element>
<element name="TSpinEditExBase.EditMouseWheelDown.MousePos">
<short>Coordinates for the mouse cursor.</short>
</element>
<element name="TSpinEditExBase.EditMouseWheelDown.Handled">
<short><b>True</b> when the message was handled in the method.</short>
</element>

<element name="TSpinEditExBase.IsLimited">
<short>
Indicates if valid values have been assigned to the MinValue and MaxValue 
properties.
</short>
<descr>
<p>
The return value is <b>True</b> when MaxValue is larger than MinValue. 
IsLimited is used in the implementation of the <var>IsOutOfLimits</var> 
method.
</p>
</descr>
<seealso>
<link id="TSpinEditExBase.MinValue"/>
<link id="TSpinEditExBase.MaxValue"/>
</seealso>
</element>
<element name="TSpinEditExBase.IsLimited.Result">
<short>
<b>True</b> when the typed value in MaxValue is larger than the typed value 
in MinValue.
</short>
</element>

<element name="TSpinEditExBase.SafeInc">
<short>
Ensures the incremented value is a valid number for the data type.
</short>
<descr>
<p>
<var>SafeInc</var> is a function used to increase the specified value by the 
<var>Increment</var> for the control. SafeInc ensures that the incremented 
value is valid for a given data type. It is an abstract virtual method, and 
must be implemented in a descendent class to use the specific data type for 
the specialization.
</p>
<p>
<var>AValue</var> contains the type with the numeric value to be incremented.
</p>
<p>
The return value contains the numeric value for the type after the value in 
Increment has been added. The return value is constrained when the 
incremented value is too large for the data type.
</p>
<p>
SafeInc is used in the implementation of the <var>SpinUpDown</var> method.
</p>
</descr>
<seealso>
<link id="TCustomSpinEditEx.SafeInc"/>
<link id="TCustomFloatSpinEditEx.SafeInc"/>
</seealso>
</element>
<element name="TSpinEditExBase.SafeInc.Result">
<short>The incremented (and possibly constrained) value.</short>
</element>
<element name="TSpinEditExBase.SafeInc.AValue">
<short>Value incremented in the method.</short>
</element>

<element name="TSpinEditExBase.SafeDec">
<short>
Ensures the decremented value is a valid number for the data type.
</short>
<descr>
<p>
<var>SafeDec</var> is a function used to decrease the specified value by the 
<var>Increment</var> for the control. SafeDec ensures that the decremented 
value is valid for a given data type. It is an abstract virtual method, and 
must be implemented in a descendent class to use the specific data type for 
the specialization.
</p>
<p>
<var>AValue</var> contains the type with the numeric value to be decremented.
</p>
<p>
The return value contains the numeric value for the type after the value in 
Increment has been subtracted. The return value is range limited when the 
incremented value is too large for the data type.
</p>
<p>
SafeDec is used in the implementation of the <var>SpinUpDown</var> method.
</p>
</descr>
<seealso>
<link id="TCustomSpinEditEx.SafeDec"/>
<link id="TCustomFloatSpinEditEx.SafeDec"/>
</seealso>
</element>
<element name="TSpinEditExBase.SafeDec.Result">
<short>Control value after the decrement operation.</short>
</element>
<element name="TSpinEditExBase.SafeDec.AValue">
<short>The decremented (and possibly range limited) value.</short>
</element>

<element name="TSpinEditExBase.SameValue">
<short>Determines whether the specified arguments have the same value.</short>
<descr>
<p>
<var>SameValue</var> is a <var>Boolean</var> function used to compare the 
values in <var>AValue1</var> and <var>AValue2</var> to determine if they have 
the same value. The return value is <b>True</b> when both AValue1 and 
AValue2 have the same value. It is defined as an abstract virtual method in 
<var>TSpinEditExBase</var>, and must be implemented in descendent classes to 
compare the data type for the specialization.
</p>
<p>
SameValue is used in the implementation of storage specifiers for the 
<var>Increment</var>, <var>MinValue</var>, and <var>MaxValue</var> properties.
</p>
<p>
This method was introduced to ensure that the type specialization for the 
class instance is used when value comparisons are performed.
</p>
</descr>
<version>
Introduced in version 2.2.0. Modified in version 3.0 to remove the define 
for FPC compiler version.
</version>
<seealso>
<link id="TSpinEditExBase.Increment"/>
<link id="TSpinEditExBase.MinValue"/>
<link id="TSpinEditExBase.MaxValue"/>
<link id="TCustomFloatSpinEditEx"/>
<link id="TCustomSpinEditEx"/>
<link id="#rtl.math.SameValue">Math.SameValue</link>
</seealso>
</element>
<element name="TSpinEditExBase.SameValue.Result">
<short><b>True</b> if both arguments have the same value.</short>
</element>
<element name="TSpinEditExBase.SameValue.AValue1">
<short>First value for the comparison.</short>
</element>
<element name="TSpinEditExBase.SameValue.AValue2">
<short>Second value for the comparison.</short>
</element>

<element name="TSpinEditExBase.SetValue">
<short>Sets the value for the Value property.</short>
<descr/>
<seealso>
<link id="TSpinEditExBase.Value"/>
</seealso>
</element>
<element name="TSpinEditExBase.SetValue.AValue">
<short>New value for the property.</short>
</element>

<element name="TSpinEditExBase.SetNullValue">
<short>Sets the value for the NullValue property.</short>
<descr/>
<seealso>
<link id="TSpinEditExBase.NullValue"/>
</seealso>
</element>
<element name="TSpinEditExBase.SetNullValue.AValue">
<short>New value for the property.</short>
</element>

<element name="TSpinEditExBase.SetMaxValue">
<short>Sets the value for the MaxValue property.</short>
<descr/>
<seealso>
<link id="TSpinEditExBase.MaxValue"/>
</seealso>
</element>
<element name="TSpinEditExBase.SetMaxValue.AValue">
<short>New value for the property.</short>
</element>

<element name="TSpinEditExBase.SetMinValue">
<short>Sets the value for the MinValue property.</short>
<descr/>
<seealso>
<link id="TSpinEditExBase.MinValue"/>
</seealso>
</element>
<element name="TSpinEditExBase.SetMinValue.AValue">
<short>New value for the property.</short>
</element>

<element name="TSpinEditExBase.SetIncrement">
<short>Sets the value for the Increment property.</short>
<descr/>
<seealso>
<link id="TSpinEditExBase.Increment"/>
</seealso>
</element>
<element name="TSpinEditExBase.SetIncrement.AIncrement">
<short>New value for the property.</short>
</element>

<element name="TSpinEditExBase.TextIsNumber">
<short>
Indicates if the specified String contains a valid numeric value.
</short>
<descr>
<p>
<var>TextIsNumber</var> is an abstract virtual <var>Boolean</var> function 
which indicates the value specified in <var>S</var> represents a valid 
number. <var>ANumber</var> is an output parameter where the numeric value for 
the data type is stored.
</p>
<p>
TextIsNumber must be implemented in a descendent class using the data type 
for the specialization.
</p>
</descr>
<seealso>
<link id="TCustomSpinEditEx.TextIsNumber"/>
<link id="TCustomFloatSpinEditEx.TextIsNumber"/>
</seealso>
</element>
<element name="TSpinEditExBase.TextIsNumber.Result">
<short>
<b>True</b> when S contains a value that can be converted to the data type 
for ANumber.
</short>
</element>
<element name="TSpinEditExBase.TextIsNumber.S">
<short>String converted to a numeric value in the method.</short>
</element>
<element name="TSpinEditExBase.TextIsNumber.ANumber">
<short>Numeric value for the specified String.</short>
</element>

<element name="TSpinEditExBase.UpdateControl">
<short>Updates members in the control when editing is completed.</short>
<descr>
<p>
<var>UpdateControl</var> is a method used to update members in the class 
instance to reflect the state for the control. It is called when a new value 
is assigned to properties in the class instance. It is called when editing 
has been completed using the <var>Edit</var> for the grouped editing control. 
It is also called when the handle is allocated for the control in 
<var>InitializeWnd</var>.
</p>
<p>
<var>NullValueBehaviour</var> is used to determine whether <var>Value</var> 
is adjusted to ensure that it is in the range specified by MinValue and 
MaxValue. A value other than <var>nvbShowTextHint</var> causes 
<var>GetLimitedValue</var> to be called to get the adjusted Value.
</p>
<p>
No additional actions are performed in the method when a handle has not been 
allocated for the control, or at design-time.
</p>
<p>
When NullValueBehaviour is set to <var>nvbShowTextHint</var>, an invalid 
numeric value entered in <var>Text</var> causes Text to be set to an empty 
string. This allows the <var>TextHint</var> for the control to be displayed.
</p>
<p>
When Value is a valid number, and in the required range, it is converted to 
its <var>String</var> representation and assigned to the Text for the control.
</p>
</descr>
<seealso/>
</element>

<element name="TSpinEditExBase.InitializeWnd">
<short>
Performs actions needed when the handle is allocated for the control.
</short>
<descr>
<p>
<var>InitializeWnd</var> is an overridden method used to perform actions 
needed when the handle is allocated for the control, and before child 
controls are created. InitializeWnd calls the inherited method on entry.
</p>
<p>
InitializeWnd updates the value in the Text property by calling ValueToStr. 
This ensures that the Value property is range-limited to the settings 
in MinValue and MaxValue (when needed). InitializeWnd calls UpdateControl to 
validate and update members in the class instance using NullValue and 
NullValueBehavior (when needed).
</p>
</descr>
<seealso>
<link id="TSpinEditExBase.GetLimitedValue"/>
<link id="TSpinEditExBase.MinValue"/>
<link id="TSpinEditExBase.MaxValue"/>
<link id="TSpinEditExBase.NullValue"/>
<link id="TSpinEditExBase.NullValueBehavior"/>
<link id="TSpinEditExBase.UpdateControl"/>  
<link id="TSpinEditExBase.Value"/>
<link id="TSpinEditExBase.ValueToStr"/>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.Text">TCustomAbstractGroupedEdit.Text</link>
<link id="#lcl.controls.TWinControl.InitializeWnd">TWinControl.InitializeWnd</link>
</seealso>
</element>

<element name="TSpinEditExBase.FinalizeWnd">
<short>Performs actions prior to freeing the handle for the control.</short>
<descr>
<p>
Ensures that the Value property is up-to-date before releasing the Handle for 
the control.
</p>
</descr>
<seealso>
<link id="#lcl.controls.TWinControl.FinalizeWnd">TWinControl.FinalizeWnd</link>
</seealso>
</element>

<element name="TSpinEditExBase.Loaded">
<short>
Performs action needed when the component has been loaded from the LCL 
streaming mechanism.
</short>
<descr>
<p>
<var>Loaded</var> is an overridden method in <var>TSpinEditExBase</var>, and 
calls the inherited method on entry. Loaded corrects an undesirable behavior 
in the ancestor class; it sends a <b>CM_PARENTFONTCHANGED</b> message which 
also alters the color in the grouped edit control. Loaded calls 
<var>UpdateSpacing</var> prior to restoring the initial color assigned to the 
edit control.
</p>
</descr>
<seealso>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.Loaded"/>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.UpdateSpacing"/>
</seealso>
</element>

<element name="TSpinEditExBase.ArrowKeys">
<short>
Indicates is Up and Down cursor keys can be used in the Edit for the control 
</short>
<descr>
<p>
<var>ArrowKeys</var> is a <var>Boolean</var> property which indicates if 
cursor keys can be used to navigate content in the Edit for the control.
</p>
<p>
When set to <b>True</b>, the <b>Up</b> (<var>VK_UP</var>) and <b>Down</b> 
(<var>VK_Down</var>) arrow keys can be used to increase or decrease the 
<var>Value</var> for the control. The key events are handled in the 
<var>EditKeyDown</var> event handler assigned to <var>Edit</var>. When set to 
<b>False</b>, the Up and Down keys are ignored in Edit.
</p>
<p>
The default value for the property is <b>True</b>.
</p>
<p>
Use <var>UpDown</var> to access the <var>TUpDown</var> instance used in the 
grouped edit control.
</p>
</descr>
<seealso>
<link id="TSpinEditExBase.Edit"/>
<link id="TSpinEditExBase.EditKeyDown"/>
<link id="TSpinEditExBase.Value"/>
<link id="TSpinEditExBase.UpDown"/>
<link id="#lcl.comctrls.TUpDown"/>
</seealso>
</element>

<element name="TSpinEditExBase.Edit">
<short>Text editor for the grouped edit control.</short>
<descr>
<p>
<var>Edit</var> a read-only <var>TGEEdit</var> property which contains the 
editor for the grouped edit control. Edit is used to perform direct input of 
a new <var>Value</var> for the control. Edit allows use of the <b>Up</b> and 
<b>Down</b> cursor keys to increment or decrement the value when 
<var>ArrowKeys</var> is enabled.
</p>
<p>
<var>UpDown</var> is the <var>TUpDown</var> instance used to increment and 
decrement the value for the grouped edit control using mouse clicks.
</p>
</descr>
<seealso>
<link id="#lcl.groupededit.TGEEdit"/>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit"/>
</seealso>
</element>

<element name="TSpinEditExBase.UpDown">
<short>Contains the TUpDown instance used in the grouped edit control.</short>
<descr>
<p>
<var>UpDown</var> is a read-only property which contains the 
<var>TUpDown</var> instance used to increment or decrement the 
<var>Value</var> for the grouped edit control. Click on the buttons in UpDown 
to increase or decrease the <var>Value</var> for the control by the amount 
specified in the <var>Increment</var> property.
</p>
<p>
<var>Edit</var> is used to perform direct input of the value for the grouped 
edit control.
</p>
</descr>
<seealso>
<link id="TSpinEditExBase.Increment"/>
<link id="TSpinEditExBase.Edit"/>
<link id="#lcl.comctrls.TUpDown"/>
</seealso>
</element>

<element name="TSpinEditExBase.UpDownVisible">
<short>
Indicates whether the TUpDown instance for the grouped edit control is 
visible.
</short>
<descr>
<p>
<var>UpDownVisible</var> is a <var>Boolean</var> property which indicates if 
<var>UpDown</var> in the grouped edit control is visible. It is a convenience 
property; read and write access for the value are redirected to the 
<var>Visible</var> property in the <var>TUpDown</var> instance in UpDown. The 
default value for the property is <b>True</b>.
</p>
</descr>
<seealso>
<link id="TSpinEditExBase.UpDown"/>
<link id="#lcl.comctrls.TUpDown"/>
<link id="#lcl.comctrls.TUpDown.Visible"/>
</seealso>
</element>

<element name="TSpinEditExBase.MinRepeatValue">
<short>
Contains the repeat interval for the TUpDown instance in the grouped edit 
control.
</short>
<descr>
<p>
<var>MinRepeatValue</var> contains the repeat interval used for the 
<var>UpDown</var> control in the grouped edit. The default value for the 
property is defined in the <var>DefMinRepeatValue</var> constant.
</p>
<p>
Changing the value for the property causes the <var>MinRepeatInterval</var> 
property in <var>UpDown</var> to be updated with the new value.
</p>
</descr>
<seealso>
<link id="#lcl.comctrls.TUpDown.MinRepeatInterval"/>
</seealso>
</element>

<element name="TSpinEditExBase.Orientation">
<short>
Controls the orientation for the increment and decrement buttons used to 
change the value for the control.
</short>
<descr>
<p>
<var>Orientation</var> is a <var>TUDOrientation</var> property which 
determines the orientation for the buttons on the associated control used to 
change the Value property. The property value is read from and written to the 
UpDown property which is the Buddy (associate) in the grouped edit control.
</p>
<p>
The default value for the Orientation property is <var>udVertical</var>, and 
causes the buttons to be stacked vertically on the edge of the control where 
the buttons are aligned. The increment button in placed above the decrement 
button. Each button uses one half of the Height for the control excluding the 
spacing between the buttons.
</p>
<p>
<var>udHorizontal</var> causes the buttons to be displayed side-by-side on the 
edge of the control where the buttons are aligned. The decrement button is 
placed to the left of the increment button. Each button has the same width and 
mirrors the height for the control. This causes the buttons to have a larger 
visual footprint than when the vertical orientation is used.
</p>
<p>
Changing the value for the property causes the UpDown control to be updated 
with the new property value, and the Width in the UpDown control is adjusted 
for the new orientation.
</p>
<p>
Use the Layout property to control the position of the Edit box within the 
grouped edit control. Use UpDownVisible to display or hide the TUpDown Buddy 
control for the grouped edit control.
</p>
</descr>
<seealso>
<link id="TSpinEditExBase.Edit"/>
<link id="TSpinEditExBase.UpDownVisible"/>
<link id="#lcl.comctrls.TUpDown.Orientation">TUpDown.Orientation</link>
<link id="#lcl.comctrls.TUDOrientation">TUDOrientation</link>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.Buddy">TCustomAbstractGroupedEdit.Buddy</link>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.Layout">TCustomAbstractGroupedEdit.Layout</link>
</seealso>
</element>

<element name="TSpinEditExBase.SpinButtonWidth">
<short>
Width for the spin buttons on the grouped edit control.
</short>
<descr>
<p>
<var>SpinButtonWidth</var> is an <var>Integer</var> property which controls the 
width for the spin buttons displayed for the control. The value for the 
property is read from and written to the Width for the Buddy property on the 
grouped edit control. The initial value for the property is the default width
assigned to the control in UpDown (17 pixels at 96ppi).
</p>
<p>
SpinButtonWidth allows the width for the buttons to be maintained when the 
control is auto-sized and the spin buttons are too wide or too narrow for the 
resulting control height. In general, the width of the spin buttons should be 
increased when the font size is increased or reduced when the font size is 
reduced.
</p>
<p>
Use AutoSize to resize the height for the control when the Font size is changed.
</p>
<p>
Use AutoSizeHeightIsEditHeight to set the preferred height for the grouped edit 
control to the preferred height for the text edit on the control when AutoSize 
is enabled.
</p>
</descr>
<version>
Added to LazControls in LCL version 4.0.
</version>
<seealso>
<link id="TSpinEditExBase.UpDown"/>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.AutoSize">TCustomAbstractGroupedEdit.AutoSize</link>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.AutoSizeHeightIsEditHeight">TCustomAbstractGroupedEdit.AutoSizeHeightIsEditHeight</link>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.GetBuddyWidth">TCustomAbstractGroupedEdit.GetBuddyWidth</link>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.SetBuddyWidth">TCustomAbstractGroupedEdit.SetBuddyWidth</link>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.Buddy">TCustomAbstractGroupedEdit.Buddy</link>
<link id="TFloatSpinEditEx"/>
<link id="TSpinEditEx"/>
</seealso>
</element>

<!-- public methods and properties -->
<element name="TSpinEditExBase.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 default values for 
properties, including:
</p>
<ul>
<li>ArrowKeys</li>
<li>Increment</li>
<li>MaxValue</li>
<li>NullValueBehaviour</li>
<li>MinRepeatValue</li>
</ul>
<p>
Create configures the <var>Edit</var> and <var>UpDown</var> instances used in 
the grouped edit control. Edit is configured to use right alignment for its 
text (since it is a numeric value). UpDown is configured to include the flags 
needed in its ControlStyle property. The OnChangingEx and OnClick event 
handlers for UpDown are also set in the method.
</p>
<remark>
UpDown does not use its Associate property to maintain the relationship to 
Edit. This is by design, and allows Edit to be used with floating point 
numbers and have a NullValue (in a descendent class instance). It also 
enables proper alignment and anchoring for the grouped edit control.
</remark>
<p>
Internal members needed in the class instance are also initialized.
</p>
<p>
Create calls <var>SetInitialBounds</var> to set the size for the control to 
the default values returned from <var>GetControlClassDefaultSize</var>.
</p>
</descr>
<seealso/>
</element>
<element name="TSpinEditExBase.Create.TheOwner">
<short>Owner of the class instance.</short>
</element>

<element name="TSpinEditExBase.GetLimitedValue">
<short>
Constrains the specified value to MinValue and MaxValue for the control.
</short>
<descr>
<p>
<var>GetLimitedValue</var> is used in the implementation of 
<var>UpdateControl</var>, <var>SpinUpDown</var>, and <var>StrToValue</var> 
methods. It is also called from the <var>ValueToStr</var> method in 
<var>TCustomFloatSpinEditEx</var>.
</p>
<p>
GetLimitedValue ensures that the value for the type specified in 
<var>AValue</var> is constrained to the range specified in the 
<var>MinValue</var> and <var>MaxValue</var> properties.
</p>
<p>
The return value contains the original value after it has been range 
adjusted. When AValue is smaller than MinValue, MinValue is assigned to the 
return value. When AValue is larger than MaxValue, MaxValue is assigned to 
the return value.
</p>
<remark>
The return value is not range adjusted when MinValue and MaxValue have the 
same value. This is Delphi VCL compatible.
</remark>
</descr>
<seealso/>
</element>
<element name="TSpinEditExBase.GetLimitedValue.Result">
<short>
Value adjusted (when needed) to the MinValue and MaxValue constraints.
</short>
</element>
<element name="TSpinEditExBase.GetLimitedValue.AValue">
<short>Value examined (and adjusted when needed) in the method.</short>
</element>

<element name="TSpinEditExBase.ValueToStr">
<short>Converts the specified value to its representation as a String.</short>
<descr>
<p>
<var>ValueToStr</var> is an abstract virtual <var>String</var> function used 
to convert the value specified in <var>AValue</var> to its representation as 
a String data type. ValueToStr must be implemented in a descendent class to 
use the data type and formatting needed for the specialization.
</p>
</descr>
<seealso>
<link id="TCustomSpinEditEx.ValueToStr"/>
<link id="TCustomFloatSpinEditEx.ValueToStr"/>
</seealso>
</element>
<element name="TSpinEditExBase.ValueToStr.Result">
<short>String representation for the specified data type.</short>
</element>
<element name="TSpinEditExBase.ValueToStr.AValue">
<short>Type with the numeric value converted in the method.</short>
</element>

<element name="TSpinEditExBase.StrToValue">
<short>
Converts the specified string to a numeric value for the generic data type.
</short>
<descr>
<p>
<var>StrToValue</var> is a function which returns a generic type with the 
numeric value for the specified String. <var>TextIsNumber</var> is used to 
determine if <var>S</var> contains a valid numeric value. If S is not a valid 
number, the <var>NullValueBehaviour</var> property is used to determine the 
return value for the method.
</p>
<dl>
<dt>nvbShowTextHint</dt>
<dd>NullValue is used as the return value.</dd>
<dt>nvbLimitedNullValue</dt>
<dd>GetLimitedValue is used to derive the Null return value.</dd>
<dt>nvbMinValue</dt>
<dd>MinValue is used as the return value.</dd>
<dt>nvbMaxValue</dt>
<dd>MaxValue is used as the return value.</dd>
<dt>nvbInitialValue</dt>
<dd>The initial value for the control is used as the return value.</dd>
<dt>nvbShowTextHint</dt>
<dd>GetLimitedValue is used to get the return value</dd>
</dl>
</descr>
<seealso/>
</element>
<element name="TSpinEditExBase.StrToValue.Result">
<short>Numeric value for the specified string.</short>
</element>
<element name="TSpinEditExBase.StrToValue.S">
<short>String representation converted in method.</short>
</element>

<element name="TSpinEditExBase.EditEditingDone">
<short>
Implements the EditingDone handler for the Edit in the grouped edit control.
</short>
<descr>
<p>
<var>EditEditingDone</var> is an overridden method in 
<var>TSpinEditExBase</var>. It calls the inherited method on entry to signal 
the <var>OnEditingDone</var> event handler (when assigned).
</p>
<p>
EditEditingDone updates the <var>Value</var> for the control from the 
<var>Text</var> in the <var>Edit</var>. <var>UpdateControl</var> is called to 
ensure that members in the property are updated and validated after a change 
to the Value property.
</p>
</descr>
<seealso>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.EditEditingDone"/>
</seealso>
</element>

<element name="TSpinEditExBase.Increment">
<short>
Value added to or subtracted from Value when the UpDown control is clicked.
</short>
<descr>
<p>
<var>Increment</var> is a property which defines the value added to or 
subtracted from the control <var>Value</var> when the <var>UpDown</var> 
control is clicked. It is also used when <var>ArrowKeys</var> are enable in 
the Edit for the grouped edit control.
</p>
<p>
Increment uses the generic type for the class instance. There is no default 
value for the control in TSpinEditExBase, but it may be re-specified in a 
descendent class specialized for a given data type.
</p>
</descr>
<seealso>
<link id="TSpinEditExBase.Value"/>
<link id="TSpinEditExBase.UpDown"/>
<link id="TSpinEditExBase.Edit"/>
<link id="TSpinEditExBase.ArrowKeys"/>
<link id="TCustomSpinEditEx"/>
<link id="TCustomFloatSpinEditEx"/>
</seealso>
</element>

<element name="TSpinEditExBase.MinValue">
<short>Minimum value allowed in the Value property.</short>
<descr>
<p>
<var>MinValue</var> is a property used to specify the minimum numeric value 
allowed in the <var>Value</var> property. MinValue uses the type specified 
for the generic class. 
</p>
<p>
Use <var>MaxValue</var> to specify the upper limit for the value in the 
control.
</p>
<p>
MinValue is used, along with MaxValue, to ensure that the Value property 
falls within the specified limits. MinValue and MaxValue are not enforced 
when they have not been explicitly assigned, if they contain the same value, 
or when MaxValue is smaller than MinValue. This allows any numeric value to 
be assigned to the control.
</p>
<p>
MinValue is used in the implementation of private methods such as IsLimited, 
IsOutOfLimits, and SpinUpDown. It also influences the value stored in the 
control when <var>GetLimitedValue</var> or <var>NullValueBehaviour</var> is 
applied.
</p>
</descr>
<seealso>
<link id="TSpinEditExBase.Value"/>
<link id="TSpinEditExBase.NullValue"/>
<link id="TSpinEditExBase.MaxValue"/>
<link id="TSpinEditExBase.NullValueBehaviour"/>
<link id="TSpinEditExBase.GetLimitedValue"/>
</seealso>
</element>

<element name="TSpinEditExBase.MaxValue">
<short>Maximum value allowed in the Value property.</short>
<descr>
<p>
<var>MaxValue</var> is a property used to specify the largest numeric value 
allowed in the <var>Value</var> property. MaxValue uses the type specified 
for the generic class. 
</p>
<p>
Use <var>MinValue</var> to specify the lower limit for the value in the 
control.
</p>
<p>
MaxValue is used, along with MinValue, to ensure that the Value property 
falls within the specified limits. MinValue and MaxValue are not enforced 
when they have not been explicitly assigned, if they contain the same value, 
or when MaxValue is smaller than MinValue. This allows any numeric value to 
be assigned to the control.
</p>
<p>
MaxValue is used in the implementation of private methods such as IsLimited, 
IsOutOfLimits, and SpinUpDown. It also influences the value stored in the 
control when <var>GetLimitedValue</var> or <var>NullValueBehaviour</var> is 
applied.
</p>
</descr>
<seealso>
<link id="TSpinEditExBase.Value"/>
<link id="TSpinEditExBase.NullValue"/>
<link id="TSpinEditExBase.MinValue"/>
<link id="TSpinEditExBase.NullValueBehaviour"/>
<link id="TSpinEditExBase.GetLimitedValue"/>
</seealso>
</element>

<element name="TSpinEditExBase.NullValue">
<short>Value used when the text for the control is not a valid number.</short>
<descr>
<p>
<var>NullValue</var> contains the numeric value used when the text for the 
control does not represent a valid number. NullValue is assigned to Value 
when the NullValueBehaviour property is set to nvbLimitedNullValue or 
nvbShowTextHint.
</p>
</descr>
<seealso/>
</element>

<element name="TSpinEditExBase.NullValueBehaviour">
<short>
Controls the logic applied when control text is not a valid number.
</short>
<descr>
<p>
<var>NullValueBehaviour</var> is a <var>TNullValueBehaviour</var> property 
which contains the logic applied when the text for the control does not 
represent a valid numeric value. The default value for the property is 
<var>nvbMinValue</var>, and indicates that the value in <var>MinValue</var> 
is stored in the <var>Value</var> property when an invalid number is detected.
</p>
<p>
See <link id="TNullValueBehaviour">TNullValueBehaviour</link> for more 
information about values in the enumeration and their meanings.
</p>
<p>
NullValueBehaviour is used in the implementation of the 
<var>UpdateControl</var> and <var>StrToValue</var> methods.
</p>
</descr>
<seealso/>
</element>

<element name="TSpinEditExBase.Value">
<short>Numeric value for the control.</short>
<descr>
<p>
<var>Value</var> is a property which contains the numeric value for the 
spin edit control. Value uses the data type specified for the generic 
class.
</p>
<p>
If a valid Handle has been allocated for the control, the property value is 
retrieved by calling <var>StrToValue</var> using the <var>Text</var> for the 
control. If the handle has not been allocated, the value stored in the 
internal member is used.
</p>
<p>
Setting a new value for the property ensures that text assigned directly to 
<var>Edit</var> contains a valid number for the data type. This is done by 
calling <var>TextIsNumber</var>. If the new value is the same as the stored 
property value, no actions are performed.
</p>
<p>
When the property value is changed, it is range checked and validated. Use 
<var>MinValue</var> and <var>MaxValue</var> to control the minimum and
maximum values allowed in the control. The range limits are not enforced if 
they have not been explicitly assigned, contain the same value, or when 
MaxValue is smaller than MinValue.
</p>
<p>
Use <var>Increment</var> to control the amount applied to the control value 
when a button in the <var>UpDown</var> control is clicked. Use 
<var>NullValue</var> and <var>NullValueBehaviour</var> to control the logic 
applied with an invalid numeric value is stored in the control.
</p>
</descr>
<seealso>
<link id="TSpinEditExBase.Increment"/>
<link id="TSpinEditExBase.MaxValue"/>
<link id="TSpinEditExBase.MinValue"/>
<link id="TSpinEditExBase.NullValue"/>
<link id="TSpinEditExBase.NullValueBehaviour"/>
<link id="TSpinEditExBase.StrToValue"/>
<link id="TSpinEditExBase.TextIsNumber"/>
<link id="TSpinEditExBase.UpDown"/>
</seealso>
</element>

<element name="TDisplayMode">
<short>
Indicates the display mode used for the floating point value in 
TFloatSpinEditEx.
</short>
<descr/>
<seealso/>
</element>
<element name="TDisplayMode.dmFixed">
<short>Value is displayed with fixed precision and decimal places.</short>
</element>
<element name="TDisplayMode.dmScientific">
<short>
Value is displayed in scientific (exponential) notation used for numbers that 
are too large or too small to be easily represented using the decimal form.
</short>
</element>
<element name="TDisplayMode.dmAuto">
<short>
Value is automatically formatted using scientific notation when it exceeds 
the limits assigned in ExponentialFormatLimitPos or ExponentialFormatLimitNeg.
</short>
</element>
<element name="TDisplayMode.dmAutoZeroFixed">
<short>
When Value is 0.0, it is formatted using 20 digits of fixed precision with 
the number of decimals in DecimalPlaces. Similar to dmAuto but using fixed 
precision.
</short>
</element>

<element name="TCustomFloatSpinEditEx">
<short>A specialization of TSpinEditExBase for the Double data type.</short>
<descr>
<p>
<var>TCustomFloatSpinEditEx</var> defines an extended spin edit control with 
an editor for the numeric value, and buttons to increment or decrement the 
control value.It is a  <var>TSpinEditExBase</var> descendant which 
specializes the generic ancestor for the <url 
href="https://www.freepascal.org/docs-html/ref/refsu5.html"><var>Double</var></url> 
data type. Double is a real type which allows values in the range 5.0E-324 .. 
1.7E+308 and uses 15-16 digits of precision. Double is used to implement 
properties including: <var>Increment</var>, <var>MinValue</var>, 
<var>MaxValue</var>, <var>NullValue</var>, and <var>Value</var>.
</p>
<p>
Do not create instances of TCustomFloatSpinEditEx; use the 
<var>TFloatSpinEditEx</var> descendant which sets the visibility and default 
values for properties in the class.
</p>
<remark>
The <var>NumbersOnly</var> property has been removed as a published property 
in TCustomFloatSpinEditEx and its descendent classes. It is not appropriate 
for use in floating point notation. Removed in LazUtils version 2.3.0.
</remark>
</descr>
<seealso>
<link id="TSpinEditExBase"/>
<link id="TFloatSpinEditEx"/>
<link id="IntroToSpinEx"/>
</seealso>
</element>

<!-- private constants -->
<element name="TCustomFloatSpinEditEx.DefDecimals">
<short>
Default number of decimal places used to display the Value for the control.
</short>
</element>
<element name="TCustomFloatSpinEditEx.DefDecimalSeparator">
<short>Default decimal separator used in the floating point value.</short>
</element>

<!-- private members and methods -->
<element name="TCustomFloatSpinEditEx.FDecimals">
<short>
Number of decimal places used to display the Value for the control.
</short>
</element>
<element name="TCustomFloatSpinEditEx.FDisplayMode">
<short>Formatting used to edit and display the Value for the control.</short>
</element>
<element name="TCustomFloatSpinEditEx.FExponentDigits">
<short>
Number of digits displayed in an exponent using scientific notation.
</short>
</element>
<element name="TCustomFloatSpinEditEx.FExponentialFormatLimitNeg">
<short>
Maximum exponent digits allowed before exponential notation is used for 
negative values.
</short>
</element>
<element name="TCustomFloatSpinEditEx.FExponentialFormatLimitPos">
<short>
Maximum exponent digits allowed before exponential notation is used for 
positive values.
</short>
</element>
<element name="TCustomFloatSpinEditEx.FFS">
<short>Local format settings used in the control.</short>
</element>
<element name="TCustomFloatSpinEditEx.FPrecision">
<short>
Number of digits of precision used to edit and display the Value for the 
control.
</short>
</element>

<element name="TCustomFloatSpinEditEx.GetDecimalSeparator">
<short>Gets the value for the DecimalSeparator property.</short>
<seealso>
<link id="TCustomFloatSpinEditEx.DecimalSeparator"/>
</seealso>
</element>
<element name="TCustomFloatSpinEditEx.GetDecimalSeparator.Result">
<short>Value for the property.</short>
</element>

<element name="TCustomFloatSpinEditEx.SetDecimalSeparator">
<short>Sets the value for the DecimalSeparator property.</short>
<seealso>
<link id="TCustomFloatSpinEditEx.DecimalSeparator"/>
</seealso>
</element>
<element name="TCustomFloatSpinEditEx.SetDecimalSeparator.AValue">
<short>New value for the property.</short>
</element>

<element name="TCustomFloatSpinEditEx.SetDisplayMode">
<short>Sets the value for the DisplayMode property.</short>
<descr/>
<seealso>
<link id="TCustomFloatSpinEditEx.DisplayMode"/>
</seealso>
</element>
<element name="TCustomFloatSpinEditEx.SetDisplayMode.AValue">
<short>New value for the property.</short>
</element>

<element name="TCustomFloatSpinEditEx.SetExponentDigits">
<short>Sets the value for the ExponentDigits property.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomFloatSpinEditEx.SetExponentDigits.AValue">
<short>New value for the property.</short>
</element>

<element name="TCustomFloatSpinEditEx.SetExponentialFormatLimitNeg">
<short>Sets the value for the ExponentialFormatLimitNeg property.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomFloatSpinEditEx.SetExponentialFormatLimitNeg.AValue">
<short>New value for the property.</short>
</element>

<element name="TCustomFloatSpinEditEx.SetExponentialFormatLimitPos">
<short>Sets the value for the ExponentialFormatLimitPos property.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomFloatSpinEditEx.SetExponentialFormatLimitPos.AValue">
<short>New value for the property.</short>
</element>

<element name="TCustomFloatSpinEditEx.SetPrecision">
<short>Sets the value for the Precision property.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomFloatSpinEditEx.SetPrecision.AValue">
<short>New value for the property.</short>
</element>

<!-- protected methods  -->
<element name="TCustomFloatSpinEditEx.GetFormatsettings">
<short>Gets the local format settings for the control.</short>
<descr/>
<seealso/>
</element>
<element name="TCustomFloatSpinEditEx.GetFormatsettings.Result">
<short>Local format settings used for the control.</short>
</element>

<element name="TCustomFloatSpinEditEx.EditKeyPress">
<short>
Implements handler for KeyPress events in the Edit for the control.
</short>
<descr>
<p>
<var>EditKeyPress</var> is an overridden method in 
<var>TCustomFloatSpinEditEx</var> used to ensure that the specified character 
is valid for the Edit in the control. <var>Key</var> contains the character 
examined in the method. The allowed values in Key include the following 
characters:
</p>
<dl>
<dt>Numeric Digits</dt>
<dd>Characters in the range '0'..'9'.</dd>
<dt>Decimal separator</dt>
<dd>
Accepts either ',' (Comma), or '.' (Period) characters as the decimal 
separator, and is automatically translated to the value used in local format 
settings in the DecimalSeparator property. Any decimal separator will, 
however, be discarded when DecimalPlaces is set to 0 (zero).
</dd>
<dt>Exponent Notation</dt>
<dd>
Allows 'E' or 'e' to represent the exponent character used to represent "... 
times ten raised to the power of ...".
</dd>
<dt>Control Characters</dt>
<dd>
Allows the following control characters to be passed to the Edit control: #8 
(BackSpace), #9 (Tab), ^C (Ctrl+C or Copy), ^X (Ctrl+X or Cut), ^V (Ctrl+V or 
Paste), ^Z (Ctrl+Z or Undo).
</dd>
</dl>
<p>
EditKeyPress calls the inherited method to signal the OnKeyPress event 
handler (when assigned).
</p>
<p>
Any character which is not allowed in the floating point value is set to #0 
to discard the character value.
</p>
</descr>
<seealso>
<link id="TSpinEditExBase.Edit"/>
<link id="TCustomFloatSpinEditEx.DecimalPlaces"/>
<link id="TCustomFloatSpinEditEx.DecimalSeparator"/>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.EditKeyPress"/>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.OnKeyPress"/>
</seealso>
</element>
<element name="TCustomFloatSpinEditEx.EditKeyPress.Key">
<short>Character examined in the method.</short>
</element>

<element name="TCustomFloatSpinEditEx.TextIsNumber">
<short>
Determines if the specified string is a valid number for the numeric data 
type.
</short>
<descr>
<p>
<var>TextIsNumber</var> is an overridden <var>Boolean</var> function used to 
determine if the specified string contains a valid representation for the 
numeric data type in the control. TextIsNumber re-implements the inherited 
method to use the <var>Double</var> data type, and does not call the method 
in the ancestor class.
</p>
<p>
TextIsNumber calls <var>TryStrToFloat</var> using the local format settings 
for the control to convert the value in <var>S</var> to a floating point 
value. An exception raised by TryStrToFloat is handled in the method. The 
converted numeric value is stored in the <var>ANumber</var> argument on 
success. ANumber should be considered "undefined" when the conversion fails 
due to an exception.
</p>
<p>
The return value is <b>True</b> when the value in S can be converted to the 
Double data type. It is <b>False</b> when an exception was raised and handled 
in the method.
</p>
<p>
TextIsNumber is used in the implementation of methods like 
<var>UpdateControl</var>, <var>SpinUpDown</var>, and <var>StrToValue</var>. 
It is also called when setting a new value in the <var>Value</var> property.
</p>
<p>
Set values in the <var>MinValue</var>, <var>MaxValue</var>, 
<var>NullValue</var>, and <var>NullValueBehaviour</var> properties to control 
the actions performed when TextIsNumber returns <b>False</b>.
</p>
</descr>
<seealso>
<link id="TSpinEditExBase"/>
<link id="TSpinEditExBase.TextIsNumber"/>
<link id="TFloatSpinEditEx"/>
</seealso>
</element>
<element name="TCustomFloatSpinEditEx.TextIsNumber.Result">
<short><b>True</b> if the specified string is a valid numeric value.</short>
</element>
<element name="TCustomFloatSpinEditEx.TextIsNumber.S">
<short>String with the value examined in the method.</short>
</element>
<element name="TCustomFloatSpinEditEx.TextIsNumber.ANumber">
<short>
Stores the numeric value for the specified string; undefined when the result 
is <b>False</b>.
</short>
</element>

<element name="TCustomFloatSpinEditEx.SafeInc">
<short>
Ensures the incremented value is a valid number for the Double data type.
</short>
<descr>
<p>
<var>SafeInc</var> is an overridden function in 
<var>TCustomFloatSpinEditEx</var> used to increase the specified value by the 
<var>Increment</var> for the control. SafeInc ensures that the incremented 
value is valid for the <var>Double</var> data type. SafeInc does not call the 
inherited method.
</p>
<p>
<var>AValue</var> contains the type with the numeric value to be incremented.
</p>
<p>
The return value contains the numeric value after the value in Increment has 
been added. The return value is constrained when the incremented value is too 
large for the Double data type. The upper limit for the value in the data 
type is defined in the <var>MaxDouble</var> constant.
</p>
<p>
SafeInc is used in the implementation of the <var>SpinUpDown</var> method.
</p>
<p>
<var>SafeDec</var> is used to decrement a specified Double value.
</p>
</descr>
<seealso>
<link id="TSpinEditExBase.Increment"/>
<link id="TCustomFloatSpinEditEx.SafeDec"/>
</seealso>
</element>
<element name="TCustomFloatSpinEditEx.SafeInc.Result">
<short>The numeric value after Increment has been added.</short>
</element>
<element name="TCustomFloatSpinEditEx.SafeInc.AValue">
<short>Numeric value incremented in the method.</short>
</element>

<element name="TCustomFloatSpinEditEx.SafeDec">
<short>
Ensures the decremented value is a valid number for the Double data type.
</short>
<descr>
<p>
<var>SafeDec</var> is an overridden function in 
<var>TCustomFloatSpinEditEx</var> used to decrease the specified value by the 
<var>Increment</var> for the control. SafeDec ensures that the decremented 
value is valid for the <var>Double</var> data type. SafeDec does not call the 
inherited method.
</p>
<p>
<var>AValue</var> contains the type with the numeric value to be decremented.
</p>
<p>
The return value contains the numeric value after the value in Increment has 
been subtracted. The return value is constrained when the decremented value 
is too small for the Double data type. The lower limit for the value in the 
data type is defined as <var>-1 * MaxDouble</var>.
</p>
<p>
SafeDec is used in the implementation of the <var>SpinUpDown</var> method.
</p>
<p>
<var>SafeInc</var> is used to increment a specified Double value.
</p>
</descr>
<seealso/>
</element>
<element name="TCustomFloatSpinEditEx.SafeDec.Result">
<short>The numeric value after Increment has been subtracted.</short>
</element>
<element name="TCustomFloatSpinEditEx.SafeDec.AValue">
<short>Numeric value decremented in the method.</short>
</element>

<element name="TCustomFloatSpinEditEx.SameValue">
<short>Determines whether the specified arguments have the same value.</short>
<descr>
<p>
<var>SameValue</var> is an overridden <var>Boolean</var> function used to 
compare the values in <var>AValue1</var> and <var>AValue2</var> to determine 
if they have the same value. The return value is <b>True</b> when both 
AValue1 and AValue2 have the same value. The arguments are implemented using 
the Double type in TCustomFloatSpinEditEx. The overloaded SameValue routine 
in the <file>math.pp</file> unit is called to get the return value for the 
method.
</p>
<p>
This method was introduced to ensure that the type specialization for the 
class instance is used when value comparisons are performed. 
</p>
</descr>
<version>
Introduced in version 2.2.0. Modified in version 3.0 to remove the define 
for FPC compiler version.
</version>
<seealso>
<link id="TSpinEditExBase.SameValue"/>
<link id="#rtl.math.SameValue">Math.SameValue</link>
</seealso>
</element>
<element name="TCustomFloatSpinEditEx.SameValue.Result">
<short><b>True</b> if both arguments have the same value.</short>
</element>
<element name="TCustomFloatSpinEditEx.SameValue.AValue1">
<short>First value for the comparison.</short>
</element>
<element name="TCustomFloatSpinEditEx.SameValue.AValue2">
<short>Second value for the comparison.</short>
</element>

<element name="TCustomFloatSpinEditEx.SetDecimals">
<short>Sets the value for the DecimalPlaces property.</short>
<descr/>
<seealso>
<link id="TCustomFloatSpinEditEx.DecimalPlaces"/>
</seealso>
</element>
<element name="TCustomFloatSpinEditEx.SetDecimals.AValue">
<short>New value for the property.</short>
</element>

<element name="TCustomFloatSpinEditEx.WSRegisterClass">
<short>Registers the widget set class used for the control.</short>
<descr>
<p>
Calls the inherited method on entry, and registers the following properties 
to be skipped during LCL component streaming:
</p>
<dl>
<dt>NumbersOnly</dt>
<dd>Property should not be published for this control.</dd>
</dl>
</descr>
<version>
Added in LazUtils version 2.3.0 and higher.
</version>
<seealso/>
</element>

<element name="TCustomFloatSpinEditEx.DisplayMode">
<short>
Specifies the formatting used to edit and display the Value for the control.
</short>
<descr>
<p>
<var>DisplayMode</var> is a <var>TDisplayMode</var> property which specifies 
the formatting used to edit and display the <var>Value</var> for the control. 
The default value for the property is <var>dmFixed</var>, and indicates that 
fixed precision and decimals are used when formatting the control value.

See <var>TDisplayMode</var> for more information about the values and 
meanings in the enumeration.
</p>
<p>
Changing the value in DisplayMode causes the Value for the control to be 
updated. It also forces <var>UpdateControl</var> to be called to validate 
and normalize members in the class instance.
</p>
<p>
DisplayMode is used in the implementation of the <var>ValueToStr</var> method 
which generates the string representation for the Value in the control, and 
is assigned to the <var>Text</var> property in the <var>Edit</var> for the 
grouped edit control.
</p>
</descr>
<seealso>
<link id="TDisplayMode"/>
<link id="TSpinEditExBase.Value"/>
<link id="TCustomFloatSpinEditEx.ValueToStr"/>
<link id="TSpinEditExBase.Edit"/>
</seealso>
</element>

<element name="TCustomFloatSpinEditEx.ExponentialFormatLimitPos">
<short>
Maximum exponent digits allowed before exponential notation is required for a 
positive number.
</short>
<descr>
<p>
<var>ExponentialFormatLimitPos</var> is an <var>Integer</var> property which 
contains the maximum exponent allowed before a positive <var>Value</var> in 
the control must be represented using exponential notation. The default value 
for the property is  <b>6</b> (six) and indicates that Value must exceed 10^6 
before exponential notation is required for a positive number.
</p>
<p>
Setting a new value for the property causes Value to be updated, and calls 
the <var>UpdateControl</var> method to validate and normalize members in the 
class instance.
</p>
<p>
ExponentialFormatLimitPos is used in the <var>ValueToStr</var> method when 
<var>DisplayMode</var> contains the value <var>dmAuto</var> and Value has a 
non-zero floating point value.
</p>
<p>
Use <var>ExponentialFormatLimitNeg</var> to specify the maximum exponent 
allowed before using exponential notation for a negative value in the control.
</p>
<p>
Use <var>Precision</var> to specify the total number of digits used for a 
number in scientific notation. Use <var>ExponentDigits</var> to specify the 
number of exponent digits used for a number in scientific notation.
</p>
</descr>
<seealso>
<link id="TCustomFloatSpinEditEx.DisplayMode"/>
<link id="TCustomFloatSpinEditEx.Precision"/>
<link id="TCustomFloatSpinEditEx.ExponentDigits"/>
<link id="TSpinEditExBase.Value"/>
<link id="TCustomFloatSpinEditEx.ValueToStr"/>
<link id="TCustomFloatSpinEditEx.ExponentialFormatLimitNeg"/>
<link id="TDisplayMode"/>
</seealso>
</element>

<element name="TCustomFloatSpinEditEx.ExponentialFormatLimitNeg">
<short>
Maximum exponent digits allowed before exponential notation is required for a 
negative number.
</short>
<descr>
<p>
<var>ExponentialFormatLimitNeg</var> is an <var>Integer</var> property which 
contains the exponent value at which use of scientific notation is triggered 
for a negative <var>Value</var> in the control. The default value for the 
property is <b>-6</b>, and indicates that scientific notation is required 
when Value is smaller than 10^-6.
</p>
<p>
Changing the value for the property causes GetValue and UpdateControl to be 
called.
</p>
<p>
ExponentialFormatLimitNeg is used in the <var>ValueToStr</var> method when 
<var>DisplayMode</var> is <var>dmAuto</var> and the <var>Value</var> is not 
0.0.
</p>
<p>
Use <var>ExponentialFormatLimitPos</var> to specify the exponent value which 
triggers use of scientific notation for a positive value.
</p>
<p>
Use <var>Precision</var> to specify the total number of digits used for a 
number in scientific notation. Use <var>ExponentDigits</var> to specify the 
number of exponent digits used for a number in scientific notation.
</p>
</descr>
<seealso>
<link id="TSpinEditExBase.Value"/>
<link id="TCustomFloatSpinEditEx.ValueToStr"/>
<link id="TCustomFloatSpinEditEx.DisplayMode"/>
<link id="TCustomFloatSpinEditEx.ExponentialFormatLimitPos"/>
<link id="TCustomFloatSpinEditEx.Precision"/>
<link id="TCustomFloatSpinEditEx.ExponentDigits"/>
</seealso>
</element>

<element name="TCustomFloatSpinEditEx.Precision">
<short>
Number of digits of precision used after the decimal point in scientific 
notation.
</short>
<descr>
<p>
Precision is an Integer property which specifies the number of digits of 
precision used after the decimal point for a floating point value in 
scientific notation. It is the value used as the precision argument for the 
FloatToStrF routine in RTL. The default value for the property is <b>6</b>. 
The maximum precision for the data type is 15.
</p>
<p>
Changing the value for the property causes the GetValue and UpdateControl 
methods to be called.
</p>
<p>
Precision is used in the ValueToStr method when <var>DisplayMode</var> is 
<var>dmScientific</var> or <var>dmAuto</var>.
</p>
</descr>
<seealso/>
</element>

<element name="TCustomFloatSpinEditEx.ExponentDigits">
<short>
Number of digits prior to the decimal point used in scientific notation.
</short>
<descr>
<p>
<var>ExponentDigits</var> is an <var>Integer</var> property which contains 
the number of digits used before the decimal point when using scientific 
notation. The default value for the property is <b>2</b>.
</p>
<p>
Changing the value for the property causes the <var>GetValue</var> and 
<var>UpdateControl</var> methods to be called.
</p>
<p>
ExponentDigits is used in the <var>ValueToStr</var> method when the 
<var>DisplayMode</var> is <var>dmScientific</var> or <var>dmAuto</var>.
</p>
<p>
Use <var>Precision</var> to specify the number of digits after the decimal 
point in a floating point value using scientific notation.
</p>
</descr>
<seealso>
<link id="TCustomFloatSpinEditEx.Precision"/>
<link id="TCustomFloatSpinEditEx.DisplayMode"/>
<link id="TCustomFloatSpinEditEx.ValueToStr"/>
<link id="TSpinEditExBase.Value"/>
</seealso>
</element>

<!-- public methods and properties -->
<element name="TCustomFloatSpinEditEx.ValueToStr">
<short>
Gets the string representation for the numeric Value in the control.
</short>
<descr/>
<seealso/>
</element>
<element name="TCustomFloatSpinEditEx.ValueToStr.Result">
<short>String representation for the numeric Value.</short>
</element>
<element name="TCustomFloatSpinEditEx.ValueToStr.AValue">
<short>Numeric value examined and converted in the method.</short>
</element>

<element name="TCustomFloatSpinEditEx.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 makes an internal copy of the default format settings for the 
platform. This allows the value in <var>DecimalSeparator</var> to be 
specified and stored independent of the value in 
<var>DefaultFormatSettings</var>. The local copy is modified to used the 
value in the <var>DefDecimalSeparator</var> constant as the default value for 
DecimalSeparator.
</p>
<p>
Create sets the default values for properties, including:
</p>
<dl>
<dt>DecimalPlaces</dt>
<dd>Set to the value in the DefDecimals constant.</dd>
<dt>ExponentialFormatLimitPos</dt>
<dd>Set to 6 (six).</dd>
<dt>ExponentialFormatLimitNeg</dt>
<dd>Set to -6.</dd>
<dt>Precision</dt>
<dd>Set 6 digits for the mantissa.</dd>
<dt>ExponentDigits</dt>
<dd>Set to 2.</dd>
<dt>DisplayMode</dt>
<dd>
Set to the value dmFixed for fixed format using the Precision and 
ExponentDigits defined in the control.
</dd>
</dl>
</descr>
<seealso/>
</element>

<element name="TCustomFloatSpinEditEx.DecimalSeparator">
<short>Value used to represent a decimal point in the Edit control.</short>
<descr>
<p>
<var>DecimalSeparator</var> is a <var>Char</var> property which contains the 
character used as the decimal point in a floating point value. Read and write 
access for the property value are redirected to the local 
<var>TFormatSetting</var> stored in the class instance. This allows the 
control to set the decimal separator independent of the format settings for 
the platform or operating system.
</p>
<p>
The default value for the property is defined in the 
<var>DefDecimalSeparator</var> constant. Changing the value for the property 
updates the local format settings, and calls <var>UpdateControl</var> to 
validate and update members in the class instance.
</p>
<p>
DecimalSeparator is used in <var>EditKeyPress</var> to validate characters 
entered in the <var>Edit</var> for the control. It is also used in 
<var>ValueToStr</var> to format the value in the control for the selected 
<var>DisplayMode</var>.
</p>
</descr>
<seealso>
<link id="TCustomFloatSpinEditEx.Create"/>
<link id="TSpinEditExBase.Edit"/>
<link id="TCustomFloatSpinEditEx.EditKeyPress"/>
<link id="TCustomFloatSpinEditEx.ValueToStr"/>
<link id="TCustomFloatSpinEditEx.DisplayMode"/>
</seealso>
</element>

<element name="TCustomFloatSpinEditEx.DecimalPlaces">
<short>
Number of decimal places used to edit and display the Value for the control.
</short>
<descr>
<p>
<var>DecimalPlaces</var> is an <var>Integer</var> property which indicates 
the number of decimal places used when formatting the <var>Value</var> for 
the control. It must contain a positive integer value or <b>0</b> 
(<b>zero</b>). The default value for the property is defined in the 
<var>DefDecimals</var> constant. Changing the value for the property causes 
the Value property to be updated, and calls <var>UpdateControl</var> to 
validate and update other members in the class instance.
</p>
<p>
DecimalPlaces is used in <var>ValueToStr</var> to format the value in the 
control for the selected <var>DisplayMode</var>.
</p>
</descr>
<seealso>
<link id="TCustomFloatSpinEditEx.Create"/>
<link id="TSpinEditExBase.Edit"/>
<link id="TSpinEditExBase.Value"/>
<link id="TCustomFloatSpinEditEx.ValueToStr"/>
<link id="TCustomFloatSpinEditEx.DisplayMode"/>
</seealso>
</element>

<element name="TFloatSpinEditEx">
<short>
Implement a spin edit control for a value using the Double data type.
</short>
<descr>
<p>
<var>TFloatSpinEditEx</var> is a <var>TCustomFloatSpinEditEx</var> descendant 
which implements a spin edit control for a value using the <var>Double</var> 
data type. TFloatSpinEditEx sets the visibility for properties defined in 
ancestor classes.
</p>
<p>
<var>TFloatSpinEditEx</var> defines an extended spin edit control with an 
editor for the numeric value, and buttons to increment or decrement the 
control value. It specializes the generic ancestor for the <url 
href="https://www.freepascal.org/docs-html/ref/refsu5.html"><var>Double</var></url> 
data type. Double is a real type which allows values in the range 5.0E-324 .. 
1.7E+308 and uses 15-16 digits of precision. Double is used to implement 
properties including: <var>Increment</var>, <var>MinValue</var>, 
<var>MaxValue</var>, <var>NullValue</var>, and <var>Value</var>.
</p>
</descr>
<seealso>
<link id="TCustomFloatSpinEditEx"/>
<link id="IntroToSpinEx"/>
</seealso>
</element>

<element name="TFloatSpinEditEx.AutoSelected" link="#lcl.groupededit.TCustomAbstractGroupedEdit.AutoSelected"/>
<element name="TFloatSpinEditEx.AutoSelect" link="#lazcontrols.spinex.TCustomEdit.AutoSelect"/>
<element name="TFloatSpinEditEx.AutoSizeHeightIsEditHeight" link="#lcl.groupededit.TCustomAbstractGroupedEdit.AutoSizeHeightIsEditHeight"/>
<element name="TFloatSpinEditEx.AutoSize" link="#lcl.groupededit.TCustomAbstractGroupedEdit.AutoSize"/>
<element name="TFloatSpinEditEx.Action" link="#lcl.controls.TControl.Action"/>
<element name="TFloatSpinEditEx.Align" link="#lcl.controls.TControl.Align"/>
<element name="TFloatSpinEditEx.Alignment" link="#lcl.groupededit.TCustomAbstractGroupedEdit.Alignment"/>
<element name="TFloatSpinEditEx.Anchors" link="#lcl.controls.TControl.Anchors"/>
<element name="TFloatSpinEditEx.BiDiMode" link="#lcl.controls.TControl.BiDiMode"/>
<element name="TFloatSpinEditEx.BorderSpacing" link="#lcl.controls.TControl.BorderSpacing"/>
<element name="TFloatSpinEditEx.BorderStyle" link="#lcl.controls.TCustomControl.BorderStyle"/>
<element name="TFloatSpinEditEx.CharCase" link="#lcl.groupededit.TCustomAbstractGroupedEdit.CharCase"/>
<element name="TFloatSpinEditEx.Color" link="#lcl.groupededit.TCustomAbstractGroupedEdit.Color"/>
<element name="TFloatSpinEditEx.Constraints" link="#lcl.controls.TControl.Constraints"/>
<element name="TFloatSpinEditEx.Cursor" link="#lcl.controls.TControl.Cursor"/>
<element name="TFloatSpinEditEx.DirectInput" link="#lcl.groupededit.TCustomAbstractGroupedEdit.DirectInput"/>
<element name="TFloatSpinEditEx.EchoMode" link="#lcl.groupededit.TCustomAbstractGroupedEdit.EchoMode"/>
<element name="TFloatSpinEditEx.Enabled" link="#lcl.controls.TControl.Enabled"/>
<element name="TFloatSpinEditEx.FocusOnBuddyClick" link="#lcl.groupededit.TCustomAbstractGroupedEdit.FocusOnBuddyClick"/>
<element name="TFloatSpinEditEx.Font" link="#lcl.controls.TControl.Font"/>
<element name="TFloatSpinEditEx.Hint" link="#lcl.controls.TControl.Hint"/>
<element name="TFloatSpinEditEx.Layout" link="#lcl.groupededit.TCustomAbstractGroupedEdit.Layout"/>
<element name="TFloatSpinEditEx.MaxLength" link="#lcl.groupededit.TCustomAbstractGroupedEdit.MaxLength"/>
<element name="TFloatSpinEditEx.ParentBiDiMode" link="#lcl.controls.TControl.ParentBiDiMode"/>
<element name="TFloatSpinEditEx.ParentColor" link="#lcl.groupededit.TCustomAbstractGroupedEdit.ParentColor"/>
<element name="TFloatSpinEditEx.ParentFont" link="#lcl.controls.TControl.ParentFont"/>
<element name="TFloatSpinEditEx.ParentShowHint" link="#lcl.controls.TControl.ParentShowHint"/>
<element name="TFloatSpinEditEx.PopupMenu" link="#lcl.groupededit.TCustomAbstractGroupedEdit.PopupMenu"/>
<element name="TFloatSpinEditEx.ReadOnly" link="#lcl.groupededit.TCustomAbstractGroupedEdit.ReadOnly"/>
<element name="TFloatSpinEditEx.ShowHint" link="#lcl.controls.TControl.ShowHint"/>

<element name="TFloatSpinEditEx.TabOrder" link="#lcl.controls.TWinControl.TabOrder"/>
<element name="TFloatSpinEditEx.TabStop" link="#lcl.groupededit.TCustomAbstractGroupedEdit.TabStop"/>
<element name="TFloatSpinEditEx.TextHint" link="#lcl.groupededit.TCustomAbstractGroupedEdit.TextHint"/>
<element name="TFloatSpinEditEx.Visible" link="#lcl.controls.TControl.Visible"/>

<element name="TFloatSpinEditEx.OnChange" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnChange"/>
<element name="TFloatSpinEditEx.OnClick" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnClick"/>
<element name="TFloatSpinEditEx.OnDblClick" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnDblClick"/>
<element name="TFloatSpinEditEx.OnDragDrop" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnDragDrop"/>
<element name="TFloatSpinEditEx.OnDragOver" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnDragOver"/>
<element name="TFloatSpinEditEx.OnContextPopup" link="#lcl.controls.TControl.OnContextPopup"/>
<element name="TFloatSpinEditEx.OnEditingDone" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnEditingDone"/>
<element name="TFloatSpinEditEx.OnEndDrag" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnEndDrag"/>
<element name="TFloatSpinEditEx.OnEnter" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnEnter"/>
<element name="TFloatSpinEditEx.OnExit" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnExit"/>
<element name="TFloatSpinEditEx.OnKeyDown" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnKeyDown"/>
<element name="TFloatSpinEditEx.OnKeyPress" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnKeyPress"/>
<element name="TFloatSpinEditEx.OnKeyUp" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnKeyUp"/>
<element name="TFloatSpinEditEx.OnMouseDown" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnMouseDown"/>
<element name="TFloatSpinEditEx.OnMouseEnter" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnMouseEnter"/>
<element name="TFloatSpinEditEx.OnMouseLeave" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnMouseLeave"/>
<element name="TFloatSpinEditEx.OnMouseMove" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnMouseMove"/>
<element name="TFloatSpinEditEx.OnMouseUp" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnMouseUp"/>
<element name="TFloatSpinEditEx.OnMouseWheel" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnMouseWheel"/>
<element name="TFloatSpinEditEx.OnMouseWheelDown" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnMouseWheelDown"/>
<element name="TFloatSpinEditEx.OnMouseWheelUp" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnMouseWheelUp"/>
<element name="TFloatSpinEditEx.OnStartDrag" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnStartDrag"/>
<element name="TFloatSpinEditEx.OnUTF8KeyPress" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnUTF8KeyPress"/>

<element name="TFloatSpinEditEx.ArrowKeys" link="#lazcontrols.spinex.TSpinEditExBase.ArrowKeys"/>
<element name="TFloatSpinEditEx.DecimalSeparator" link="#lazcontrols.spinex.TCustomFloatSpinEditEx.DecimalSeparator"/>
<element name="TFloatSpinEditEx.DecimalPlaces" link="#lazcontrols.spinex.TCustomFloatSpinEditEx.DecimalPlaces"/>
<element name="TFloatSpinEditEx.Increment" link="#lazcontrols.spinex.TSpinEditExBase.Increment"/>
<element name="TFloatSpinEditEx.MaxValue" link="#lazcontrols.spinex.TSpinEditExBase.MaxValue"/>
<element name="TFloatSpinEditEx.MinValue" link="#lazcontrols.spinex.TSpinEditExBase.MinValue"/>
<element name="TFloatSpinEditEx.MinRepeatValue" link="#lazcontrols.spinex.TSpinEditExBase.MinRepeatValue"/>
<element name="TFloatSpinEditEx.NullValue" link="#lazcontrols.spinex.TSpinEditExBase.NullValue"/>
<element name="TFloatSpinEditEx.NullValueBehaviour" link="#lazcontrols.spinex.TSpinEditExBase.NullValueBehaviour"/>
<element name="TFloatSpinEditEx.Orientation" link="#lazcontrols.spinex.TSpinEditExBase.Orientation"/>
<element name="TFloatSpinEditEx.Spacing" link="#lcl.groupededit.TCustomAbstractGroupedEdit.Spacing"/>
<element name="TFloatSpinEditEx.UpDownVisible" link="#lazcontrols.spinex.TSpinEditExBase.UpDownVisible"/>
<element name="TFloatSpinEditEx.Value" link="#lazcontrols.spinex.TSpinEditExBase.Value"/>

<element name="TFloatSpinEditEx.DisplayMode" link="#lazcontrols.spinex.TCustomFloatSpinEditEx.DisplayMode"/>
<element name="TFloatSpinEditEx.ExponentialFormatLimitPos" link="#lazcontrols.spinex.TCustomFloatSpinEditEx.ExponentialFormatLimitPos"/>
<element name="TFloatSpinEditEx.ExponentialFormatLimitNeg" link="#lazcontrols.spinex.TCustomFloatSpinEditEx.ExponentialFormatLimitNeg"/>
<element name="TFloatSpinEditEx.Precision" link="#lazcontrols.spinex.TCustomFloatSpinEditEx.Precision"/>
<element name="TFloatSpinEditEx.ExponentDigits" link="#lazcontrols.spinex.TCustomFloatSpinEditEx.ExponentDigits"/>

<element name="TCustomSpinEditEx">
<short>
Defines the base class for a spin edit control for Int64 values.
</short>
<descr>
<p>
<var>TCustomSpinEditEx</var> is a specialization of the generic 
<var>TSpinEditExBase</var> class for the <var>Int64</var> data type. In 
addition to implementing the Int64 data type, it provides additional 
properties and methods used to validate, format, and display the numeric 
value.
</p>
<p>
Use the <var>ThousandSeparator</var> to set the UTF-8-encoded value used as 
the decimal point in the control value.
</p>
<p>
Set <var>Increment</var> to the value by which the control is increased or 
decreased when the <var>UpDown</var> button is clicked.
</p>
<p>
Use <var>ValueToStr</var> to get the string representation for the numeric 
value.
</p>
<p>
Do not create instances of TCustomSpinEditEx; use <var>TSpinEditEx</var>, 
which sets the visibility for properties, instead.
</p>
<p>
Use <var>TFloatSpinEditEx</var> to edit a floating point value using fixed or 
scientific notation.
</p>
</descr>
<seealso>
<link id="TSpinEditExBase"/>
<link id="TSpinEditEx"/>
<link id="TFloatSpinEditEx"/>
<link id="IntroToSpinEx"/>
</seealso>
</element>

<!-- private members and methods -->
<element name="TCustomSpinEditEx.FThousandSeparator">
<short>Stores the thousands separator.</short>
</element>

<element name="TCustomSpinEditEx.SetThousandSeparator">
<short>Sets the value for the ThousandSeparator property.</short>
<seealso>
<link id="TCustomSpinEditEx.ThousandSeparator"/>
</seealso>
</element>
<element name="TCustomSpinEditEx.SetThousandSeparator.AValue">
<short>New value for the property.</short>
</element>

<!-- protected methods -->
<element name="TCustomSpinEditEx.EditKeyPress">
<short>
Implements the handler for KeyPress events in the Edit for the control.
</short>
<descr>
<p>
<var>EditKeyPress</var> is an overridden method in 
<var>TCustomSpinEditEx</var>, and calls the inherited method on entry. The 
<var>OnKeyPress</var> event handler is signalled (when assigned) by the 
inherited method.
</p>
<p>
EditKeyPress ensures that the value in <var>Key</var> is valid for the 
control. An invalid value is discarded by setting Key to the <b>#0</b> 
character (Decimal 0). Valid characters include numeric digits 
(<b>'0'..'9'</b>), the value in <var>ThousandSeparator</var>, and the 
negative sign indicator (<b>'-'</b>).
</p>
<p>
Please note: The sign indicator will be disallowed when a positive non-zero 
value is specified in the <var>MinValue</var> property.
</p>
<p>
Tab, BackSpace, Cut, Paste, Copy, and Undo key presses are passed to the 
inherited method.
</p>
</descr>
<seealso>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.EditKeyPress"/>
<link id="#lcl.groupededit.TCustomAbstractGroupedEdit.OnKeyPress"/>
<link id="TCustomSpinEditEx.ThousandSeparator"/>
<link id="TCustomSpinEditEx.MinValue"/>
</seealso>
</element>
<element name="TCustomSpinEditEx.EditKeyPress.Key">
<short>Character examined in the method.</short>
</element>

<element name="TCustomSpinEditEx.SafeInc">
<short>Ensures the incremented value is valid for the data type.</short>
<descr>
<p>
<var>SafeInc</var> is a function used to increase <var>AValue</var> by the 
amount specified in the <var>Increment</var> property. SafeInc is overridden 
in TCustomSpinEditEx to ensure that the incremented value is valid for the 
<var>Int64</var> data type.
</p>
<p>
<var>AValue</var> contains the numeric value to be incremented.
</p>
<p>
The return value contains the Int64 value after Increment has been added. The 
return value is constrained when the incremented value is too large for the 
Int64 data type; its value is set to <var>High(Int64)</var>.
</p>
<p>
SafeInc is used in the implementation of the <var>SpinUpDown</var> method in 
the ancestor class.
</p>
</descr>
<seealso>
<link id="TCustomSpinEditEx.Increment"/>
<link id="TSpinEditExBase.SafeInc"/>
</seealso>
</element>
<element name="TCustomSpinEditEx.SafeInc.Result">
<short>Numeric value after the increment has been added.</short>
</element>
<element name="TCustomSpinEditEx.SafeInc.AValue">
<short>Numeric value incremented in the method.</short>
</element>

<element name="TCustomSpinEditEx.SafeDec">
<short>Ensures the decremented value is valid for the data type.</short>
<descr>
<p>
<var>SafeDec</var> is a function used to decrease the specified value by the 
amount specified in the <var>Increment</var> property. SafeDec is overridden 
in <var>TCustomSpinEditEx</var> to ensure that the decremented value is valid 
for the <var>Int64</var> data type.
</p>
<p>
<var>AValue</var> contains the numeric value to be decremented.
</p>
<p>
The return value contains the Int64 value after Increment has been 
subtracted. The return value is constrained when the decremented value is too 
small for the Int64 data type; its value is set to <b>Low(Int64)</b>.
</p>
<p>
SafeDec is used in the implementation of the <var>SpinUpDown</var> method in 
the ancestor class.
</p>
</descr>
<seealso>
<link id="TCustomSpinEditEx.Increment"/>"
<link id="TSpinEditExBase.SafeDec"/>
</seealso>
</element>
<element name="TCustomSpinEditEx.SafeDec.Result">
<short>Numeric value after the increment has been subtracted.</short>
</element>
<element name="TCustomSpinEditEx.SafeDec.AValue">
<short>Numeric value decremented in the method.</short>
</element>

<element name="TCustomSpinEditEx.SameValue">
<short>Determines whether the specified arguments have the same value.</short>
<descr>
<p>
<var>SameValue</var> is an overridden <var>Boolean</var> function used to 
compare the values in <var>AValue1</var> and <var>AValue2</var> to determine 
if they have the same value. The return value is <b>True</b> when both 
AValue1 and AValue2 have the same value. The arguments are implemented using 
the Int64 type in TCustomSpinEditEx.
</p>
<p>
This method was introduced to ensure that the type specialization for the class instance is used when value comparisons are performed.
</p>
</descr>
<version>
Introduced in version 2.2.0. Modified in version 3.0 to remove the FPC version compiler define.
</version>
<seealso>
<link id="TSpinEditExBase.SameValue"/>
<link id="#rtl.math.SameValue">Math.SameValue</link>
</seealso>
</element>
<element name="TCustomSpinEditEx.SameValue.Result">
<short><b>True</b> if both arguments have the same value.</short>
</element>
<element name="TCustomSpinEditEx.SameValue.AValue1">
<short>First value for the comparison.</short>
</element>
<element name="TCustomSpinEditEx.SameValue.AValue2">
<short>Second value for the comparison.</short>
</element>

<element name="TCustomSpinEditEx.TextIsNumber">
<short>
Indicates if the specified String contains a valid Int64 data type.
</short>
<descr>
<p>
<var>TextIsNumber</var> is an overridden  <var>Boolean</var> function which 
indicates if the value specified in <var>S</var> represents a valid number 
for the <var>Int64</var> data type.
</p>
<p>
<var>ANumber</var> is an output parameter where the numeric value from the 
conversion from the is stored.
</p>
<p>
The return value is a <var>Boolean</var> type which contains <b>True</b> when 
the text in <var>S</var> is successfully converted to an Int64 value and 
stored i the <var>N</var> argument. If the conversion raises an exception, it 
is handled in the method and the return value is set to <b>False</b>. The 
value in N should be considered as "undefined" in this scenario.
</p>
</descr>
<seealso>
<link id="TCustomSpinEditEx.ThousandSeparator"/>
</seealso>
</element>
<element name="TCustomSpinEditEx.TextIsNumber.Result">
<short><b>True</b> when the text contains a valid Int64 value.</short>
</element>
<element name="TCustomSpinEditEx.TextIsNumber.S">
<short>Text converted to a numeric value in the method.</short>
</element>
<element name="TCustomSpinEditEx.TextIsNumber.ANumber">
<short>
Contains the successfully converted numeric value for the string.
</short>
</element>

<!-- public methods and properties -->
<element name="TCustomSpinEditEx.ValueToStr">
<short>
Converts the specified numeric value to its String representation.
</short>
<descr>
<p>
<var>ValueToStr</var> is an overridden <var>String</var> function used to 
convert the value specified in <var>AValue</var> to its representation as a 
<var>String</var> data type. AValue is an <var>Int64</var> type.
</p>
<p>
<var>ValueToStr</var> calls <var>IntToStr</var> to convert the integer value 
to the String used as the return value for the method. When 
<var>ThousandSeparator</var> has been assigned, the 
<var>InsertThousandSeparator</var> routine is called to apply the display 
formatting to the return value.
</p>
<p>
ValueToStr is used in the implementation of both the <var>UpdateControl</var> 
and <var>RealGetText</var> methods in the ancestor class.
</p>
</descr>
<seealso>
<link id="TCustomSpinEditEx.ThousandSeparator"/>
<link id="TSpinEditExBase.RealGetText"/>
</seealso>
</element>
<element name="TCustomSpinEditEx.ValueToStr.Result">
<short>String representation for the specified numeric value.</short>
</element>
<element name="TCustomSpinEditEx.ValueToStr.AValue">
<short>Numeric value converted in the method.</short>
</element>

<element name="TCustomSpinEditEx.Increment">
<short>
Amount by which the control value is increased or decreased when UpDown is 
clicked.
</short>
<descr>
<p>
<var>Increment</var> is an <var>Int64</var> property in 
<var>TCustomSpinEditEx</var>, and represents the amount by which the control 
value is increased or decreased when the UpDown button is clicked. The 
default value for the property is <b>1</b>.
</p>
<p>
Increment is used in the implementation of the <var>SafeInc</var> and 
<var>SafeDec</var> methods.
</p>
</descr>
<seealso>
<link id="TCustomSpinEditEx.SafeInc"/>
<link id="TCustomSpinEditEx.SafeDec"/>
</seealso>
</element>

<element name="TCustomSpinEditEx.ThousandSeparator">
<short>
Contains the thousands separator used to format and display the control value.
</short>
<descr>
<p>
<var>ThousandSeparator</var> is a <var>String</var> property which contains 
the character used as the thousands separator in the control. It is 
implemented as a <var>String</var> type to allow use of UTF-8-encoded 
characters in the property value. When it is unassigned (contains an empty 
string), the separator is not used to format the string value for the control.
</p>
<p>
Changing the value in ThousandSeparator causes the <var>UpdateControl</var> 
method to be called to update the display for the control.
</p>
<p>
ThousandSeparator is used in methods like <var>EditKeyPress</var>, 
<var>TextIsNumber</var>, and <var>ValueToStr</var>.
</p>
</descr>
<seealso>
<link id="TSpinEditExBase.EditKeyPress"/>
<link id="TCustomSpinEditEx.TextIsNumber"/>
<link id="TCustomSpinEditEx.ValueToStr"/>
</seealso>
</element>

<element name="TSpinEditEx">
<short>Implements a spin edit control for an Int64 data type.</short>
<descr>
<p>
<var>TSpinEditEx</var> is a <var>TCustomSpinEditEx</var> descendant which 
implements a spin edit control using an <var>Int64</var> value. TSpinEditEx 
sets the visibility for properties defined in ancestor classes.
</p>
<p>
Use the <var>ThousandSeparator</var> to set the UTF-8-encoded value used as 
the decimal point in the control value.
</p>
<p>
Set <var>Increment</var> to the value by which the control is increased or 
decreased when the <var>UpDown</var> button is clicked.
</p>
<p>
Use <var>ValueToStr</var> to get the string representation for the numeric 
value.
</p>
</descr>
<seealso>
<link id="TCustomSpinEditEx"/>
<link id="IntroToSpinEx"/>
</seealso>
</element>

<!-- public properties -->
<element name="TSpinEditEx.AutoSelected" link="#lcl.groupededit.TCustomAbstractGroupedEdit.AutoSelected"/>

<!-- published properties -->
<element name="TSpinEditEx.AutoSelect" link="#lcl.groupededit.TCustomAbstractGroupedEdit.AutoSelect"/>
<element name="TSpinEditEx.AutoSizeHeightIsEditHeight" link="#lcl.groupededit.TCustomAbstractGroupedEdit.AutoSizeHeightIsEditHeight"/>
<element name="TSpinEditEx.AutoSize" link="#lcl.groupededit.TCustomAbstractGroupedEdit.AutoSize"/>
<element name="TSpinEditEx.Action" link="#lcl.controls.TControl.Action"/>
<element name="TSpinEditEx.Align" link="#lcl.controls.TControl.Align"/>
<element name="TSpinEditEx.Alignment" link="#lcl.groupededit.TCustomAbstractGroupedEdit.Alignment"/>
<element name="TSpinEditEx.Anchors" link="#lcl.controls.TControl.Anchors"/>
<element name="TSpinEditEx.BiDiMode" link="#lcl.controls.TControl.BiDiMode"/>
<element name="TSpinEditEx.BorderSpacing" link="#lcl.controls.TControl.BorderSpacing"/>
<element name="TSpinEditEx.BorderStyle" link="#lcl.controls.TCustomControl.BorderStyle"/>
<element name="TSpinEditEx.CharCase" link="#lcl.groupededit.TCustomAbstractGroupedEdit.CharCase"/>
<element name="TSpinEditEx.Color" link="#lcl.groupededit.TCustomAbstractGroupedEdit.Color"/>
<element name="TSpinEditEx.Constraints" link="#lcl.controls.TControl.Constraints"/>
<element name="TSpinEditEx.Cursor" link="#lcl.controls.TControl.Cursor"/>
<element name="TSpinEditEx.DirectInput" link="#lcl.groupededit.TCustomAbstractGroupedEdit.DirectInput"/>
<element name="TSpinEditEx.EchoMode" link="#lcl.groupededit.TCustomAbstractGroupedEdit.EchoMode"/>
<element name="TSpinEditEx.Enabled" link="#lcl.controls.TControl.Enabled"/>
<element name="TSpinEditEx.FocusOnBuddyClick" link="#lcl.groupededit.TCustomAbstractGroupedEdit.FocusOnBuddyClick"/>
<element name="TSpinEditEx.Font" link="#lcl.controls.TControl.Font"/>
<element name="TSpinEditEx.Hint" link="#lcl.controls.TControl.Hint"/>
<element name="TSpinEditEx.Layout" link="#lcl.groupededit.TCustomAbstractGroupedEdit.Layout"/>
<element name="TSpinEditEx.MaxLength" link="#lcl.groupededit.TCustomAbstractGroupedEdit.MaxLength"/>
<element name="TSpinEditEx.NumbersOnly" link="#lcl.groupededit.TCustomAbstractGroupedEdit.NumbersOnly"/>
<element name="TSpinEditEx.ParentBiDiMode" link="#lcl.controls.TControl.ParentBiDiMode"/>
<element name="TSpinEditEx.ParentColor" link="#lcl.controls.TControl.ParentColor"/>
<element name="TSpinEditEx.ParentFont" link="#lcl.controls.TControl.ParentFont"/>
<element name="TSpinEditEx.ParentShowHint" link="#lcl.controls.TControl.ParentShowHint"/>
<element name="TSpinEditEx.PopupMenu" link="#lcl.groupededit.TCustomAbstractGroupedEdit.PopupMenu"/>
<element name="TSpinEditEx.ReadOnly" link="#lcl.groupededit.TCustomAbstractGroupedEdit.ReadOnly"/>
<element name="TSpinEditEx.ShowHint" link="#lcl.controls.TControl.ShowHint"/>

<element name="TSpinEditEx.TabOrder" link="#lcl.controls.TWinControl.ShowHint"/>
<element name="TSpinEditEx.TabStop" link="#lcl.groupededit.TCustomAbstractGroupedEdit.TabStop"/>
<element name="TSpinEditEx.TextHint" link="#lcl.groupededit.TCustomAbstractGroupedEdit.TextHint"/>
<element name="TSpinEditEx.Visible" link="#lcl.controls.TControl.Visible"/>

<element name="TSpinEditEx.OnChange" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnChange"/>
<element name="TSpinEditEx.OnClick" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnClick"/>
<element name="TSpinEditEx.OnDblClick" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnDblClick"/>
<element name="TSpinEditEx.OnDragDrop" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnDragDrop"/>
<element name="TSpinEditEx.OnDragOver" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnDragOver"/>
<element name="TSpinEditEx.OnContextPopup" link="#lcl.controls.TControl.OnContextPopup"/>
<element name="TSpinEditEx.OnEditingDone" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnEditingDone"/>
<element name="TSpinEditEx.OnEndDrag" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnEndDrag"/>
<element name="TSpinEditEx.OnEnter" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnEnter"/>
<element name="TSpinEditEx.OnExit" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnExit"/>
<element name="TSpinEditEx.OnKeyDown" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnKeyDown"/>
<element name="TSpinEditEx.OnKeyPress" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnKeyPress"/>
<element name="TSpinEditEx.OnKeyUp" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnKeyUp"/>
<element name="TSpinEditEx.OnMouseDown" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnMouseDown"/>
<element name="TSpinEditEx.OnMouseEnter" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnMouseEnter"/>
<element name="TSpinEditEx.OnMouseLeave" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnMouseLeave"/>
<element name="TSpinEditEx.OnMouseMove" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnMouseMove"/>
<element name="TSpinEditEx.OnMouseUp" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnMouseUp"/>
<element name="TSpinEditEx.OnMouseWheel" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnMouseWheel"/>
<element name="TSpinEditEx.OnMouseWheelDown" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnMouseWheelDown"/>
<element name="TSpinEditEx.OnMouseWheelUp" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnMouseWheelUp"/>
<element name="TSpinEditEx.OnStartDrag" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnStartDrag"/>
<element name="TSpinEditEx.OnUTF8KeyPress" link="#lcl.groupededit.TCustomAbstractGroupedEdit.OnUTF8KeyPress"/>

<element name="TSpinEditEx.ArrowKeys" link="#lazcontrols.spinex.TSpinEditExBase.ArrowKeys"/>
<element name="TSpinEditEx.Increment" link="#lazcontrols.spinex.TCustomSpinEditEx.Increment"/>
<element name="TSpinEditEx.MaxValue" link="#lazcontrols.spinex.TCustomSpinEditEx.MaxValue"/>
<element name="TSpinEditEx.MinValue" link="#lazcontrols.spinex.TCustomSpinEditEx.MinValue"/>
<element name="TSpinEditEx.MinRepeatValue" link="#lazcontrols.spinex.TSpinEditExBase.MinRepeatValue"/>
<element name="TSpinEditEx.NullValue" link="#lazcontrols.spinex.TSpinEditExBase.NullValue"/>
<element name="TSpinEditEx.NullValueBehaviour" link="#lazcontrols.spinex.TSpinEditExBase.NullValueBehaviour"/>
<element name="TSpinEditEx.Orientation" link="#lazcontrols.spinex.TSpinEditExBase.Orientation"/>
<element name="TSpinEditEx.Spacing" link="#lcl.groupededit.TCustomAbstractGroupedEdit.Spacing"/>
<element name="TSpinEditEx.ThousandSeparator" link="#lazcontrols.spinex.TCustomSpinEditEx.ThousandSeparator"/>
<element name="TSpinEditEx.UpDownVisible" link="#lazcontrols.spinex.TSpinEditExBase.UpDownVisible"/>
<element name="TSpinEditEx.Value" link="#lazcontrols.spinex.TSpinEditExBase.Value"/>

<element name="DbgS">
<short>
Gets debugging information about a value from TNullValueBehaviour.
</short>
<descr>
<p>
<var>DbgS</var> is an overloaded  <var>String</var> function used to get 
information displayed in the Debugger. This variant of the routine accepts a 
<var>TNullValueBehaviour</var> argument, an converts the specified value to 
its string representation,
</p>
</descr>
</element>
<element name="DbgS.Result">
<short>String representation for the specified null value behavior.</short>
</element>
<element name="DbgS.ANvb">
<short>Enumeration value converted to a string in the method.</short>
</element>

<topic name="IntroToSpinEx">
<short>Introduction to Extended Spin Edit Controls.</short>
<descr>
<p>
The <file>SpinEx.pp</file> unit contains extended spin edit controls, like 
<var>TSpinEditEx</var> and <var>TFloatSpinEditEx</var>. They are very similar 
to <var>TSpinEdit</var> and <var>TFloatSpinEdit</var>, but provide additional 
features which allow a NullValue for the control and behaviors performed when 
the value for the control is not a valid numeric value.
</p>
<p>
This introduction will discuss the problems the design of the controls, and 
the problems they are intended to eliminate.
</p>
<p>
<b>Why another SpinEdit or FloatSpinEdit control?</b>
</p>
<p>
The standard controls, TSpinEdit and TFloatSpinEdit, do not support a 
NullValue mechanism. Also, their implementations are widgetset dependent. 
While this provides a control that has the look and feel native to the 
widgetset, the behavior also depends on the widgetset. This is especially 
important when the text for the control contains an invalid numeric value 
(otherwise not a number). In such a case, when querying the control for it's 
Value, the results are not consistent for the various platforms. The 
difference in behavior between widgetsets also prevents implementation of the 
NullValue mechanism, especially the possibility to leave the control empty or 
to display informative text inside the control about the condition.
</p>
<p>
TSpinEditEx handles Int64 values, while TSpinEdit is limited to LongInt 
values. This is because TSpinEdit inherits from TCustomFloatSpinEdit and the 
internal member for the Value is stored using the Double type, and Double 
does not have enough significant digits to handle the range for the Int64 
type.
</p>
<p>
In addition, TFloatSpinEditEx can set the value for its DecimalSeparator 
property independent of the value in the DefaultFormatSettings for the 
platform or operating system. Note: Unlike T(Float)SpinEdit, the GetValue 
method is always derived from the actual text in the control. This is by 
design, and it should not be altered.
</p>
<p>
<b>Why not simply associate a TUpDown with a TEdit instead?</b>
</p>
<p>
Using TEdit with a TUpDown control has several disadvantages:
</p>
<ul>
<li>It does not allow floating point values.</li>
<li>Its range is limited to the range for the SmallInt type.</li>
<li>It does not properly anchor and/or align.</li>
</ul>
<p>
While both TSpinEditEx and TFloatSpinEditEx use a TUpDown control in their 
implementations, they do not use the Associate property in TUpDown. The two 
controls (the edit and the up/down button) are embedded in a TCustomControl 
(much like TEditButton) to provide proper alignment and anchoring behavior.
</p>
</descr>
<seealso/>
</topic>

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