B4A Library MultiDayCalendarView

This is a (partly) wrapper for this Github project. It is a "starter" for the request posted by @jahswani in the Business Forum

Posting the following:
1. B4A project demonstrating functionality added thus far
2. The Java Code - do with it / change it / amend it whichever way you like
3. B4A library files - copy them to your additional library folder
4. You will also need android-support-v4.jar to be in you additional library folder. You can download it from here https://www.dropbox.com/s/qmggn0wm5a6bqa9/android-support-v4.jar?dl=0

How to use:
1. See code in the attached project to add an Event via B4A code
2. Touch and empty cell - it will be highlighted in Yellow (see code to change the color). Then touch the same cell again. An Event will be added to the Calendar based on the B4A code:
B4X:
mdcv1.ClickEventName = "Morning Meeting"
mdcv1.ClickEventDetail = "All Operations Personnel"
mdcv1.ClickEventColor = Colors.DarkGray
3. Use your finger to scroll up/down (time) and left / right (days)
4. The following 3 events will be raised in the B4A project
B4X:
Sub mdcv1_event_selected(eventname As String, eventdetail As String)

    Log("B4A: calendar eventname = " & eventname)
    Log("B4A: calendar eventdetail = " & eventdetail)
    nativeMe.RunMethod("showToastMessage", Array(eventname & " : " & eventdetail))

End Sub

Sub mdcv1_calendar_scrolling(firstday As String)

    Log("B4A: first day = " & firstday)

End Sub


Sub mdcv1_event_added(eventstartdatetime As Long, clickeventname As String, clickeventdetail As String, clickeventcolor As Int)

    Log("B4A : eventstartdatetime = " & eventstartdatetime)
    Log("B4A : clickeventname = " & clickeventname)
    Log("B4A : clickeventdetail = " & clickeventdetail)
    Log("B4A : clickeventcolor = " & clickeventcolor)

End Sub

To change the appearance:
B4X:
mdcv1.DefaultEventSelectColor = Colors.Yellow
mdcv1.DayOfMonthTextSize = 40
mdcv1.DayOfWeekTextSize = 25
mdcv1.TimeTextSize = 18
mdcv1.EventTextSize = 20

When you touch a cell with an Event that has been set it will display a Toast Message with the name of the Calendar Event and the Detail of the Calendar Event.

The Toast Message is displayed by making use of inline Java code. Therefor you also need to enable the JavaObject (v2.05) library in the IDE.

I will help/assist where I can to amend/change/modify the lib - but I am mostly leaving it up to you to take it further.

Sample code:

B4X:
#Region  Project Attributes
    #ApplicationLabel: MultiDayCalendarView
    #VersionCode: 1
    #VersionName:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: portrait
    #CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.

    Dim nativeMe As JavaObject

End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.

    Private mdcv1 As MultiDayCalendarView

End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("main")

    nativeMe.InitializeContext

    mdcv1.ClickEventName = "Morning Meeting"
    mdcv1.ClickEventDetail = "All Operations Personnel"
    mdcv1.ClickEventColor = Colors.DarkGray
    mdcv1.DefaultEventSelectColor = Colors.Yellow
    mdcv1.DayOfMonthTextSize = 40
    mdcv1.DayOfWeekTextSize = 25
    mdcv1.TimeTextSize = 18
    mdcv1.EventTextSize = 20  

End Sub

Sub Activity_Resume

    Dim tim As Long = DateTime.TimeZoneOffset * 60 * 60 * 1000
