This unit contains basic classes for visual controls.
mrNone
Series of constants to be used as respones in message boxes etc. mrNone=0
mrOK
Series of constants to be used as respones in message boxes etc. mrOK=1
mrCancel
Series of constants to be used as respones in message boxes etc. mrCancel=2
mrAbort
Series of constants to be used as respones in message boxes etc. mrAbort=3

mrRetry
Series of constants to be used as respones in message boxes etc. mrRetry=4
mrIgnore
Series of constants to be used as respones in message boxes etc. mrIgnore=5
mrYes
Series of constants to be used as respones in message boxes etc. mrYes=6
mrNo (not the same as mrNone)
Series of constants to be used as respones in message boxes etc. mrNo=7
mrAll
Series of constants to be used as respones in message boxes etc. mrAll=8
mrNoToAll
Series of constants to be used as respones in message boxes etc. mrNoToAll=9
mrYesToAll
Series of constants to be used as respones in message boxes etc. mrYesToAll=10
mrLast
Series of constants to be used as respones in message boxes etc. mrLast=mrYesToAll=10
TCMMouseWheel - record holding data about the Mouse Wheel

    Details held include:
              the Message associated with the wheel;
              the shift state (ie whether Shift, Alt, Control etc keys have been pressed);
              wheel data which can either be
    	  a position (X, Y coordinates) or
    	  a position plus an integer result.

TAlign - the available options for aligning a Control
Type defining the three mouse buttons (left, middle, right)
crHigh - a cursor constant
crDefault - cursor constant: use default cursor (0)
crNone - a cursor constant: no cursor (-1)
crArrow - cursor constant: Arrow cursor (-2)
cursor constant
crIbeam - cursor constant: shows I-beam cursor often used in text editors (-4)
crSizeNESW - cursor constant: runs diagonally from NorthEast to SouthWest (-6)
crSizeNS - cursor constant: cursur runs from North to South (-7)
crNWSE - cursor constant: cursor runs from NorthWest to SouthEast
crSizeWE - cursor constant: runs from West to East (-9)
cursor constant
crSizeN - cursor constant: cursor North (-24)
crSizeNW - cursor constant: NorthWest (-23)
cursor constant
cursor constant
crUpArrow - cursor constant: cursor is Up-Arrow (-10)
crHourGlass - cursor constant: shows hour-glass (wait while action proceeds) (-11)
crDrag - cursor constant: shows dragging cursor (-12)
cursor constant
cursor constant
cursor constant
crHandPoint - cursor constant: Pointing Hand (-21)
TControlStyleType - describes features of the Control

    Enumerated type comprising:
        csAcceptsControls, // can have children in the designer
        csCaptureMouse,
        csDesignInteractive, // wants mouse events in design mode
        csClickEvents,
        csFramed,
        csSetCaption,
        csOpaque,
        csDoubleClicks,// control understands mouse double clicks
        csTripleClicks,// control understands mouse triple clicks
        csQuadClicks,  // control understands mouse quad clicks
        csFixedWidth,
        csFixedHeight, // control cannot change its height (for example combobox)
        csNoDesignVisible,
        csReplicatable,
        csNoStdEvents,
        csDisplayDragImage,
        csReflector,
        csActionClient,
        csMenuEvents,
        csNoFocus,
        csNeedsBorderPaint, // not implemented
        csParentBackground, // not implemented
        csDesignNoSmoothResize, // no WYSIWYG resizing in designer
        csDesignFixedBounds, // control can not be moved nor resized in designer
        csHasDefaultAction, // control implements useful ExecuteDefaultAction
        csHasCancelAction,   // control implements useful ExecuteCancelAction
        csNoDesignSelectable, // control can not be selected at design time
        csOwnedChildsSelectable // child controls owned by this control are selectable in the designer

