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
Thanks for the input.
For now you can use code that look something like this:
!!!!! UNDEBUGGED !!!!!!
;***************************************************************************
;** 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
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.
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)
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.
There is always.... http://msdn.microsoft.com/en-us/library/system.windows.forms.datetimepicker(v=vs.110).aspx (http://msdn.microsoft.com/en-us/library/system.windows.forms.datetimepicker(v=vs.110).aspx)
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 (http://msdn.microsoft.com/en-us/library/system.windows.forms.datetimepicker(v=vs.110).aspx)
Yes the dotNet code would look something like this:
;***************************************************************************
;** 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]
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
Thanks Jim. Posted it here:
http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/tsleft.web+WIL~Extenders/_Third~Party~Extenders/Dialog~Controls~Extender+Dialog~Controls~Extender.txt
Let me know if you want me to add any contact information or any other details.
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
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.
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"
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.
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
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".
I understand and I really do appreciate the quality of what you all do.
Jim
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?
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?
;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