'    tim = tim + DateTime.Now  - DateTime.GetMinute(DateTime.Now) * 60 * 1000 - DateTime.GetSecond(DateTime.Now) * 1000
'    tim = tim/1000

    DateTime.DateFormat = "yyyy/MM/dd"
    DateTime.TimeFormat = "HH:mm:ss"

    tim = tim + DateTime.DateTimeParse("2016/04/18", "18:00:00")                  'tim = in milliseconds
    tim = tim/1000                                                                'tim = converted to seconds
    mdcv1.addEvent(tim, "Supper with John", "The Butcher Boys", Colors.Blue)      'seconds need to be passed
    'mdcv1.removeEvent(tim)                                                       'this will remove the same event that we have just set in the line above

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub mdcv1_event_selected(eventname As String, eventdetail As String)

    Log("B4A: calendar eventname = " & eventname)
    Log("B4A: calendar eventdetail = " & eventdetail)
    nativeMe.RunMethod("showToastMessage", Array(eventname & " : " & eventdetail))

End Sub

Sub mdcv1_calendar_scrolling(firstday As String)

    Log("B4A: first day = " & firstday)

End Sub


Sub mdcv1_event_added(eventstartdatetime As Long, clickeventname As String, clickeventdetail As String, clickeventcolor As Int)

    Log("B4A : eventstartdatetime = " & eventstartdatetime)
    Log("B4A : clickeventname = " & clickeventname)
    Log("B4A : clickeventdetail = " & clickeventdetail)
    Log("B4A : clickeventcolor = " & clickeventcolor)

End Sub


#If Java

import android.widget.Toast;

    //this will display a Toast Message (Event Name and Event Detail) when a cell containing an Event is touched
    public void showToastMessage(String message) {
        Toast.makeText(BA.applicationContext, message, Toast.LENGTH_SHORT).show();
    }

#End If

The library as it stands at present:

MultiDayCalendarView
Author:
Github: Sundeep Kahlon, Wrapped by: Johan Schoeman
Version: 1
  • MultiDayCalendarView
    Events:
    • calendar_scrolling (firstdateshown As String)
    • event_added (eventstartdatetime As Long, clickeventname As String, clickeventdetail As String, clickeventcolor As Int)
    • event_selected (eventname As String, eventdetail As String)
    Fields:
    • ba As BA
    Methods:
    • BringToFront
    • DesignerCreateView (base As PanelWrapper, lw As LabelWrapper, props As Map)
    • Initialize (EventName As String)
    • Invalidate
    • Invalidate2 (arg0 As Rect)
    • Invalidate3 (arg0 As Int, arg1 As Int, arg2 As Int, arg3 As Int)
    • IsInitialized As Boolean
    • RemoveView
    • RequestFocus As Boolean
    • SendToBack
    • SetBackgroundImage (arg0 As Bitmap)
    • SetColorAnimated (arg0 As Int, arg1 As Int, arg2 As Int)
    • SetLayout (arg0 As Int, arg1 As Int, arg2 As Int, arg3 As Int)
    • SetLayoutAnimated (arg0 As Int, arg1 As Int, arg2 As Int, arg3 As Int, arg4 As Int)
    • SetVisibleAnimated (arg0 As Int, arg1 As Boolean)
    • addEvent (seconds As Long, Eventname As String, detail As String, color As Int)
      Add an Event to the calendar
      The date and time converted to seconds (use the date and hour only - make minutes and seconds zero)
      Eventname = the name of the Event
      detail = the detail of the event
      color = the color of the cell that houses the Event
    • removeEvent (epochTimeInSecsToTheClosetHour As Long)
      Remove an Event from the Calendar
      epochTimeInSecsToTheClosetHour should be in "seconds"
    Properties:
    • Background As Drawable
    • ClickEventColor As Int [write only]
    • ClickEventDetail As String [write only]
    • ClickEventName As String [write only]
    • Color As Int [write only]
    • DayOfMonthTextSize As Int [write only]
      Default is 23
    • DayOfWeekTextSize As Int [write only]
      Default is 15
    • DefaultEventSelectColor As Int [write only]
      The color of an empty cell to chenge to when it is clicked on
      If you touch the same cell again an event will be added
      The event that will be added is based on what have been set with:
      ClickEventName = clickeventname,
      ClickEventDetail = clickeventdetail, and
      ClickEventColor = clickeventcolor
    • Enabled As Boolean
    • EventTextSize As Int [write only]
      Default is 13
    • Height As Int
    • Left As Int
    • Parent As Object [read only]
    • Tag As Object
    • TimeTextSize As Int [write only]
      Default is 13
    • Top As Int
    • Visible As Boolean
    • Width As Int

