WinBatch Tech Support Home

Database Search

If you can't find the information using the categories below, post a question over in our WinBatch Tech Support Forum.

TechHome

Samples

Can't find the information you are looking for here? Then leave a message over on our WinBatch Tech Support Forum.

Multiple Dependent Listboxes

;dumb database for this example
database="WA@Seattle@206-123-5678#206-321-3456#206-567-3453"
database=StrCat(database,@TAB,"WA@Tacoma@453-546-3345#453-654-3234#453-554-2346#453-654-5674")
database=StrCat(database,@TAB,"OR@Portland@413-456-4567")
database=StrCat(database,@TAB,"OR@Eugene@413-456-6789")
database=StrCat(database,@TAB,"OR@Medford@567-455-5432")
database=StrCat(database,@TAB,"CA@Sacramento@415-345-6789#415-8766#415-345-7777#415-345-5678")
database=StrCat(database,@TAB,"CA@San Francisco@415-333-5555#415-222-5678")

datacount=ItemCount(database,@TAB)





;============================================================
;============================================================
;============================================================


;Note this callback boilerplate generated bit right-click menu item "Code Blocks"

#DefineSubRoutine MyDialogCallbackProc(MyDialog_Handle,MyDialog_Message,MyDialog_ID,rsvd1,rsvd2)
   ;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 Intcontrol 49)
   MSG_FILEBOXDOUBLECLICK=12 ; Get double-click message on a FileListBox
   MSG_ITEMBOXDOUBLECLICK=13 ; Get double-click message on an ItemBox
   DPO_DISABLESTATE=1000     ; codes -1=GetSetting 0=EnableDialog 1=DisableDialog
   DPO_CHANGEBACKGROUND=1001 ; -1=GetSetting otherise bitmap or color string
   ;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
   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
   ;DialogControlSet / DialogControlGet Constants
   DC_CHECKBOX=1             ; CHECKBOX
   DC_RADIOBUTTON=2          ; RADIOBUTTON
   DC_EDITBOX=3              ; EDITBOX MULTILINEBOX
   DC_TITLE=4                ; PICTURE RADIOBUTTON CHECKBOX PICTUREBUTTON VARYTEXT STATICTEXT GROUPBOX PUSHBUTTON
   DC_ITEMBOXCONTENTS=5      ; ITEMBOX FILELISTBOX DROPLISTBOX
   DC_ITEMBOXSELECT=6        ; ITEMBOX FILELISTBOX DROPLISTBOX
   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
   DC_PICTUREBITMAP=12       ; PICTURE PICTUREBUTTON
   DC_TEXTCOLOR=13           ; RADIOBUTTON CHECKBOX VARYTEXT STATICTEXT GROUPBOX PUSHBUTTON ITEMBOX FIELLISTBOX DROPLISTBOX SPINNER EDITBOX MULTILINEBOX
   DC_ITEMBOXADD=14          ; ITEMBOX FILELISTBOX DROPLISTBOX
   DC_ITEMBOXREMOVE=15       ; ITEMBOX FILELISTBOX DROPLISTBOX


   Switch MyDialog_Message
      Case MSG_INIT
