Is there any way to find out precisely which item a user has clicked on in a droplistbox?
In my script, it's possible for there to be non-unique items on the list, and it would help to know whether the Marsha Adams selected by the user was the Marsha Adams in the first, 3rd, or 9th position on the list. Or do I need to modify my list so that each item shows an "index:"
1. Marsha Adams
2. Bob Jones
3. Mike Wilson
4. Marsha Adams
5. Tim Smith
Maybe check out this code sample: http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/tsleft.web+WinBatch/Dialog~Editor/Dialog~Editor~version~6.2+~Index~of~Droplistbox~Selection~.txt
If that doesn't do what you need the ComControl Extender might be useful...
The Dialog Control Extender is located here: http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/tsleft.web+WIL~Extenders/_Third~Party~Extenders/Dialog~Controls~Extender+Dialog~Controls~Extender.txt
Jim
Jim, there's a comcontrol.zip file there, but inside the zip I see no help or doc or instructions. You know?
Ooops!!! Wonder how that happened. Sorry.
Here it is...
If you find any errors please let me know...amazing how many times I can go through that and still miss stuff.
Guess this probably tells me how many people have looked at it ;)
Jim
Hmmmmmmmm....odd....after suggesting this I'm not seeing a function for getting that you wanted. You can check the selection state of an item but not seeing one for getting the index of the selected item. I'll do some digging as that seems odd to me. Maybe I was think of the ListView/ReportView options.
Jim
Quote from: stevengraff on April 10, 2014, 10:21:46 AM
Is there any way to find out precisely which item a user has clicked on in a droplistbox?
yes, and it's pretty easy.
before you display your list, for each element, append a hundred spaces and an index number (1,2,3,4...)
when this list displays, the index number will not be visible, it's so far to the right it gets clipped off.
when you get the selected item back, simply treat it like a space delimited list and take the last element of it.
itemindex = itemextract(-1,item,' '))
this gives you an index number without affecting what the user sees.
-Kirby
That's pretty clever.
Keep in mind, if you need the selected value, you must keep track of the original value because if you want to use DialogControlSet() it won't work unless you use the the "real" value in the list.
Jim
Yeah, that's a pain.
One question, probably not related to anyone's deficiency (other than my own)...
when I try to open your (or anyone else's) .chm file, I see the tree structure on the left (books and pages, etc.) but the pane on the right is completely blank. Am I just missing a dll or something? (I'm using server '08).
Do you have it local or on a network drive? I know there were some security measures implemented a few years ago that affected CHM files and trying to read them from network drives.
Jim
Yes, I was trying from a network location, plus... see: http://www.xyplorer.com/faq-topic.php?id=chm
Probably should just delete this but then my next post won't make sense so......
Was thinking there was another thing too but was in the middle of something and couldn't recall.
Also, just realized that you were wanting the index of a droplistbox...I've been thinking ItemListBox. In any event, I spent the afternoon and evening implementing a function to retrieve a Tab-Delimited list of indexes of selected items in an ItemListBox. Sure wish I knew C as it is about a 2-3 minute job but took me 3-4 hours so I'm posting it even if it isn't helpful :)
All this variable type stuff drives me crazy...guess WinBatch has made me ignorant and lazy...or maybe I'm ignorant because I'm lazy ;)
Jim
Okay...I'm worse than a snapping turtle who has ahold of something...
This version has two functions for getting and setting the current index selection in a DropListBox.
Deana, please replace the one in the Tech DB with this one. Also, please put the CHM file in the zip file. The size limits here wouldn't let me combine them. Thanks.
Jim
I'm a bit late to this party, but here is an example of how to get the index of the selected item in a dialog droplist (Combo) box control using a DllCall in a UDF:
;Make an example list to use in the ComboBox later:
dlVariable1 = "Apples":@TAB:"Apples":@TAB:"Grapes":@TAB:"Pears":@TAB:"Bananas":@TAB:"Apples":@TAB:"Grapes"
;The UDF
;-----------------------------------------------------------------------------------------------------------------------------------------;
;CBGet : Get info about ComboBox items v1.0 ....IFICantBYTE ;
;-----------------------------------------------------------------------------------------------------------------------------------------;
;hComboCtrl : Handle to the Combo (DropList) Control ;
;GetWhat : Use 1 to get the total number of items, anything else to get the index number of the selected item (in a zero based list) ;
;-----------------------------------------------------------------------------------------------------------------------------------------;
;Returns : Returns the total number of items, or the selected item's index number, depending on the request in the GetWhat parameter ;
;-----------------------------------------------------------------------------------------------------------------------------------------;
#Definefunction CBGet(hComboCtrl,GetWhat)
User32=StrCat(DirWindows(1),"user32.dll")
CB_GETCOUNT = 326;Gets the number of items in the list box of a combo box.
CB_GETCURSEL = 327;Gets the index of the currently selected item, if any, in the list box of a combo box.
If GetWhat == 1
CB_Msg = CB_GETCOUNT
Else
CB_Msg = CB_GETCURSEL
EndIf
Return DllCall(user32,long:"SendMessageA",long:hComboCtrl,long:CB_Msg,long:0,long:0)
#Endfunction
;##########################################################################################################################################
;TEST DIALOG BELOW:
;============================================================
;============================================================
;============================================================
#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
;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
;============================================================
;============================================================
;============================================================
InitDialogConstants() ; Initialize Dialog Constants (need only be done once usually)
#DefineSubroutine MyDialogCallbackProc(MyDialog_Handle,MyDialog_Message,MyDialog_Name,MyDialog_EventInfo,MyDialog_ChangeInfo)
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_TIMER,1000)
; DialogProcOptions(MyDialog_Handle,MSG_BUTTONPUSHED,@TRUE)
DialogProcOptions(MyDialog_Handle,MSG_COMBOCHANGE,@TRUE)
hCombo = DialogControlGet(MyDialog_Handle,"DropListBox_1",19); get the windows handle of the DropList (Combo) control in the dialog
return(RET_DO_DEFAULT)
; case MSG_BUTTONPUSHED
; if MyDialog_Name == "PushButton_OK" ; OK
; return(RET_DO_DEFAULT)
; elseif MyDialog_Name == "PushButton_Cancel" ; Cancel
; return(RET_DO_DEFAULT)
; endif ; MyDialog_Name
; return(RET_DO_DEFAULT)
case MSG_COMBOCHANGE ; ID "DropListBox_1" dlVariable1
TotalItems = CBGet(hCombo,1);Call the UDF to get the total number of items in the Combo (DropList) Box control
SelectedItemIndex = CBGet(hCombo,0);Call the UDF to get the index of the selected item in the Combo control's list
SelectedItemText = DialogControlGet(MyDialog_Handle,"DropListBox_1",6)
Message("Returned result:","There are ":TotalItems:" items in the list.":@CR:"Item 0 (zero) is at the top, and you just selected the item with index number ":SelectedItemIndex:@CR:"which displays the text: ":SelectedItemText)
endswitch ; MyDialog_Message
return(RET_DO_DEFAULT)
#EndSubroutine ; End of Dialog Callback MyDialogCallbackProc
;============================================================
;============================================================
;============================================================
MyDialogFormat=`WWWDLGED,6.2`
MyDialogCaption=`Use the droplist (Combo) box to select an item`
MyDialogX=100
MyDialogY=100
MyDialogWidth=180
MyDialogHeight=167
MyDialogNumControls=003
MyDialogProcedure=`MyDialogCallbackProc`
MyDialogFont=`DEFAULT`
MyDialogTextColor=`DEFAULT`
MyDialogBackground=`DEFAULT,DEFAULT`
MyDialogConfig=0
MyDialog001=`013,145,036,012,PUSHBUTTON,"PushButton_OK",DEFAULT,"OK",1,10,32,DEFAULT,DEFAULT,DEFAULT`
MyDialog002=`131,145,036,012,PUSHBUTTON,"PushButton_Cancel",DEFAULT,"Cancel",0,20,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
MyDialog003=`013,019,148,118,DROPLISTBOX,"DropListBox_1",dlVariable1,DEFAULT,DEFAULT,30,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
ButtonPushed=Dialog("MyDialog")
Quote from: stevengraff on April 11, 2014, 11:59:38 AM
Yeah, that's a pain.
One question, probably not related to anyone's deficiency (other than my own)...
when I try to open your (or anyone else's) .chm file, I see the tree structure on the left (books and pages, etc.) but the pane on the right is completely blank. Am I just missing a dll or something? (I'm using server '08).
CHM file downloaded from the internet are blocked. Simply right click on the chm, select properties and click the Unblock button.
Quote from: ....IFICantBYTE on April 13, 2014, 12:30:15 AM
I'm a bit late to this party, but here is an example of how to get the index of the selected item in a dialog droplist (Combo) box control using a DllCall in a UDF:
;Make an example list to use in the ComboBox later:
dlVariable1 = "Apples":@TAB:"Apples":@TAB:"Grapes":@TAB:"Pears":@TAB:"Bananas":@TAB:"Apples":@TAB:"Grapes"
;The UDF
;-----------------------------------------------------------------------------------------------------------------------------------------;
;CBGet : Get info about ComboBox items v1.0 ....IFICantBYTE ;
;-----------------------------------------------------------------------------------------------------------------------------------------;
;hComboCtrl : Handle to the Combo (DropList) Control ;
;GetWhat : Use 1 to get the total number of items, anything else to get the index number of the selected item (in a zero based list) ;
;-----------------------------------------------------------------------------------------------------------------------------------------;
;Returns : Returns the total number of items, or the selected item's index number, depending on the request in the GetWhat parameter ;
;-----------------------------------------------------------------------------------------------------------------------------------------;
#Definefunction CBGet(hComboCtrl,GetWhat)
User32=StrCat(DirWindows(1),"user32.dll")
CB_GETCOUNT = 326;Gets the number of items in the list box of a combo box.
CB_GETCURSEL = 327;Gets the index of the currently selected item, if any, in the list box of a combo box.
If GetWhat == 1
CB_Msg = CB_GETCOUNT
Else
CB_Msg = CB_GETCURSEL
EndIf
Return DllCall(user32,long:"SendMessageA",long:hComboCtrl,long:CB_Msg,long:0,long:0)
#Endfunction
;##########################################################################################################################################
;TEST DIALOG BELOW:
;============================================================
;============================================================
;============================================================
#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
;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
;============================================================
;============================================================
;============================================================
InitDialogConstants() ; Initialize Dialog Constants (need only be done once usually)
#DefineSubroutine MyDialogCallbackProc(MyDialog_Handle,MyDialog_Message,MyDialog_Name,MyDialog_EventInfo,MyDialog_ChangeInfo)
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_TIMER,1000)
; DialogProcOptions(MyDialog_Handle,MSG_BUTTONPUSHED,@TRUE)
DialogProcOptions(MyDialog_Handle,MSG_COMBOCHANGE,@TRUE)
hCombo = DialogControlGet(MyDialog_Handle,"DropListBox_1",19); get the windows handle of the DropList (Combo) control in the dialog
return(RET_DO_DEFAULT)
; case MSG_BUTTONPUSHED
; if MyDialog_Name == "PushButton_OK" ; OK
; return(RET_DO_DEFAULT)
; elseif MyDialog_Name == "PushButton_Cancel" ; Cancel
; return(RET_DO_DEFAULT)
; endif ; MyDialog_Name
; return(RET_DO_DEFAULT)
case MSG_COMBOCHANGE ; ID "DropListBox_1" dlVariable1
TotalItems = CBGet(hCombo,1);Call the UDF to get the total number of items in the Combo (DropList) Box control
SelectedItemIndex = CBGet(hCombo,0);Call the UDF to get the index of the selected item in the Combo control's list
SelectedItemText = DialogControlGet(MyDialog_Handle,"DropListBox_1",6)
Message("Returned result:","There are ":TotalItems:" items in the list.":@CR:"Item 0 (zero) is at the top, and you just selected the item with index number ":SelectedItemIndex:@CR:"which displays the text: ":SelectedItemText)
endswitch ; MyDialog_Message
return(RET_DO_DEFAULT)
#EndSubroutine ; End of Dialog Callback MyDialogCallbackProc
;============================================================
;============================================================
;============================================================
MyDialogFormat=`WWWDLGED,6.2`
MyDialogCaption=`Use the droplist (Combo) box to select an item`
MyDialogX=100
MyDialogY=100
MyDialogWidth=180
MyDialogHeight=167
MyDialogNumControls=003
MyDialogProcedure=`MyDialogCallbackProc`
MyDialogFont=`DEFAULT`
MyDialogTextColor=`DEFAULT`
MyDialogBackground=`DEFAULT,DEFAULT`
MyDialogConfig=0
MyDialog001=`013,145,036,012,PUSHBUTTON,"PushButton_OK",DEFAULT,"OK",1,10,32,DEFAULT,DEFAULT,DEFAULT`
MyDialog002=`131,145,036,012,PUSHBUTTON,"PushButton_Cancel",DEFAULT,"Cancel",0,20,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
MyDialog003=`013,019,148,118,DROPLISTBOX,"DropListBox_1",dlVariable1,DEFAULT,DEFAULT,30,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
ButtonPushed=Dialog("MyDialog")
Thanks for sharing the User Defined Function solution. Posted to the tech database: http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/tsleft.web+WinBatch/Dialog~Editor/Dialog~Editor~version~6.2+~Index~of~Droplistbox~Selection~.txt
Quote from: JTaylor on April 11, 2014, 09:04:05 PM
Okay...I'm worse than a snapping turtle who has ahold of something...
This version has two functions for getting and setting the current index selection in a DropListBox.
Deana, please replace the one in the Tech DB with this one. Also, please put the CHM file in the zip file. The size limits here wouldn't let me combine them. Thanks.
Jim
Jim,
Updated the Dialog Control Extender Extender here: http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/tsleft.web+WIL~Extenders/_Third~Party~Extenders
Thanks.
Jim
(Sorry for letting this stew so long...)
Jim, your extender utilizes, as per your help file:
"All the functions will use the ControlHandle for whatever control with which you are working. This can be obtained via DialogControlGet() similar to the following:
ControlHandle = DialogControlGet(RV_Handle,"rv_RV_grid",19)"
Safe to assume there's no doing this with older versions of WinBatch? (i.e. 2008-B)
I'm going on memory here so someone may need to correct me....
The controlhandle would be calculated starting at 100 (maybe 101 but I think 100) and then counting by one using the Tab order of the controls.
Jim
Quote from: stevengraff on April 24, 2014, 02:32:20 PM
(Sorry for letting this stew so long...)
Jim, your extender utilizes, as per your help file:
"All the functions will use the ControlHandle for whatever control with which you are working. This can be obtained via DialogControlGet() similar to the following:
ControlHandle = DialogControlGet(RV_Handle,"rv_RV_grid",19)"
Safe to assume there's no doing this with older versions of WinBatch? (i.e. 2008-B)
Here are a couple of udfs that can be used in older versions:
http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/tsleft.web+WinBatch/Dialog~Editor/Dialog~Editor~version~6.2/Samples+Get~handle~to~WIL~Dialog~Control.txt
Thanks Deana, but the 1005 in ctrlnum = DialogProcOptions( dialog_handle, 1005, ctrlname )+99 is also a 6.2-ism, i.e. not recognized/legal in 2008-B.
Quote from: stevengraff on April 25, 2014, 09:51:13 AM
Thanks Deana, but the 1005 in ctrlnum = DialogProcOptions( dialog_handle, 1005, ctrlname )+99 is also a 6.2-ism, i.e. not recognized/legal in 2008-B.
Okay so you will just pass the control number and add 99.
ctrhandle = DllCall(StrCat(DirWindows(1),'user32.dll'),long:'GetDlgItem',long:dialog_handle,long:ctrlnum+99)
Yeah, I tried that already, but unfortunately I've got a few groupboxes in my dialog, each with a number lower than the droplist control. The droplist control number is 15, and I've tried 110 through 120 so far, but no luck.
Roboscript to the rescue! I found a way to get the handle...
AddExtender("wwctl44i.dll")
window1=cWndByWndSpec("wb0wcdl3","WinBatch",13,100,101,102,103,104,105,109,110,106,107,108,111,112)
ControlHandle=cWndByID(window1,112)
position = cbGetCurSel(ControlHandle)
message("Position", position)
I must add, though, it's quite slow!
Quote from: stevengraff on April 25, 2014, 10:23:33 AM
Yeah, I tried that already, but unfortunately I've got a few groupboxes in my dialog, each with a number lower than the droplist control. The droplist control number is 15, and I've tried 110 through 120 so far, but no luck.
Maybe, launch your dialog then use RoboScripter to determine the actual control id. You will have to hard code the ids. This is one of the reasons the newer dialog format accepts NAMEs.
Well, 2 things:
1. My trick didn't "stick" in the compiled script.
2. It looks like 112, but plugging that number in to Jim's function just returns a "1" regardless of the pick.
Quote from: stevengraff on April 25, 2014, 11:06:57 AM
Roboscript to the rescue! I found a way to get the handle...
AddExtender("wwctl44i.dll")
window1=cWndByWndSpec("wb0wcdl3","WinBatch",13,100,101,102,103,104,105,109,110,106,107,108,111,112)
ControlHandle=cWndByID(window1,112)
position = cbGetCurSel(ControlHandle)
message("Position", position)
I must add, though, it's quite slow!
I suspect it is slow because you are calling cWndByWndSpec. Try using DllHwnd with the dialog caption instead.
Thanks!
The following works real well:
AddExtender("wwctl44i.dll")
window1 = dllHwnd( winCaption )
ControlHandle=cWndByID(window1,112)
position = cbGetCurSel(ControlHandle)
message("Position", position)
Quote from: JTaylor on April 11, 2014, 09:04:05 PM
This version has two functions for getting and setting the current index selection in a DropListBox.
Works great, thanks! Where can I send the donation?
Now that I've started in with your extender, I'm on a roll. ToolTips... very nice.
Tried sbCreateStatusBar though and didn't have any luck. Keep getting "3066 Wrong number of arguments" error:
sbCreateStatusBar(DlgHandle,"This is the status bar",1,0)
OK; this:
sbHandle = sbCreateStatusBar(DlgHandle,1,0)
sbSetText(sbHandle,0,"Playing with ToolTips... maybe over-kill?")
works.
I appreciate that I'm taking the thread somewhat diagonal here, but... can you provide an option for ToolTips such that mousing over a control displays the tip in the status bar instead of a bubble?
And I like being able to change the color, but it looks like an all or nothing deal. If I wanted one ToolTip to stand out from the crowd by being in red, for example, I don't think that's presently possible.
ditto re: ToolTip title.
It isn't control number order but tab order + 99 even though I see that in a lot of postings. Not sure how Group Boxes will affect that though. Maybe open it in Dialog editor and start pressing TAB and counting?
Wish you had an old version WBRAD as it would give you a list. I've since changed it to only use 6.2 dialogs though.
Jim
Oops...didn't see page 2 so my post is a bit late. I'll look at the documentation on the StatusBar to see if it is wrong.
Jim
Sorry...Bad documentation. Intended to get the "Parts" stuff working on the StatusBar but apparently never got back to it. The following should work. Basically ignore/leave off the last parameter. What you did is fine but can save the second step.
sbHandle = sbCreateStatusBar(DlgHandle,"Playing with ToolTips... maybe over-kill?",1)
Jim
Quote from: stevengraff on April 25, 2014, 02:29:18 PM
OK; this:
sbHandle = sbCreateStatusBar(DlgHandle,1,0)
sbSetText(sbHandle,0,"Playing with ToolTips... maybe over-kill?")
works.
I don't see a way to set different colors for different tips. You could use the Title option to make one stand out. The ToolTip Control "controls" what happens with the display so no way to display it to a different place...at least not using that Control. Talk the WinBatch folks into implementing a Mouseover event and then you could make that happen...or if you are ambitious enough you could still make it happen.
Jim
Quote from: stevengraff on April 25, 2014, 02:46:14 PM
I appreciate that I'm taking the thread somewhat diagonal here, but... can you provide an option for ToolTips such that mousing over a control displays the tip in the status bar instead of a bubble?
And I like being able to change the color, but it looks like an all or nothing deal. If I wanted one ToolTip to stand out from the crowd by being in red, for example, I don't think that's presently possible.
ditto re: ToolTip title.
From what I could see the Title option is "all or none" also, no?
Quote from: JTaylor on April 25, 2014, 04:06:44 PM
I don't see a way to set different colors for different tips. You could use the Title option to make one stand out.
You can't change the color but you can have it display an Icon.
Jim
Quote from: stevengraff on April 25, 2014, 04:32:03 PM
From what I could see the Title option is "all or none" also, no?
The result I am seeing is that the Title and Icon appear in every ToolTip on the dialog.
It looks like the 2nd parameter in
ttSetTitle(TTHandle,ControlHandle,Icon,Title)
is not being enforced.
I think I have it straightened out...The main thing is that my examples were bad and my documentation a bit misleading. The trick is to Create the tooltip based on the control and not the dialog. This will allow you to do what you are wanting...that is, doing different things with different tips.
Hopefully I corrected the documentation in all the needed places and the example script should work so looking at that code might help.
I have also tweaked the StatusBar so you can create Parts and set the Text for each part.
Jim
Quote from: stevengraff on April 25, 2014, 05:33:23 PM
The result I am seeing is that the Title and Icon appear in every ToolTip on the dialog.
It looks like the 2nd parameter in
ttSetTitle(TTHandle,ControlHandle,Icon,Title)
is not being enforced.
Quote from: JTaylor on April 25, 2014, 07:32:54 PM
The trick is to Create the tooltip based on the control and not the dialog. This will allow you to do what you are wanting...that is, doing different things with different tips.
Got it!
The interesting thing is that the original way I was doing it (sort of) worked!
===========
sbCreateStatusBar still seems to require 3 parameters. And sbSetText can no longer use 0 as the 2nd parameter.
Arrrggghhhh....thought I had it all sorted....
Yes. The issues is that it was creating one tooltip and the text was being set for the control so all the settings were the same except the text. I figured out we needed to create separate tooltip handles for each control to do what you were wanting. Not sure what is the best way but this allows for individual settings.
Guess I missed the one thing. When I got the Parts working for the statusbar the sbSetText now requires a one-based index so it puts the text in the right part.
Deana, would you please replace what is in the Tech Database?
Jim
Quote from: stevengraff on April 25, 2014, 08:23:05 PM
Got it!
The interesting thing is that the original way I was doing it (sort of) worked!
===========
sbCreateStatusBar still seems to require 3 parameters. And sbSetText can no longer use 0 as the 2nd parameter.
This being my 1st experience with 3rd-party extenders... is there something I need to do to get the Shift-F1 key to bring up the help file?
I'll have to defer to someone else on that question...I assume you are speaking of Studio but I don't use it so not sure how that all works.
I gather that last post fixed everything to this point?
Jim
Yes, thanks, we're looking good!
Quote from: JTaylor on April 26, 2014, 04:38:21 AM
Deana, would you please replace what is in the Tech Database?
Jim
Posted updated extender .zip: http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/tsleft.web+WIL~Extenders/_Third~Party~Extenders/Dialog~Controls~Extender+Dialog~Controls~Extender.txt
Quote from: stevengraff on April 26, 2014, 07:34:06 AM
This being my 1st experience with 3rd-party extenders... is there something I need to do to get the Shift-F1 key to bring up the help file?
Some special setup is required to allow WinBatch Studio to handle this. First you must create a .WEH file that contains all of the indexed functions ( see attached ). Then copy this file here:
C:\Program Files (x86)\WinBatch\System\Help\CommCtrl.weh
Next you will need to modify WSHELP.INI located here: C:\Program Files (x86)\WinBatch\System\Help\WSHELP.INI. Add a new data item to the [WIL} section in the format
QuoteHFx <equals> HelpFileName HelpFileType
In this case in might look something like:
HF40 = CommCtrl.chm 4
You should now be able to right click on any of the CommCtrl (Dialog Control) extender functions in WinBatch studio and do a keyword look up.
Anything I need to do with Help File to make that work well?
Jim
Quote from: JTaylor on April 28, 2014, 09:23:39 AM
Anything I need to do with Help File to make that work well?
Jim
Simply make sure all the functions names are in the Index of the help file.
Most were but found 3-4 that weren't...
Jim
Quote from: JTaylor on April 28, 2014, 09:55:13 AM
Most were but found 3-4 that weren't...
Jim
Okay Jim, I have updated the latest zip file with your CHM file update...
An embarrassment of riches... now two of them pop up for a shift-F1!
Quote from: stevengraff on April 29, 2014, 01:20:37 PM
An embarrassment of riches... now two of them pop up for a shift-F1!
Not exactly sure why this occurs with Jims CHM Help file. Jim maybe try naming the main window of your helpfile to "$global_main".
Hmmmmmmm...may need a bit more clarification on that suggestion. Attached is an image of where I *think* you suggest the change but not certain. It predefines "Main" and doesn't let me change that. I can define a secondary Window. Does this look like what you mean or am I looking in the wrong place? Guess I could fire up Studio and see what happens.
Jim
What I see is that it opens the main help file to the Intro page and then opens a Keyword lookup window with the function info displayed. So it is "sort of" working. I'm trying to see if there is some option to make it open to the topic in the main help file.
Jim
Quote from: JTaylor on April 29, 2014, 01:46:29 PM
Hmmmmmmm...may need a bit more clarification on that suggestion. Attached is an image of where I *think* you suggest the change but not certain. It predefines "Main" and doesn't let me change that. I can define a secondary Window. Does this look like what you mean or am I looking in the wrong place? Guess I could fire up Studio and see what happens.
Jim
This issue has to do with how the help file is loaded from wshelp.dll in WinBatch Studio. Either change your help file project to use the '$global_main' window name or modify 'wshelp.dll' to make an exception for your specific help file. I recommend the former option of naming the help window '$global_main'
Add a new Window Named '$global_main' to your help file project and use that window name instead. Reference: http://msdn.microsoft.com/en-us/library/windows/desktop/ms670148(v=vs.85).aspx
I think I've done what you have suggested. But I don't see any behavior change. Can't say for certain that I am "us[ing] that window name instead" as I don't see any way to reference it other than select it from the Setup page I posted earlier and then "Publish" the project. Sorry if I am being an idiot. I've read through the Help in my Help tool (Help & Manual), that page at Microsoft and did some Googling but still not clear if I've done what you want.
Jim
Quote from: Deana on April 29, 2014, 02:13:09 PM
This issue has to do with how the help file is loaded from wshelp.dll in WinBatch Studio. Either change your help file project to use the '$global_main' window name or modify 'wshelp.dll' to make an exception for your specific help file. I recommend the former option of naming the help window '$global_main'
Add a new Window Named '$global_main' to your help file project and use that window name instead. Reference: http://msdn.microsoft.com/en-us/library/windows/desktop/ms670148(v=vs.85).aspx
Quote from: JTaylor on April 29, 2014, 02:38:54 PM
I think I've done what you have suggested. But I don't see any behavior change. Can't say for certain that I am "us[ing] that window name instead" as I don't see any way to reference it other than select it from the Setup page I posted earlier and then "Publish" the project. Sorry if I am being an idiot. I've read through the Help in my Help tool (Help & Manual), that page at Microsoft and did some Googling but still not clear if I've done what you want.
Jim
Quote from: Deana on April 29, 2014, 02:13:09 PM
This issue has to do with how the help file is loaded from wshelp.dll in WinBatch Studio. Either change your help file project to use the '$global_main' window name or modify 'wshelp.dll' to make an exception for your specific help file. I recommend the former option of naming the help window '$global_main'
Add a new Window Named '$global_main' to your help file project and use that window name instead. Reference: http://msdn.microsoft.com/en-us/library/windows/desktop/ms670148(v=vs.85).aspx
Okay so you added the new window named $global_main', compiled the help file and placed the newly compiled help file in the WinBatch subdirectory then tested from WinBatch Studio? yet you are still getting two windows displayed?
Works for me. Attached is a recompiled version of your help file. Place this in your WinBatch subdirectory then test again.
Odd. I still see the same behavior. Opens the main file at Intro and then opens a second window with a Keyword Search pane and then the selected Topic opens in the other pane. I've attached an image.
So, maybe it isn't an issue with the settings on my Help file publishing??? Not sure what else it could be. Personally it isn't an issue for me but don't want to put something out there that creates problems for anyone or creates extra work for you. Any other suggestions? Any related settings in Studio?
Jim
Went back and double-checked the WEH file and noticed it had the wrong name under LOOKUP. I changed that and now it seems to work so guess I'm doing something wrong in the Publish settings.
Jim