Sample pics:

SAMPLE B4A PROJECT STARTED
Started.png


AN EMPTY CELL TOUCHED - IT IS HIGHLIGHTED IN YELLOW
CellTouched.png



THE SAME YELLOW HIGHLIGHTED CELL TOUCED AGAIN. AN EVENT IS ADDED (MORNING MEETING)
SameCellTouchedAgain.png



CELL WITH AN EVENT TOUCHED - A TOAST MESSAGE IS DISPLAYED WITH THE EVENT NAME AND THE EVENT DETAIL (via inline Java Code)

ShowToastMessage.png


SCROLL LEFT USING YOUR FINGER (SEE THE B4A LOG)
ScrollLeft.png


SCROLL RIGHT USING YOUR FINGER (SEE THE B4A LOG)
ScrollRight.png



In order to compile the Java code you need to add a libs folder on the same folder lever as the src folder. Then copy android-support-v4.jar into the libs folder to compile the Java code to a jar and xml

DirectorySetup.png




Enjoy.....;)
 

Attachments

  • b4aMultiDayCalendarView.zip
    9 KB · Views: 488
  • MultiDayCalendarViewLibFiles.zip
    19.1 KB · Views: 476
  • TheJavaCode.zip
    51.5 KB · Views: 421
Last edited:

asales

Expert
Licensed User
Longtime User
Very nice @Johan Schoeman.
Thanks.

A few questions...
Is possible to:
a) decrease the height of the cells of days (in the top of grid)?
b) use the cells of times in 24 hour format?
c) change the color the cells of days and times?
 

Johan Schoeman

Expert
Licensed User
Longtime User
Very nice @Johan Schoeman.
Thanks.

A few questions...
Is possible to:
a) decrease the height of the cells of days (in the top of grid)?
b) use the cells of times in 24 hour format?
c) change the color the cells of days and times?
Like this.....?

Day and time colors.png



B4X:
#Region  Project Attributes
    #ApplicationLabel: MultiDayCalendarView
    #VersionCode: 1
    #VersionName:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: portrait
    #CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
   
    Dim nativeMe As JavaObject

End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.

    Private mdcv1 As MultiDayCalendarView
   
End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("main")
   
    nativeMe.InitializeContext
   
    mdcv1.ClickEventName = "Morning Meeting"
    mdcv1.ClickEventDetail = "All Operations Personnel"
    mdcv1.ClickEventColor = Colors.DarkGray
    mdcv1.DefaultEventSelectColor = Colors.Yellow
    mdcv1.DayOfMonthTextSize = 40
    mdcv1.DayOfWeekTextSize = 25
    mdcv1.TimeTextSize = 18
    mdcv1.EventTextSize = 20    
    mdcv1.DateTextColor = Colors.Cyan
    mdcv1.TimeTextColor = Colors.Magenta 

End Sub

Sub Activity_Resume

    Dim tim As Long = DateTime.TimeZoneOffset * 60 * 60 * 1000
'    tim = tim + DateTime.Now  - DateTime.GetMinute(DateTime.Now) * 60 * 1000 - DateTime.GetSecond(DateTime.Now) * 1000
'    tim = tim/1000
   
    DateTime.DateFormat = "yyyy/MM/dd"
    DateTime.TimeFormat = "HH:mm:ss"
   
    tim = tim + DateTime.DateTimeParse("2016/04/18", "18:00:00")                  'tim = in milliseconds
    tim = tim/1000                                                                'tim = converted to seconds
    mdcv1.addEvent(tim, "Supper with John", "The Butcher Boys", Colors.Blue)      'seconds need to be passed
    'mdcv1.removeEvent(tim)                                                       'this will remove the same event that we have just set in the line above

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub mdcv1_event_selected(eventname As String, eventdetail As String)
   
    Log("B4A: calendar eventname = " & eventname)
    Log("B4A: calendar eventdetail = " & eventdetail)
    nativeMe.RunMethod("showToastMessage", Array(eventname & " : " & eventdetail))
   
