/* * Fichero: CheckBoxMod.prg * Clase TCheckBoxMod * * Copyright 2020 Ignacio Ortiz de Zúñiga * Copyright 2020 https://Xailer.com * All rights reserved */ #include "Xailer.ch" //-------------------------------------------------------------------------- CLASS XCheckBoxMod FROM TStdControl PUBLISHED: PROPERTY nWidth INIT 140 PROPERTY nHeight INIT 28 PROPERTY nClrPane INIT clWindow PROPERTY nClrText INIT clWindowText PROPERTY nClrColorization INIT clSystem WRITE INLINE ( ::FnClrColorization := Value, ::Refresh() ) EDITOR PE_Color PROPERTY nClrTextDisabled INIT cl3DDkShadow WRITE INLINE ( ::FnClrTextDisabled := Value, ::Refresh() ) EDITOR PE_Color PROPERTY nLineSpacing INIT 100 PROPERTY lChecked INIT .F. READ METHOD GetChecked WRITE METHOD SetChecked PROPERTY lTabStop INIT .T. PROPERTY lTransparent INIT .T. PROPERTY nOpacity INIT 0 EVENT OnChange( oSender, lNewValue ) // --> Nil | lChange EVENT OnClick( oSender ) // --> Nil PUBLIC: PROPERTY oBrush // propiedades no aplicables PROTECTED: PROPERTY l3D PROPERTY lBorder DATA nCtlStyle INIT nOr( WS_CHILD, WS_CLIPCHILDREN, WS_CLIPSIBLINGS, WS_TABSTOP ) DATA lIsHot INIT .F. DATA lPushed INIT .F. PUBLIC: METHOD Create( oParent ) CONSTRUCTOR METHOD Toggle() INLINE ::SetChecked( ! ::GetChecked() ) // --> Nil METHOD Click() INLINE ::Toggle(), ::OnClick(), 0 RESERVED: PROPERTY nVAlignment VALUES vaTOP, vaBOTTOM, vaCENTER // DEPRECATED EVENT OnChanged() // deprecated METHOD GetChecked() METHOD SetChecked( lValue ) METHOD WMEraseBkgnd() INLINE 1 METHOD WMPaint() METHOD WMPrintClient() EXTERN XCheckBoxMod_WMPaint() METHOD WMMouseMove( nWParam, nLParam, hWnd ) METHOD WMMouseLeave() INLINE ::lIsHot := .F., ::lPushed := .F., ::Refresh() METHOD WMLButtonDown( nWParam, nLParam ) METHOD WMLButtonUp( nWParam, nLParam ) INLINE IIF( ::lPushed, ::Click(), ), ::lPushed := .F., ::Refresh() METHOD WMKillFocus( hCtl ) INLINE ( ::Super:WMKillFocus( hCtl ), ::Refresh( .F. ) ) METHOD WMSetFocus( hCtl ) INLINE ( ::Super:WMSetFocus( hCtl ), ::Refresh( .F. ) ) METHOD WMKeyDown( nFlags, nLParam, hWnd ) METHOD WMKeyUp( nFlags, nLParam, hWnd ) METHOD XAClick() VIRTUAL ENDCLASS //-------------------------------------------------------------------------- METHOD Create( oParent ) CLASS XCheckBoxMod ::Super:Create( oParent ) ::SetChecked( ::FlChecked ) RETURN Self //------------------------------------------------------------------------------ METHOD GetChecked() CLASS XCheckBoxMod RETURN ::FlChecked //------------------------------------------------------------------------------ METHOD SetChecked( lValue ) CLASS XCheckBoxMod LOCAL lOld DEFAULT lValue TO .F. IF Valtype( lValue ) == "N" lValue := ( lValue != 0 ) ENDIF IF lValue == ::FlChecked RETURN lValue ENDIF lOld := ::FlChecked ::FlChecked := lValue ::OnChange( @lValue ) ::FlChecked := lValue IF lValue != lOld .AND. !Empty( ::Handle ) InvalidateRect( ::Handle ) ENDIF IF ::EventAssigned( "OnChanged" ) MsgAlert( "TCheckBoxMod:OnChanged() deprecated, use OnChange(oSender, @lValue)" ) ENDIF RETURN ::FlChecked //-------------------------------------------------------------------------- METHOD WMMouseMove( nWParam, nLParam, hWnd ) CLASS XCheckBoxMod IF !::lIsHot ::lIsHot := .T. ::Refresh( .F. ) TrackMouseEvent( ::Handle, TME_LEAVE ) ENDIF RETURN ::Super:WMMouseMove( nWParam, nLParam, hWnd ) //-------------------------------------------------------------------------- METHOD WMKeyDown( nFlags, nLParam, hWnd ) CLASS XCheckBoxMod IF nFlags == VK_SPACE ::lPushed := .T. ::Refresh( .F. ) RETURN 0 ENDIF RETURN ::Super:WMKeyDown( nFlags, nLParam, hWnd ) //-------------------------------------------------------------------------- METHOD WMKeyUp( nFlags, nLParam, hWnd ) CLASS XCheckBoxMod IF nFlags == VK_SPACE .AND. ::lPushed ::Toggle() ::lPushed := .F. ::Refresh( .F. ) RETURN 0 ENDIF RETURN ::Super:WMKeyUp( nFlags, nLParam, hWnd ) //-------------------------------------------------------------------------- METHOD WMLButtonDown( nWParam, nLParam ) CLASS XCheckBoxMod IF ::SetFocus() ::lPushed := .T. ::Refresh() ENDIF RETURN ::Super:WMLButtonDown( nWParam, nLParam ) //--------------------------------------------------------------------------