TControlStateType - describes possible states (status) of Control
The base class for the canvas property of several graphic controls, such as TGraphicControl and TCustomControl
TCanvas
Create this instance of Control Canvas
Destroy this Control Canvas and free its resources
The Control object for which this is the Canvas
Reads or writes a flag to determine the identity of the Control object
cursor constant
The base class for many objects that are designed to be dragged and dropped
Destroy this instance of TDragObject
Assigns a particular source to this drag object
Finds out a lot of information about the source object, such as its operating-system handle, size, position, how much the mouse is allowed to move before the object is moved, and whether the object is to be kept visible during the drag process.
The object, with all its properties, that is to be dragged
Find name of the object for dragging
The object's name returned as a string
Procedure for hiding the drag image during movement
ShowDragImage
// exist only for compatibility
zero
Procedure for keeping the image visible during movement
HideDragImage
Is this drag object being cancelled?
Reads or sets flag to determine whether this drag image is being cancelled. Property has a boolean value, true if cancelling
Finds Operating-System handle for this object
Reads or writes flag for operating-system handle
Find position for this object
Reads or writes flag with position (as X, Y co-ordinates)
The position of the taget control object to which the currect object is to be dragged
Reads or writes flag with position (X, Y co-ordinates) of control object to which the current object is to be dragged
The control object to which the current object is to be dragged (target)
Reads or writes flag with identity of the target control object to which the currect object is to be dragged
Has the drag object been dropped yet?
Boolean property, true if the object has been dropped; reads or writes a flag with this information
An ancestor class for many drag control objects
Creates an instance of this object
The control object that is to be dragged
Reads or writes flag with identity of object for dragging
Assigns source object
Overrides definition in parent class
The object that is to be dragged
The identity of the control to be dragged
Reads or writes flag with identity of control object
A base class for managing the docking process
The declaration contains a number of procedure definitions that are 'virtual' and 'abstract'.
This means that there is no implementation specified:
these essentially represent 'place-holders', and it is the responsibility of the developer of descendant classes
to override these methods and implement them as desired.
TControlBorderSpacing - the spacing around a Control
{ TControlBorderSpacing defines the spacing around a control.

The spacing around its children and between its children is defined in TWinControl.ChildSizing.

Left, Top, Right, Bottom: integer; minimum space left to the autosized control. For example: Control A lies left of control B. A has borderspacing Right=10 and B has borderspacing Left=5. Then A and B will have a minimum space of 10 between.

Around: integer; same as Left, Top, Right and Bottom all at once. This will be added to the effective Left, Top, Right and Bottom. Example: Left=3 and Around=5 results in a minimum spacing to the left of 8.

InnerBorder: integer; This is added to the preferred size. For example: A buttons widget returns 75x25 on GetPreferredSize. CalculatePreferredSize adds 2 times the InnerBorder to the width and height.

CellAlignHorizontal, CellAlignVertical: TControlCellAlign; Used for example when the Parents.ChildSizing.Layout defines a table layout.

}
TAnchorSide

    TAnchorSide

        Class holding the reference sides of the anchors of a TControl.
        Every TControl has four AnchorSides:
        AnchorSide[akLeft], AnchorSide[akRight], AnchorSide[akTop] and
        AnchorSide[akBottom].
        Normally if Anchors contain akLeft, and the Parent is resized, the LCL
        tries to keep the distance between the left side of the control and the
        right side of its parent client area.
        With AnchorSide[akLeft] you can define a different reference side. The
        kept distance is defined by the BorderSpacing.

        Example1:
           +-----+  +-----+
           |  B  |  |  C  |
           |     |  +-----+
           +-----+

          If you want to have the top of B the same as the top of C use
            B.AnchorSide[akTop].Side:=asrTop;
            B.AnchorSide[akTop].Control:=C;
          If you want to keep a distance of 10 pixels between B and C use
            B.BorderSpacing.Right:=10;
            B.AnchorSide[akRight].Side:=asrLeft;
            B.AnchorSide[akRight].Control:=C;

          Do not setup in both directions, because this will create a circle, and
          circles are not allowed.

        Example2:
                +-------+
          +---+ |       |
          | A | |   B   |
          +---+ |       |
                +-------+

          Centering A relative to B:
            A.AnchorSide[akTop].Side:=arsCenter;
            A.AnchorSide[akTop].Control:=B;
          Or use this. It's equivalent:
            A.AnchorSide[akBottom].Side:=arsCenter;
            A.AnchorSide[akBottom].Control:=B;

The main ancestor class for visual controls.
TControl is the main ancestor class for all visual controls.

The definition includes a large number of constants, types and methods that are inherited by derived classes and types.

These include devices for defining and controlling
the state and position of the object
(including alignment and anchoring),

the state of the mouse,

whether dragging or docked,

the size and type of border,
the way child components should behave,
the way actions should occur in response to various events,