End Sub

Sub mdcv1_calendar_scrolling(firstday As String)
   
    Log("B4A: first day = " & firstday)

End Sub


Sub mdcv1_event_added(eventstartdatetime As Long, clickeventname As String, clickeventdetail As String, clickeventcolor As Int)
   
    Log("B4A : eventstartdatetime = " & eventstartdatetime)
    Log("B4A : clickeventname = " & clickeventname)
    Log("B4A : clickeventdetail = " & clickeventdetail)
    Log("B4A : clickeventcolor = " & clickeventcolor)
   
End Sub


#If Java

import android.widget.Toast;

    //this will display a Toast Message (Event Name and Event Detail) when a cell containing an Event is touched
    public void showToastMessage(String message) {
        Toast.makeText(BA.applicationContext, message, Toast.LENGTH_SHORT).show();
    }

#End If
 

Attachments

  • b4aMultiDayCalendarView.zip
    9 KB · Views: 301
  • MultiDayCalendarViewLibFilesNew.zip
    19.3 KB · Views: 292
  • TheJavaCode.zip
    13 KB · Views: 290

Jomagom

Member
Licensed User
Longtime User
Thank you very much, a very useful library.
You could add the name of the month and the year.
Thanks for your work.
 

TheMightySwe

Active Member
Licensed User
Longtime User
Hi Johan,

I was thinking, do you think it is hard to change the top row so it is staff members, assets or something like that so you can use it as a booking calendar, So all rows are the same date but you list employees for work schedule or something like that.

// TMS
 

Johan Schoeman

Expert
Licensed User
Longtime User
Thank you very much, a very useful library.
You could add the name of the month and the year.
Thanks for your work.
Here you go - the easiest way to do it was making use of a label in the B4A designer. Note that the Month/Year in the label will follow the lead of the left most day in the calendar view. Thus, if the left most day is 30 April 2016 and the next two days are 1 May 2016 and 2 May 2016 then the label will display the month and year as April 2016.

See the attached project / sample code. Have also added the following functionality:
1. Deleting an existing calendar event when the event is LongPressed
2. Raising an event in B4A when a calendar event is deleted (deleting the event via code or via a LongPress)
B4X:
Sub mdcv1_event_deleted(eventtime As Long, eventname As String, eventdetail As String)
 
    Log("deleted = " & eventtime)                        'the event in seconds
    Log("deleted = " & eventname)                        'the name of the event
    Log("deleted = " & eventdetail)                      'the detail of the event
 
End Sub

Attached the updated B4A project, the updated B4A library files, and the Java code as it stands at present.

1.png


Sample Code:

B4X:
#Region  Project Attributes
    #ApplicationLabel: MultiDayCalendarView
    #VersionCode: 1
    #VersionName:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: portrait
    #CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
 
    Dim nativeMe As JavaObject

End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.

    Private mdcv1 As MultiDayCalendarView
    Dim sf As StringFunctions
 
    Private Label1 As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("main")
 
    nativeMe.InitializeContext
    sf.Initialize
 
    mdcv1.ClickEventName = "Morning Meeting"
    mdcv1.ClickEventDetail = "All Operations Personnel"
    mdcv1.ClickEventColor = Colors.DarkGray
    mdcv1.DefaultEventSelectColor = Colors.Yellow
    mdcv1.DayOfMonthTextSize = 40
    mdcv1.DayOfWeekTextSize = 25
    mdcv1.TimeTextSize = 18
    mdcv1.EventTextSize = 20  
    mdcv1.DateTextColor = Colors.Cyan
    mdcv1.TimeTextColor = Colors.Magenta
 
    Dim leftmostday As String = mdcv1.CurrentLeftMostDay                   'added to display month / year in the label
    Dim thismonth As String = sf.Mid(leftmostday,5,3)
    Dim thisyear As String = sf.right(leftmostday,4)
 
    Label1.Text = thismonth & " - " & thisyear

