Detect index of selection from droplistbox

Started by stevengraff, April 10, 2014, 10:21:46 AM

Previous topic - Next topic

stevengraff

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

Deana

Deana F.
Technical Support
Wilson WindowWare Inc.

JTaylor


stevengraff

Jim, there's a comcontrol.zip file there, but inside the zip I see no help or doc or instructions. You know?

JTaylor

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

JTaylor

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

kdmoyers

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.
Code  winbatch Select
itemindex = itemextract(-1,item,' '))


this gives you an index number without affecting what the user sees.
-Kirby
The mind is everything; What you think, you become.

stevengraff


JTaylor

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

stevengraff

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).

JTaylor

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

stevengraff


JTaylor

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

JTaylor

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

....IFICantBYTE

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:

Code  winbatch Select
;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")
Regards,
....IFICantBYTE

Nothing sucks more than that moment during an argument when you realize you're wrong. :)

Deana

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.
Deana F.
Technical Support
Wilson WindowWare Inc.

Deana

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:

Code  winbatch Select
;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
Deana F.
Technical Support
Wilson WindowWare Inc.

Deana

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
Deana F.
Technical Support
Wilson WindowWare Inc.

JTaylor


stevengraff

(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)

JTaylor

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

Deana

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
Deana F.
Technical Support
Wilson WindowWare Inc.

stevengraff

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.

Deana

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.

Code  winbatch Select
ctrhandle = DllCall(StrCat(DirWindows(1),'user32.dll'),long:'GetDlgItem',long:dialog_handle,long:ctrlnum+99)
Deana F.
Technical Support
Wilson WindowWare Inc.

stevengraff

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.

stevengraff

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!

Deana

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.
Deana F.
Technical Support
Wilson WindowWare Inc.

stevengraff

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.

Deana

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.
Deana F.
Technical Support
Wilson WindowWare Inc.

stevengraff

Thanks!

The following works real well:

   AddExtender("wwctl44i.dll")
   window1 = dllHwnd( winCaption )
   ControlHandle=cWndByID(window1,112)
   position = cbGetCurSel(ControlHandle)
   message("Position", position)


stevengraff

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)

stevengraff

OK; this:

   sbHandle = sbCreateStatusBar(DlgHandle,1,0)
   sbSetText(sbHandle,0,"Playing with ToolTips... maybe over-kill?")

works.

stevengraff

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.

JTaylor

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

JTaylor

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