Here's where I'm at with my lib thus far. I've taken the key parts of the lib and put it into this small example. You select a date then Ctrl + Left click into a readonly string gadget.
Code: Select all
#GDT_VALID = 0
#GDT_NONE = 1
#DTM_FIRST = $1000
#DTM_GETSYSTEMTIME = #DTM_FIRST + 1
#DTM_SETSYSTEMTIME = #DTM_FIRST + 2
#DTN_DATETIMECHANGE = #DTN_FIRST + 1
#DTN_DROPDOWN = #DTN_FIRST + 6
#DTN_CLOSEUP = #DTN_FIRST + 7
#MCM_FIRST = $1000
#MCM_GETCURSEL = #MCM_FIRST + 1
#MCN_FIRST = -750
#MCN_SELCHANGE = #MCN_FIRST + 1
#MCN_SELECT = #MCN_FIRST + 4
#MCN_GETDAYSTATE = #MCN_FIRST + 3
Global inputCallback, hSDPdatePicker, myDate$
Structure INITCOMMONCONTROLSEX
dwSize.l
dwICC.l
EndStructure
InitICC.INITCOMMONCONTROLSEX
InitICC\dwSize = SizeOf(INITCOMMONCONTROLSEX)
InitICC\dwICC = #ICC_DATE_CLASSES
InitCommonControlsEx_(InitICC)
Procedure SDPinputCallback(hwnd, msg, wParam, lParam)
Select msg
Case #WM_LBUTTONDOWN
GetAsyncKeyState_(#VK_CONTROL) ; clear control key
If GetAsyncKeyState_(#VK_CONTROL)
myDate$ = Space(256)
SendMessage_(hSDPdatePicker, #DTM_GETSYSTEMTIME , 0, @CurDateTime.SYSTEMTIME)
myDateLen = GetDateFormat_(#LOCALE_USER_DEFAULT, 0, @CurDateTime, 0, @myDate$, 0)
GetDateFormat_(#LOCALE_USER_DEFAULT, 0, @CurDateTime, 0, @myDate$, myDateLen)
SetGadgetText(EventGadgetID(), myDate$)
EndIf
Case #WM_KEYUP
GetAsyncKeyState_(#VK_CONTROL) ; clear control key
If wParam = #VK_HOME And GetAsyncKeyState_(#VK_CONTROL)
myDate$ = Space(256)
GetLocalTime_(@CurDateTime.SYSTEMTIME)
Debug CurDateTime\wday
SendMessage_(hSDPdatePicker, #DTM_SETSYSTEMTIME , #GDT_VALID, @CurDateTime)
myDateLen = GetDateFormat_(#LOCALE_USER_DEFAULT, 0, @CurDateTime, 0, @myDate$, 0)
GetDateFormat_(#LOCALE_USER_DEFAULT, 0, @CurDateTime, 0, @myDate$, myDateLen)
SetGadgetText(EventGadgetID(), myDate$)
EndIf
EndSelect
ProcedureReturn CallWindowProc_(inputCallback, hwnd, msg, wParam, lParam)
EndProcedure
ProcedureDLL SDP_myDatePicker(GadgetNum, x, y, width, height) ; Gadget#, x, y, width, height
hSDPdatePicker = CreateWindowEx_(#WS_EX_CLIENTEDGE, "SysDateTimePick32", "Date", #WS_CHILD|#WS_VISIBLE, x, y, width, height, WindowID() ,GadgetNum ,GetModuleHandle_(0), 0)
ProcedureReturn hSDPdatePicker
EndProcedure
ProcedureDLL SDP_myDateInput(GadgetNum, x, y, width, height, text$)
StringGadget(GadgetNum, x, y, width, height, text$, #PB_String_ReadOnly)
inputCallback = SetWindowLong_(GadgetID(GadgetNum), #GWL_WNDPROC, @SDPinputCallback())
EndProcedure
If OpenWindow(0, 0, 0, 200, 150, #PB_Window_ScreenCentered|#PB_Window_SystemMenu , "Date Picker")
If CreateGadgetList(WindowID(0))
SDP_myDatePicker(0, 0, 0, 100, 20)
TextGadget(1, 20, 50, 80, 20, "Name")
TextGadget(2, 100, 50, 80, 20, "Date of Birth")
StringGadget(3, 20, 70, 80, 20, "Fred")
SDP_myDateInput(4, 100, 70, 80, 20, "Ctrl + Left click")
EndIf
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
End
EndIf