' Include file containing constant definitions for
' Property, Event, Method and ControlType ID numbers.
'$INCLUDE: 'CUSTINCL.BI'
' Turn on option explicit to force all variables to be
' declared before use. Note, this is an optional debugging aid.
OPTION EXPLICIT
' Declarations for custom control callbacks.
' These callbacks are used to set and get custom control
' properties and invoke custom control methods and events.
'
' AID = Attribute Id - list is found in CUSTINCL include file.
' CID = Control Id created internally by Visual Basic
' EID = Event Id - list is found in CUSTINCL include file.
' MthID = Method Id - list is found in CUSTINCL include file.
' PID = Property Id - list is found in CUSTINCL include file.
' Declare callbacks for invoking methods and events and getting
' and setting properties. These callbacks accept a variable number
' and types of arguments depending on the method or event that is
' being invoked.
DECLARE SUB InvokeEvent
DECLARE SUB InvokeMethod
DECLARE SUB GetProperty
DECLARE SUB SetProperty
DECLARE SUB SetIntProperty ALIAS "SetProperty" (BYVAL value AS INTEGER, BYVAL CID AS INTEGER, BYVAL PID AS INTEGER)
DECLARE SUB SetStringProperty ALIAS "SetProperty" (value AS STRING, BYVAL CID AS INTEGER, BYVAL PID AS INTEGER)
DECLARE SUB SetLongProperty ALIAS "SetProperty" (BYVAL value AS LONG, BYVAL CID AS INTEGER, BYVAL PID AS INTEGER)
' Declare callback for setting a control's attributes (access key,
' focus availability, arrow key trapping ability, and text cursor
' location).
DECLARE SUB SetAttribute (BYVAL CID AS INTEGER, BYVAL AID AS INTEGER, BYVAL value AS INTEGER)
' Declare callback for getting a control's container object.
' This callback returns a CID for the container object.
DECLARE FUNCTION GetContainer (BYVAL CID AS INTEGER) AS INTEGER
' Procedure declarations for handled events.
DECLARE FUNCTION Spin_CClick (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER) AS INTEGER
DECLARE FUNCTION Spin_CDblClick (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER) AS INTEGER
DECLARE FUNCTION Spin_CIntegerGet (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER, BYVAL PropertyId AS INTEGER, value AS INTEGER) AS INTEGER
DECLARE FUNCTION Spin_CIntegerSet (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER, BYVAL PropertyId AS INTEGER, BYVAL value AS INTEGER) AS INTEGER
DECLARE FUNCTION Spin_CGotFocus (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER) AS INTEGER
DECLARE FUNCTION Spin_CKeyDown (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER, keycode AS INTEGER, Shift AS INTEGER) AS INTEGER
DECLARE FUNCTION Spin_CKeyPress (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER, KeyAscii AS INTEGER) AS INTEGER
DECLARE FUNCTION Spin_CKeyUp (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER, keycode AS INTEGER, Shift AS INTEGER) AS INTEGER
DECLARE FUNCTION Spin_CLoad (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER) AS INTEGER
DECLARE FUNCTION Spin_CLostFocus (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER) AS INTEGER
DECLARE FUNCTION Spin_CMouseDown (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER, Button AS INTEGER, Shift AS INTEGER, X AS SINGLE, Y AS SINGLE) AS INTEGER
DECLARE FUNCTION Spin_CMouseMove (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER, Button AS INTEGER, Shift AS INTEGER, X AS SINGLE, Y AS SINGLE) AS INTEGER
DECLARE FUNCTION Spin_CMouseUp (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER, Button AS INTEGER, Shift AS INTEGER, X AS SINGLE, Y AS SINGLE) AS INTEGER
DECLARE FUNCTION Spin_CMthAddItem (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER, BYVAL Count AS INTEGER, value AS STRING, BYVAL Index AS INTEGER) AS INTEGER
DECLARE FUNCTION Spin_CMthCls (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER) AS INTEGER
DECLARE FUNCTION Spin_CMthHide (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER) AS INTEGER
DECLARE FUNCTION Spin_CMthMove (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER, BYVAL Count AS INTEGER, BYVAL pLeft AS INTEGER, BYVAL pTop AS INTEGER, BYVAL pWidth AS INTEGER, BYVAL pHeight AS INTEGER) AS INTEGER
DECLARE FUNCTION Spin_CMthPrint (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER) AS INTEGER
DECLARE FUNCTION Spin_CMthRemoveItem (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER, BYVAL Count AS INTEGER, BYVAL Index AS INTEGER) AS INTEGER
DECLARE FUNCTION Spin_CMthShow (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER, BYVAL Count AS INTEGER, BYVAL Modal AS INTEGER) AS INTEGER
DECLARE FUNCTION Spin_CPaint (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER) AS INTEGER
DECLARE FUNCTION Spin_CStringGet (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER, BYVAL PropertyId AS INTEGER, value AS STRING, Index AS INTEGER) AS INTEGER
DECLARE FUNCTION Spin_CStringSet (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER, BYVAL PropertyId AS INTEGER, value AS STRING, Index AS INTEGER) AS INTEGER
DECLARE FUNCTION Spin_CTimer (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER) AS INTEGER
DECLARE SUB FireSpin (Ctrl AS CONTROL, ControlID AS INTEGER, FromRoutine$)
DIM SHARED wSpin_ButtonDown AS INTEGER ' Button is depressed.
DIM SHARED wSpin_Tracking AS INTEGER ' Currently tracking spin events.
DIM SHARED sSpin_X AS SINGLE ' X mouse coordinate.
DIM SHARED sSpin_Y AS SINGLE ' Y mouse coordinate.
' Constant definitions.
CONST SPIN_UP = 1 ' Spin directions.
CONST SPIN_DOWN = 2
CONST KEY_LEFT = 37 ' Key trapping.
CONST KEY_UP = 38
CONST KEY_RIGHT = 39
CONST KEY_DOWN = 40
CONST LEFT_BUTTON = 1 ' Mouse button.
CONST TRUE = -1 ' True/False.
CONST FALSE = 0
' Error codes.
CONST ERR_METHNOTAPPLICABLE = 421 ' Method not applicable for this object
CONST ERR_INVALIDPROPVALUE = 380 ' Invalid property value
CONST ERR_PROPERTYRO = 383 ' Property is read-only
CONST ERR_PROPNOTFOUND = 422 ' Property not found
CONST ERR_PROPNOTAVAIL = 386 ' Property not available at run-time
' Control procedure for generating spin events.
' Determine which direction to spin, then adjusts value
' and fires event accordingly.
SUB FireSpin (Ctrl AS CONTROL, ControlID AS INTEGER, FromRoutine$)
FUNCTION Spin_CMouseDown (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER, Button AS INTEGER, Shift AS INTEGER, X AS SINGLE, Y AS SINGLE) AS INTEGER
DIM w AS INTEGER
DIM h AS INTEGER
DIM wSpinDir%
' Store current cursor location and mouse state.
sSpin_X = X
sSpin_Y = Y
wSpin_ButtonDown = TRUE
wSpin_Tracking = ControlID
' Fire spin event.
CALL FireSpin(Ctrl, ControlID, "MOUSEDOWN")
END FUNCTION
' MouseMove event for control.
' Fires spin events based on cursor location.
FUNCTION Spin_CMouseMove (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER, Button AS INTEGER, Shift AS INTEGER, X AS SINGLE, Y AS SINGLE) AS INTEGER
' Store current cursor location and mouse state.
sSpin_X = X
sSpin_Y = Y
' If mouse button is still down, update tracking information.
IF (wSpin_ButtonDown) THEN
IF ((X >= 0) AND (X < Ctrl.Width)) THEN
IF ((Y >= 0) AND (Y < Ctrl.Height)) THEN
wSpin_Tracking = ControlID
ELSE
wSpin_Tracking = FALSE
END IF
ELSE
wSpin_Tracking = FALSE
END IF
END IF
END FUNCTION
' MouseUp event for control.
' Ends spin events.
FUNCTION Spin_CMouseUp (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER, Button AS INTEGER, Shift AS INTEGER, X AS SINGLE, Y AS SINGLE) AS INTEGER
' Store current cursor location and mouse state.
sSpin_X = X
sSpin_Y = Y
wSpin_ButtonDown = FALSE
wSpin_Tracking = FALSE
END FUNCTION
' Method trap - returns error if attempt to use unsupported methods.
FUNCTION Spin_CMthAddItem (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER, BYVAL Count AS INTEGER, value AS STRING, BYVAL Index AS INTEGER) AS INTEGER
Spin_CMthAddItem = ERR_METHNOTAPPLICABLE
END FUNCTION
' Method trap - returns error if attempt to use unsupported methods.
FUNCTION Spin_CMthCls (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER) AS INTEGER
Spin_CMthCls = ERR_METHNOTAPPLICABLE
END FUNCTION
' Method trap - returns error if attempt to use unsupported methods.
FUNCTION Spin_CMthHide (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER) AS INTEGER
Spin_CMthHide = ERR_METHNOTAPPLICABLE
END FUNCTION
' Move method trap.
' Traps attempts to size control via Move method
' as control size is read-only at run-time.
FUNCTION Spin_CMthMove (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER, BYVAL Count AS INTEGER, BYVAL pLeft AS INTEGER, BYVAL pTop AS INTEGER, BYVAL pWidth AS INTEGER, BYVAL pHeight AS INTEGER) AS INTEGER
' Can't size control.
IF (Count > 2) THEN
Spin_CMthMove = ERR_PROPERTYRO
' Move control.
ELSE
ERR = 0
ON LOCAL ERROR RESUME NEXT
Ctrl.Left = pLeft
IF (ERR) THEN
Spin_CMthMove = ERR
EXIT FUNCTION
END IF
ERR = 0
Ctrl.Top = pTop
IF (ERR) THEN
Spin_CMthMove = ERR
EXIT FUNCTION
END IF
Spin_CMthMove = Spin_CPaint(Ctrl, ControlID)
END IF
END FUNCTION
' Method trap - returns error if attempt to use unsupported methods.
FUNCTION Spin_CMthPrint (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER) AS INTEGER
Spin_CMthPrint = ERR_METHNOTAPPLICABLE
END FUNCTION
' Method trap - returns error if attempt to use unsupported methods.
FUNCTION Spin_CMthRemoveItem (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER, BYVAL Count AS INTEGER, BYVAL Index AS INTEGER) AS INTEGER
Spin_CMthRemoveItem = ERR_METHNOTAPPLICABLE
END FUNCTION
' Method trap - returns error if attempt to use unsupported methods.
FUNCTION Spin_CMthShow (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER, BYVAL Count AS INTEGER, BYVAL Modal AS INTEGER) AS INTEGER
Spin_CMthShow = ERR_METHNOTAPPLICABLE
END FUNCTION
' Paint event for control.
' Displays spin control based on control style.
FUNCTION Spin_CPaint (Ctrl AS CONTROL, BYVAL ControlID AS INTEGER) AS INTEGER