End Sub

Sub Activity_Resume

    Dim tim As Long = DateTime.TimeZoneOffset * 60 * 60 * 1000
'    tim = tim + DateTime.Now  - DateTime.GetMinute(DateTime.Now) * 60 * 1000 - DateTime.GetSecond(DateTime.Now) * 1000
'    tim = tim/1000
 
    DateTime.DateFormat = "yyyy/MM/dd"
    DateTime.TimeFormat = "HH:mm:ss"
 
    tim = tim + DateTime.DateTimeParse("2016/04/22", "18:00:00")                  'tim = in milliseconds
    tim = tim/1000                                                                'tim = converted to seconds
    mdcv1.addEvent(tim, "Supper with John", "The Butcher Boys", Colors.Blue)      'seconds need to be passed
    'mdcv1.removeEvent(tim)                                                       'this will remove the same event that we have just set in the line above

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub mdcv1_event_selected(eventname As String, eventdetail As String)
 
    Log("B4A: calendar eventname = " & eventname)
    Log("B4A: calendar eventdetail = " & eventdetail)
    nativeMe.RunMethod("showToastMessage", Array(eventname & " : " & eventdetail))
 
End Sub

Sub mdcv1_calendar_scrolling(firstday As String)
 
    Log("B4A: first day = " & firstday)
 
    Dim thismonth As String = sf.Mid(firstday,5,3)                     'added to display month / year in the label
    Dim thisyear As String = sf.right(firstday,4)
 
    Label1.Text = thismonth & " - " & thisyear
 
End Sub

Sub mdcv1_event_added(eventstartdatetime As Long, clickeventname As String, clickeventdetail As String, clickeventcolor As Int)
 
    Log("B4A : eventstartdatetime = " & eventstartdatetime)
    Log("B4A : clickeventname = " & clickeventname)
    Log("B4A : clickeventdetail = " & clickeventdetail)
    Log("B4A : clickeventcolor = " & clickeventcolor)
 
End Sub

Sub mdcv1_event_deleted(eventtime As Long, eventname As String, eventdetail As String)
 
    Log("deleted = " & eventtime)                        'the event in seconds
    Log("deleted = " & eventname)                        'the name of the event
    Log("deleted = " & eventdetail)                      'the detail of the event
 
End Sub


#If Java

import android.widget.Toast;

    //this will display a Toast Message (Event Name and Event Detail) when a cell containing an Event is touched
    public void showToastMessage(String message) {
        Toast.makeText(BA.applicationContext, message, Toast.LENGTH_SHORT).show();
    }

#End If

Library:

