'------------------------------------------------------------------------------ ' ** 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 '--------------------------------------------------------------------------------