[Overview][Constants][Types][Classes][Procedures and functions][Variables][Index] | Reference for unit 'Controls' (#lcl)

# TWinControl

[Properties (by Name)] [Methods (by Name)] [Events (by Name)]

Implements a windowed control which can contain other child controls.

## Declaration

Source position: controls.pp line 2077

`type TWinControl = class(TControl)`
`protected`
`FDoubleBuffered: Boolean;` |  | Member used to store the value for the DoubleBuffered property.
`FWinControlFlags: TWinControlFlags;` |  | Contains various window control state flags.
`class procedure WSRegisterClass; override;` |  | Registers the class instance for use in the widgetset.
`procedure AdjustClientRect(); virtual;` |  | Override this method when the ClientRect for a control differs from the default value.
`procedure GetAdjustedLogicalClientRect();` |  | Returns the adjusted logical ClientRect, using the cached value when available.
`procedure AlignControls(); virtual;` |  | Repositions and resizes the control and child controls.
`function CustomAlignInsertBefore(); virtual;` |  | Indicates whether the specified controls were custom-aligned using the OnAlignInsertBefore handler.
`procedure CustomAlignPosition(); virtual;` |  | Returns the aligned position for a custom-aligned child control, using the OnAlignPosition event handler.
`function DoAlignChildControls(); virtual;` |  | Override this method to position / align all child controls for the specified control.
`procedure DoChildSizingChange(); virtual;` |  | Called after a change in ChildSizing information to trigger further processing.
`procedure InvalidatePreferredChildSizes;` |  | Flags the preferred sizes of all child controls as invalid (recursively).
`function CanTab; override;` |  | Indicates whether the Tab key can be used for keyboard navigation in the control.
`function IsClientHeightStored; override;` |  | Implements the storage specifier for the ClientHeight property.
`function IsClientWidthStored; override;` |  | Implements the storage specifier for the ClientWidth property.
`procedure DoSendShowHideToInterface; virtual;` |  | Sends the new Visible state to the widgetset class instance.
`procedure ControlsAligned; virtual;` |  | Called from AlignControls when alignment for the control is completed.
`procedure DoSendBoundsToInterface; virtual;` |  | Sends the new bounds for the control to the widgetset class instance.
`procedure RealizeBounds; virtual;` |  | Checks for changes in BoundsRect, and sends the new bounds to the widget.
`procedure RealizeBoundsRecursive;` |  | Sends changed BoundsRects to the widget, for both the control and all child controls.
`procedure InvalidateBoundsRealized;` |  | Resets the realized bounds rectangle for the control.
`procedure CreateSubClass();` |  | An empty implementation in the current LCL version.
`procedure DoConstraintsChange(); override;` |  | Notifies the widgetset class instance when Constraints are changed.
`procedure DoSetBounds(); override;` |  | Updates the size and extent of the control as well as its ClientRect.
`procedure DoAutoSize; override;` |  | Shrinks or enlarges the control to accommodate its children.
`procedure DoAllAutoSize; override;` |  | Performs actions to resize and align the control and all of its children.
`procedure AllAutoSized; virtual;` |  | Called from DoAllAutoSize after all bounds have been computed for the control.
`procedure CalculatePreferredSize(); override;` |  | Override this method to return a different preferred height and/or width for auto-sizing.
`procedure GetPreferredSizeClientFrame(); virtual;` |  | Calculates the width and height for the frame area around the control.
`procedure GetChildren(); override;` |  | Calls the specified procedure for each child control with Root as the Owner.
`function ChildClassAllowed(); override;` |  | Checks whether the specified class type is allowed as a child control.
`procedure PaintControls();` |  | Paints all child controls which do not have a Handle.
`procedure PaintHandler();` |  | Handler for TLMPaint, manages the painting of child controls.
`procedure PaintWindow(); virtual;` |  | Paints a clipping region for the control on the specified device context.
`procedure CreateBrush; virtual;` |  | Creates the Brush, if not already created.
`procedure ScaleControls(); virtual;` |  | Scales values for all child controls.
`procedure ChangeScale(); override;` |  | Scales (resizes) the control and all of its child controls.
`procedure CMBiDiModeChanged(); message;` |  | Handles a CM_BIDIMODECHANGED control message for the control.
`procedure CMBorderChanged(); message;` |  | Handles a CM_BORDERCHANGED message received for the control.
`procedure CMDoubleBufferedChanged(); message;` |  | Handler for changes to the DoubleBuffered property.
`procedure CMEnabledChanged(); message;` |  | Handler signalled when the Enabled property has been changed.
`procedure CMParentDoubleBufferedChanged(); message;` |  | Handles the CM_PARENTDOUBLEBUFFEREDCHANGED control message for the control (when enabled).
`procedure CMShowingChanged(); message;` |  | Handler for changed Showing message; notifies the widgetset.
`procedure CMShowHintChanged(); message;` |  | Handler for changed ShowHint message; notifies all child controls.
`procedure CMVisibleChanged(); message;` |  | Handles Focus changes, and forces UpdateControlState.
`procedure CMEnter(); message;` |  | Handles the CM_ENTER control message for the control.
`procedure CMExit(); message;` |  | Handles the CM_EXIT control message for the control.
`procedure WMContextMenu(); message;` |  | Handler for an ContextMenu event; eventually delegates handling to the affected child control.
`procedure WMEraseBkgnd(); message;` |  | Erases the background, when required.
`procedure WMNotify(); message;` |  | Handles (dispatches) notification messages.
`procedure WMSetFocus(); message;` |  | Handler for receiving Focus event.
`procedure WMKillFocus(); message;` |  | Handles the LM_KILLFOCUS message for the control.
`procedure WMShowWindow(); message;` |  | Handler for changed visibility notification.
`procedure WMEnter(); message;` |  | Handles the LM_ENTER message for the control.
`procedure WMExit(); message;` |  | Handles the LM_EXIT message for the control.
`procedure WMKeyDown(); message;` |  | Event handler for a key press not handled by the widget; Tries TWinControl.DoRemainingKeyDown.
`procedure WMSysKeyDown(); message;` |  | Event handler for system key presses not handled by the widget; tries TWinControl.DoRemainingKeyDown.
`procedure WMKeyUp(); message;` |  | Event handler for key released, not handled by the widget. Tries TWinControl.DoRemainingKeyUp.
`procedure WMSysKeyUp(); message;` |  | Event handler for system key releases not handled by the widget; tries TWinControl.DoRemainingKeyUp
`procedure WMChar(); message;` |  | Handler for messages sent by the widget, after it has handled the key press itself.
`procedure WMSysChar(); message;` |  | Handler for messages sent by the widget, after it has handled the key press itself.
`procedure WMPaint(); message;` |  | Manages paint requests, and handles double buffering.
`procedure WMDestroy(); message;` |  | Handler for widget destroyed message; clears the Handle.
`procedure WMMove(); message;` |  | Handler for widget moved message; updates the Bounds.
`procedure WMSize(); message;` |  | Event handler for size messages.
`procedure WMWindowPosChanged(); message;` |  | Event handler for size/move messages.
`procedure CNKeyDown(); message;` |  | Handler for a key pushed notification; the message is handled by DoKeyDownBeforeInterface by default.
`procedure CNSysKeyDown(); message;` |  | Handler for a system key pushed notification; the message is handled by DoKeyDownBeforeInterface by default.
`procedure CNKeyUp(); message;` |  | Handler for a key released notification; the message is handled by DoKeyUpBeforeInterface by default.
`procedure CNSysKeyUp(); message;` |  | Handler for a system key released notification; the message is handled by DoKeyUpBeforeInterface by default.
`procedure CNChar(); message;` |  | Handler for a key pressed notification; CNChar is sent by the widget before it has handled the key press itself.
`function DoDragMsg(); override;` |  | Dispatches a drag message, sent by the DragManager.
`function DoDockClientMsg(); virtual;` |  | Handles a dmDragDock message, when a control has been docked to this site.
`function DoUndockClientMsg(); virtual;` |  | Notifies the DockManager of the undock of a client control.
`procedure DoAddDockClient(); virtual;` |  | Adjust the Parent of a newly docked Client.
`procedure DockOver(); virtual;` |  | Called to check whether this control allows docking and where.
`procedure DoDockOver(); virtual;` |  | Invoke the OnDockOver handler.
`procedure DoRemoveDockClient(); virtual;` |  | Override this method to take special actions on removal of an docked client.
`function DoUnDock(); virtual;` |  | Notifies an OnUnDock handler and the DockManager of an undocked client control.
`procedure GetSiteInfo(); virtual;` |  | Return information about this dock site (InfluenceRect).
`function GetParentHandle;` |  | Gets the handle for the Parent control.
`function GetTopParentHandle;` |  | Gets the window handle for the parent control at the top of the control hierarchy.
`procedure ReloadDockedControl(); virtual;` |  | Returns the docked control of the specified name.
`function CreateDockManager; virtual;` |  | Returns the DockManager for this control.
`procedure SetDockManager();` |  | Sets the value for the DockManager property.
`procedure DoFloatMsg(); override;` |  | Handler called when the control starts floating.
`procedure DoGetDockCaption(); virtual;` |  | Returns the dock caption in AControl.
`procedure DoEnter; virtual;` |  | Signals the OnEnter event handler (when assigned) when the control receives focus.
`procedure DoExit; virtual;` |  | Signals the OnExit event handler (when assigned) when the control loses focus.
`function DoKeyDownBeforeInterface();` |  | Handles a KeyDown event before the widget processes the key.
`function DoRemainingKeyDown();` |  | Handles key down messages which are not handled by the widget.
`function DoRemainingKeyUp();` |  | Handles key up messages not already handled by the widget.
`function DoKeyPress();` |  | Performs actions needed to handle a key press message for the control.
`function DoUTF8KeyPress(); virtual;` |  | Performs actions needed to handle a UTF-8-encoded key press message for the control.
`function DoKeyUpBeforeInterface();` |  | Handles a KeyUp event before the widget processes the key.
`function ChildKey(); virtual;` |  | Allows a parent form to process a keyboard message in one of its child controls.
`function SendDialogChar();` |  | Forwards the key message to the parent form to be handled as an accelerator (shortcut) key.
`function DialogChar(); override;` |  | Handles the specified key in Message as an accelerator or shortcut key.
`procedure ControlKeyDown(); virtual;` |  | Handles key down events for special navigation keys used in a control.
`procedure ControlKeyUp(); virtual;` |  | Handles key up events for special navigation keys.
`procedure KeyDown(); virtual;` |  | Signals OnKeyDown event handlers (when assigned).
`procedure KeyDownBeforeInterface(); virtual;` |  | Allows the application, parent forms, or control to handle key preview before the LCL interface.
`procedure KeyDownAfterInterface(); virtual;` |  | An empty implementation in the current LCL version.
`procedure KeyPress(); virtual;` |  | Signals the OnKeyPress event handler (when assigned).
`procedure KeyUp(); virtual;` |  | Signals the OnKeyUp event handler (when assigned).
`procedure KeyUpBeforeInterface(); virtual;` |  | Signals the OnKeyUp handler (when assigned)) before calling the LCL interface.
`procedure KeyUpAfterInterface(); virtual;` |  | An empty implementation in the current LCL version.
`procedure UTF8KeyPress(); virtual;` |  | Signals the OnUTF8KeyPress event handler (when assigned).
`function FindNextControl();` |  | Returns the preceding or next control in the tab order.
`procedure SelectFirst;` |  | Returns the first control in the tab order for the parent form.
`function RealGetText; override;` |  | Returns the Caption property.
`function GetBorderStyle;` |  | Gets the value for the BorderStyle property.
`function GetClientOrigin; override;` |  | Gets the top, left screen coordinates for the client area in the control.
`function GetClientRect; override;` |  | Gets the value for the ClientRect property.
`function GetControlOrigin; override;` |  | Gets the value for the ControlOrigin property.
`function GetDeviceContext(); override;` |  | Gets the device context for the control.
`function IsControlMouseMsg();` |  | Sends the specified mouse message to a child control.
`procedure CreateHandle; virtual;` |  | Creates the Handle for the widget, if not already created.
`procedure CreateParams(); virtual;` |  | Initializes the window creation parameter record with the settings for the control.
`procedure CreateWnd; virtual;` |  | Creates the interface object (widget) and assigns the value in Handle.
`procedure DestroyHandle; virtual;` |  | Destroys the handle for the control and all child controls.
`procedure DestroyWnd; virtual;` |  | Destroys the interface object (widget).
`procedure DoFlipChildren; virtual;` |  | Flip children horizontally (mirrors the Left position).
`procedure FinalizeWnd; virtual;` |  | Prepares to remove the window (called before the Handle is destroyed).
`procedure FixupTabList;` |  | Assigns sequential TabOrder values to child controls.
`procedure FontChanged(); override;` |  | Implements the event handler signalled when the Font has been changed for the control.
`procedure InitializeWnd; virtual;` |  | Copies cached control properties to the newly created widget.
`procedure Loaded; override;` |  | Performs actions when a component has been loaded during LCL streaming.
`procedure FormEndUpdated; override;` |  | Realizes all cached changes after a bulk update to a form. Calls the inherited FormEndUpdated method, then informs each child control.
`procedure MainWndProc();` |  | The message handler loop for the control.
`procedure ParentFormHandleInitialized; override;` |  | Called after all child handles for the ParentForm are created; notifies all children of the end of the handle creation phase.
`procedure ChildHandlesCreated; virtual;` |  | Called after all child handles have been created; resets wcfCreatingChildHandles.
`function GetMouseCapture; override;` |  | Gets the value for the MouseCapture property.
`procedure RealSetText(); override;` |  | Sets the text / caption for the control.
`procedure RemoveFocus();` |  | Notifies the parent Form when the control cannot be focused.
`procedure SendMoveSizeMessages(); override;` |  | Sends Move or Size messages using the window message processing loop.
`procedure SetBorderStyle(); virtual;` |  | Sets the value for the BorderStyle property.
`procedure SetColor(); override;` |  | Sets the value for the Color property.
`procedure SetChildZPosition();` |  | Updates the position of the child control in the Z plane (i.e. front-to-back).
`procedure ShowControl(); virtual;` |  | Displays the control on its Parent.
`procedure UpdateControlState;` |  | Updates the visible state for the control, and notifies the widgetset class when available.
`procedure UpdateShowing; virtual;` |  | Updates the Showing property with the visibility for the control, its Parents, and its child controls.
`procedure WndProc(); override;` |  | Adds special handling for focus and input messages, and notifies the DockManager.
`procedure WSSetText(); virtual;` |  | Sets the value for the Text property in the widgetset class.
`property WindowHandle: HWND; [rw]` |  | For internal use; allows direct access to the Handle for the control, bypassing any getter/setter methods.
`property BorderStyle: TBorderStyle; [rw]` |  | Indicates the border style displayed around the control.
`property OnGetSiteInfo: TGetSiteInfoEvent; [rw]` |  | Provides information about the DockSite for the control.
`property OnGetDockCaption: TGetDockCaptionEvent; [rw]` |  | This handler can provide a special DockCaption, different than the Caption default.
`public`
`property BorderWidth: TBorderWidth; [rw]` |  | Width of the Border around the control; default is zero.
`property BoundsLockCount: Integer; [r]` |  | A counter used to track updates to the BoundsRect for the control.
`property Brush: TBrush; [r]` |  | The Brush used to paint the background for the control.
`property CachedClientHeight: Integer; [r]` |  | The intended ClientHeight, as sent to the widgetset class.
`property CachedClientWidth: Integer; [r]` |  | The intended ClientWidth, as sent to the widgetset class.
`property ChildSizing: TControlChildSizing; [rw]` |  | Provides a grid (table) layout for the children of this control.
`property ControlCount: Integer; [r]` |  | The number of child controls in the Controls property.
`property Controls []: TControl; [r]` |  | Provides indexed access to the child controls for the class instance.
`property DefWndProc: Pointer; [rw]` |  | The default WndProc on Windows widgetset and platforms.
`property DockClientCount: Integer; [r]` |  | The number of clients docked into this control.
`property DockClients []: TControl; [r]` |  | The indexed list of controls docked into this control.
`property DockManager: TDockManager; [rw]` |  | The docking layout manager for this control.
`property DockSite: Boolean; [rw]` |  | Allows controls to be drag-and-dock-ed into this control.
`property DoubleBuffered: Boolean; [rws]` |  | When enabled, it reduces flicker when the control is painted.
`property Handle: HWND; [rw]` |  | A reference handle to the widgetset class instance associated with this control.
`property IsFlipped: Boolean; [r]` |  | Used in Carbon and Cocoa widgetsets
`property IsResizing: Boolean; [r]` |  | Indicates if the control is changing its size after the BeginUpdateBounds method has been called.
`property TabOrder: TTabOrder; [rw]` |  | Indicates the navigation order for the control when the user presses the Tab or Shift+Tab key.
`property TabStop: Boolean; [rw]` |  | Allows the user to navigate to / from the control by pressing the Tab or Shift+Tab keys.
`property OnAlignInsertBefore: TAlignInsertBeforeEvent; [rw]` |  | Event handler signalled to determine the order and placement for custom-aligned child controls.
`property OnAlignPosition: TAlignPositionEvent; [rw]` |  | Event handler signalled to determines the position and size for custom-aligned child controls.
`property OnDockDrop: TDockDropEvent; [rw]` |  | Event handler signalled for the drop of a control to be docked.
`property OnDockOver: TDockOverEvent; [rw]` |  | Event handler signalled when a control is moved over a docksite; determines whether the drop event is accepted or rejected.
`property OnEnter: TNotifyEvent; [rw]` |  | Event handler signalled when the control receives focus.
`property OnExit: TNotifyEvent; [rw]` |  | Event handler signalled when the control loses focus.
`property OnKeyDown: TKeyEvent; [rw]` |  | Event handler signalled for key down keyboard events.
`property OnKeyPress: TKeyPressEvent; [rw]` |  | Event handler signalled for character data entered by the user.
`property OnKeyUp: TKeyEvent; [rw]` |  | Event handler signalled when a key up event has occurred for the control.
`property OnUnDock: TUnDockEvent; [rw]` |  | Event handler signalled before a control is undocked from its DockSite.
`property OnUTF8KeyPress: TUTF8KeyPressEvent; [rw]` |  | Handler for a character entered by the user.
`property ParentDoubleBuffered: Boolean; [rw]` |  | Value for the DoubleBuffered property in a Parent control.
`property ParentWindow: HWND; [rw]` |  | The window Handle for the Parent widget.
`property Showing: Boolean; [r]` |  | Cached visibility for the widget. Not necessarily in sync with the widget.
`property UseDockManager: Boolean; [rw]` |  | Determines whether a DockManager is used for this DockSite.
`property DesignerDeleting: Boolean; [w]` |  | Indicates whether the wcfDesignerDeleting flag is included in the flags for the control.
`property IsSpecialSubControl: Boolean; [r]` |  | Indicates if the control has the wcfSpecialSubControl control flag.
`property VisibleDockClientCount: Integer; [r]` |  | The number of visible docked controls.
`function AutoSizePhases; override;` |  | Translates control state flags into AutoSizePhases.
`function AutoSizeDelayed; override;` |  | Returns True if auto-sizing has been delayed until some other process is completed.
`function AutoSizeDelayedReport; override;` |  | Returns a string with a debugging message for delayed auto-size requests.
`function AutoSizeDelayedHandle; override;` |  | Returns True if AutoSize should be skipped / delayed because of its handle.
`procedure BeginUpdateBounds;` |  | Starts an update to the Bounds property; disables SetBounds by incrementing BoundsLockCount.
`procedure EndUpdateBounds;` |  | Ends an update to the Bounds property; decrements BoundsLockCount and eventually calls SetBounds.
`procedure LockRealizeBounds;` |  | Disables sending bounds to the widget, by incrementing the internal FRealizeBoundsLockCount.
`procedure UnlockRealizeBounds;` |  | Enables sending bounds to the widget again, eventually updates the widget.
`function ControlAtPos();` |  | Get the child control at the given client position.
`function ContainsControl();` |  | Returns True if the control is a parent for the specified control.
`procedure DoAdjustClientRectChange();` |  | Asks the widget if ClientRect has changed since the last AlignControl execution; calls AdjustSize on change.
`procedure InvalidateClientRectCache();` |  | The ClientRect is cached; call this procedure to invalidate the cache, so that the next ClientRect value is fetched from the widgetset class.
`function ClientRectNeedsInterfaceUpdate;` |  | The ClientRect is cached - check if the cache is valid.
`procedure SetBounds(); override;` |  | Sets the control bounds and adjusts child and docked controls.
`function GetChildrenRect(); override;` |  | Returns the Client rectangle relative to the controls left, top.
`procedure DisableAlign;` |  | Disables auto-sizing when aligning the control and its parent.
`procedure EnableAlign;` |  | Re-enables auto-sizing after aligning the control and its parent.
`procedure ReAlign;` |  | Adjusts the size and placement for the control and all of its children.
`procedure ScrollBy_WS();` |  | Scrolls the control using the handle for the widgetset class.
`procedure ScrollBy(); virtual;` |  | Scrolls child controls by the specified number of pixels.
`procedure WriteLayoutDebugReport(); override;` |  | Used for debugging.
`procedure AutoAdjustLayout(); override;` |  | Automatically adjusts the size and layout for the control (and all of its children).
`procedure FixDesignFontsPPIWithChildren();` |  | Fixes the design-time PPI settings for the control font, and applies the changes to child controls.
`constructor Create(); override;` |  | Constructor for the class instance.
`constructor CreateParented();` |  | Constructor for a control that is the child of the given widget.
`class function CreateParentedControl();` |  | Constructor for a control that is the child of the given widget.
`destructor Destroy; override;` |  | Destructor for the class instance.
`procedure DockDrop(); virtual;` |  | Handler for a DragManager dmDragDrop message, sent when a dragged control has been dropped onto this docksite.
`function CanFocus; virtual;` |  | Is this control allowed to receive the focus when parent form is visible?
`function CanSetFocus; virtual;` |  | Is this control allowed to receive the focus?
`function GetControlIndex();` |  | Finds the position for the specified control in the Controls property.
`procedure SetControlIndex();` |  | Updates the position of the child control in the Z plane (i.e. front-to-back).
`function Focused; virtual;` |  | Checks whether the control has focus.
`function PerformTab(); virtual;` |  | Changes the focus to the next (or preceding) control.
`function FindChildControl();` |  | Finds a child control with the specified name.
`procedure SelectNext();` |  | Transfers the focus to the next child control.
`procedure SetTempCursor(); override;` |  | Changes the cursor shape temporarily, preserving the original TControl.Cursor
`procedure BroadCast();` |  | Posts the specified message to all of the child controls.
`procedure NotifyControls();` |  | Sends a message to all child controls.
`procedure DefaultHandler(); override;` |  | Handles all messages that the control doesn't fully handle itself.
`function GetTextLen; override;` |  | The length of the Text for the control.
`procedure Invalidate; override;` |  | Schedules a repaint request.
`procedure AddControl; virtual;` |  | Tells the widgetset to add a Handle object representing the current control to the Parent handle.
`procedure InsertControl();` |  | Inserts the specified control into the Controls property.
`procedure RemoveControl(); virtual;` |  | Removes the specified control from the Controls property.
`function GetEnumeratorControls;` |  | Gets an enumerator for the Controls property.
`function GetEnumeratorControlsReverse;` |  | Gets a reverse-order enumerator for the Controls property.
`procedure Repaint; override;` |  | Immediately redraws the control when visible, bypassing the message queue.
`procedure Update; override;` |  | Redraws invalidated parts of the control immediately.
`procedure SetFocus; virtual;` |  | Ensures that the control or window handle has focus.
`procedure FlipChildren(); virtual;` |  | Flip children horizontally. That means mirroring the Left position and anchoring.
`procedure ScaleBy();` |  | Scales (resizes) the control and all of its child controls.
`function GetDockCaption(); virtual;` |  | Returns the docking caption for the specified control.
`procedure UpdateDockCaption(); virtual;` |  | Updates the Caption to reflect the names for the docked clients.
`procedure GetTabOrderList(); virtual;` |  | Fill the list with all TabStop controls, recursing into child controls.
`function HandleAllocated;` |  | Checks whether a handle for the widget has been allocated for the control.
`function ParentHandlesAllocated; override;` |  | Returns True if all Parents have handles allocated, and are not being destroyed.
`procedure HandleNeeded;` |  | Call this method when your code requires a valid Handle for this control.
`function BrushCreated;` |  | Indicates whether a Brush has been created for the control.
`procedure EraseBackground(); virtual;` |  | Fills the display rectangle for the control with the color and pattern in Brush.
`function IntfUTF8KeyPress(); virtual;` |  | Called by the interface after the navigation and specials keys are handled; i.e. after KeyDown but before KeyPress.
`function IntfGetDropFilesTarget; virtual;` |  | Searches for a Parent form that can be used as a file drop target.
`procedure PaintTo();` |  | Paints the control using the handle for the widgetset class.
`procedure SetShape();` |  | Specifies the non-rectangular shape of the widget.
`end;`

