Date Time Picker

Started by JTaylor, March 06, 2014, 08:52:06 AM

Previous topic - Next topic

JTaylor

I've probably mentioned this before but working on a project involving dates and times and would LOVE to see you implement the Date Time Picker.   While the Month Calendar you implemented is occasionally useful I tend to only use it as a last resort because it is so klunky.    The Date Time Picker gives you the same functionality but also SO MUCH more with all the appropriate masking and without having the calendar always visible or requiring one to do a pop-up with it when hiding it is desirable.

Can't help but believe that there are MANY folks who would love to see this control added as well.

     http://msdn.microsoft.com/en-us/library/bb773169(v=vs.85).aspx

I can make it work using the Extender I wrote but having it native would be much better.  Happy to share my code but guessing since I know little about C programming and it took me very little time to implement you could do it much easier and faster without my help.

Jim

Deana

Thanks for the input.

For now you can use code that look something like this:

!!!!! UNDEBUGGED !!!!!!

Code (winbatch) Select
;***************************************************************************
;**   DateTimePickers in a WIL Dialog
;**
;** Purpose: Add DateTimePicker Controls to WIL Dialog
;**
;** Developer: Deana Falk 2014.03.06
;***************************************************************************
GlobalDateTime = ''
GlobalDate = ''

Gosub UDFS

MyDialogFormat=`WWWDLGED,6.2`

MyDialogCaption=`Status Bar`
MyDialogX=-01
MyDialogY=-01
MyDialogWidth=300
MyDialogHeight=149
MyDialogNumControls=002
MyDialogProcedure=`MyDialogCallbackProc`
MyDialogFont=`DEFAULT`
MyDialogTextColor=`DEFAULT`
MyDialogBackground=`DEFAULT,DEFAULT`
MyDialogConfig=0