and the way the Control should be drawn.
Function to get text-string associated with control
Uses RealGetText rather than GetTextBuf to avoid unnecessary read-writes to PChar buffers
GetTextBuf
The function returns the required text as a string
Stores text in buffer
Uses RealSetText rather than SetTextBuf to avoid unnecessary read-writes to PChar buffer
RealSetText SetTextBuf
The text string to be stored in the buffer

    {------------------------------------------------------------------------------
      TControl DoAutoSize

      IMPORTANT: Many Delphi controls override this method and many call this method
      directly after setting some properties.
      During handle creation not all interfaces can create complete Device Contexts
      which are needed to calculate things like text size.
      That's why you should always call AdjustSize instead of DoAutoSize.
    ------------------------------------------------------------------------------}

    {------------------------------------------------------------------------------
      function TControl.AutoSizeCanStart: boolean;

      Returns true if DoAutoSize can start. That means, it tests the minimum
      requirements to start. Some controls need even more.

      It returns false if
      - AutoSize=false
      - or the control is currently autosizing
      - or the control is not visible
      - or the control is destroying
    ------------------------------------------------------------------------------}

    procedure TControl.CalculatePreferredSize(var PreferredWidth,
        PreferredHeight: integer; WithThemeSpace: Boolean);

      Calculates the default/preferred width and height for a control, which is used
      by the LCL autosizing algorithms as default size. Only positive values are
      valid. Negative or 0 are treated as undefined and the LCL uses other sizes
      instead.
      TWinControl overrides this and asks the interface for theme dependent values.
      See TWinControl.GetPreferredSize for more information.

      WithThemeSpace: If true, adds space for stacking. For example: TRadioButton
      has a minimum size. But for stacking multiple TRadioButtons there should be
      some space around. This space is theme dependent, so it passed parameter to
      the widgetset.

    { try to set the automatic changed bounds
      If the interface does not like our bounds, it sends a message with the real
      bounds, which invokes the automatic realigning of the control, .. a circle.
      To break the circle, only bounds that are different from the last try will
      be sent.
    }

Gets the rectangular coordinates for a child control
The function returns the coordinates of the child rectangle
True if the rectangle is scrolled
Function to get a text-string associated with the control
This is the function that is actually used by GetTextBuf, and loads a string rather than performing read-write to a PChar buffer
GetTextBuf RealSetText SetTextBuf
The Function returns the required text as a string
Procedure to store text associated with the control in a string
This is the procedure that is actually used by SetTextBuf, and stores text as a string rather than performing read-write to a PChar buffer
SetTextBuf RealGetText GetTextBuf
The text-string that is to be stored
ParentFormHandleInitialized - called by ChildHandlesCreated of parent form

    // The form is a real connection to the target screen. For example, the gtk
      // under X gathers some screen information, but not before form creation.
      // But this information is needed to create DeviceContexts, which
      // are needed to calculate Text Size and such stuff needed for AutoSizing.
      // That's why AdjustSize delays AutoSizing till this moment. Now do the
      // AutoSize.

Whether auto-size is to be used
// standard properties, which should be supported by all descendants
Reads logical (boolean) flag to see whether auto-sizing is to be operated, or writes the flag to say it should be done. Default is false, ie no auto-sizing
FCompStyle - deprecated

    // DEPRECATED. Enables (valid) use of 'IN' operator (this
          // is a hack for speed. It will be replaced by the use of the widgetset
          // classes.
          // So, don't use it anymore.

DragDrop - Procedure to govern Dragging/Dropping of control
The object to be dragged and dropped
The X co-ordinate to which the object is to be dropped (target)
The Y co-ordinate to which the object is to be dropped (target)
Dock - Procedure governing Docking of Control

Performs checks that there is already a valid host control to which the present control is to be docked, removes old controls from the list of docked controls and adds the new control to the list, then calls DoDock to perform the actual docking process

An exception is raised if there is already a docking process in progress for this control
DoDock
The host control to which which the current control is to be docked
The position at which the control is to be docked
ManualDock - permits operator-defined docking

Docks this control to DropControl or on NewDockSite.

If DropControl is not nil, ControlSide defines on which side of DropControl this control is docked. (alNone,alClient for stacked in pages). DropControl will become part of a TDockManager.

If DropControl is nil, then DropControl becomes a normal child of NewDockSite and ControlSide is ignored.

The function returns True if a manual dock has been successfully performed
The new site to which the control is docked, if DropControl has been found to be nil
If nil (default) then ignored else used as the control for docking, on side specified by ControlSide
The side on which the control is to be docked, if DropControl is not nil
ManualFloat - the opposite of ManualDock, allows operator to Float a control

    {------------------------------------------------------------------------------
      function TControl.ManualFloat(TheScreenRect: TRect;
        KeepDockSiteSize: Boolean = true): Boolean;

      Undock and float.
      Float means here: create the floating dock site and dock this control into it.
      Exception: Forms do not need float dock sites and float on their own.
    ------------------------------------------------------------------------------}

