Author Topic: Detect index of selection from droplistbox  (Read 27871 times)

stevengraff

  • Sr. Member
  • ****
  • Posts: 271
Detect index of selection from droplistbox
« 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?

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

  • Wilson WindowWare Tech Support
  • Pundit
  • *****
  • Posts: 1183
  • WinBatch® can do it.
    • WinBatch Tech Support Database
Deana F.
Technical Support
Wilson WindowWare Inc.

JTaylor

  • Pundit
  • *****
  • Posts: 927
    • Data & Stuff Inc.
Re: Detect index of selection from droplistbox
« Reply #2 on: April 10, 2014, 12:42:50 pm »
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

stevengraff

  • Sr. Member
  • ****
  • Posts: 271
Re: Detect index of selection from droplistbox
« Reply #3 on: April 10, 2014, 09:30:33 pm »
Jim, there's a comcontrol.zip file there, but inside the zip I see no help or doc or instructions. You know?

JTaylor

  • Pundit
  • *****
  • Posts: 927
    • Data & Stuff Inc.
Re: Detect index of selection from droplistbox
« Reply #4 on: April 11, 2014, 06:51:37 am »
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

  • Pundit
  • *****
  • Posts: 927
    • Data & Stuff Inc.
Re: Detect index of selection from droplistbox
« Reply #5 on: April 11, 2014, 06:55:58 am »
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

  • Full Member
  • ***
  • Posts: 228
Re: Detect index of selection from droplistbox
« Reply #6 on: April 11, 2014, 06:58:31 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
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

  • Sr. Member
  • ****
  • Posts: 271
Re: Detect index of selection from droplistbox
« Reply #7 on: April 11, 2014, 07:10:58 am »
That's pretty clever.

JTaylor

  • Pundit
  • *****
  • Posts: 927
    • Data & Stuff Inc.
Re: Detect index of selection from droplistbox
« Reply #8 on: April 11, 2014, 07:41:30 am »
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

  • Sr. Member
  • ****
  • Posts: 271
Re: Detect index of selection from droplistbox
« Reply #9 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).

JTaylor

  • Pundit
  • *****
  • Posts: 927
    • Data & Stuff Inc.
Re: Detect index of selection from droplistbox
« Reply #10 on: April 11, 2014, 01:26:06 pm »
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

  • Sr. Member
  • ****
  • Posts: 271
Re: Detect index of selection from droplistbox
« Reply #11 on: April 11, 2014, 01:35:22 pm »
Yes, I was trying from a network location, plus... see: http://www.xyplorer.com/faq-topic.php?id=chm

JTaylor

  • Pundit
  • *****
  • Posts: 927
    • Data & Stuff Inc.
Re: Detect index of selection from droplistbox
« Reply #12 on: April 11, 2014, 07:15:37 pm »
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

  • Pundit
  • *****
  • Posts: 927
    • Data & Stuff Inc.
Re: Detect index of selection from droplistbox
« Reply #13 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

....IFICantBYTE

  • Full Member
  • ***
  • Posts: 120
Re: Detect index of selection from droplistbox
« Reply #14 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
;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

  • Wilson WindowWare Tech Support
  • Pundit
  • *****
  • Posts: 1183
  • WinBatch® can do it.
    • WinBatch Tech Support Database
Re: Detect index of selection from droplistbox
« Reply #15 on: April 14, 2014, 08:47:57 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

  • Wilson WindowWare Tech Support
  • Pundit
  • *****
  • Posts: 1183
  • WinBatch® can do it.
    • WinBatch Tech Support Database
Re: Detect index of selection from droplistbox
« Reply #16 on: April 14, 2014, 08:58:09 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
;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

  • Wilson WindowWare Tech Support
  • Pundit
  • *****
  • Posts: 1183
  • WinBatch® can do it.
    • WinBatch Tech Support Database
Re: Detect index of selection from droplistbox
« Reply #17 on: April 14, 2014, 09:06:10 am »
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

  • Pundit
  • *****
  • Posts: 927
    • Data & Stuff Inc.
Re: Detect index of selection from droplistbox
« Reply #18 on: April 14, 2014, 09:25:03 am »
Thanks.

Jim

stevengraff

  • Sr. Member
  • ****
  • Posts: 271
Re: Detect index of selection from droplistbox
« Reply #19 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)

JTaylor

  • Pundit
  • *****
  • Posts: 927
    • Data & Stuff Inc.
Re: Detect index of selection from droplistbox
« Reply #20 on: April 24, 2014, 09:29:34 pm »
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

  • Wilson WindowWare Tech Support
  • Pundit
  • *****
  • Posts: 1183
  • WinBatch® can do it.
    • WinBatch Tech Support Database
Re: Detect index of selection from droplistbox
« Reply #21 on: April 25, 2014, 08:02:40 am »
(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

  • Sr. Member
  • ****
  • Posts: 271
Re: Detect index of selection from droplistbox
« Reply #22 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.

Deana

  • Wilson WindowWare Tech Support
  • Pundit
  • *****
  • Posts: 1183
  • WinBatch® can do it.
    • WinBatch Tech Support Database
Re: Detect index of selection from droplistbox
« Reply #23 on: April 25, 2014, 10:20:55 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
ctrhandle = DllCall(StrCat(DirWindows(1),'user32.dll'),long:'GetDlgItem',long:dialog_handle,long:ctrlnum+99)
Deana F.
Technical Support
Wilson WindowWare Inc.

stevengraff

  • Sr. Member
  • ****
  • Posts: 271
Re: Detect index of selection from droplistbox
« Reply #24 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.

stevengraff

  • Sr. Member
  • ****
  • Posts: 271
Re: Detect index of selection from droplistbox
« Reply #25 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!

Deana

  • Wilson WindowWare Tech Support
  • Pundit
  • *****
  • Posts: 1183
  • WinBatch® can do it.
    • WinBatch Tech Support Database
Re: Detect index of selection from droplistbox
« Reply #26 on: April 25, 2014, 11:20:40 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

  • Sr. Member
  • ****
  • Posts: 271
Re: Detect index of selection from droplistbox
« Reply #27 on: April 25, 2014, 11:25:05 am »
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

  • Wilson WindowWare Tech Support
  • Pundit
  • *****
  • Posts: 1183
  • WinBatch® can do it.
    • WinBatch Tech Support Database
Re: Detect index of selection from droplistbox
« Reply #28 on: April 25, 2014, 11:33:20 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

  • Sr. Member
  • ****
  • Posts: 271
Re: Detect index of selection from droplistbox
« Reply #29 on: April 25, 2014, 11:48:52 am »
Thanks!

The following works real well:

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


stevengraff

  • Sr. Member
  • ****
  • Posts: 271
Re: Detect index of selection from droplistbox
« Reply #30 on: April 25, 2014, 02:19:57 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

  • Sr. Member
  • ****
  • Posts: 271
Re: Detect index of selection from droplistbox
« Reply #31 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.

stevengraff

  • Sr. Member
  • ****
  • Posts: 271
Re: Detect index of selection from droplistbox
« Reply #32 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.

JTaylor

  • Pundit
  • *****
  • Posts: 927
    • Data & Stuff Inc.
Re: Detect index of selection from droplistbox
« Reply #33 on: April 25, 2014, 03:13:18 pm »
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

  • Pundit
  • *****
  • Posts: 927
    • Data & Stuff Inc.
Re: Detect index of selection from droplistbox
« Reply #34 on: April 25, 2014, 03:17:09 pm »
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