MyDialog001=`009,111,036,012,PUSHBUTTON,"PushButton_OK",DEFAULT,"OK",1,1,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
MyDialog002=`071,111,036,012,PUSHBUTTON,"PushButton_Cancel",DEFAULT,"Cancel",0,2,DEFAULT,DEFAULT,DEFAULT,DEFAULT`

ButtonPushed=Dialog("MyDialog")

Pause('DateTime Chosen by User', GlobalDate:":":GlobalTime)
Exit


:UDFS
#Definefunction InitCommonControls(class)
   ComCtl32 = DirWindows(1):"ComCtl32.dll"
   COMMONCONTROLSEX=BinaryAlloc(8)  ;Create buffer for CommonControlsEX buffer
   BinaryPoke4 (COMMONCONTROLSEX,0,8)
   BinaryPoke4 (COMMONCONTROLSEX,4,class)
   ICC=DllCall (ComCtl32,long:"InitCommonControlsEx",lpbinary:COMMONCONTROLSEX)
   BinaryFree  (COMMONCONTROLSEX) ;Free CommonControlsEX buffer
   Return
#Endfunction

#Definefunction DateTimeCreate(style,handle,startx,starty,width,height)
   user32 = DirWindows(1):"user32.dll"
   ;DateTime styles
   DTS_UPDOWN  = 1 ; Provides an up-down control to the right of the control to modify date-time values, which replaces the of the drop-down month calendar that would otherwise be available.
   DTS_SHOWNONE = 2 ; Displays a checkbox inside the control that users can uncheck to make the control have no date/time selected. Whenever the control has no date/time, Gui Submit and GuiControlGet will retrieve a blank value (empty string).
   DTS_SHORTDATEFORMAT = 0 ; Displays the date in short format. In some locales, it looks like 6/1/05 or 6/1/2005. On older operating systems, a two-digit year might be displayed. This is why DTS_SHORTDATECENTURYFORMAT is the default and not DTS_SHORTDATEFORMAT.
   DTS_LONGDATEFORMAT  = 4 ; Format option  "LongDate". Displays the date in long format. In some locales, it looks like Wednesday, June 01, 2005.
   DTS_SHORTDATECENTURYFORMAT = 12 ; Format option  blank/omitted. Displays the date in short format with four-digit year. In some locales, it looks like 6/1/2005. If the system's version of Comctl32.dll is older than 5.8, this style is not supported and DTS_SHORTDATEFORMAT is automatically substituted. 
   DTS_TIMEFORMAT = 9 ; Format option  "Time". Displays only the time, which in some locales looks like 5:31:42 PM.
   DTS_APPCANPARSE = 16 ; Not yet supported. Allows the owner to parse user input and take necessary action. It enables users to edit within the client area of the control when they press the F2 key. The control sends DTN_USERSTRING notification messages when users are finished.
   DTS_RIGHTALIGN = 32 ; +/-Right. The calendar will drop down on the right side of the control instead of the left.
   WS_BORDER = 8388608
   WS_CHILD = 1073741824
   WS_VISIBLE = 268435456
   ; Handle to dialog
   hinst = dllhinst("")
   Return dllcall(user32,long:"CreateWindowExA",long:512,lpstr:"SysDateTimePick32",lpstr:"DateTime",long:WS_BORDER|WS_CHILD|WS_VISIBLE|DTS_TIMEFORMAT|style,long:startx,long:starty,long:width,long:height,long:handle,long:0,long:hinst,long:0)
#Endfunction

#DefineSubRoutine InitDialogConstants()
   ;DialogprocOptions Constants
   MSG_INIT=0                    ; The one-time initialization
   MSG_TIMER=1                   ; Timer event
   MSG_BUTTONPUSHED=2            ; Pushbutton or Picturebutton
   MSG_RADIOPUSHED=3             ; Radiobutton clicked
   MSG_CHECKBOX=4                ; Checkbox clicked
   MSG_EDITBOX=5                 ; Editbox or Multilinebox
   MSG_FILESELECT=6              ; Filelistbox
   MSG_ITEMSELECT=7              ; Itembox
   MSG_COMBOCHANGE=8             ; Combobox/Droplistbox
   MSG_CALENDAR=9                ; Calendar date change
   MSG_SPINNER=10                ; Spinner number change
   MSG_CLOSEVIA49=11             ; Close clicked (Enabled via DialogProcOptions 1002
   MSG_FILEBOXDOUBLECLICK=12     ; Get double-click message on a FileListBox
   MSG_ITEMBOXDOUBLECLICK=13     ; Get double-click message on an ItemBox
   MSG_COMEVENT=14               ; COMCONTROL Event notification from DialogObject (NOT DialogProcOptions)
   MSG_MENUITEM=15               ; MenuItem selected
   MSG_MENUITEMINIT=16           ; MenuItem initialized
   MSG_RESIZE=17                 ; Dialog resized
   MSG_RVITEMSELROW=18           ; Reportview item select row
   MSG_RVDBLCLICKROW=19          ; Reportview double-click row
   MSG_RVCHECKEDITEM=20          ; Reportview checked/unchecked Item
   MSG_RVITEMTEXT=21             ; Reportview changed text of first column
   MSG_RVHEADER=22               ; Reportview header clicked

   DPO_DISABLESTATE=1000         ; codes -1=GetSetting 0=EnableDialog 1=DisableDialog
   DPO_CHANGEBACKGROUND=1001     ; -1=Get Current otherise bitmap or color string
   DPO_CHANGESYSMENU=1002        ; -1=Get Current 0=none 1=close 2=close/min 3=close/max 4=close/min/max
   DPO_CHANGETITLE=1003          ; Set/Get Dialog Title - (-1 to get)
   DPO_GETNAME=1004              ; Returns the name associated with a control's number.
   DPO_GETNUMBER=1005            ; Returns the number associated with a control's name.
   DPO_GETCLIENTAREA=1007        ; Returns a space delimited list of the width and height of the client area.

   ;DialogControlState Constants
   DCSTATE_SETFOCUS=1            ; Give Control Focus
   DCSTATE_QUERYSTYLE=2          ; Query control's style
   DCSTATE_ADDSTYLE=3            ; Add control style
   DCSTATE_REMOVESTYLE=4         ; Remove control style
   DCSTATE_GETFOCUS=5            ; Get control that has focus
   DCSTATE_MOVEMOUSEOVER=6       ; Move the mouse over the control

   DCSTYLE_DEFAULT=0             ; Set Default Style
   DCSTYLE_INVISIBLE=1           ; Set Control Invisible
   DCSTYLE_DISABLED=2            ; Set Control Disabled
   DCSTYLE_NOUSERDATA=4          ; Note: Setable via DialogControlState function ONLY SPINNER control only
   DCSTYLE_READONLY=8            ; Sets control to read-only (user cannot type in data) EDITBOX MULTILINEBOX SPINNER
   DCSTYLE_PASSWORD=16           ; Sets 'password mode' where only *'s are displayed EDITBOX
   DCSTYLE_DEFAULTBUTTON=32      ; Sets a button as the default button PUSHBUTTON PICTUREBUTTON
   DCSTYLE_DIGITSONLY=64         ; Set edit box to accept digits only EDITMOX MULTILINEBOX
   DCSTYLE_FLAT=128              ; Makes a 'flat' hyperlink-looking button PUSHBUTTON PICTUREBUTTON
   DCSTYLE_NOADJUST=256          ; Turns off auto-height adjustment  ITEMBOX FILELISTBOX
   DCSTYLE_TEXTCENTER=512        ; Center text in control VARYTEXT STATICTEXT
   DCSTYLE_TEXTRIGHT=1024        ; Flush-Right text in control VARYTEXT STATICTEXT
   DCSTYLE_NOSELCURLEFT=2048     ; No selection, cursor left EDITBOX MULTILINEBOX
   DCSTYLE_NOSELCURRIGHT=4096    ; No selection, cursor right EDITBOX MULTILINEBOX
   DCSTYLE_SHIELD=8192           ; Display Security Shield icon on button (Vista only) PUSHBUTTON PICTUREBUTTON
   DCSTYLE_MENUCHECK=32768       ; Adds a check mark to the left of a menu item MENUITEM
   DCSTYLE_MENURADIO=65536       ; Adds a radio button like dot graphic to the left of a menu item MENUITEM
   DCSTYLE_MENUSEP=131072        ; Separator bar graphic MENUITEM
   DCSTYLE_MENUBREAK=262144      ; Column break MENUBAR
   DCSTYLE_NOHEADER=524288       ; No header bar REPORTVIEW
   DCSTYLE_COLHEADER=1048576     ; First row column header REPORTVIEW
   DCSTYLE_GRIDLINES=2097152     ; Grid lines REPORTVIEW
   DCSTYLE_SELONEROW=4194304     ; Only one row can be selected at a time REPORTVIEW
   DCSTYLE_SELALLROW = 8388608   ; Highlight complete row REPORTVIEW
   DCSTYLE_SORTASC=16777216      ; Ascending sort REPORTVIEW
   DCSTYLE_SORTDESC=33554432     ; Descending sort REPORTVIEW
   DCSTYLE_EDITCOL=67108864      ; Edit first columns text REPORTVIEW
   DCSTYLE_COLCHECKBOX=134217728 ; Add checkbox to first column REPORTVIEW
   DCSTYLE_INSHEADER=268435456   ; Include column header text REPORTVIEW

   ;DialogControlSet / DialogControlGet Constants
   DC_CHECKBOX=1             ; CHECKBOX REPORTVIEW
   DC_RADIOBUTTON=2          ; RADIOBUTTON
   DC_EDITBOX=3              ; EDITBOX MULTILINEBOX
   DC_TITLE=4                ; PICTURE RADIOBUTTON CHECKBOX PICTUREBUTTON VARYTEXT STATICTEXT GROUPBOX PUSHBUTTON MENUITEM
   DC_ITEMBOXCONTENTS=5      ; ITEMBOX FILELISTBOX DROPLISTBOX REPORTVIEW
   DC_ITEMBOXSELECT=6        ; ITEMBOX FILELISTBOX DROPLISTBOX REPORTVIEW
   DC_CALENDAR=7             ; CALENDAR
   DC_SPINNER=8              ; SPINNER
   DC_MULTITABSTOPS=9        ; MULTILINEBOX
   DC_ITEMSCROLLPOS=10       ; ITEMBOX FILELISTBOX
   DC_BACKGROUNDCOLOR=11     ; RADIOBUTTON CHECKBOX VARYTEXT STATICTEXT GROUPBOX PUSHBUTTON ITEMBOX FILELISTBOX DROPLISTBOX SPINNER EDITBOX MULTILINEBOX REPORTVIEW
   DC_PICTUREBITMAP=12       ; PICTURE PICTUREBUTTON
   DC_TEXTCOLOR=13           ; RADIOBUTTON CHECKBOX VARYTEXT STATICTEXT GROUPBOX PUSHBUTTON ITEMBOX FILELISTBOX DROPLISTBOX SPINNER EDITBOX MULTILINEBOX REPORTVIEW
   DC_ITEMBOXADD=14          ; ITEMBOX FILELISTBOX DROPLISTBOX REPORTVIEW
   DC_ITEMBOXREMOVE=15       ; ITEMBOX FILELISTBOX DROPLISTBOX REPORTVIEW
   DC_RADIOVALUE=16          ; RADIOBUTTON
   DC_POSITION=17            ; ALL CONTROLS (Except MENUBAR and MENUITEM)
   DC_MENUNAMES=18           ; ALL CONTROLS
   DC_HANDLE=19              ; ALL CONTROLS (Except MENUBAR and MENUITEM)
   DC_RVCOLHEAD=20           ; REPORTVIEW
   DC_RVCOLWIDTH=21          ; REPORTVIEW
   DC_RVADDCOL=22            ; REPORTVIEW
   DC_RVREMOVECOL=23         ; REPORTVIEW
   DC_RVMATCHCOL=24          ; REPORTVIEW
   DC_RVCANCELEDIT=25        ; REPORTVIEW
   DC_RVCHECKEDROWS=26       ; REPORTVIEW
   DC_RVJUSTIFY=27           ; REPORTVIEW


   ;DialogObject constants
   DLGOBJECT_ADDEVENT=1      ; Call dialog callback when the specified event occurs
   DLGOBJECT_STOPEVENT=2     ; Stop calling dialog callback when an event previously requested with
   DLGOBJECT_GETOBJECT=3     ; Return an object references to the specified control
   DLGOBJECT_GETPICTURE=4    ; Create and return an object reference to a picture object

   ;Return code constants
   RET_DO_CANCEL=0           ; Cancels dialog
   RET_DO_DEFAULT= -1        ; Continue with default processing for control
   RET_DO_NOT_EXIT= -2       ; Do not exit the dialog
   return
#EndSubroutine
;============================================================
;============================================================
;============================================================


#DefineSubroutine MyDialogCallbackProc(MyDialog_Handle,MyDialog_Message,MyDialog_Name,MyDialog_EventInfo,MyDialog_ChangeInfo)
    InitDialogConstants()                                   ; Initialize Dialog Constants
   ON_EQUAL = @TRUE                                         ; Initialize variable ON_EQUAL
   switch MyDialog_Message                                  ; Switch based on Dialog Message type
      case MSG_INIT                                         ; Standard Initialization message
         DialogProcOptions(MyDialog_Handle,MSG_BUTTONPUSHED,@TRUE)
         ICC_DATE_CLASS = 256
         InitCommonControls(ICC_DATE_CLASS)

         ; DTS_TIMEFORMAT
         ; Control Coordinates
         startx = 10
         starty = 10
         width = 250
         height = 25
         DTS_TIMEFORMAT = 9
         DTPHandle1 = DateTimeCreate(DTS_TIMEFORMAT,MyDialog_Handle,startx,starty,width,height)

         ; DTS_LONGDATEFORMAT
         ; Control Coordinates
         startx = 10
         starty = 40
         width = 250
         height = 25
         DTS_LONGDATEFORMAT = 4
         DTPHandle2 = DateTimeCreate(DTS_LONGDATEFORMAT,MyDialog_Handle,startx,starty,width,height)
         return(RET_DO_NOT_EXIT)

     case MSG_BUTTONPUSHED
        if MyDialog_Name == "PushButton_OK"                ; OK

               ; Get Value of datetime control
               DTM_FIRST = 4096
               DTM_GETSYSTEMTIME = DTM_FIRST + 1
               SystemTime = BinaryAlloc(16)
               BinaryEodSet(SystemTime,16)
               DllCall(DirWindows(1):"user32.dll",long:"SendMessageA",long:DTPHandle1,long:DTM_GETSYSTEMTIME,long:0,lpbinary:SystemTime)
               year   = BinaryPeek2(SystemTime,0)
               month  = StrFixLeft(BinaryPeek2(SystemTime,2),0,2)
               day    = StrFixLeft(BinaryPeek2(SystemTime,6),0,2)
               hour   = StrFixLeft(BinaryPeek2(SystemTime,8),0,2)
               minute = StrFixLeft(BinaryPeek2(SystemTime,10),0,2)
               second = StrFixLeft(BinaryPeek2(SystemTime,12),0,2)
               GlobalTime = hour:':':minute:':':second
               
               BinaryEodSet(SystemTime,16)
               DllCall(DirWindows(1):"user32.dll",long:"SendMessageA",long:DTPHandle2,long:DTM_GETSYSTEMTIME,long:0,lpbinary:SystemTime)
               year   = BinaryPeek2(SystemTime,0)
               month  = StrFixLeft(BinaryPeek2(SystemTime,2),0,2)
               day    = StrFixLeft(BinaryPeek2(SystemTime,6),0,2)
               hour   = StrFixLeft(BinaryPeek2(SystemTime,8),0,2)
               minute = StrFixLeft(BinaryPeek2(SystemTime,10),0,2)
               second = StrFixLeft(BinaryPeek2(SystemTime,12),0,2)
               GlobalDate = year:':':month:':':day
              return(RET_DO_DEFAULT)

        elseif MyDialog_Name == "PushButton_Cancel"        ; Cancel
              return(RET_DO_DEFAULT)

        endif                                              ; MyDialog_Name
        return(RET_DO_CANCEL)

   endswitch                                                ; MyDialog_Message
   return(RET_DO_DEFAULT)
#EndSubroutine                                              ; End of Dialog Callback MyDialogCallbackProc

;============================================================
;============================================================
;============================================================
RETURN




Deana F.
Technical Support
Wilson WindowWare Inc.

JTaylor

Appreciate the code but as I mentioned, I implemented this as part of the Extender I posted some time back so all I have to do is stuff like the following...but lose the events and such things like native controls have.  Again, I can't help thinking MANY MANY folks would like such a control.

Code (winbatch) Select
  ca_JTH_event_begin_date  = dtCreateDateTime(JTH_Handle,405,45,145,25,0)
  ca_JTH_event_begin_time  = dtCreateDateTime(JTH_Handle,622,45,145,25,0)

  form_date = "yyyy-MM-dd"
  form_time = "HH:mm"
  dtFormatDateTime(ca_JTH_event_begin_date ,form_date)
  dtFormatDateTime(ca_JTH_event_begin_time ,form_time)

  event_begin_date  = dtGetDateTime(ca_JTH_event_begin_date , -1)             
  event_begin_time  = dtGetDateTime(ca_JTH_event_begin_time , -1)             

  dtSetDateTime(ca_JTH_event_begin_date ,event_begin_date)
  dtSetDateTime(ca_JTH_event_begin_time ,event_begin_time)

Deana

Again, we appreciate the request. Developers are aware of this request.

Maybe in the meanwhile, you would be willing to share your extender as a Third Party Extender. http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/tsleft.web+WIL~Extenders/_Third~Party~Extenders

Post the Extender here and I will move to the tech database.
Deana F.
Technical Support
Wilson WindowWare Inc.


Deana

Quote from: stanl on March 06, 2014, 02:49:10 PM
There is always.... http://msdn.microsoft.com/en-us/library/system.windows.forms.datetimepicker(v=vs.110).aspx

Yes the dotNet code would look something like this:

Code (winbatch) Select

;***************************************************************************
;**   Use a Windows .Net Form with a DateTimePicker Control
;**
;** Purpose: Accept DateTimePicker Input
;** Inputs:
;** Outputs: Results written to screen
;** Reference:
;**       REQUIRES WinBatch 2013A or newer
;**
;** Developer: Deana Falk 2014.03.06
;***************************************************************************
If Version( )< '2013A'
   Pause('Notice', 'Need 2013A or Newer Version of WinBatch')
   Exit
EndIf

_True = ObjectType( 'BOOL', -1 )
_False = ObjectType( 'BOOL', 0 )

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; ObjectClrOption - Load assembly into the WinBatch process
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ObjectClrOption( 'use', 'System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' )
ObjectClrOption( 'use', 'System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' )

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; ObjectClrNew - Create a class implemented by a managed assembly.
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Form1 = ObjectClrNew('System.Windows.Forms.Form')
Button1 =  ObjectClrNew('System.Windows.Forms.Button')
DateTimePicker1 =  ObjectClrNew('System.Windows.Forms.DateTimePicker')
; Enumerations
enumStartPos = ObjectClrNew('System.Windows.Forms.FormStartPosition')
enumDialogResult = ObjectClrNew( 'System.Windows.Forms.DialogResult')


;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Define Form1
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Set the caption bar text of the form.
Form1.Text = 'DateTimePicker1'
; Set the start position of the form to the center of the screen.
Form1.StartPosition = ObjectClrType( 'System.Windows.Forms.FormStartPosition', enumStartPos.CenterScreen ) ;CenterScreen
; Set the accept button of the form to button1.
Form1.AcceptButton = button1
; Obtain the Width of the form for later use with controls
formwidth = Form1.Width-15


;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Define DateTimePicker1
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Position  DateTimePicker1
DateTimePicker1.Location = ObjectClrNew('System.Drawing.Point',0,10)
; Define width to width of the form
DateTimePicker1.Width = formwidth
; Specify tabindex
DateTimePicker1.TabIndex  = 0
;Customize format
enumDateTimePickerFormat = ObjectClrNew( 'System.Windows.Forms.DateTimePickerFormat' ) 
DateTimePicker1.Format = objectClrType('System.Windows.Forms.DateTimePickerFormat',enumDateTimePickerFormat.Custom )
DateTimePicker1.CustomFormat = "yyyy:MM:dd:HH:mm:ss"
;DateTimePicker1.CustomFormat = "MMMM dd, yyyy - dddd"


;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Define Button1
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Set the position of the button on the form.
button1.Location = ObjectClrNew('System.Drawing.Point',100,110)
; Set the text of button1 to 'OK'.
button1.Text = 'OK'
; Specify tabindex
button1.TabIndex  = 1
; IMPORTANT: The dialog box can be assigned one of the values of the DialogResult enumeration by assigning it to the DialogResult property of a Button on the form.
button1.DialogResult = ObjectClrType( 'System.Windows.Forms.DialogResult', enumDialogResult.OK )

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Add Controls
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Form1.Controls.Add(Button1)
Form1.Controls.Add(DateTimePicker1)

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Display the form as a modal dialog box.
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ret = Form1.ShowDialog()

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Get Results
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Pause( 'Text of DateTimePicker1', DateTimePicker1.Text )


;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Clean up
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Button1.Dispose()
DateTimePicker1.Dispose()
Form1.Dispose()

Exit


[Modified date time format to: yyyy:MM:dd:HH:mm:ss]
Deana F.
Technical Support
Wilson WindowWare Inc.

JTaylor

Thought it was already there but no big deal to post again...Hopefully someone will find it useful.

This was mostly was an experiment to see if I could do it.  I did a little C programming in the late 80's but that was pretty much it until this project.

Keep in mind that this has a LOT of functions.  If you have the latest version of WinBatch probably not a big deal.  If you use it with an older version and other extenders you might hit the limit.  I broke things out in their own DLLS but the forum file size limitation won't let me post everything so will wait until someone asks.  Based on previous interest shown, probably won't be an issue  :)

Some of the options are useful.  Others not so much.   The Tabbed Dialog code posted the other day has better results than what I posted unless one doesn't need to change background colors.    The main things I have found useful, so far, from what I did here are the Date/Time Picker, the EditBox option to set length limit and some of the ListView options used against the native ReportView as it uses a numbered index for addressing cells.

Happy to provide the source to anyone who is willing to advance the project and clean things up further (seems like I keep finding errors in my Help file) and make it freely available.   Would love even more for some of this to be added to WinBatch.   Took me a couple of weeks to put this together so probably a couple of hours for someone who knows what they are doing.   The things I think that would have fairly wide appeal are

Date/Time Picker
Editbox character length option
IP Address Box
Additional Report View/Item ListBox Capabilities (ImageList options might need to be a part of this)
StatusBar
Tabs
Maybe Tooltips.

In any event, for what it might be worth...here it is.

Jim







Deana

Deana F.
Technical Support
Wilson WindowWare Inc.

JTaylor

Will do.   I'll just wait and see if there are any questions before bothering you with such things.  They can find me here for now as my email is listed under my profile...at least until I annoy you too much and you kick me out  ;)

Jim

Deana

Quote from: JTaylor on March 07, 2014, 09:16:40 AM
Based on previous interest shown, probably won't be an issue.

Well honestly, I know you believe there is a big demand for these types of controls. Maybe the demand for the extender might also highlight demand (or lack thereof)  for built in support.
Deana F.
Technical Support
Wilson WindowWare Inc.

stanl

Quote from: Deana on March 06, 2014, 03:14:52 PM

Yes the dotNet code would look something like this:

I think your format should be "yyyy:MM:dd:HH:mm:ss"

Deana

Quote from: stanl on March 07, 2014, 12:56:49 PM
Quote from: Deana on March 06, 2014, 03:14:52 PM

Yes the dotNet code would look something like this:

I think your format should be "yyyy:MM:dd:HH:mm:ss"

Thanks Stan. I have modified the code accordingly.
Deana F.
Technical Support
Wilson WindowWare Inc.

JTaylor

QuoteWell honestly, I know you believe there is a big demand for these types of controls. Maybe the demand for the extender might also highlight demand (or lack thereof)  for built in support.

It is a very curious thing to me....I have found very little "demand" for anything on this forum over the years.   I have thoughts as to why that is but will keep them to myself.  Not sure I have ever heard more than 3 people speak up in support of anything at any one time and have been around since 1996, at least that is when I started using WinBatch.   I know you all claim to know what people want but, as I've mentioned before, I don't know how you do since I have never heard you ask.   Maybe you ask everyone but me since I'm always telling you what I want  :)

Obviously my statements would fall into the context of dialog users when I speak of such desires on the part of others.   I interact with some heavy users of dialogs because of the WBRAD application I distribute and, interestingly enough, most of those never participate on this board and the others rarely to almost never.   Also, some of the reasoning I use to make such statements are from remembering questions on the board over the years.   I know there are those who often (too strong?) ask questions about masking fields...especially how to use spinners to create time and date fields.  I know there is interest regarding enhancements to the ReportView as *that* did generate some discussion/requests but was shutdown pretty fast.   I know there have been a number of requests for tabbed dialogs over the years.   Tooltips are fairly popular.   More event-based options for various controls.  How to implement statusbars,  Keypress events and the list goes on.   These are all things that have been repeatedly asked about and, yes, there are ways to do some (all?) of these with varying levels of success but it is nice when one doesn't have to go and buy ActiveX controls or go to great lengths insuring users have all the necessary DLLs on their machines and other such things.   

Some of this stuff is fairly simple, as far as I can tell...me implementing it says a lot so I am always left wondering why it isn't there already.   I guess it all ends up being the philosophy of the company and we all tend to think everyone should do things like we do.  I distribute a number of applications and utilities and if one of my users ask for something that fits into the purpose of the application, with rare exceptions, I add that feature immediately.  Not unusual for it to be ready by the next day if not that same day.   Basically I have to look for reasons to *not* implement something rather than reasons why I should.  If our roles were reversed and you asked for a Date/Time Picker, because for some reason it wasn't there (actually you wouldn't have to ask because it would already be there because someone asked how to use a spinner to create a date/time field years ago) , you would probably be able to use it by Monday or sooner...maybe even this evening.  That is why you find me a bit annoying at times...I operate from a completely different mode of reference than you all appear to do and your approach doesn't make sense to me.  I would never make a user spend hundreds of dollars and countless hours for a solution that would take 15 minutes on my part and, especially, for something that should already be in place.   I wouldn't even do it if it took me days.

I guess in the future for these discussions I will try to say it more like "one or more people who use dialogs would probably find such-and-such useful."    Since, as a group, with rare exceptions, no one ever asks/demands anything.

...and before you say it...I do appreciate all you all do and I think you do a GREAT job in practically everything you do (radio-buttons and making the Dialog file extension the same as Scripts being the main exceptions) and I KNOW you hear people when they ask for stuff.  You have implemented a number of things I have asked for and it is GREATLY appreciated.   I am one of your biggest fans and recommend WinBatch all over the place.

...but I really am curious how you all "know" what people want....maybe it is that crystal ball???

Jim

Deana

Jim,

There is a lot we need to consider when choosing where to focus our development; to best fit the LARGEST number of users. We also need to consider the intent of our software. WinBatch is not intended as a full blown application programming language, it is a Windows Scripting language. Typically scripting languages are intended to be very fast to pick up and author programs in. This generally implies relatively simple syntax and semantics.

Unfortunately the current Dialog implementation has been around for a very long time and has been supported on many Windows platforms. It is this fact that makes it difficult to include new controls without careful consideration. We are currently focusing on implementing dotNet in WinBatch which may someday completely replace the current Dialogs. So there just may be some light at the end of this tunnel.

We have included many of your own personal requests in the Dialog implementation. I would also like to point out that I often take time to write DllCalls to help work around any dialog implementations. Sounds like you took the best approach and created your own Extender dll to handle some of the other non implemented items.

Just to be clear.... We log all user requests. The number of unique requests increases the likelihood of implementation.

I hope this helps ease your mind and clarifies our standpoint.

We hope you continue to be "one of your biggest fans and recommend WinBatch all over the place".

Deana F.
Technical Support
Wilson WindowWare Inc.

JTaylor

I understand and I really do appreciate the quality of what you all do.

Jim

stanl

Quote from: Deana on March 07, 2014, 03:36:18 PM
We are currently focusing on implementing dotNet in WinBatch which may someday completely replace the current Dialogs. So there just may be some light at the end of this tunnel.


That sounds like a plan. Going back to the DatePicker CLR code.  Is there any way to return the datePicker formatted value without having to show the windows form?

Deana

Quote from: stanl on March 08, 2014, 04:13:54 AM
That sounds like a plan. Going back to the DatePicker CLR code.  Is there any way to return the datePicker formatted value without having to show the windows form?

For what purpose exactly? If it is to simply format a date, maybe look into using the DateTime Structure in dotNet?

Code (winbatch) Select
;Convert WIL YMDHMS to a DateTime Object
arrYMDHMS = Arrayize( TimeYmdHms(), ":" )
objYear = ObjectClrNew( 'System.Int32', arrYMDHMS[0] )
objMonth = ObjectClrNew( 'System.Int32', arrYMDHMS[1] )
objDay = ObjectClrNew( 'System.Int32', arrYMDHMS[2] )
objHour = ObjectClrNew( 'System.Int32', arrYMDHMS[3] )
objMin = ObjectClrNew( 'System.Int32', arrYMDHMS[4] )
objSec = ObjectClrNew( 'System.Int32', arrYMDHMS[5] )
objDT = ObjectClrNew( 'System.DateTime', objYear, objMonth, objDay, objHour, objMin, objSec )


strDate = objDT.ToLongDateString
strDate = strDate:@crlf:objDT.ToLongTimeString
strDate = strDate:@crlf:objDT.ToUniversalTime:"(UTC)"
strDate = strDate:@crlf:objDT.ToString("MMMM dd, yyyy hh:MM:ss tt")
If objDT.IsDaylightSavingTime ;Indicates whether this instance of DateTime is within the daylight saving time range for the current time zone.
    strDate = strDate :@crlf: "Currently daylight saving time."
Endif
Pause( 'About Today', strDate )
Exit
Deana F.
Technical Support
Wilson WindowWare Inc.