Code archives/Miscellaneous/DateTimePicker
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| Standard DateTime picker for Windows. Provided 'as is'. See code for example. | |||||
Strict
Import maxgui.drivers
Extern "win32"
Function GetModuleHandle:Int (lpmodulehandlename:Byte Ptr)="GetModuleHandleW@4"
Function CreateWindowEx:Int (dwExstyle:Int,lpclassname:Byte Ptr,lpwindowname:Byte Ptr,dwStyle:Int,x:Int,y:Int,..
w:Int,h:Int,hwndparent:Int,hmenu:Int,hinstance:Int,lpparam:Int)="CreateWindowExA@48"
Function GetDateFormatA:Int(lpLocaleName:Int, dwFlags:Int,lpDate:Int,lpFormat:Byte Ptr,..
lpDateStr:Byte Ptr,cchDate:Int)
End Extern
Const DATETIMEPICK_CLASSW:String = "SysDateTimePick32"
Const MONTHCAL_CLASSW:String = "SysMonthCal32"
Const DTM_GETSYSTEMTIME:Int = $1001
Const DTM_SETSYSTEMTIME:Int = $1002
Const DTM_SETFORMAT:Int = $1005
'EXAMPLE
'------------------------------------------------------------------------------------
Local win:tgadget = CreateWindow("test",0,0,300,250,Null,WINDOW_TITLEBAR|WINDOW_CENTER)
Local dtp:Tdtpicker = Tdtpicker.Create(20,20,90,23,win,"dd MM yyyy") 'Format is optional
Local button:tgadget = CreateButton("Get date",20,80,70,30,win)
Repeat
WaitEvent()
Select EventID()
Case EVENT_WINDOWCLOSE End
Case EVENT_GADGETACTION Notify(dtp.Getdate())
EndSelect
Forever
'------------------------------------------------------------------------------------
Type Tdtpicker
Field hwnd:Int
Field edit_hwnd:Int
Field p:tgadget
Field format:String=""
Function Create:Tdtpicker(x:Int, y:Int, width:Int, height:Int, group:tgadget, format:String="")
Local d:Tdtpicker = New Tdtpicker
d.p = CreatePanel(x,y,width,height,group)
d.hwnd = QueryGadget(d.p,QUERY_HWND)
Local wstyle:Int = WS_CHILD|WS_VISIBLE|WS_BORDER|WS_TABSTOP
d.edit_hwnd = CreateWindowEx(0,DATETIMEPICK_CLASSW,"Date",wstyle,..
0,0,width,height,d.hwnd,Null,GetModuleHandle(Null),Null)
If format<>""
d.format = format
Local hformat:Byte Ptr = format.ToCString()
SendMessageW(d.edit_hwnd, DTM_SETFORMAT, 0, Int(hformat))
MemFree hformat
EndIf
Return d
End Function
Method activate()
SetFocus(edit_hwnd)
EndMethod
Method GetDate:String()
Local buffer:Byte[20]
Local st:_SYSTEMTIME = New _SYSTEMTIME
SendMessageW(edit_hwnd, DTM_GETSYSTEMTIME, 0, Int(Byte Ptr st))
If format<>""
Local hformat:Byte Ptr = format.ToCString()
GetDateFormatA(0,Null,Int(Byte Ptr st),hformat,buffer,20)
MemFree hformat
Else
GetDateFormatA(0,Null,Int(Byte Ptr st),Null,buffer,20)
EndIf
Local s:String
For Local bb:Byte = EachIn buffer
If bb>0 Then s:+ Chr(bb)
Next
Return s
EndMethod
EndType
Type _SYSTEMTIME
Field wYear:Int
Field wMonth:Int
Field wDayOfWeek:Int
Field wDay:Int
Field wHour:Int
Field wMinute:Int
Field wSecond:Int
Field wMilliseconds:Int
EndType |
Comments
None.
Code Archives Forum