The function returns True if a manual float has been succesfully performed
The rectangle within which the floating control is located
The rectangle within which the floating control is located
(ie the location of the floating dock site to which the control is docked)
Remove a previously docked control and put a new control in its place
Checks to see whether there is a previously docked control,
and removes it, then puts the new control in its place
ManualDock
Returns True if a docked control has been successfully replaced with a new one
The old control that was previously docked at this site
The new site for docking; used if DropControl is nil
The control site to be used for docking, unless it is nil when it is igored. Passed straight through as an argument to ManualDock
The side to which the new control is to be aligned; passed straight through as an argument to ManualDock
Returns True if the control is being dragged
Returns True if the control is being dragged

    {------------------------------------------------------------------------------
      TControl.AdjustSize

      Calls DoAutoSize smart.
      During loading and handle creation the calls are delayed.

      This method does the same as TWinControl.DoAutoSize at the beginning.
      But since DoAutoSize is commonly overriden by existing Delphi components,
      they do not all tests, which can result in too much overhead. To reduce this
      the LCL calls AdjustSize instead.
    ------------------------------------------------------------------------------}

Auto-sizing has been delayed until some other process is complete
Returns True if auto-sizing has been delayed
AnchorToNeighbour - anchoring instructions

    {------------------------------------------------------------------------------
      procedure TControl.AnchorToNeighbour(Side: TAnchorKind; Space: integer;
        Sibling: TControl);

      Setup AnchorSide to anchor one side to the side of a neighbour sibling.
      For example Right side to Left side, or Top side to Bottom.
     ------------------------------------------------------------------------------}

The side on which we should anchor
The size of the space to be left around the control when anchoring
The sibling control to which we should anchor
AnchorParallel - instructions for anchoring beside another control
Sibling - another control beside which the current control is to be anchored
The side on which we should anchor to the sibling
The size of the space to be left around the control when anchoring
The sibling control to which we should anchor in a parallel manner
AnchorHorizontal - instructions for anchoring
Another control to which the current control is to be anchored, centred horizontally
AnchorVertical - instructions for anchoring
Another control to which the current control is to be anchored, centred vertically
Sets the boundaries defining the position of the current control
Height, Width, and position of Top Left pixel
The X co-ordinate of the top left pixel of the control
The Y co-ordinate of the top left pixel of the control
The width of the control
The height of the control
Sets the bounds of the control initially, when it is created
Checks that this is a new control,
then calls SetBounds to set up coordinates defining its position
SetBounds
X co-ordinate of top left pixel
Y co-ordinate of top left pixel
Width of control
Height of control
Returns default/preferred height and width, to be used in autosizing algorithms

    {------------------------------------------------------------------------------
      procedure TControl.GetPreferredSize(
        var PreferredWidth, PreferredHeight: integer; Raw: boolean;
        WithThemeSpace: Boolean);

      Returns the default/preferred width and height for a control, which is used
      by the LCL autosizing algorithms as default size. Only positive values are
      valid. Negative or 0 are treated as undefined and the LCL uses other sizes
      instead.

      Raw: If not Raw then the values will be adjusted by the constraints and
      undefined values will be replaced by the current width and height.

      WithThemeSpace: If true, adds space for stacking. For example: TRadioButton
      has a minimum size. But for stacking multiple TRadioButtons there should be
      some space around. This space is theme dependent, so it passed parameter to
      the widgetset.

      TWinControl overrides this and asks the interface for theme dependent values.
      See TWinControl.GetPreferredSize for more information.
     ------------------------------------------------------------------------------}

Create a new Control
Destroy the Control when you have finished with it
What to do when you have finished editing

    TControl.EditingDone

      Called when user has finished editing. This procedure can be used by data
      links to commit the changes.
      For example:
      - When focus switches to another control (default)
      - When user selected another item
      It's totally up to the control, what events will commit.

What to do when the RETURN button is pressed, signifying default action
What to do when ESCAPE is hit (or the CANCEL button is selected) - signifying CANCEL

    {------------------------------------------------------------------------------
      Method: TControl.BeginDrag
      Params: Immediate: Drag behaviour
              Threshold: distance to move before dragging starts
                         -1 uses the default value of Mouse.DragThreshold
      Returns: Nothing

      Starts the dragging of a control. If the Immediate flag is set, dragging
      starts immediately.
     ------------------------------------------------------------------------------}

