Ceci est une ancienne révision du document !
TControl
TControl est une classe de base dans le framework LCL (Lazarus Component Library) utilisée pour la création d'interfaces utilisateur graphiques. Elle est la classe ancêtre de tous les composants visuels dans Lazarus et fournit des fonctionnalités de base pour la gestion de l'affichage, des événements, et des propriétés fondamentales des contrôles.
Héritage
TControl est une classe abstraite qui fait partie de la hiérarchie des composants visuels de Lazarus. Elle hérite de TPersistent et est elle-même la classe parente directe de nombreuses autres classes de contrôle plus spécifiques. Voici une vue simplifiée de la hiérarchie :
- Héritage
TObject = class TPersistent = class(TObject,IFPObserved) TComponent = class(TPersistent,IUnknown,IInterfaceComponentReference) TLCLComponent = class(TComponent) TControl = class(TLCLComponent)
Propriétés Principales
TControl expose un ensemble de propriétés de base que l'on retrouve dans tous les composants visuels dérivés. Ces propriétés permettent de contrôler l'apparence, la position, et le comportement général du contrôle.
- Left, Top : Ces propriétés définissent la position du contrôle par rapport à son parent.
- Width, Height : Ces propriétés définissent la taille du contrôle.
- Visible : Un booléen qui détermine si le contrôle est visible ou non.
- Enabled : Un booléen qui détermine si le contrôle peut recevoir des événements utilisateur.
- Color : Définit la couleur de fond du contrôle, si applicable.
- Hint : Un texte qui s'affiche lorsque l'utilisateur survole le contrôle avec la souris.
Méthodes Principales
En tant que classe de base, TControl fournit un ensemble de méthodes pour interagir avec le contrôle.
- Invalidate() : Demande la réactualisation du contrôle en invalidant sa zone de dessin. Le contrôle sera redessiné lors du prochain cycle de peinture.
- Update() : Force le redessin immédiat du contrôle.
- BringToFront() : Amène le contrôle au premier plan dans la pile Z.
- SendToBack() : Envoie le contrôle à l'arrière-plan dans la pile Z.
- SetBounds(ALeft, ATop, AWidth, AHeight: Integer) : Définit la position et la taille du contrôle en une seule opération.
Événements
TControl gère les événements de base qui sont cruciaux pour les interactions utilisateur. Ces événements sont souvent réassignés ou étendus dans des classes dérivées pour fournir des comportements plus spécifiques.
- OnClick : Se déclenche lorsqu'un utilisateur clique sur le contrôle.
- OnDblClick : Se déclenche lors d'un double-clic.
- OnMouseDown / OnMouseUp : Se déclenche lors de l'appui ou du relâchement d'un bouton de souris.
- OnMouseMove : Se déclenche lorsque la souris se déplace au-dessus du contrôle.
- OnKeyDown / OnKeyUp : Se déclenche lorsqu'une touche du clavier est pressée ou relâchée alors que le contrôle a le focus.
- OnEnter / OnExit : Se déclenche lorsque le contrôle reçoit ou perd le focus.
Dessin et Affichage
Contrairement à certaines de ses sous-classes comme TCustomControl, TControl ne fournit pas de mécanisme de dessin natif. Les contrôles qui dérivent directement de TControl n'ont pas de gestion personnalisée du rendu graphique. Le rôle de TControl est davantage de servir de base structurelle pour les contrôles qui seront ensuite spécialisés dans des classes descendantes.
Limitations
En tant que classe de base, TControl ne peut pas être utilisée directement pour créer des composants graphiques fonctionnels. Ses limitations incluent :
- Pas de conteneur de contrôles : TControl ne peut pas contenir d'autres contrôles visuels, contrairement à TWinControl.
- Pas de gestion native du dessin : Pour créer des contrôles personnalisés, il faut généralement hériter de TCustomControl ou d'une autre classe dérivée qui gère le dessin.
- Pas de support direct pour les messages Windows : Contrairement à TWinControl, TControl ne gère pas directement les messages Windows, ce qui limite son utilisation pour des contrôles nécessitant des interactions natives avec le système d'exploitation.
Utilisation Courante
Dans la pratique, TControl est rarement utilisé tel quel. Il sert principalement de classe parent pour définir les propriétés et méthodes communes à tous les contrôles visuels. Les développeurs Lazarus travaillent généralement avec des classes dérivées de TControl comme TWinControl pour créer des interfaces utilisateurs fonctionnelles et interactives.
En résumé
TControl est une brique essentielle de la LCL, offrant les fondations nécessaires pour l'élaboration de composants visuels dans Lazarus. Bien qu'elle ne soit pas directement utilisée pour créer des contrôles, elle définit un cadre solide sur lequel s'appuient les autres classes de contrôle pour développer des interfaces graphiques riches et interactives.
Propriétées
Public
- ControleStyle : spécifie les comportements et les caractéristiques du
TControl
. Il s'agit d'un ensemble de styles (set
) basé sur l'énumérationTControlStyleType
Code
- \lcl\controls.pp
TControl = class(TLCLComponent) private FActionLink: TControlActionLink; FAlign: TAlign; FAnchors: TAnchors; FAnchorSides: array[TAnchorKind] of TAnchorSide; FAnchoredControls: TFPList; // list of TControl anchored to this control FAutoSizingLockCount: Integer; // in/decreased by DisableAutoSizing/EnableAutoSizing {$IFDEF DebugDisableAutoSizing} FAutoSizingLockReasons: TStrings; {$ENDIF} FBaseBounds: TRect; FBaseBoundsLock: Integer; FBaseParentClientSize: TSize; FBiDiMode: TBiDiMode; FBorderSpacing: TControlBorderSpacing; FBoundsRectForNewParent: TRect; FCaption: TCaption; FCaptureMouseButtons: TCaptureMouseButtons; FColor: TColor; FConstraints: TSizeConstraints; FControlFlags: TControlFlags; FControlHandlers: array[TControlHandlerType] of TMethodList; FControlStyle: TControlStyle; FDockOrientation: TDockOrientation; FDragCursor: TCursor; FDragKind: TDragKind; FDragMode: TDragMode; FFloatingDockSiteClass: TWinControlClass; FFont: TFont; FHeight: Integer; FHelpContext: THelpContext; FHelpKeyword: string; FHelpType: THelpType; FHint: TTranslateString; FHostDockSite: TWinControl; FLastDoChangeBounds: TRect; FLastDoChangeClientSize: TPoint; FLastResizeClientHeight: Integer; FLastResizeClientWidth: Integer; FLastResizeHeight: Integer; FLastResizeWidth: Integer; FLeft: Integer; FLoadedClientSize: TSize; FLRDockWidth: Integer; FOnChangeBounds: TNotifyEvent; FOnClick: TNotifyEvent; FOnConstrainedResize: TConstrainedResizeEvent; FOnContextPopup: TContextPopupEvent; FOnDblClick: TNotifyEvent; FOnDragDrop: TDragDropEvent; FOnDragOver: TDragOverEvent; FOnEditingDone: TNotifyEvent; FOnEndDock: TEndDragEvent; FOnEndDrag: TEndDragEvent; FOnMouseDown: TMouseEvent; FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; FOnMouseMove: TMouseMoveEvent; FOnMouseUp: TMouseEvent; FOnMouseWheel: TMouseWheelEvent; FOnMouseWheelDown: TMouseWheelUpDownEvent; FOnMouseWheelUp: TMouseWheelUpDownEvent; FOnMouseWheelHorz: TMouseWheelEvent; FOnMouseWheelLeft: TMouseWheelUpDownEvent; FOnMouseWheelRight: TMouseWheelUpDownEvent; FOnQuadClick: TNotifyEvent; FOnResize: TNotifyEvent; FOnShowHint: TControlShowHintEvent; FOnStartDock: TStartDockEvent; FOnStartDrag: TStartDragEvent; FOnTripleClick: TNotifyEvent; FParent: TWinControl; FPopupMenu: TPopupMenu; FPreferredMinWidth: Integer;// without theme space FPreferredMinHeight: Integer;// without theme space FPreferredWidth: Integer;// with theme space FPreferredHeight: Integer;// with theme space FReadBounds: TRect; FSessionProperties: string; FSizeLock: Integer; FTBDockHeight: Integer; FTop: Integer; FUndockHeight: Integer; FUndockWidth: Integer; FWidth: Integer; FWindowProc: TWndMethod; //boolean fields, keep together to save some bytes FDesktopFont: Boolean; FParentBiDiMode: Boolean; FIsControl: Boolean; FShowHint: Boolean; FParentColor: Boolean; FParentFont: Boolean; FParentShowHint: Boolean; FAutoSize: Boolean; FAutoSizingAll: Boolean; FAutoSizingSelf: Boolean; FEnabled: Boolean; FMouseInClient: Boolean; FVisible: Boolean; function CaptureMouseButtonsIsStored: Boolean; procedure DoActionChange(Sender: TObject); function GetAccessibleName: TCaption; function GetAccessibleDescription: TCaption; function GetAccessibleValue: TCaption; function GetAccessibleRole: TLazAccessibilityRole; function GetAutoSizingAll: Boolean; function GetAnchorSide(Kind: TAnchorKind): TAnchorSide; function GetAnchoredControls(Index: Integer): TControl; function GetBoundsRect: TRect; function GetClientHeight: Integer; function GetClientWidth: Integer; function GetLRDockWidth: Integer; function GetTBDockHeight: Integer; function GetText: TCaption; function GetUndockHeight: Integer; function GetUndockWidth: Integer; function IsAnchorsStored: Boolean; function IsBiDiModeStored: Boolean; function IsEnabledStored: Boolean; function IsFontStored: Boolean; function IsHintStored: Boolean; function IsHelpContextStored: Boolean; function IsHelpKeyWordStored: Boolean; function IsShowHintStored: Boolean; function IsVisibleStored: Boolean; procedure DoBeforeMouseMessage(TheMessage: TLMessage); procedure DoConstrainedResize(var NewLeft, NewTop, NewWidth, NewHeight: Integer); procedure SetAccessibleName(AValue: TCaption); procedure SetAccessibleDescription(AValue: TCaption); procedure SetAccessibleValue(AValue: TCaption); procedure SetAccessibleRole(AValue: TLazAccessibilityRole); procedure SetAnchorSide(Kind: TAnchorKind; AValue: TAnchorSide); procedure SetBorderSpacing(const AValue: TControlBorderSpacing); procedure SetBoundsRect(const ARect: TRect); procedure SetBoundsRectForNewParent(const AValue: TRect); procedure SetClientHeight(Value: Integer); procedure SetClientSize(const Value: TPoint); procedure SetClientWidth(Value: Integer); procedure SetConstraints(const Value: TSizeConstraints); procedure SetDesktopFont(const AValue: Boolean); procedure SetDragCursor(const AValue: TCursor); procedure SetFont(Value: TFont); procedure SetHeight(Value: Integer); procedure SetHelpContext(const AValue: THelpContext); procedure SetHelpKeyword(const AValue: string); procedure SetHostDockSite(const AValue: TWinControl); procedure SetLeft(Value: Integer); procedure SetMouseCapture(Value: Boolean); procedure SetParentShowHint(Value: Boolean); procedure SetParentColor(Value: Boolean); procedure SetParentFont(Value: Boolean); procedure SetPopupMenu(Value: TPopupMenu); procedure SetShowHint(Value: Boolean); procedure SetText(const Value: TCaption); procedure SetTop(Value: Integer); procedure SetWidth(Value: Integer); protected FAccessibleObject: TLazAccessibleObject; FControlState: TControlState; FCursor: TCursor; class procedure WSRegisterClass; override; function GetCursor: TCursor; virtual; procedure SetCursor(Value: TCursor); virtual; procedure SetVisible(Value: Boolean); virtual; procedure DoOnParentHandleDestruction; virtual; protected // sizing/aligning procedure DoAutoSize; virtual; procedure DoAllAutoSize; virtual; // while autosize needed call DoAutoSize, used by AdjustSize and EnableAutoSizing procedure BeginAutoSizing; // set AutoSizing=true, can be used to prevent circles procedure EndAutoSizing; // set AutoSizing=false procedure AnchorSideChanged(TheAnchorSide: TAnchorSide); virtual; procedure ForeignAnchorSideChanged(TheAnchorSide: TAnchorSide; Operation: TAnchorSideChangeOperation); virtual; procedure SetAlign(Value: TAlign); virtual; procedure SetAnchors(const AValue: TAnchors); virtual; procedure SetAutoSize(Value: Boolean); virtual; procedure BoundsChanged; virtual; function CreateControlBorderSpacing: TControlBorderSpacing; virtual; procedure DoConstraintsChange(Sender: TObject); virtual; procedure DoBorderSpacingChange(Sender: TObject; InnerSpaceChanged: Boolean); virtual; function IsBorderSpacingInnerBorderStored: Boolean; virtual; function IsCaptionStored: Boolean; procedure SendMoveSizeMessages(SizeChanged, PosChanged: Boolean); virtual; procedure ConstrainedResize(var MinWidth, MinHeight, MaxWidth, MaxHeight: TConstraintSize); virtual; procedure CalculatePreferredSize( var PreferredWidth, PreferredHeight: Integer; WithThemeSpace: Boolean); virtual; procedure DoOnResize; virtual;// call OnResize procedure DoOnChangeBounds; virtual;// call OnChangeBounds procedure CheckOnChangeBounds;// checks for changes and calls DoOnChangeBounds procedure Resize; virtual;// checks for changes and calls DoOnResize procedure RequestAlign; virtual;// smart calling Parent.AlignControls procedure UpdateAnchorRules; procedure ChangeBounds(ALeft, ATop, AWidth, AHeight: Integer; KeepBase: Boolean); virtual; procedure DoSetBounds(ALeft, ATop, AWidth, AHeight: Integer); virtual; procedure ScaleConstraints(Multiplier, Divider: Integer); procedure ChangeScale(Multiplier, Divider: Integer); virtual; function CanAutoSize(var NewWidth, NewHeight: Integer): Boolean; virtual; procedure SetBiDiMode(AValue: TBiDiMode); virtual; procedure SetParentBiDiMode(AValue: Boolean); virtual; function IsAParentAligning: Boolean; function GetClientOrigin: TPoint; virtual; function GetClientRect: TRect; virtual;// visual size of client area function GetLogicalClientRect: TRect; virtual;// logical size of client area (e.g. in a TScrollBox the logical client area can be bigger than the visual) function GetScrolledClientRect: TRect; virtual;// visual client area scrolled function GetClientScrollOffset: TPoint; virtual; function GetControlOrigin: TPoint; virtual; function IsClientHeightStored: Boolean; virtual; function IsClientWidthStored: Boolean; virtual; function WidthIsAnchored: Boolean; function HeightIsAnchored: Boolean; property AutoSizing: Boolean read FAutoSizingSelf;// see Begin/EndAutoSizing property AutoSizingAll: Boolean read GetAutoSizingAll;// set in DoAllAutoSize property AutoSizingLockCount: Integer read FAutoSizingLockCount; // in/decreased by Disable/EnableAutoSizing protected // protected messages procedure WMCancelMode(var Message: TLMessage); message LM_CANCELMODE; procedure WMContextMenu(var Message: TLMContextMenu); message LM_CONTEXTMENU; procedure WMLButtonDown(var Message: TLMLButtonDown); message LM_LBUTTONDOWN; procedure WMRButtonDown(var Message: TLMRButtonDown); message LM_RBUTTONDOWN; procedure WMMButtonDown(var Message: TLMMButtonDown); message LM_MBUTTONDOWN; procedure WMXButtonDown(var Message: TLMXButtonDown); message LM_XBUTTONDOWN; procedure WMLButtonDBLCLK(var Message: TLMLButtonDblClk); message LM_LBUTTONDBLCLK; procedure WMRButtonDBLCLK(var Message: TLMRButtonDblClk); message LM_RBUTTONDBLCLK; procedure WMMButtonDBLCLK(var Message: TLMMButtonDblClk); message LM_MBUTTONDBLCLK; procedure WMXButtonDBLCLK(var Message: TLMXButtonDblClk); message LM_XBUTTONDBLCLK; procedure WMLButtonTripleCLK(var Message: TLMLButtonTripleClk); message LM_LBUTTONTRIPLECLK; procedure WMRButtonTripleCLK(var Message: TLMRButtonTripleClk); message LM_RBUTTONTRIPLECLK; procedure WMMButtonTripleCLK(var Message: TLMMButtonTripleClk); message LM_MBUTTONTRIPLECLK; procedure WMXButtonTripleCLK(var Message: TLMXButtonTripleClk); message LM_XBUTTONTRIPLECLK; procedure WMLButtonQuadCLK(var Message: TLMLButtonQuadClk); message LM_LBUTTONQUADCLK; procedure WMRButtonQuadCLK(var Message: TLMRButtonQuadClk); message LM_RBUTTONQUADCLK; procedure WMMButtonQuadCLK(var Message: TLMMButtonQuadClk); message LM_MBUTTONQUADCLK; procedure WMXButtonQuadCLK(var Message: TLMXButtonQuadClk); message LM_XBUTTONQUADCLK; procedure WMMouseMove(var Message: TLMMouseMove); message LM_MOUSEMOVE; procedure WMLButtonUp(var Message: TLMLButtonUp); message LM_LBUTTONUP; procedure WMRButtonUp(var Message: TLMRButtonUp); message LM_RBUTTONUP; procedure WMMButtonUp(var Message: TLMMButtonUp); message LM_MBUTTONUP; procedure WMXButtonUp(var Message: TLMXButtonUp); message LM_XBUTTONUP; procedure WMMouseWheel(var Message: TLMMouseEvent); message LM_MOUSEWHEEL; procedure WMMouseHWheel(var Message: TLMMouseEvent); message LM_MOUSEHWHEEL; procedure WMMove(var Message: TLMMove); message LM_MOVE; procedure WMSize(var Message: TLMSize); message LM_SIZE; procedure WMWindowPosChanged(var Message: TLMWindowPosChanged); message LM_WINDOWPOSCHANGED; procedure CMChanged(var Message: TLMessage); message CM_CHANGED; procedure LMCaptureChanged(var Message: TLMessage); message LM_CaptureChanged; procedure CMBiDiModeChanged(var Message: TLMessage); message CM_BIDIMODECHANGED; procedure CMSysFontChanged(var Message: TLMessage); message CM_SYSFONTCHANGED; procedure CMEnabledChanged(var Message: TLMEssage); message CM_ENABLEDCHANGED; procedure CMHitTest(var Message: TCMHittest) ; message CM_HITTEST; procedure CMMouseEnter(var Message :TLMessage); message CM_MOUSEENTER; procedure CMMouseLeave(var Message :TLMessage); message CM_MOUSELEAVE; procedure CMHintShow(var Message: TLMessage); message CM_HINTSHOW; procedure CMParentBiDiModeChanged(var Message: TLMessage); message CM_PARENTBIDIMODECHANGED; procedure CMParentColorChanged(var Message: TLMessage); message CM_PARENTCOLORCHANGED; procedure CMParentFontChanged(var Message: TLMessage); message CM_PARENTFONTCHANGED; procedure CMParentShowHintChanged(var Message: TLMessage); message CM_PARENTSHOWHINTCHANGED; procedure CMVisibleChanged(var Message: TLMessage); message CM_VISIBLECHANGED; procedure CMTextChanged(var Message: TLMessage); message CM_TEXTCHANGED; procedure CMCursorChanged(var Message: TLMessage); message CM_CURSORCHANGED; protected // drag and drop procedure CalculateDockSizes; function CreateFloatingDockSite(const Bounds: TRect): TWinControl; function GetDockEdge(const MousePos: TPoint): TAlign; virtual; function GetDragImages: TDragImageList; virtual; function GetFloating: Boolean; virtual; function GetFloatingDockSiteClass: TWinControlClass; virtual; procedure BeforeDragStart; virtual; procedure BeginAutoDrag; virtual; procedure DoFloatMsg(ADockSource: TDragDockObject);virtual;//CM_FLOAT procedure DockTrackNoTarget(Source: TDragDockObject; X, Y: Integer); virtual; procedure DoDock(NewDockSite: TWinControl; var ARect: TRect); virtual; function DoDragMsg(ADragMessage: TDragMessage; APosition: TPoint; ADragObject: TDragObject; ATarget: TControl; ADocking: Boolean):LRESULT; virtual;//Cm_Drag procedure DoEndDock(Target: TObject; X, Y: Integer); virtual; procedure DoEndDrag(Target: TObject; X,Y: Integer); virtual; procedure DoStartDock(var DragObject: TDragObject); virtual; procedure DoStartDrag(var DragObject: TDragObject); virtual; procedure DragCanceled; virtual; procedure DragOver(Source: TObject; X,Y: Integer; State: TDragState; var Accept: Boolean); virtual; procedure PositionDockRect(DragDockObject: TDragDockObject); virtual; procedure SetDragMode(Value: TDragMode); virtual; function GetDefaultDockCaption: string; virtual; //procedure SendDockNotification; virtual; MG: probably not needed protected // key and mouse procedure Click; virtual; procedure DblClick; virtual; procedure TripleClick; virtual; procedure QuadClick; virtual; function GetMousePosFromMessage(const MessageMousePos: TSmallPoint): TPoint; procedure DoMouseDown(var Message: TLMMouse; Button: TMouseButton; Shift: TShiftState); virtual; procedure DoMouseUp(var Message: TLMMouse; Button: TMouseButton); virtual; procedure MouseDown(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); virtual; procedure MouseMove(Shift: TShiftState; X,Y: Integer); virtual; procedure MouseUp(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); virtual; procedure MouseEnter; virtual; procedure MouseLeave; virtual; function DialogChar(var Message: TLMKey): Boolean; virtual; procedure UpdateMouseCursor(X, Y: Integer); protected procedure Changed; function GetPalette: HPalette; virtual; function GetParentBackground: Boolean; function ChildClassAllowed(ChildClass: TClass): Boolean; virtual; procedure ReadState(Reader: TReader); override; // called procedure Loaded; override; procedure LoadedAll; virtual; // called when all controls were Loaded and lost their csLoading procedure DefineProperties(Filer: TFiler); override; procedure AssignTo(Dest: TPersistent); override; procedure FormEndUpdated; virtual; procedure InvalidateControl(CtrlIsVisible, CtrlIsOpaque: Boolean); procedure InvalidateControl(CtrlIsVisible, CtrlIsOpaque, IgnoreWinControls: Boolean); procedure FontChanged(Sender: TObject); virtual; procedure ParentFontChanged; virtual; function GetAction: TBasicAction; virtual; function RealGetText: TCaption; virtual; procedure RealSetText(const Value: TCaption); virtual; procedure TextChanged; virtual; function GetCachedText(var CachedText: TCaption): Boolean; virtual; procedure SetAction(Value: TBasicAction); virtual; procedure SetColor(Value: TColor); virtual; procedure SetEnabled(Value: Boolean); virtual; procedure SetHint(const Value: TTranslateString); virtual; procedure SetName(const Value: TComponentName); override; procedure SetParent(NewParent: TWinControl); virtual; procedure SetParentBackground(const AParentBackground: Boolean); virtual; procedure SetParentComponent(NewParentComponent: TComponent); override; procedure WndProc(var TheMessage: TLMessage); virtual; procedure ParentFormHandleInitialized; virtual; // called by ChildHandlesCreated of parent form function GetMouseCapture: Boolean; virtual; procedure CaptureChanged; virtual; procedure Notification(AComponent: TComponent; Operation: TOperation); override; function CanTab: Boolean; virtual; function GetDeviceContext(var WindowHandle: HWND): HDC; virtual; function GetEnabled: Boolean; virtual; function GetPopupMenu: TPopupMenu; virtual; procedure DoOnShowHint(HintInfo: PHintInfo); virtual; function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; virtual; function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; virtual; function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; virtual; function DoMouseWheelHorz(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; virtual; function DoMouseWheelLeft(Shift: TShiftState; MousePos: TPoint): Boolean; virtual; function DoMouseWheelRight(Shift: TShiftState; MousePos: TPoint): Boolean; virtual; procedure VisibleChanging; virtual; procedure VisibleChanged; virtual; procedure EnabledChanging; virtual; procedure EnabledChanged; virtual; procedure AddHandler(HandlerType: TControlHandlerType; const AMethod: TMethod; AsFirst: Boolean = false); procedure RemoveHandler(HandlerType: TControlHandlerType; const AMethod: TMethod); procedure DoCallNotifyHandler(HandlerType: TControlHandlerType); procedure DoCallKeyEventHandler(HandlerType: TControlHandlerType; var Key: Word; Shift: TShiftState); procedure DoCallMouseWheelEventHandler(HandlerType: TControlHandlerType; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); procedure DoContextPopup(MousePos: TPoint; var Handled: Boolean); virtual; procedure SetZOrder(TopMost: Boolean); virtual; class function GetControlClassDefaultSize: TSize; virtual; function ColorIsStored: Boolean; virtual; procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); virtual; procedure DoFixDesignFontPPI(const AFont: TFont; const ADesignTimePPI: Integer); procedure DoScaleFontPPI(const AFont: TFont; const AToPPI: Integer; const AProportion: Double); protected // actions function GetActionLinkClass: TControlActionLinkClass; virtual; procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); virtual; protected // optional properties (not every descendent supports them) property ActionLink: TControlActionLink read FActionLink write FActionLink; property DesktopFont: Boolean read FDesktopFont write SetDesktopFont; property DragCursor: TCursor read FDragCursor write SetDragCursor default crDrag; property DragKind: TDragKind read FDragKind write FDragKind default dkDrag; property DragMode: TDragMode read FDragMode write SetDragMode default dmManual; property MouseCapture: Boolean read GetMouseCapture write SetMouseCapture; property ParentBackground: Boolean read GetParentBackground write SetParentBackground; property ParentColor: Boolean read FParentColor write SetParentColor default True; property ParentFont: Boolean read FParentFont write SetParentFont default True; property ParentShowHint: Boolean read FParentShowHint write SetParentShowHint default True; property SessionProperties: string read FSessionProperties write FSessionProperties; property Text: TCaption read GetText write SetText; property OnConstrainedResize: TConstrainedResizeEvent read FOnConstrainedResize write FOnConstrainedResize; property OnContextPopup: TContextPopupEvent read FOnContextPopup write FOnContextPopup; property OnDblClick: TNotifyEvent read FOnDblClick write FOnDblClick; property OnTripleClick: TNotifyEvent read FOnTripleClick write FOnTripleClick; property OnQuadClick: TNotifyEvent read FOnQuadClick write FOnQuadClick; property OnDragDrop: TDragDropEvent read FOnDragDrop write FOnDragDrop; property OnDragOver: TDragOverEvent read FOnDragOver write FOnDragOver; property OnEndDock: TEndDragEvent read FOnEndDock write FOnEndDock; property OnEndDrag: TEndDragEvent read FOnEndDrag write FOnEndDrag; property OnMouseDown: TMouseEvent read FOnMouseDown write FOnMouseDown; property OnMouseMove: TMouseMoveEvent read FOnMouseMove write FOnMouseMove; property OnMouseUp: TMouseEvent read FOnMouseUp write FOnMouseUp; property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; property OnMouseWheel: TMouseWheelEvent read FOnMouseWheel write FOnMouseWheel; property OnMouseWheelDown: TMouseWheelUpDownEvent read FOnMouseWheelDown write FOnMouseWheelDown; property OnMouseWheelUp: TMouseWheelUpDownEvent read FOnMouseWheelUp write FOnMouseWheelUp; property OnMouseWheelHorz: TMouseWheelEvent read FOnMouseWheelHorz write FOnMouseWheelHorz; property OnMouseWheelLeft: TMouseWheelUpDownEvent read FOnMouseWheelLeft write FOnMouseWheelLeft; property OnMouseWheelRight: TMouseWheelUpDownEvent read FOnMouseWheelRight write FOnMouseWheelRight; property OnStartDock: TStartDockEvent read FOnStartDock write FOnStartDock; property OnStartDrag: TStartDragEvent read FOnStartDrag write FOnStartDrag; property OnEditingDone: TNotifyEvent read FOnEditingDone write FOnEditingDone; public FCompStyle: Byte; // 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. public // drag and dock procedure DragDrop(Source: TObject; X,Y: Integer); virtual; procedure Dock(NewDockSite: TWinControl; ARect: TRect); virtual; function ManualDock(NewDockSite: TWinControl; DropControl: TControl = nil; ControlSide: TAlign = alNone; KeepDockSiteSize: Boolean = true): Boolean; virtual; function ManualFloat(TheScreenRect: TRect; KeepDockSiteSize: Boolean = true): Boolean; virtual; function ReplaceDockedControl(Control: TControl; NewDockSite: TWinControl; DropControl: TControl; ControlSide: TAlign): Boolean; function Docked: Boolean; function Dragging: Boolean; // accessibility function GetAccessibleObject: TLazAccessibleObject; function CreateAccessibleObject: TLazAccessibleObject; virtual; function GetSelectedChildAccessibleObject: TLazAccessibleObject; virtual; function GetChildAccessibleObjectAtPos(APos: TPoint): TLazAccessibleObject; virtual; //scale support function ScaleDesignToForm(const ASize: Integer): Integer; function ScaleFormToDesign(const ASize: Integer): Integer; function Scale96ToForm(const ASize: Integer): Integer; function ScaleFormTo96(const ASize: Integer): Integer; function Scale96ToFont(const ASize: Integer): Integer; function ScaleFontTo96(const ASize: Integer): Integer; function ScaleScreenToFont(const ASize: Integer): Integer; function ScaleFontToScreen(const ASize: Integer): Integer; function Scale96ToScreen(const ASize: Integer): Integer; function ScaleScreenTo96(const ASize: Integer): Integer; public // size procedure AdjustSize; virtual;// smart calling DoAutoSize function AutoSizePhases: TControlAutoSizePhases; virtual; function AutoSizeDelayed: Boolean; virtual; function AutoSizeDelayedReport: string; virtual; function AutoSizeDelayedHandle: Boolean; virtual; procedure AnchorToNeighbour(Side: TAnchorKind; Space: TSpacingSize; Sibling: TControl); procedure AnchorParallel(Side: TAnchorKind; Space: TSpacingSize; Sibling: TControl); procedure AnchorHorizontalCenterTo(Sibling: TControl); procedure AnchorVerticalCenterTo(Sibling: TControl); procedure AnchorToCompanion(Side: TAnchorKind; Space: TSpacingSize; Sibling: TControl; FreeCompositeSide: Boolean = true); procedure AnchorSame(Side: TAnchorKind; Sibling: TControl); procedure AnchorAsAlign(TheAlign: TAlign; Space: TSpacingSize); procedure AnchorClient(Space: TSpacingSize); function AnchoredControlCount: Integer; property AnchoredControls[Index: Integer]: TControl read GetAnchoredControls; procedure SetBounds(aLeft, aTop, aWidth, aHeight: Integer); virtual; procedure SetInitialBounds(aLeft, aTop, aWidth, aHeight: Integer); virtual; procedure SetBoundsKeepBase(aLeft, aTop, aWidth, aHeight: Integer ); virtual; // if you use this, disable the LCL autosizing for this control procedure GetPreferredSize(var PreferredWidth, PreferredHeight: Integer; Raw: Boolean = false; WithThemeSpace: Boolean = true); virtual; function GetCanvasScaleFactor: Double; function GetDefaultWidth: Integer; function GetDefaultHeight: Integer; function GetDefaultColor(const DefaultColorType: TDefaultColorType): TColor; virtual; // These two are helper routines to help obtain the background color of a control function GetColorResolvingParent: TColor; function GetRGBColorResolvingParent: TColor; // function GetSidePosition(Side: TAnchorKind): Integer; procedure CNPreferredSizeChanged; procedure InvalidatePreferredSize; virtual; function GetAnchorsDependingOnParent(WithNormalAnchors: Boolean): TAnchors; procedure DisableAutoSizing{$IFDEF DebugDisableAutoSizing}(const Reason: string){$ENDIF}; procedure EnableAutoSizing{$IFDEF DebugDisableAutoSizing}(const Reason: string){$ENDIF}; {$IFDEF DebugDisableAutoSizing} procedure WriteAutoSizeReasons(NotIfEmpty: Boolean); {$ENDIF} procedure UpdateBaseBounds(StoreBounds, StoreParentClientSize, UseLoadedValues: Boolean); virtual; property BaseBounds: TRect read FBaseBounds; property ReadBounds: TRect read FReadBounds; property BaseParentClientSize: TSize read FBaseParentClientSize; procedure WriteLayoutDebugReport(const Prefix: string); virtual; public // LCL Scaling (High-DPI) procedure AutoAdjustLayout(AMode: TLayoutAdjustmentPolicy; const AFromPPI, AToPPI, AOldFormWidth, ANewFormWidth: Integer); virtual; procedure ShouldAutoAdjust(var AWidth, AHeight: Boolean); virtual; procedure FixDesignFontsPPI(const ADesignTimePPI: Integer); virtual; procedure ScaleFontsPPI(const AToPPI: Integer; const AProportion: Double); virtual; public constructor Create(TheOwner: TComponent);override; destructor Destroy; override; procedure BeforeDestruction; override; procedure EditingDone; virtual; procedure ExecuteDefaultAction; virtual; procedure ExecuteCancelAction; virtual; procedure BeginDrag(Immediate: Boolean; Threshold: Integer = -1); procedure EndDrag(Drop: Boolean); procedure BringToFront; function HasParent: Boolean; override; function GetParentComponent: TComponent; override; function IsParentOf(AControl: TControl): Boolean; virtual; function GetTopParent: TControl; function FindSubComponent(AName: string): TComponent; function IsVisible: Boolean; virtual;// checks parents too function IsControlVisible: Boolean; virtual;// does not check parents function IsEnabled: Boolean; // checks parent too function IsParentColor: Boolean; // checks protected ParentColor, needed by widgetsets function IsParentFont: Boolean; // checks protected ParentFont, needed by widgetsets function FormIsUpdating: Boolean; virtual; function IsProcessingPaintMsg: Boolean; procedure Hide; procedure Refresh; procedure Repaint; virtual; procedure Invalidate; virtual; function CheckChildClassAllowed(ChildClass: TClass; ExceptionOnInvalid: Boolean): Boolean; procedure CheckNewParent(AParent: TWinControl); virtual; procedure SendToBack; procedure SetTempCursor(Value: TCursor); virtual; procedure UpdateRolesForForm; virtual; procedure ActiveDefaultControlChanged(NewControl: TControl); virtual; function GetTextBuf(Buffer: PChar; BufSize: Integer): Integer; virtual; function GetTextLen: Integer; virtual; procedure SetTextBuf(Buffer: PChar); virtual; function Perform(Msg: Cardinal; WParam: WParam; LParam: LParam): LRESULT; function ScreenToClient(const APoint: TPoint): TPoint; virtual; function ClientToScreen(const APoint: TPoint): TPoint; overload; virtual; function ClientToScreen(const ARect: TRect): TRect; overload; function ScreenToControl(const APoint: TPoint): TPoint; function ControlToScreen(const APoint: TPoint): TPoint; function ClientToParent(const Point: TPoint; AParent: TWinControl = nil): TPoint; function ParentToClient(const Point: TPoint; AParent: TWinControl = nil): TPoint; function GetChildrenRect(Scrolled: Boolean): TRect; virtual; procedure Show; procedure Update; virtual; function HandleObjectShouldBeVisible: Boolean; virtual; function ParentDestroyingHandle: Boolean; function ParentHandlesAllocated: Boolean; virtual; procedure InitiateAction; virtual; procedure ShowHelp; virtual; function HasHelp: Boolean; public // Event lists procedure RemoveAllHandlersOfObject(AnObject: TObject); override; procedure AddHandlerOnResize(const OnResizeEvent: TNotifyEvent; AsFirst: Boolean = false); procedure RemoveHandlerOnResize(const OnResizeEvent: TNotifyEvent); procedure AddHandlerOnChangeBounds(const OnChangeBoundsEvent: TNotifyEvent; AsFirst: Boolean = false); procedure RemoveHandlerOnChangeBounds(const OnChangeBoundsEvent: TNotifyEvent); procedure AddHandlerOnVisibleChanging(const OnVisibleChangingEvent: TNotifyEvent; AsFirst: Boolean = false); procedure RemoveHandlerOnVisibleChanging(const OnVisibleChangingEvent: TNotifyEvent); procedure AddHandlerOnVisibleChanged(const OnVisibleChangedEvent: TNotifyEvent; AsFirst: Boolean = false); procedure RemoveHandlerOnVisibleChanged(const OnVisibleChangedEvent: TNotifyEvent); procedure AddHandlerOnEnabledChanging(const OnEnabledChangingEvent: TNotifyEvent; AsFirst: Boolean = false); procedure RemoveHandlerOnEnabledChanging(const OnEnabledChangingEvent: TNotifyEvent); procedure AddHandlerOnEnabledChanged(const OnEnabledChangedEvent: TNotifyEvent; AsFirst: Boolean = false); procedure RemoveHandlerOnEnabledChanged(const OnEnabledChangedEvent: TNotifyEvent); procedure AddHandlerOnKeyDown(const OnKeyDownEvent: TKeyEvent; AsFirst: Boolean = false); procedure RemoveHandlerOnKeyDown(const OnKeyDownEvent: TKeyEvent); procedure AddHandlerOnBeforeDestruction(const OnBeforeDestructionEvent: TNotifyEvent; AsFirst: Boolean = false); procedure RemoveHandlerOnBeforeDestruction(const OnBeforeDestructionEvent: TNotifyEvent); procedure AddHandlerOnMouseWheel(const OnMouseWheelEvent: TMouseWheelEvent; AsFirst: Boolean = false); procedure RemoveHandlerOnMouseWheel(const OnMouseWheelEvent: TMouseWheelEvent); public // standard properties, which should be supported by all descendants property AccessibleName: TCaption read GetAccessibleName write SetAccessibleName; property AccessibleDescription: TCaption read GetAccessibleDescription write SetAccessibleDescription; property AccessibleValue: TCaption read GetAccessibleValue write SetAccessibleValue; property AccessibleRole: TLazAccessibilityRole read GetAccessibleRole write SetAccessibleRole; property Action: TBasicAction read GetAction write SetAction; property Align: TAlign read FAlign write SetAlign default alNone; property Anchors: TAnchors read FAnchors write SetAnchors stored IsAnchorsStored default [akLeft, akTop]; property AnchorSide[Kind: TAnchorKind]: TAnchorSide read GetAnchorSide; property AutoSize: Boolean read FAutoSize write SetAutoSize default False; property BorderSpacing: TControlBorderSpacing read FBorderSpacing write SetBorderSpacing; property BoundsRect: TRect read GetBoundsRect write SetBoundsRect; property BoundsRectForNewParent: TRect read FBoundsRectForNewParent write SetBoundsRectForNewParent; property Caption: TCaption read GetText write SetText stored IsCaptionStored; property CaptureMouseButtons: TCaptureMouseButtons read FCaptureMouseButtons write FCaptureMouseButtons stored CaptureMouseButtonsIsStored default [mbLeft]; property ClientHeight: Integer read GetClientHeight write SetClientHeight stored IsClientHeightStored; property ClientOrigin: TPoint read GetClientOrigin; property ClientRect: TRect read GetClientRect; property ClientWidth: Integer read GetClientWidth write SetClientWidth stored IsClientWidthStored; property Color: TColor read FColor write SetColor stored ColorIsStored default {$ifdef UseCLDefault}clDefault{$else}clWindow{$endif}; property Constraints: TSizeConstraints read FConstraints write SetConstraints; property ControlOrigin: TPoint read GetControlOrigin; property ControlState: TControlState read FControlState write FControlState; property ControlStyle: TControlStyle read FControlStyle write FControlStyle; property Enabled: Boolean read GetEnabled write SetEnabled stored IsEnabledStored default True; property Font: TFont read FFont write SetFont stored IsFontStored; property IsControl: Boolean read FIsControl write FIsControl; property MouseEntered: Boolean read FMouseInClient; deprecated 'use MouseInClient instead';// changed in 1.9, will be removed in 1.11 property MouseInClient: Boolean read FMouseInClient; property OnChangeBounds: TNotifyEvent read FOnChangeBounds write FOnChangeBounds; property OnClick: TNotifyEvent read FOnClick write FOnClick; property OnResize: TNotifyEvent read FOnResize write FOnResize; property OnShowHint: TControlShowHintEvent read FOnShowHint write FOnShowHint; property Parent: TWinControl read FParent write SetParent; property PopupMenu: TPopupmenu read GetPopupmenu write SetPopupMenu; property ShowHint: Boolean read FShowHint write SetShowHint stored IsShowHintStored default False; property Visible: Boolean read FVisible write SetVisible stored IsVisibleStored default True; property WindowProc: TWndMethod read FWindowProc write FWindowProc; public // docking properties property DockOrientation: TDockOrientation read FDockOrientation write FDockOrientation; property Floating: Boolean read GetFloating; property FloatingDockSiteClass: TWinControlClass read GetFloatingDockSiteClass write FFloatingDockSiteClass; property HostDockSite: TWinControl read FHostDockSite write SetHostDockSite; property LRDockWidth: Integer read GetLRDockWidth write FLRDockWidth; property TBDockHeight: Integer read GetTBDockHeight write FTBDockHeight; property UndockHeight: Integer read GetUndockHeight write FUndockHeight;// Height used when undocked property UndockWidth: Integer read GetUndockWidth write FUndockWidth;// Width used when undocked public function UseRightToLeftAlignment: Boolean; virtual; function UseRightToLeftReading: Boolean; virtual; function UseRightToLeftScrollBar: Boolean; function IsRightToLeft: Boolean; property BiDiMode: TBiDiMode read FBiDiMode write SetBiDiMode stored IsBiDiModeStored default bdLeftToRight; property ParentBiDiMode: Boolean read FParentBiDiMode write SetParentBiDiMode default True; published property AnchorSideLeft: TAnchorSide index akLeft read GetAnchorSide write SetAnchorSide; property AnchorSideTop: TAnchorSide index akTop read GetAnchorSide write SetAnchorSide; property AnchorSideRight: TAnchorSide index akRight read GetAnchorSide write SetAnchorSide; property AnchorSideBottom: TAnchorSide index akBottom read GetAnchorSide write SetAnchorSide; property Cursor: TCursor read GetCursor write SetCursor default crDefault; property Left: Integer read FLeft write SetLeft; // no default value - controls usually placed to different positions property Height: Integer read FHeight write SetHeight; // no default value - controls usually have different sizes property Hint: TTranslateString read FHint write SetHint stored IsHintStored; property Top: Integer read FTop write SetTop; // no default value - controls usually placed to different positions property Width: Integer read FWidth write SetWidth; // no default value - controls usually have different sizes property HelpType: THelpType read FHelpType write FHelpType default htContext; property HelpKeyword: string read FHelpKeyword write SetHelpKeyword stored IsHelpKeyWordStored; property HelpContext: THelpContext read FHelpContext write SetHelpContext stored IsHelpContextStored default 0; end;