;         DialogProcOptions(MyDialog_Handle,MSG_TIMER,1000)
          DialogProcOptions(MyDialog_Handle,MSG_BUTTONPUSHED,@TRUE)
          DialogProcOptions(MyDialog_Handle,MSG_ITEMSELECT,@TRUE)
          ;load first control with some states
          statelist=""
          oldstate="??"
          For xx=1 To datacount
             dataline=ItemExtract(xx,database,@TAB)
             thisstate=ItemExtract(1,dataline,"@")
             If thisstate==oldstate Then Continue
             oldstate=thisstate
             statelist=StrCat(statelist,thisstate,@TAB)
         Next
         statelist=StrTrim(statelist)
         DialogControlSet(MyDialog_Handle,006,DC_ITEMBOXCONTENTS,statelist)
         DialogControlSet(MyDialog_Handle,007,DC_ITEMBOXCONTENTS,"")
         DialogControlSet(MyDialog_Handle,008,DC_ITEMBOXCONTENTS,"")
        ;disable second 2 select boxes.
         DialogControlState(MyDialog_Handle,007,DCSTATE_ADDSTYLE,DCSTYLE_DISABLED) ; disable city
         DialogControlState(MyDialog_Handle,008,DCSTATE_ADDSTYLE,DCSTYLE_DISABLED) ; disable phone
         ;hit titles for good luck
         DialogControlState(MyDialog_Handle,004,DCSTATE_ADDSTYLE,DCSTYLE_DISABLED) ; disable city
         DialogControlState(MyDialog_Handle,005,DCSTATE_ADDSTYLE,DCSTYLE_DISABLED) ; disable phone
         DaNumber=""

         Return(-1)

     Case MSG_BUTTONPUSHED
        Switch MyDialog_ID
           Case 001    ; OK
              ;make sure a number was picked
              If DaNumber==""
                 Message("Attention","Please select a phone number")
                 Return(-2)
              EndIf
              Return(-1)

           Case 002    ;Cancel . do default processing (i.e. exit)
              Return(-1)

        EndSwitch    ;MyDialog_ID
        Return(-1)      ;  Do default processing

     Case MSG_ITEMSELECT
        Switch MyDialog_ID
           Case 006             ; state       OOOHHH they clicked on a state.
              DaState=DialogControlGet(MyDialog_Handle,006,DC_ITEMBOXSELECT)
              DaState=ItemExtract(1,DaState,@TAB)  ; incase they selected multiple ones
              ;enable city dialog box  & disable phone
               DialogControlState(MyDialog_Handle,007,DCSTATE_REMOVESTYLE,DCSTYLE_DISABLED) ; enable city
               DialogControlState(MyDialog_Handle,008,DCSTATE_ADDSTYLE,DCSTYLE_DISABLED) ; disable phone
               ;hit titles for good luck
               DialogControlState(MyDialog_Handle,004,DCSTATE_REMOVESTYLE,DCSTYLE_DISABLED) ; enable city
               DialogControlState(MyDialog_Handle,005,DCSTATE_ADDSTYLE,DCSTYLE_DISABLED) ; disable phone
               ;clear  phone
               DialogControlSet(MyDialog_Handle,008,DC_ITEMBOXCONTENTS,"")

               ;get list of cities for this state
               citylist=""
                For xx=1 To datacount
                   dataline=ItemExtract(xx,database,@TAB)
                   thisstate=ItemExtract(1,dataline,"@")
                   If thisstate!=DaState Then Continue
                   thiscity=ItemExtract(2,dataline,"@")
                   citylist=StrCat(citylist,thiscity,@TAB)
               Next
               citylist=StrTrim(citylist)
               DialogControlSet(MyDialog_Handle,007,DC_ITEMBOXCONTENTS,citylist)
               DaNumber=""
              Return(-1)

           Case 007             ; city
              DaState=DialogControlGet(MyDialog_Handle,006,DC_ITEMBOXSELECT)
              DaState=ItemExtract(1,DaState,@TAB)  ; incase they selected multiple ones

              DaCity=DialogControlGet(MyDialog_Handle,007,DC_ITEMBOXSELECT)
              DaCity=ItemExtract(1,DaCity,@TAB)  ; incase they selected multiple ones



              ;enable phone dialog box  
               DialogControlState(MyDialog_Handle,008,DCSTATE_REMOVESTYLE,DCSTYLE_DISABLED) ; disable phone
               DialogControlState(MyDialog_Handle,005,DCSTATE_REMOVESTYLE,DCSTYLE_DISABLED) ; disable phone

               ;Find list of phone numbers for this city
               phonelist=""
                For xx=1 To datacount
                   dataline=ItemExtract(xx,database,@TAB)
                   thisstate=ItemExtract(1,dataline,"@")
                   If thisstate!=DaState Then Continue
                   thiscity=ItemExtract(2,dataline,"@")
                   If thiscity!=DaCity Then Continue
                   phonelist=ItemExtract(3,dataline,"@")
                   phonelist=StrReplace(phonelist,"#",@TAB)
                   Break
               Next
               DialogControlSet(MyDialog_Handle,008,DC_ITEMBOXCONTENTS,phonelist)
               If ItemCount(phonelist,@TAB)==1
                  DaNumber=phonelist
               Else
                  DaNumber=""
               EndIf
              Return(-1)

           Case 008
              ;remember selected Phone number
              DaNumber=DialogControlGet(MyDialog_Handle,008,DC_ITEMBOXSELECT)
              DaNumber=ItemExtract(1,DaNumber,@TAB)  ; incase they selected multiple ones

              Return(-1)        ;number

;        endswitch    ;MyDialog_ID
;        return(-1)      ;  Do default processing

   EndSwitch       ; MyDialog_Message
   Return(-1)      ;  Do default processing
#EndSubRoutine      ;End of Dialog Callback MyDialogCallbackProc

;============================================================
;============================================================
;============================================================



MyDialogFormat=`WWWDLGED,6.1`

MyDialogCaption=`Dependent List Box Example`
MyDialogX=200
MyDialogY=200
MyDialogWidth=248
MyDialogHeight=154
MyDialogNumControls=008
MyDialogProcedure=`MyDialogCallbackProc`
MyDialogFont=`DEFAULT`
MyDialogTextColor=`DEFAULT`
MyDialogBackground=`DEFAULT,DEFAULT`
MyDialogConfig=0

MyDialog001=`033,115,036,012,PUSHBUTTON,DEFAULT,"OK",1,1,32,DEFAULT,DEFAULT,DEFAULT`
MyDialog002=`117,115,036,012,PUSHBUTTON,DEFAULT,"Cancel",0,2,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
MyDialog003=`001,023,044,012,STATICTEXT,DEFAULT,"State",DEFAULT,3,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
MyDialog004=`081,023,044,012,STATICTEXT,DEFAULT,"City",DEFAULT,4,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
MyDialog005=`159,023,044,012,STATICTEXT,DEFAULT,"Phone",DEFAULT,5,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
MyDialog006=`001,039,050,058,ITEMBOX,statelist,DEFAULT,DEFAULT,6,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
MyDialog007=`081,039,050,060,ITEMBOX,citylist,DEFAULT,DEFAULT,7,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
MyDialog008=`159,039,050,058,ITEMBOX,phonelist,DEFAULT,DEFAULT,8,DEFAULT,DEFAULT,DEFAULT,DEFAULT`

ButtonPushed=Dialog("MyDialog")

Message(StrCat(DaCity,", ",DaState),DaNumber)



Article ID:   W16423
File Created: 2005:02:18:12:20:28
Last Updated: 2005:02:18:12:20:28