Post by Walt Decker on Mar 22, 2021 9:13:18 GMT -5
The following is an LB clone of the calender component of a day planner I wrote for my wife several years ago in a different language. The original calender component uses three different colors and fonts to display past activities, the current date, and planned activities.
By clicking on a date you can bring up a data base showing the activities for that month (component not written).
Click on NEXT displays the next month. Click PREVIOUS displays the previous month. Click on the current date sets the calendar back to the current month.
By clicking on a date you can bring up a data base showing the activities for that month (component not written).
Click on NEXT displays the next month. Click PREVIOUS displays the previous month. Click on the current date sets the calendar back to the current month.
The zip contains the below code, the docs for the Datime dll and Datime.dll. The LB DATE$() function contains a few of the functions in Datime.dll. Those functions that DATE$() does not contain can be derived from that functjon.
PLANNER.ZIP (16.18 KB)
WS.OVERLAPPED = HEXDEC("&H00000000")
WS.CHILD = HEXDEC("&H40000000")
WS.VISIBLE = HEXDEC("&H10000000")
WS.CLIPSIBLINGS = HEXDEC("&H04000000")
WS.CLIPCHILDREN = HEXDEC("&H02000000")
WS.CAPTION = HEXDEC("&H00C00000")
WS.SYSMENU = HEXDEC("&H00080000")
WS.THICKFRAME = HEXDEC("&H00040000")
WS.GROUP = HEXDEC("&H00020000")
WS.TABSTOP = HEXDEC("&H00010000")
WS.MINIMIZEBOX = HEXDEC("&H00020000")
WS.MAXIMIZEBOX = HEXDEC("&H00010000")
WS.OVERLAPPEDWINDOW = (WS.OVERLAPPED _
OR WS.CAPTION _
OR WS.SYSMENU _
OR WS.THICKFRAME _
OR WS.MINIMIZEBOX _
OR WS.MAXIMIZEBOX)
SS.CENTER = HEXDEC("&H00000001")
SS.NOTIFY = HEXDEC("&H00000100")
SS.CENTERIMAGE = HEXDEC("&H00000200")
BS.CHECKBOX = HEXDEC("&H00000002")
BS.TYPEMASK = HEXDEC("&H0000000F")
BS.CENTER = HEXDEC("&H00000300")
BS.VCENTER = HEXDEC("&H00000C00")
BS.PUSHLIKE = HEXDEC("&H00001000")
BS.FLAT = HEXDEC("&H00008000")
OPEN "User32" FOR DLL AS #USER
OPEN "Datime" FOR DLL AS #DATM
DIM TopCtls$(0, 0)
DIM DateCtls$(0, 0)
DIM WeekDay$(0, 0)
GLOBAL WinHndl
RetVal = 0
A = 0
TimeStr$ = ""
MonthStr$ = ""
CALLDLL #DATM, "InitDatm", RetVal AS VOID
A = 0
A = FN.CreateTopCtls()
A = FN.CreateWeekDays()
A = FN.CreateDates()
BUTTON #CAL.EDIT, "EDIT PLANNER", EDIT.PLAN, UL, 20, 170, 90, 20
BUTTON #CAL.DEL, "DELETE PLANNER", DEL.PLAN, UL, 120, 170, 100, 20
WindowWidth = 251
WindowHeight = 230
STYLEBITS #CAL, 0, WS.THICKFRAME OR WS.MINIMIZEBOX OR WS.MAXIMIZEBOX, 0, 0
OPEN "CALENDAR" FOR WINDOW AS #CAL
WinHndl = HWND(#CAL)
MonthStr$ = SPACE$(12)
CALLDLL #DATM, "FN_DatmMonthStr", MonthStr$ AS PTR, RetVal AS LONG
CALLDLL #DATM, "FN_DatmGetYear", A AS LONG
MonthStr$ = LEFT$(MonthStr$, RetVal)
MonthStr$ = Upper$(MonthStr$) + ", " + TRIM$(STR$(A))
CALLDLL #USER, "SetWindowTextA", WinHndl AS ULONG, MonthStr$ AS PTR, RetVal AS LONG
A = FN.FitCtrls()
A = FN.DisplayDates()
PRINT #CAL, "TRAPCLOSE END.CAL"
TIMER 1000, [SHOW.TIME]
[WAIT.TIME]
WAIT
END
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
SUB END.CAL Win$
I = 0
FOR I = 0 TO 3
Hndl$ = TopCtls$(I, 0)
CLOSE #Hndl$
NEXT I
FOR I = 0 TO 6
Hndl$ = WeekDay$(I, 0)
CLOSE #Hndl$
NEXT I
FOR I = 0 TO 41
Hndl$ = DateCtls$(I, 0)
CLOSE #Hndl$
NEXT I
CLOSE #USER
CLOSE #DATM
CLOSE #CAL
END
END SUB
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
SUB EDIT.PLAN CtlHndl$
'ADD CODE HERE
END SUB
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
SUB DEL.PLAN CtlHndl$
'ADD CODE HERE
END SUB
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
[SHOW.TIME]
Hndl$ = TopCtls$(1, 0) + ".STA"
TimeStr$ = ""
TimeStr$ = TIME$()
IF VAL(LEFT$(TimeStr$, 2)) = 12 THEN
TimeStr$ = TimeStr$ + " pm"
PRINT #Hndl$, TimeStr$
GOTO [WAIT.TIME]
END IF
IF VAL(LEFT$(TimeStr$, 2)) > 12 THEN
I = VAL(LEFT$(TimeStr$, 2))
TimeStr$ = MID$(TimeStr$, 2)
I = I - 12
TimeStr$ = TRIM$(STR$(I)) + TimeStr$ + " pm"
PRINT #Hndl$, TimeStr$
GOTO [WAIT.TIME]
END IF
TimeStr$ = TimeStr$ + " am"
PRINT #Hndl$, TimeStr$
GOTO [WAIT.TIME]
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
SUB LST.MONTH CtlHndl$
NumChrs = 0
Month$ = ""
CALLDLL #DATM, "DatmSubtractMonth", 1 AS LONG, RetVal AS VOID
Month$ = SPACE$(12)
CALLDLL #DATM, "FN_DatmMonthStr", Month$ AS PTR, NumChrs AS LONG
Month$ = LEFT$(Month$, NumChrs)
CALLDLL #DATM, "FN_DatmGetYear", NumChrs AS LONG
Month$ = Upper$(Month$) + ", " + TRIM$(STR$(NumChrs))
CALLDLL #USER, "SetWindowTextA", WinHndl AS ULONG, Month$ AS PTR, NumChrs AS VOID
NumChrs = FN.DisplayDates()
END SUB
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
SUB NXT.MONTH CtlHndl$
NumChrs = 0
Month$ = ""
CALLDLL #DATM, "DatmAddMonth", 1 AS LONG, RetVal AS VOID
Month$ = SPACE$(12)
CALLDLL #DATM, "FN_DatmMonthStr", Month$ AS PTR, NumChrs AS LONG
Month$ = LEFT$(Month$, NumChrs)
CALLDLL #DATM, "FN_DatmGetYear", NumChrs AS LONG
Month$ = Upper$(Month$) + ", " + TRIM$(STR$(NumChrs))
CALLDLL #USER, "SetWindowTextA", WinHndl AS ULONG, Month$ AS PTR, NumChrs AS VOID
NumChrs = FN.DisplayDates()
END SUB
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
SUB THS.MONTH CtlHndl$
NumChrs = 0
Month$ = ""
CALLDLL #DATM, "DatmThisDay", RetVal AS VOID
Month$ = SPACE$(12)
CALLDLL #DATM, "FN_DatmMonthStr", Month$ AS PTR, NumChrs AS LONG
Month$ = LEFT$(Month$, NumChrs)
CALLDLL #DATM, "FN_DatmGetYear", NumChrs AS LONG
Month$ = Upper$(Month$) + ", " + TRIM$(STR$(NumChrs))
CALLDLL #USER, "SetWindowTextA", WinHndl AS ULONG, Month$ AS PTR, NumChrs AS VOID
NumChrs = FN.DisplayDates()
END SUB
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
SUB THS.DATE CtlHndl$
Hndl = 0
Year = 0
NumChrs = 0
Month$ = ""
Day$ = ""
CALLDLL #DATM, "FN_DatmMonthDate", Day AS LONG
Month$ = SPACE$(12)
CALLDLL #DATM, "FN_DatmMonthStr", Month$ AS PTR, NumChrs AS LONG
Month$ = LEFT$(Month$, NumChrs)
CALLDLL #DATM, "FN_DatmGetYear", Year AS LONG
Hndl = HWND(#CtlHndl$)
Day$ = SPACE$(4)
CALLDLL #USER, "GetWindowTextA", Hndl AS ULONG, Day$ AS PTR, 4 AS LONG, NumChrs AS LONG
Day$ = LEFT$(Day$, NumChrs)
Month$ = Month$ + " " + Day$ + ", " + TRIM$(STR$(Year))
'ADD CODE HERE
END SUB
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
FUNCTION FN.CreateTopCtls()
GWL.STYLE = -16
GWL.EXSTYLE = -20
BS.CENTER = HEXDEC("&H00000300")
BS.VCENTER = HEXDEC("&H00000C00")
BS.PUSHLIKE = HEXDEC("&H00001000")
BS.FLAT = HEXDEC("&H00008000")
SS.CENTER = HEXDEC("&H00000001")
SS.NOTIFY = HEXDEC("&H00000100")
SS.CENTERIMAGE = HEXDEC("&H00000200")
Id = 100
CtlHndl = 0
Hndl = 0
Style = 0
RetVal = 0
NumChrs = 0
Title$ = ""
DateStr$ = ""
REDIM TopCtls$(3, 4)
WindowWidth = 65
WindowHeight = 20
Title$ = TRIM$(STR$(Id)) + "TOP"
Style = BS.CENTER OR BS.VCENTER OR BS.PUSHLIKE OR BS.FLAT
STYLEBITS #TOP.CKB, Style, 0, 0, 0
CHECKBOX #TOP.CKB, "PREVIOUS", LST.MONTH, LST.MONTH, 0, 0, 65, 20
OPEN "PREVIOUS" FOR WINDOW AS #TOP
PRINT #TOP.CKB, "font Comic_Sans_MS 8 bold italic"
Hndl = HWND(#TOP)
CtlHndl = HWND(#TOP.CKB)
TopCtls$(0, 0) = Title$
TopCtls$(0, 1) = STR$(Hndl)
TopCtls$(0, 2) = STR$(CtlHndl)
TopCtls$(0, 3) = "65"
TopCtls$(0, 4) = "20"
RetVal = FN.Hide(Hndl)
MAPHANDLE #TOP, Title$
WindowWidth = 75
WindowHeight = 20
Style = SS.CENTER OR SS.CENTERIMAGE OR SS.NOTIFY
STYLEBITS #TOP.STA, Style, 0, 0, 0
STATICTEXT #TOP.STA, "00:00:00 am", 0, 0, 75, 20
OPEN "1" FOR WINDOW AS #TOP
PRINT #TOP.STA, "!font Comic_Sans_MS 9 bold italic"
Hndl = HWND(#TOP)
CtlHndl = HWND(#TOP.STA)
Id = Id + 1
Title$ = TRIM$(STR$(Id)) + "TOP"
TopCtls$(1, 0) = Title$
TopCtls$(1, 1) = STR$(Hndl)
TopCtls$(1, 2) = STR$(CtlHndl)
TopCtls$(1, 3) = "75"
TopCtls$(1, 4) = "20"
RetVal = FN.Hide(Hndl)
MAPHANDLE #TOP, Title$
WindowWidth = 65
WindowHeight = 20
Style = BS.CENTER OR BS.VCENTER OR BS.PUSHLIKE OR BS.FLAT
STYLEBITS #TOP.CKB, Style, 0, 0, 0
CHECKBOX #TOP.CKB, "NEXT", NXT.MONTH, NXT.MONTH, 0, 0, 65, 20
OPEN "PREVIOUS" FOR WINDOW AS #TOP
PRINT #TOP.CKB, "font Comic_Sans_MS 8 bold italic"
Hndl = HWND(#TOP)
CtlHndl = HWND(#TOP.CKB)
Id = Id + 1
Title$ = TRIM$(STR$(Id)) + "TOP"
TopCtls$(2, 0) = Title$
TopCtls$(2, 1) = STR$(Hndl)
TopCtls$(2, 2) = STR$(CtlHndl)
TopCtls$(2, 3) = "65"
TopCtls$(2, 4) = "20"
RetVal = FN.Hide(Hndl)
MAPHANDLE #TOP, Title$
WindowWidth = 115
DateStr$ = SPACE$(60)
CALLDLL #DATM, "FN_DatmFullDate", DateStr$ AS PTR, NumChrs AS LONG
DateStr$ = LEFT$(DateStr$, NumChrs)
Style = BS.CENTER OR BS.VCENTER OR BS.PUSHLIKE OR BS.FLAT
STYLEBITS #TOP.CKB, Style, 0, 0, 0
CHECKBOX #TOP.CKB, DateStr$, THS.MONTH, THS.MONTH, 0, 0, 115, 20
OPEN "PREVIOUS" FOR WINDOW AS #TOP
PRINT #TOP.CKB, "font Comic_Sans_MS 8 bold italic"
Hndl = HWND(#TOP)
CtlHndl = HWND(#TOP.CKB)
Id = Id + 1
Title$ = TRIM$(STR$(Id)) + "TOP"
TopCtls$(3, 0) = Title$
TopCtls$(3, 1) = STR$(Hndl)
TopCtls$(3, 2) = STR$(CtlHndl)
TopCtls$(3, 3) = "115"
TopCtls$(3, 4) = "20"
RetVal = FN.Hide(Hndl)
MAPHANDLE #TOP, Title$
END FUNCTION
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
FUNCTION FN.CreateWeekDays()
DATA "Sun"
DATA "Mon"
DATA "Tue"
DATA "Wed"
DATA "Thu"
DATA "Fri"
DATA "Sat"
SS.CENTER = HEXDEC("&H00000001")
SS.NOTIFY = HEXDEC("&H00000100")
SS.CENTERIMAGE = HEXDEC("&H00000200")
RetVal = 0
Hndl = 0
CtlHndl = 0
Id = 0
I = 0
Style = SS.CENTER OR SS.CENTERIMAGE OR SS.NOTIFY
Title$ = ""
WindowWidth = 30
WidnowHeight = 15
REDIM WeekDay$(6, 4)
FOR I = 0 TO 6
READ Title$
STYLEBITS #DAYS.STA, Style, 0, 0, 0
STATICTEXT #DAYS.STA, Title$, 0, 0, 30, 15
OPEN "DAYS" FOR WINDOW AS #DAYS
PRINT #DAYS.STA, "!font Comic_Sans_MS 8 bold italic"
Hndl = HWND(#DAYS)
CtlHndl = HWND(#DAYS.STA)
Title$ = TRIM$(STR$(I)) + Title$
WeekDay$(I, 0) = Title$
WeekDay$(I, 1) = STR$(Hndl)
WeekDay$(I, 2) = STR$(CltHndl)
WeekDay$(I, 3) = "30"
WeekDay$(I, 4) = "15"
MAPHANDLE #DAYS, Title$
RetVal = FN.Hide(Hndl)
NEXT I
END FUNCTION
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
FUNCTION FN.CreateDates()
BS.CENTER = HEXDEC("&H00000300")
BS.VCENTER = HEXDEC("&H00000C00")
BS.PUSHLIKE = HEXDEC("&H00001000")
BS.FLAT = HEXDEC("&H00008000")
RetVal = 0
Hndl = 0
CtlHndl = 0
Id = 0
I = 0
Style = BS.CENTER OR BS.VCENTER OR BS.PUSHLIKE OR BS.FLAT
Title$ = ""
REDIM DateCtls$(41, 4)
WindowWidth = 30
WidnowHeight = 15
FOR I = 0 TO 41
Style = BS.CENTER OR BS.VCENTER OR BS.PUSHLIKE OR BS.FLAT
STYLEBITS #DATE.CKB, Style, 0, 0, 0
CHECKBOX #DATE.CKB, "", THS.DATE, THS.DATE, 0, 0, 30, 15
Title$ = TRIM$(STR$(I))
OPEN Title$ FOR WINDOW AS #DATE
PRINT #DATE.CKB, "font Comic_Sans_MS 8 bold italic"
Hndl = HWND(#DATE)
CtlHndl = HWND(#DATE.CKB)
Title$ = Title$ + "DATE"
DateCtls$(I, 0) = Title$
DateCtls$(I, 1) = STR$(Hndl)
DateCtls$(I, 2) = STR$(CtlHndl)
DateCtls$(I, 3) = "30"
DateCtls$(I, 4) = "15"
MAPHANDLE #DATE, Title$
RetVal = FN.Hide(Hndl)
NEXT I
END FUNCTION
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
FUNCTION FN.FitCtrls()
GWL.STYLE = -16
GWL.EXSTYLE = -20
WS.CHILD = HEXDEC("&H40000000")
WS.VISIBLE = HEXDEC("&H10000000")
WS.CLIPSIBLINGS = HEXDEC("&H04000000")
WS.CLIPCHILDREN = HEXDEC("&H02000000")
WS.CAPTION = HEXDEC("&H00C00000")
WS.SYSMENU = HEXDEC("&H00080000")
WS.THICKFRAME = HEXDEC("&H00040000")
WS.GROUP = HEXDEC("&H00020000")
WS.TABSTOP = HEXDEC("&H00010000")
WS.MINIMIZEBOX = HEXDEC("&H00020000")
WS.MAXIMIZEBOX = HEXDEC("&H00010000")
WS.OVERLAPPEDWINDOW = (WS.OVERLAPPED _
OR WS.CAPTION _
OR WS.SYSMENU _
OR WS.THICKFRAME _
OR WS.MINIMIZEBOX _
OR WS.MAXIMIZEBOX)
DS.CONTROL = HEXDEC("&H0400")
STRUCT tRect, _
X AS LONG, _
Y AS LONG, _
X1 AS LONG, _
Y1 AS LONG
STRUCT tWin, _
X AS LONG, _
Y AS LONG, _
X1 AS LONG, _
Y1 AS LONG
CtlHndl = 0
Hndl = 0
Wide = 0
High = 0
Xwide = 0
Yhigh = 0
HalfX = 0
[TOP.PART]
Style = WS.CHILD OR WS.VISIBLE OR WS.CLIPCHILDREN OR WS.CLIPSIBLINGS OR DS.CONTROL
FOR I = 0 TO 3
Hndl = VAL(TopCtls$(I, 1))
RetVal = FN.Show(Hndl)
CALLDLL #USER, "SetParent", Hndl AS ULONG, WinHndl AS ULONG, RetVal AS VOID
' CALLDLL #USER, "SetWindowLongA", Hndl AS ULONG, GWL.STYLE AS LONG, Style AS ULONG, _
' RetVal AS VOID
NEXT I
RetVal = FN.ClientSize(WinHndl)
HalfX = tWin.X1.struct / 2
Hndl = VAL(TopCtls$(0, 1))
CALLDLL #USER, "SetWindowLongA", Hndl AS ULONG, GWL.STYLE AS LONG, Style AS ULONG, _
RetVal AS VOID
Wide = VAL(TopCtls$(0, 3))
High = VAL(TopCtls$(0, 4))
RetVal = FN.PlaceWindow(Hndl, 2, 5, Wide, High)
Hndl = VAL(TopCtls$(1, 1))
CALLDLL #USER, "SetWindowLongA", Hndl AS ULONG, GWL.STYLE AS LONG, Style AS ULONG, _
RetVal AS VOID
Wide = VAL(TopCtls$(1, 3))
High = VAL(TopCtls$(1, 4))
Xwide = HalfX - Wide / 2
RetVal = FN.PlaceWindow(Hndl, Xwide, 5, Wide, High)
Xwide = Xwide + Wide
Hndl = VAL(TopCtls$(2, 1))
CALLDLL #USER, "SetWindowLongA", Hndl AS ULONG, GWL.STYLE AS LONG, Style AS ULONG, _
RetVal AS VOID
Wide = VAL(TopCtls$(2, 3))
High = VAL(TopCtls$(2, 4))
Xwide = tWin.X1.struct - Wide - 2
RetVal = FN.PlaceWindow(Hndl, Xwide, 5, Wide, High)
Yhigh = High + 8
Hndl = VAL(TopCtls$(3, 1))
CALLDLL #USER, "SetWindowLongA", Hndl AS ULONG, GWL.STYLE AS LONG, Style AS ULONG, _
RetVal AS VOID
Wide = VAL(TopCtls$(3, 3))
High = VAL(TopCtls$(3, 4))
Xwide = HalfX - Wide / 2
RetVal = FN.PlaceWindow(Hndl, Xwide, Yhigh, Wide, High)
[DAYS.OF.WEEK]
Yhigh = Yhigh + High + 4
Xwide = 10
Wide = VAL(WeekDay$(0, 3))
High = VAL(WeekDay$(0, 4))
FOR I = 0 TO 6
Hndl = VAL(WeekDay$(I, 1))
RetVal = FN.Show(Hndl)
CALLDLL #USER, "SetParent", Hndl AS ULONG, WinHndl AS ULONG, RetVal AS VOID
CALLDLL #USER, "SetWindowLongA", Hndl AS ULONG, GWL.STYLE AS LONG, Style AS ULONG, _
RetVal AS VOID
RetVal = FN.PlaceWindow(Hndl, Xwide, Yhigh, Wide, High)
Xwide = Xwide + Wide
NEXT I
[DAYS.IN.MONTH]
Xwide = 10
Yhigh = Yhigh + High
Wide = VAL(DateCtls$(0, 3))
High = VAL(DateCtls$(0, 4))
DayCnt = -1
FOR J = 1 TO 6
FOR I = 0 TO 6
DayCnt = DayCnt + 1
Hndl = VAL(DateCtls$(DayCnt, 1))
RetVal = FN.Show(Hndl)
CALLDLL #USER, "SetParent", Hndl AS ULONG, WinHndl AS ULONG, RetVal AS VOID
CALLDLL #USER, "SetWindowLongA", Hndl AS ULONG, GWL.STYLE AS LONG, Style AS ULONG, _
RetVal AS VOID
RetVal = FN.PlaceWindow(Hndl, Xwide, Yhigh, Wide, High)
Xwide = Xwide + Wide
NEXT I
Xwide = 10
Yhigh = Yhigh + High
NEXT J
'Wide = VAL(WeekDay$(0, 3))
'High = VAL(WeekDay$(0, 4))
'TRACE 2
' Hndl = VAL(WeekDay$(0, 1))
' CALLDLL #USER, "SetWindowLongA", Hndl AS ULONG, GWL.STYLE AS LONG, Style AS ULONG, _
' RetVal AS VOID
' RetVal = FN.PlaceWindow(Hndl, Xwide, Yhigh, Wide, High)
'EXIT FUNCTION
'FOR I = 0 TO 6
' Hndl = VAL(WeekDay$(I, 1))
' CALLDLL #USER, "SetWindowLongA", Hndl AS ULONG, GWL.STYLE AS LONG, Style AS ULONG, _
' RetVal AS VOID
' RetVal = FN.PlaceWindow(Hndl, Xwide, Yhigh, Wide, High)
' Xwide = Xwide + Wide
'NEXT I
END FUNCTION
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
FUNCTION FN.Hide(Whndl)
RetVal = 0
CALLDLL #USER, "ShowWindow", Whndl AS ULONG, 0 AS ULONG, RetVal AS VOID
END FUNCTION
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
FUNCTION FN.Show(Whndl)
RetVal = 0
CALLDLL #USER, "ShowWindow", Whndl AS ULONG, 1 AS ULONG, RetVal AS VOID
END FUNCTION
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
FUNCTION FN.PlaceWindow(Hndl, Lx, Ly, Wide, High)
Lx = INT(Lx)
Ly = INT(Ly)
CALLDLL #USER, "MoveWindow", Hndl AS ULONG, Lx AS LONG, Ly AS LONG, Wide AS LONG, _
High AS LONG, 1 AS BOOLEAN, RetVal AS LONG
END FUNCTION
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
FUNCTION FN.GetWinSize(Hndl)
'print "winsize hndl = "; Hndl
CALLDLL #USER, "GetWindowRect", Hndl AS ULONG, tRect AS STRUCT, RetVal AS VOID
END FUNCTION
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
FUNCTION FN.ClientSize(Hndl)
RetVal = 0
CALLDLL #USER, "GetClientRect", Hndl AS ULONG, tWin AS STRUCT, RetVal AS VOID
END FUNCTION
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
FUNCTION FN.DisplayDates()
BrsHndl = 0
CtlDc = 0
RetVal = 0
CtlHndl = 0
ToDay = 0
WeekDay = 0
DayStrt = 0
NumDays = 0
Month = 0
Year = 0
I = 0
DayStr$ = ""
DayStr$ = SPACE$(3)
FOR I = 0 TO 41
CtlHndl = VAL(DateCtls$(I, 2))
CALLDLL #USER, "SetWindowTextA", CtlHndl AS ULONG, DayStr$ AS PTR, RetVal AS LONG
NEXT I
CALLDLL #DATM, "FN_DatmNumDays", NumDays AS LONG
CALLDLL #DATM, "FN_DatmMonthDate", ToDay AS LONG
I = ToDay - 1
CALLDLL #DATM, "DatmSubtractDay", I AS LONG, RetVal AS VOID
CALLDLL #DATM, "FN_DatmWeekDay", WeekDay AS LONG
DayStrt = WeekDay - 1
FOR I = 1 TO NumDays
DayStrt = DayStrt + 1
CtlHndl = VAL(DateCtls$(DayStrt, 2))
DayStr$ = TRIM$(STR$(I))
CALLDLL #USER, "SetWindowTextA", CtlHndl AS ULONG, DayStr$ AS PTR, RetVal AS LONG
NEXT I
ToDay = ToDay - 1
CALLDLL #DATM, "DatmAddDay", ToDay AS LONG, RetVal AS VOID
END FUNCTION
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------