If True, start drag as soon as cursor starts to move
Least value for movement of cursor before drag starts
If True, start drag as soon as cursor starts to move
Bring the control to the front of the viewed screen
Colour is stored
Function returns True if colour has been stored
This control has a parent
Function returns True if there is a parent
This control is the parent of another control
Function returns True if this control is a parent, ie there is a child control
The control of which this control is a parent (ie the Child control)
The control is visible on the current desktop
Function returns True is control is visible
Hide this control
Refresh the data on this control
Repaint the control, ie refill its canvas
Render this control non-valid
Function checks whether a particular child class is allowed
Function returns True if child class has been checked and is allowed
The child class which is being checked to see whether it is allowed
Boolean set to True if a non-valid class is found and an exception has been raised
Checks a new parent for this control
The new parent associated with this control
Send to back, ie place this control behind all other controls in the current screen; it will not be visible unless the controls in front are transparent
Sets a temporary cursor
The temporary cursor which has been set
Update the roles for this form; see whether there have been any changes in its role
Gets text associated with the control from a buffer

    * The VCL implementation relies on the virtual Get/SetTextBuf to
     * exchange text between widgets and VCL. This means a lot of
     * (unnecesary) text copies.
     * The LCL uses strings for exchanging text (more efficient).
     * To maintain VCL compatibility, the virtual RealGet/SetText is
     * introduced. These functions interface with the LCLInterface. The
     * default Get/SetTextbuf implementation calls the RealGet/SetText.
     * As long as the Get/SetTextBuf isn't overridden Get/SetText
     * calls RealGet/SetText to avoid PChar copying.
     * To keep things optimal, LCL implementations should always
     * override RealGet/SetText. Get/SetTextBuf is only kept for
     * compatibility.

RealGetText GetText
Pointer to the buffer containing the text
Pointer to the buffer containing the string
Length of the buffer
Stores text associated with the control in a buffer

    * The VCL implementation relies on the virtual Get/SetTextBuf to
     * exchange text between widgets and VCL. This means a lot of
     * (unnecesary) text copies.
     * The LCL uses strings for exchanging text (more efficient).
     * To maintain VCL compatibility, the virtual RealGet/SetText is
     * introduced. These functions interface with the LCLInterface. The
     * default Get/SetTextbuf implementation calls the RealGet/SetText.
     * As long as the Get/SetTextBuf isn't overridden Get/SetText
     * calls RealGet/SetText to avoid PChar copying.
     * To keep things optimal, LCL implementations should always
     * override RealGet/SetText. Get/SetTextBuf is only kept for
     * compatibility.

RealSetText SetText
Pointer to the buffer where the text is to be stored
The action to be associated with this control
// standard properties, which should be supported by all descendants
Can either read the action already associated with the control (GetAction), or write an action to be associated (SetAction)
Used to align the control in one of four directions.
// standard properties, which should be supported by all descendants
Either reads a flag containing alignment instructions (FAlign) or writes alignment instructions (SetAlign)
May have no alignment, may have custom or client alignment, or can be aligned to top, bottom, left or right
The set of anchor definitions for this control
// standard properties, which should be supported by all descendants
Either reads a flag containing the set of anchors to be used, or writes a set of anchors. If they have been written, this is indicated in IsAnchorsStored
Finds which side to use for anchor
// standard properties, which should be supported by all descendants

Finds which side is to be used to anchor this control,
and what relationships it has to other controls nearby.
For complex relationships, use the Side property of the parent class TAnchorSide,
and make a reference eg using asrCenter
Determines the border spacing for this control
// standard properties, which should be supported by all descendants
Reads flag to find stored spacing values required for the border of the control, or writes the flag to set the spacing.
The properties are defined in the parent class TControlBorderSpacing
Determines the rectangle bounding this control
// standard properties, which should be supported by all descendants
Finds the values for the bounding rectangle, or sets the values.
Bounding rectangle (top-left, bottom-right) is defined in TRect
//**QUESTION - why should we get/set bounds for new parent?
// standard properties, which should be supported by all descendants
Caption - the text-string appearing on the Control, usually used to identify its function

By default, the Caption appears the same as the control Name in the Object Inspector, and the developer needs to set it explicitly to some new text.

Gets caption as a text-string (GetText), or stores the new caption (SetText). Shows flag if caption is stored (IsCaptionStored).

The VCL implementation relies on the virtual Get/SetTextBuf to exchange text between widgets and VCL. This means a lot of (unnecesary) text copies. The LCL uses strings for exchanging text (more efficient). To maintain VCL compatibility, the virtual RealGet/SetText is introduced. These functions interface with the LCLInterface. The default Get/SetTextbuf implementation calls the RealGet/SetText. As long as the Get/SetTextBuf isn't overridden Get/SetText calls RealGet/SetText to avoid PChar copying. To keep things optimal, LCL implementations should always override RealGet/SetText. Get/SetTextBuf is only kept for compatibility.

