diff --git a/lcl/controls.pp b/lcl/controls.pp index 1d7aaf949b..95109b46c1 100644 --- a/lcl/controls.pp +++ b/lcl/controls.pp @@ -874,6 +874,8 @@ type chtOnChangeBounds, chtOnVisibleChanging, chtOnVisibleChanged, + chtOnEnabledChanging, + chtOnEnabledChanged, chtOnKeyDown ); @@ -1230,6 +1232,8 @@ type function DoMouseWheelUp(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; @@ -1398,6 +1402,9 @@ type procedure AddHandlerOnVisibleChanged(const OnVisibleChangedEvent: TNotifyEvent; AsFirst: boolean = false); procedure RemoveHandlerOnVisibleChanged(const OnVisibleChangedEvent: TNotifyEvent); + procedure AddHandlerOnEnabledChanged(const OnEnabledChangedEvent: TNotifyEvent; + AsFirst: boolean = false); + procedure RemoveHandlerOnEnableChanging(const OnEnableChangingEvent: TNotifyEvent); procedure AddHandlerOnKeyDown(const OnKeyDownEvent: TKeyEvent; AsFirst: boolean = false); procedure RemoveHandlerOnKeyDown(const OnKeyDownEvent: TKeyEvent); diff --git a/lcl/include/control.inc b/lcl/include/control.inc index 32fa34eb76..305a993892 100644 --- a/lcl/include/control.inc +++ b/lcl/include/control.inc @@ -1387,11 +1387,24 @@ end; procedure TControl.VisibleChanged; begin -{ TODO -cdocking : For docked controls, the docking manager must receive a notification! - } +{ TODO -cdocking : For docked controls, the docking manager must receive a notification! } DoCallNotifyHandler(chtOnVisibleChanged); end; +{------------------------------------------------------------------------------ + procedure TControl.EnabledChanging; +------------------------------------------------------------------------------} +procedure TControl.EnabledChanging; +begin + DoCallNotifyHandler(chtOnEnabledChanging); +end; + +procedure TControl.EnabledChanged; +begin +{ TODO -cdocking : For docked controls, the docking manager must receive a notification! } + DoCallNotifyHandler(chtOnEnabledChanged); +end; + procedure TControl.AddHandler(HandlerType: TControlHandlerType; const AMethod: TMethod; AsFirst: boolean); begin @@ -2662,8 +2675,10 @@ procedure TControl.SetEnabled(Value: Boolean); begin if FEnabled <> Value then begin + EnabledChanging; FEnabled := Value; Perform(CM_ENABLEDCHANGED, 0, 0); + EnabledChanged; end; end; @@ -4098,6 +4113,18 @@ begin RemoveHandler(chtOnVisibleChanged,TMethod(OnVisibleChangedEvent)); end; +procedure TControl.AddHandlerOnEnabledChanged( + const OnEnabledChangedEvent: TNotifyEvent; AsFirst: boolean); +begin + AddHandler(chtOnEnabledChanged,TMethod(OnEnabledChangedEvent),AsFirst); +end; + +procedure TControl.RemoveHandlerOnEnableChanging( + const OnEnableChangingEvent: TNotifyEvent); +begin + RemoveHandler(chtOnEnabledChanged,TMethod(OnEnableChangingEvent)); +end; + procedure TControl.AddHandlerOnKeyDown(const OnKeyDownEvent: TKeyEvent; AsFirst: boolean); begin