## Inheritance

`TWinControl` |  | Implements a windowed control which can contain other child controls.
`TControl` |  | The base class for visible controls.
`TLCLComponent` |  | The base class for LCL components which have an associated widget.
`TComponent`
?
`TObject`

## Description

TWinControl is a TControl descendant which implements a base class for controls that can contain child controls. The name reflects the fact that (on Windows platforms) the controls are based on OS-provided widgets, which have window Handles.

TWinControl extends the ancestor class with new properties, methods, and events which are specific to the windowed control. It also provides overridden methods which re-implement the functionality for some inherited methods. The properties, methods, and event fall into categories like:

- Hi-DPI Awareness and Scaling
- Control, Window, and Notification Message Handlers
- Keyboard and Mouse Message Handlers
- Drag and Drop, Drag and Dock
- Sizing, Positioning, and Alignment
- Alternate Constructors and Class Functions used to create TWinControl Instances
- Forward and Reverse Enumerators for Child Controls

TWinControl is often used as the ancestor for control classes defined in the LCL. For example: TButtonControl, TCustomCalendar, TCustomComboBox, TCustomControl, TCustomEdit, TCustomGroupBox, TCustomListBox, TCustomListView, TCustomPage, TCustomPairSplitter, TCustomProgressBar, TCustomRubberBand, TCustomScrollBar, TCustomStaticText, TCustomTabControl, TCustomTrackBar, TPreviewFileControl, and TStatusBar.

## See also

TControl |  | The base class for visible controls.