MultiDayCalendarView
Author:
Github: Sundeep Kahlon, Wrapped by: Johan Schoeman
Version: 1
  • MultiDayCalendarView
    Events:
    • calendar_scrolling (firstdateshown As String)
    • event_added (eventstartdatetime As Long, clickeventname As String, clickeventdetail As String, clickeventcolor As Int)
    • event_deleted (epochtimeinsecstotheclosethour As Long, eventname As String, eventdetail As String)
    • event_selected (eventname As String, eventdetail As String)
    Fields:
    • ba As BA
    Methods:
    • BringToFront
    • DesignerCreateView (base As PanelWrapper, lw As LabelWrapper, props As Map)
    • Initialize (EventName As String)
    • Invalidate
    • Invalidate2 (arg0 As Rect)
    • Invalidate3 (arg0 As Int, arg1 As Int, arg2 As Int, arg3 As Int)
    • IsInitialized As Boolean
    • RemoveView
    • RequestFocus As Boolean
    • SendToBack
    • SetBackgroundImage (arg0 As Bitmap)
    • SetColorAnimated (arg0 As Int, arg1 As Int, arg2 As Int)
    • SetLayout (arg0 As Int, arg1 As Int, arg2 As Int, arg3 As Int)
    • SetLayoutAnimated (arg0 As Int, arg1 As Int, arg2 As Int, arg3 As Int, arg4 As Int)
    • SetVisibleAnimated (arg0 As Int, arg1 As Boolean)
    • addEvent (seconds As Long, Eventname As String, detail As String, color As Int)
      Add an Event to the calendar
      The date and time converted to seconds (use the date and hour only - make minutes and seconds zero)
      Eventname = the name of the Event
      detail = the detail of the event
      color = the color of the cell that houses the Event
    • removeEvent (epochTimeInSecsToTheClosetHour As Long)
      Remove an Event from the Calendar
      epochTimeInSecsToTheClosetHour should be in "seconds"
    Properties:
    • Background As Drawable
    • ClickEventColor As Int [write only]
    • ClickEventDetail As String [write only]
    • ClickEventName As String [write only]
    • Color As Int [write only]
    • CurrentLeftMostDay As String [read only]
    • DateTextColor As Int [write only]
      Default is 0xffff0000 (or red)
    • DayOfMonthTextSize As Int [write only]
      Default is 23
    • DayOfWeekTextSize As Int [write only]
      Default is 15
    • DefaultEventSelectColor As Int [write only]
      The color of an empty cell to chenge to when it is clicked on
      If you touch the same cell again an event will be added
      The event that will be added is based on what have been set with:
      ClickEventName = clickeventname,
      ClickEventDetail = clickeventdetail, and
      ClickEventColor = clickeventcolor
    • Enabled As Boolean
    • EventTextSize As Int [write only]
      Default is 13
    • Height As Int
    • Left As Int
    • Parent As Object [read only]
    • Tag As Object
    • TimeTextColor As Int [write only]
      Default is 0xff00ff00 (or green)
    • TimeTextSize As Int [write only]
      Default is 13
    • Top As Int
    • Visible As Boolean
    • Width As Int
 

Attachments

  • b4aMultiDayCalendarView.zip
    9.4 KB · Views: 334
  • MultiDayCalendarViewLibFiles.zip
    21.7 KB · Views: 353
  • TheJavaCode.zip
    13.5 KB · Views: 305

Johan Schoeman

Expert
Licensed User
Longtime User
Hi Johan,

I was thinking, do you think it is hard to change the top row so it is staff members, assets or something like that so you can use it as a booking calendar, So all rows are the same date but you list employees for work schedule or something like that.

// TMS
@TheMightySwe, the project that I am wrapping is "littered" with times and days. I guess that what you are requesting can be done but it falls outside the scope of what I am doing / have been doing here to wrap this project.
 

TheMightySwe

Active Member
Licensed User
Longtime User
Do you think it is possible to get this type of events when clicking and/or longclick on a empty space in the calender?

_calendar_click(Date As DateTime)
_calendar_longclick(Date As DateTime)
 

TheMightySwe

Active Member
Licensed User
Longtime User
Can you also get a property what the last visible day is. And a method that clear all events?
 

TheMightySwe

Active Member
Licensed User
Longtime User
And two more questions...
Is it possible to have a ID connected to the addEvent or addEvent2 for easy database interaction?
Is it possible to have the calendar start at a other day than the current day?
 

Johan Schoeman

Expert
Licensed User
Longtime User
And two more questions...
Is it possible to have a ID connected to the addEvent or addEvent2 for easy database interaction?
Is it possible to have the calendar start at a other day than the current day?
I will look into all your above questions over the weekend and see if I can do some mods to the lib. Not promising anything as it will require changing the code of the original Github project to a large extent.
 

Declan

Well-Known Member
Licensed User
Longtime User
Is it possible to change the number of days displayed?
Could then show single day or a week.
 

Declan

Well-Known Member
Licensed User
Longtime User
Ok, sorted - increasing the width of the
mdcv1 displays only 1 day etc.

How do I get a Click event (cell)
 
Top