User Tools

Site Tools


using_20the_20date_20and_20time_20picker

This is an old revision of the document!


Using the Date and Time Picker

by Richard Russell, May 2006

One of the standard controls provided by the Windows API is the Date and Time Picker. This can be used when you want the user to enter a date or a time into your program. For date entry Windows can display a small clickable calendar:



You can display the Date/Time Picker either on your main output window or in a dialogue box.

Output window


To display a Date/Time picker on the output window use code similar to the following:

      INSTALL @lib$+"WINLIB5"
      ICC_DATE_CLASSES = &100
      DIM iccx{Size%, ICC%} : REM INITCOMMONCONTROLSEX structure
      iccx.Size% = 8
      iccx.ICC%  = ICC_DATE_CLASSES
      SYS "InitCommonControlsEx", iccx{}
      hdtp% = FN_createwindow("SysDateTimePick32", "", x%, y%, cx%, cy%, 0, style%, 0)

Here x%,y% is the position at which the Date/Time picker should be displayed, cx%,cy% is the size of the Date/Time picker window and style% is one of the following values (the figures in brackets are suggested window sizes for the different styles):

  • 0 - to display a date picker using the short date format (cx%=88, cy%=20)
  • 4 - to display a date picker using the long date format (cx%=120, cy%=20)
  • 9 - to display a time picker (cx%=72, cy%=20)


To read the currently selected date or time from the control use code similar to the following:

      DIM systemtime{Year{l&,h&}, Month{l&,h&}, DayOfWeek{l&,h&}, Day{l&,h&}, \
      \              Hour{l&,h&}, Minute{l&,h&}, Second{l&,h&}, Milliseconds{l&,h&}}
      DTM_GETSYSTEMTIME = &1001
      SYS "SendMessage", hdtp%, DTM_GETSYSTEMTIME, 0, systemtime{}
      day% = systemtime.Day.l&
      month% = systemtime.Month.l&
      year% = systemtime.Year.h& * 256 + systemtime.Year.l&
      hour% = systemtime.Hour.l&
      minute% = systemtime.Minute.l&
      second% = systemtime.Second.l&

To close the control use the following code:

      PROC_closewindow(hdtp%)


Dialogue box


To display a Date/Time picker in a dialogue box use code similar to the following:

      INSTALL @lib$+"WINLIB2"
      ICC_DATE_CLASSES = &100
      WS_VISIBLE = &10000000
      WS_CHILD = &40000000
      WS_GROUP = &20000
      BS_DEFPUSHBUTTON = 1
      DIM iccx{Size%, ICC%} : REM INITCOMMONCONTROLSEX structure
      iccx.Size% = 8
      iccx.ICC%  = ICC_DATE_CLASSES
      SYS "InitCommonControlsEx", iccx{}
      dtpdlg% = FN_newdialog("Date/Time picker", 20, 20, 150, 140, 8, 300)
      PROC_dlgctrl(dtpdlg%, "", 101, 8, 8, 64, 14, \
      \            WS_VISIBLE + WS_CHILD + style%, "SysDateTimePick32")
      PROC_pushbutton(dtpdlg%, "OK", 1, 12, 120, 56, 14, WS_GROUP + BS_DEFPUSHBUTTON)
      PROC_pushbutton(dtpdlg%, "Cancel", 2, 80, 120, 56, 14, 0)
      PROC_showdialog(dtpdlg%)

Where style% has one of the values listed above. Again the size of the Date/Time picker control will need to be modified according to the style, but here the size is specified in dialogue box units rather than pixels (see the main BBC BASIC for Windows documentation).

To read the currently selected date or time from the control when the OK button is clicked use code similar to the following:

      click% = 0
      ON SYS click% = @wparam% AND &FFFF : RETURN
      REPEAT
        WAIT 1
      UNTIL !dtpdlg% = 0 OR click% = 1 OR click% = 2
      ON SYS OFF
      DTM_GETSYSTEMTIME = &1001
      IF click% = 1 THEN
        DIM systemtime{Year{l&,h&}, Month{l&,h&}, DayOfWeek{l&,h&}, Day{l&,h&}, \
        \              Hour{l&,h&}, Minute{l&,h&}, Second{l&,h&}, Milliseconds{l&,h&}}
        SYS "SendDlgItemMessage", !dtpdlg%, 101, DTM_GETSYSTEMTIME, 0, systemtime{}
        day% = systemtime.Day.l&
        month% = systemtime.Month.l&
        year% = systemtime.Year.h& * 256 + systemtime.Year.l&
        hour% = systemtime.Hour.l&
        minute% = systemtime.Minute.l&
        second% = systemtime.Second.l&
      ENDIF
      PROC_closedialog(dtpdlg%)

You will want to use ON ERROR and ON CLOSE statements to ensure that “PROC_closedialog” is called even if the program is terminated unexpectedly.

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
using_20the_20date_20and_20time_20picker.1522502390.txt.gz · Last modified: 2024/01/05 00:16 (external edit)