GetText SetText
Determines the height of the client within which the control exists
// standard properties, which should be supported by all descendants
Finds or sets the client height, and sets a flag if it has been stored
Top left pixel of the client within which the control exists
// standard properties, which should be supported by all descendants
Finds origin of client (read-only)
Finds the position of the rectangle for the client within which the control exists
// standard properties, which should be supported by all descendants
Reads the coordinates of the client rectangle (read-only)
Determines the width of the client within which the control exists
// standard properties, which should be supported by all descendants
Reads the width of the client control or sets the value. Sets flag if value is stored
Determine the colour for the current control
// standard properties, which should be supported by all descendants
Reads the value for colour, or stores the value, and sets a flag if the colour is stored.
The default colour is the same as the window in which the control is located.
Determine constraints (max and min height and width) for this control
// standard properties, which should be supported by all descendants
Reads the size constraints or stores new ones.
Top left pixel of this control
// standard properties, which should be supported by all descendants
Reads value for the Origin (top left pixel) of this control. (read-only)
Whether mouse has been clicked, data being read, control being re-drawn, etc
// standard properties, which should be supported by all descendants
Reads or stores the state of the control.
Whether the control responds to mouse clicks, can be re-sized, has particular actions, etc
// standard properties, which should be supported by all descendants
Reads the stored style, or saves the new style
Whether the control is enabled. If not, it usually appears 'greyed-out'
// standard properties, which should be supported by all descendants
Reads a flag to see whether the control is enabled, or stores a new value. If stored, sets a flag to say so.
The Font to be used for text in this control
// standard properties, which should be supported by all descendants
Reads a flag to see what font should be used, or sets a flag to store it. If stored, sets a flag to say so.
The properties of Font are defined in the parent class TFont
Reads or writes a flag to deterine whether this object is actually a control
// standard properties, which should be supported by all descendants
Reads a logical (boolean) flag or sets it to determine whether this object is a control.
Reads a flag to determine whether the mouse entered the control
// standard properties, which should be supported by all descendants
Reads logical (boolean) flag to see whether mouse has entered the control
Event handler for a change in bounds of the control
// standard properties, which should be supported by all descendants
Reads or Writes flag if bounds are changed
Event Handler for mouse click
// standard properties, which should be supported by all descendants
Reads or writes a flag if a mouse click is detected, and sets a flag if a value is stored.
Event Handler for resize of control
// standard properties, which should be supported by all descendants
Reads or Writes flag if control is re-sized.
Event Handler when a hint needs to be shown
// standard properties, which should be supported by all descendants
Reads or Writes a flag when a hint (a small pop-up box, appearing when the mouse hovers over an object) is to be shown
Determine what is the parent for this control
// standard properties, which should be supported by all descendants
Reads or writes a flag to find or store the identity of the parent for this control. The parent is of type TWincontrol
Gets or writes the pop-up menu associated with this control
// standard properties, which should be supported by all descendants
Reads the details of the pop-up menu, or stores them.
Properties are defined in the parent class TPopupMenu
Flag to determine: Is hint to be displayed for this control?
// standard properties, which should be supported by all descendants
Reads flag or writes one to determine if a hint is to be shown when mouse hovers over this control. If value is stored, a storage flag is set. Display of the actual hint is controlled by OnShowHint
OnShowHint
The Visible property represents the ability to see a visual control.

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

The Visible property does not depend on control's parent visibility. Use IsVisible method to consider this and get real visibility.
Reads or writes a message associated with this window
// standard properties, which should be supported by all descendants
Reads message from flag area, or stores a message
How Child controls are to be sized relative to parent
{ TControlChildSizing }

{ LeftRightSpacing, TopBottomSpacing: integer; minimum space between left client border and left most children. For example: ClientLeftRight=5 means child's Left position is at least 5.

HorizontalSpacing, VerticalSpacing: integer; minimum space between each child horizontally }

