File "DatePicker.inc"
Path: /HotKeyMgr/inc/DatePicker.inc
File size: 5.12 KB
MIME-type:
Charset: utf-8
'------------------------------------------------------------------------------
' ** Includes **
'------------------------------------------------------------------------------
#INCLUDE ONCE "WIN32API.INC"
#INCLUDE ONCE "INC\JULIAN.INC"
#INCLUDE ONCE "INC\CLIPBOARDHTML.INC"
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
' ** Constants **
'------------------------------------------------------------------------------
%IDC_CALENDAR1 = 1001
%MCM_GETMONTHRANGE = &H1000 + 7
%MCN_SELCHANGE = (0-750) + 1
%GMR_VISIBLE = 0
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
' ** Types **
'------------------------------------------------------------------------------
TYPE NMSELCHANGE
hdr AS NMHDR
stSelStart AS SYSTEMTIME
stSelEnd AS SYSTEMTIME
END TYPE
'--------------------------------------------------------------------------------
'------------------------------------------------------------------------------
' ** Globals **
'------------------------------------------------------------------------------
GLOBAL DateFormat AS STRING
'------------------------------------------------------------------------------
'--------------------------------------------------------------------------------
' ** CallBacks **
'--------------------------------------------------------------------------------
MACRO GET_FIRST_DATE_DISPLAYED
SendMessage hCal, %MCM_GETMONTHRANGE, _ ' Get range of dates displayed by the calendar
%GMR_VISIBLE, BYVAL VARPTR(stRng(0))
staD = DateStr(stRng(0).wYear, stRng(0).wMonth, _ ' Extract the starting date
stRng(0).wDay, DateFormat)
END MACRO
'--------------------------------------------------------------------------------
CALLBACK FUNCTION ProcDatePicker
LOCAL pNMSC AS NMSELCHANGE PTR ' SysMonthCal32 selection
STATIC stRng() AS SYSTEMTIME ' range of dates
STATIC selD AS STRING ' currently selected date
STATIC staD AS STRING ' starting date (displayed in the top-left corner of the calendar)
STATIC hCal AS DWORD ' handle to the SysMonthCal32 control
STATIC oselD AS STRING
STATIC ostaD AS STRING
SELECT CASE CB.MSG
CASE %WM_INITDIALOG
' Initialization handler
CONTROL HANDLE CB.HNDL,%IDC_CALENDAR1 TO hCal
LOCAL day, month, year AS LONG
day = VAL(MID$(DATE$,4,2))
month = VAL(LEFT$(DATE$,2))
year = VAL(RIGHT$(DATE$,4))
selD = DateStr(year, month, day, DateFormat)
REDIM stRng(1)
GET_FIRST_DATE_DISPLAYED
ostaD = staD
CASE %WM_COMMAND
' Process control notifications
IF CB.CTL = %IDCANCEL THEN DIALOG END CB.HNDL, 0
CASE %WM_NOTIFY
' Detect changes in the calendar control
pNMSC = CB.LPARAM
IF @pNMSC.hdr.code = %MCN_SELCHANGE THEN ' Selection changed
selD = DateStr(@pNMSC.stSelStart.wYear, _
@pNMSC.stSelStart.wMonth, _
@pNMSC.stSelStart.wDay, _
DateFormat)
ELSEIF @pNMSC.hdr.code = %NM_RELEASEDCAPTURE THEN ' Mouse click released
GET_FIRST_DATE_DISPLAYED
IF ostaD <> staD THEN ostaD = staD : EXIT FUNCTION ' New starting date
IF oselD <> selD THEN oselD = selD : EXIT FUNCTION ' New selected date
' ...if we're here, it means the user double-clicked on a selected date!
ClipBoardHtmlSet CB.HNDL, selD
DIALOG END CB.HNDL, -1
END IF
END SELECT
END FUNCTION
'--------------------------------------------------------------------------------
'--------------------------------------------------------------------------------
' ** Dialogs **
'--------------------------------------------------------------------------------
FUNCTION ShowDatePicker(BYVAL hParent AS DWORD) AS LONG
LOCAL lRes AS LONG
LOCAL hDlg AS DWORD
LOCAL hIco AS DWORD
DIALOG NEW PIXELS, hParent, "Date Picker", 310, 210, 456, 308, %WS_POPUP OR _
%WS_BORDER OR %WS_DLGFRAME OR %WS_SYSMENU OR %WS_CLIPSIBLINGS OR _
%WS_VISIBLE OR %DS_MODALFRAME OR %DS_3DLOOK OR %DS_NOFAILCREATE OR _
%DS_SETFONT, %WS_EX_CONTROLPARENT OR %WS_EX_LEFT OR _
%WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR, TO hDlg
hIco = ExtractIcon(GetModuleHandle(""), "imageres.dll", 272)
SetClassLong(hDlg, %GCL_HICONSM, hIco)
SetClassLong(hDlg, %GCL_HICON, hIco)
CONTROL ADD BUTTON, hDlg, %IDCANCEL, "Cancel", -2, -2, 0, 0
CONTROL ADD "SysMonthCal32", hDlg, %IDC_CALENDAR1, "", 0, 0, 456, 308, _
%WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP, %WS_EX_CLIENTEDGE
DIALOG SHOW MODAL hDlg CALL ProcDatePicker TO lRes
FUNCTION = lRes
END FUNCTION
'--------------------------------------------------------------------------------