{ Defines how child controls are resized/aligned.

cesAnchorAligning, cssAnchorAligning Anchors and Align work like Delphi. For example if Anchors property of the control is [akLeft], it means fixed distance between left border of parent's client area. [akRight] means fixed distance between right border of the control and the right border of the parent's client area. When the parent is resized the child is moved to keep the distance. [akLeft,akRight] means fixed distance to left border and fixed distance to right border. When the parent is resized, the controls width is changed (resized) to keep the left and right distance. Same for akTop,akBottom.

Align=alLeft for a control means set Left leftmost, Top topmost and maximize Height. The width is kept, if akRight is not set. If akRight is set in the Anchors property, then the right distance is kept and the control's width is resized. If there several controls with Align=alLeft, they will not overlapp and be put side by side. Same for alRight, alTop, alBottom. (Always expand 3 sides).

Align=alClient. The control will fill the whole remaining space. Setting two children to Align=alClient does only make sense, if you set maximum Constraints.

Order: First all alTop children are resized, then alBottom, then alLeft, then alRight and finally alClient.

cesScaleChilds, cssScaleChilds Scale children, keep space between them fixed. Children are resized to their normal/advised size. If there is some space left in the client area of the parent, then the children are scaled to fill the space. You can set maximum Constraints. Then the other children are scaled more. For example: 3 child controls A, B, C with A.Width=10, B.Width=20 and C.Width=30 (total=60). If the Parent's client area has a ClientWidth of 120, then the children are scaled with Factor 2. If B has a maximum constraint width of 30, then first the children will be scaled with 1.5 (A.Width=15, B.Width=30, C.Width=45). Then A and C (15+45=60 and 30 pixel space left) will be scaled by 1.5 again, to a final result of: A.Width=23, B.Width=30, C.Width=67 (23+30+67=120).

cesHomogenousChildGrowth, cssHomogenousChildDecrease Enlarge children equally. Children are resized to their normal/advised size. If there is some space left in the client area of the parent, then the remaining space is distributed equally to each child. For example: 3 child controls A, B, C with A.Width=10, B.Width=20 and C.Width=30 (total=60). If the Parent's client area has a ClientWidth of 120, then 60/3=20 is added to each Child. If B has a maximum constraint width of 30, then first 10 is added to all childs (A.Width=20, B.Width=30, C.Width=40). Then A and C (20+40=60 and 30 pixel space left) will get 30/2=15 additional, resulting in: A.Width=35, B.Width=30, C.Width=55 (35+30+55=120).

cesHomogenousSpaceGrowth Enlarge space between children equally. Children are resized to their normal/advised size. If there is some space left in the client area of the parent, then the space between the children is expanded. For example: 3 child controls A, B, C with A.Width=10, B.Width=20 and C.Width=30 (total=60). If the Parent's client area has a ClientWidth of 120, then there will be 60/2=30 space between A and B and between B and C. }

The base class for all windowed controls
Defines many of the properties inherited by child classes,
particularly those related to size, position, bounds, docking,
the responses to mouse movements and key presses.
Defines procedures and functions related to windowed controls,
some of which override virtual methods defined in ancestor classes.
Property to determine width of the window's border
// properties which are supported by all descendants
Either reads a flag to find the width or sets the width.
Default is set to zero.
Finds how many of the Bounds are locked
// properties which are supported by all descendants
Find which type of brush to use for drawing the control
// properties which are supported by all descendants
Stored value of client height
Read value fom flag
Stored value of Client Width
Reads value from flag
Definitions of how any child control is to be sized
Reads values from flag or stores values to flag. Most of the properties are inherited from TControlChildSizing,
which you should read to find out more about this control
The number of controls associated with this window
// properties which are supported by all descendants
Reads value from flag
Finds which controls are located in this window
// properties which are supported by all descendants

Reads values from a flag; Index is a number signifying which control, from a list
Numerical value to identify the control within the window
The default procedure to be associated with the window
// properties which are supported by all descendants
reads or writes a flag to define what is the default procedure
The number of clients to which this control is docked
Reads count from flag
The dock clients of this window
Reads a flag to find the actual dock client controls
The serial numbers (Index) of the dock clients
Property that actually controls the docking process
Reads or writes a flag. Derived from the parent class TDockManager
Is this a dock site? Default false
Reads or sets a flag to show whether this is a dock site. Default false
Are the contents of this window to be double buffered?
Reads or writes flag to determine whether double buffering is to be used
Handle for identifying and manipulating this window
Reads from or writes handle to flag
Is the window being re-sized?
Reads or writes flag to indicate re-sizing
The place this control occupies in the list of tabs
Reads or writes information in flag; default is -1
Determines if the user can tab to a control.
Reads or writes boolean flag; default is False
Create a new instance of the Window Control
Destroy this instance of the Window Control, and return the resources used
TGraphicControl is the base class for all lightweight controls.

    TGraphicControl supports simple lightweight controls that do not
    need the ability to accept keyboard input or contain other controls.  Since
    lightweight controls do not wrap GUI screen objects, they are faster and use
    fewer resources than controls based on TWinControl.
              TGraphicControl provides a Canvas property for access to the
    control's drawing surface and a virtual Paint method called in response to
    paint requests received by the parent control.

TCanvas
A reference to the parent's Canvas.
The canvas isn't "owned" by the TGraphicControl, but by its parent.
Virtual Paint method called in response to paint requests.
Virtual Paint method called in response to paint requests received by the parent control.
Create a new instance of a Graphic Control
Destroy this instance of a graphic control and return its resources
A clipping window to the parent canvas.

The TGraphicsControl.Canvas is a clipping window to the parent canvas.
If you ask for the Canvas.Width or Canvas.Height, you are actually getting the parent control's Canvas dimensions. To get the dimensions of the TGraphicControl, you must query the ClientRect.

FCanvas
TCustomControl - a base class for many window controls
Contains simple basic definitions to create, destroy and paint window controls and set basic properties like canvas and border
Paint handler plug-in
This is a plug-in in TWinControl to get the DC,
assign it to our canvas and call the paint method for
descendants to do the actual painting
The Device Context in which to paint
Create an instance of this control
Owner, ie the component that called this control
Destroy the control and returns its resources
If the custom control has been destroyed, free its handle as well
The default paint handler for the class
If using a control derived from this parent, the developer needs to write a specific paint handler to override this one
The area of a control on which its components are drawn or painted
The Canvas is the area of screen on which the various components are drawn.
This inherits its properties from TCanvas,
and that description should be read to understand their definitions more fully.
The available border styles for this sort of control
Only a restricted series of options is available: none or a single border.
Event handler for painting
TDockZone is a node in the TDockTree and encapsulates a region into which other zones or a single control are contained.
This is an ancestor class for TDockTree, in the sense that it forms the elementary component of which the tree is constructed
Create this instance of Dock Zone
Specifies the tree to which this zone belongs, and and child zones which it contains
The dock tree to which this zone belongs
A tree of dock zones - every docked window has one tree
{ TDockTree - a tree of TDockZones - Every docked window has one tree

This is an abstract class. The real implementation is in ldocktree.pas.

Docking means here: Combining several windows to one. A window can here be a TCustomForm or a floating control (undocked) or a TDockForm. A window can be docked to another to the left, right, top, bottom or "into". The docking source window will be resized, to fit to the docking target window.

Example1: Docking "A" (source window) left to "B" (target window)

+---+ +----+ | A | -> | B | +---+ | | +----+ Result: A new docktree will be created. Height of "A" will be resized to the height of "B". A splitter will be inserted between "A" and "B". And all three are children of the newly created TLazDockForm of the newly created TDockTree.

+------------+ |+---+|+----+| || A ||| B || || ||| || |+---+|+----+| +------------+

If "A" or "B" were floating controls, the floating dock sites are freed. If "A" or "B" were forms, their decorations (title bars and borders) are replaced by docked decorations. If "A" had a TDockTree, it is freed and its child dockzones are merged to the docktree of "B". Analog for docking "C" left to "A":

+------------------+ |+---+|+---+|+----+| || C ||| A ||| B || || ||| ||| || |+---+|+---+|+----+| +------------------+

Example2: Docking A into B +-----+ +---+ | | | A | ---+-> B | +---+ | | +-----+

Result: A new docktree will be created. "A" will be resized to the size of "B". Both will be put into a TLazDockPages control which is the child of the newly created TDockTree.

+-------+ |[B][A] | |+-----+| || || || A || || || |+-----+| +-------+

Every DockZone has siblings and children. Siblings can either be - horizontally (left to right, splitter), - vertically (top to bottom, splitter) - or upon each other (as pages, left to right).

InsertControl - undock control and dock it into the manager. For example dock Form1 left to a Form2: InsertControl(Form1,alLeft,Form2); To dock "into", into a TDockPage, use Align=alNone. PositionDockRect - calculates where a control would be placed, if it would be docked via InsertControl. RemoveControl - removes a control from the dock manager.

GetControlBounds - TODO for Delphi compatibility ResetBounds - TODO for Delphi compatibility SetReplacingControl - TODO for Delphi compatibility PaintSite - TODO for Delphi compatibility }
Update the entries in the tree (increment the update count)
Create a new instance of a docking tree
The window control that is to be the site for docking
Remove this instance of dock tree, and free its resources
Some properties of the current Mouse
Contains information about current mouse position, whether it has captured an object, whether it is dragging the object, and how far the mouse is allowed to move before the captured object is made to move.
Create an instance of the Mouse object
Destroy this instance of the mouse object
Can be a locally defined method to override the method specified by the parent object
System handle for the captured object
Reads or writes a system variable identifying the captured object
The screen position of the cursor
Reads or writes a variable to determine the position of the cursor (a point with X, Y co-ordinates)
Does the object get dragged as soon as the mouse moves?
Reads or writes a flag to determine whether to move the object immediately the mouse moves: default is true
The least distance the mouse must move before the captured object is moved
Reads or writes a flag to deterine the threshold movement (if DragImmediate was false). Default is 5 pixels
the strings that appear, eg in the Object Inspector, to describe the possible types of alignments
Register the components used in the current application, so that they can be recognised