WinBatch® Technical Support Forum

All Things WinBatch => WinBatch => Topic started by: RAK on March 04, 2014, 06:40:05 PM

Title: tabbed dialogs
Post by: RAK on March 04, 2014, 06:40:05 PM
I have seen the article W17396 and love the effect a tabbed dialog could have on solutions.. I see that the range of items in a particular tab are arranged in numeric order. I would like to use this functionality in a current solution I am creating but I imagine a tough time adding elements to a dialog and not having them be in sequence.. Is there any way to use an include statement or some method that could help place new elements for a tab at the end of the appropriate number range for the tab group as they are added? I know I would have to reset the range for each tab as items are added but if that's all it would take - seems certainly worth it.

It also states Microsoft Visual Basic 6.0 Common Controls are required  - they are in my machine - is that the norm? - The article is only a couple of years old.

Thanks!
Title: Re: tabbed dialogs
Post by: JTaylor on March 04, 2014, 09:25:11 PM
Thanks for the post...I think I missed this one somehow.  Maybe the following approach will solve your problem.  A look at the TabInit(), TabHide(), TabShow() functions should explain the main differences.  Plus I changed it to a 6.2 dialog.   Going this route you can use a standard naming convention for your controls and hide/show them using that criteria.  Then the "range" no longer matters.

Code (winbatch) Select

Home_Path = DirScript()
DirChange(Home_Path)
GoSub Load_Routines

Init_Dialog_Constants()
IntControl(49,3,0,0,0)

cDrop = "This is Just a Test"

TabDlgFormat=`WWWDLGED,6.2`

TabDlgCaption=`Winbatch  - Small Tab Strip`
TabDlgX=9999
TabDlgY=9999
TabDlgWidth=262
TabDlgHeight=163
TabDlgNumControls=011
TabDlgProcedure=`TabDlg`
TabDlgFont=`Microsoft Sans Serif|6656|70|34`
TabDlgTextColor=`0|0|0`
TabDlgBackground=`DEFAULT,DEFAULT`
TabDlgConfig=0

TabDlg001=`001,001,258,022,COMCONTROL,"m_co_Tab",DEFAULT,"MSComctlLib.TabStrip.2",DEFAULT,1,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
TabDlg002=`053,057,146,012,STATICTEXT,"s_st_Tab_ParameterControls",DEFAULT,"Parameter Controls",DEFAULT,3,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
TabDlg003=`001,027,258,132,GROUPBOX,"s_gb_Tab_SetSystemParam",DEFAULT,"Set System Parameters",DEFAULT,2,DEFAULT,DEFAULT,DEFAULT,"255|128|64"`
TabDlg004=`043,103,164,042,DROPLISTBOX,"s_dl_Tab_cDrop",cDrop,"Select an Item",DEFAULT,4,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
TabDlg005=`053,057,146,012,STATICTEXT,"u_st_Tab_UserControls",DEFAULT,"User Controls",DEFAULT,6,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
TabDlg006=`001,027,258,132,GROUPBOX,"u_gb_Tab_SetUserParam",DEFAULT,"Set User Parameters",DEFAULT,5,DEFAULT,DEFAULT,DEFAULT,"0|255|0"`
TabDlg007=`053,057,146,012,STATICTEXT,"i_st_Tab_ImageControls",DEFAULT,"Image Controls",DEFAULT,8,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
TabDlg008=`001,027,258,132,GROUPBOX,"i_gb_Tab_SetImageParam",DEFAULT,"Set Image Parameters",DEFAULT,7,DEFAULT,DEFAULT,DEFAULT,"255|0|0"`
TabDlg009=`053,057,146,012,STATICTEXT,"f_st_Tab_FileControls",DEFAULT,"File Controls",DEFAULT,10,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
TabDlg010=`001,027,258,132,GROUPBOX,"f_gb_Tab_SetFileParam",DEFAULT,"Set File Parameters",DEFAULT,9,DEFAULT,DEFAULT,DEFAULT,"255|255|0"`
TabDlg011=`083,073,124,082,CALENDAR,"f_ca_Tab_cCal",cCal,DEFAULT,DEFAULT,11,DEFAULT,DEFAULT`

ButtonPushed=Dialog("TabDlg")


Exit


:Load_Routines


#DefineSubroutine TabInit()

  TabHide()
  oTab.Tabs.Clear()
  oTab.MultiRow = 1
  oTab.Tabs.Add(1,"s_Tab1","System    ",)
  oTab.Tabs.Add(2,"u_Tab2","User      ",)
  oTab.Tabs.Add(3,"i_Tab3","Images    ",)
  oTab.Tabs.Add(4,"f_Tab4","Files     ",)
  oTab.Tabs("i_Tab3").Selected=@True
  nIndex = oTab.SelectedItem.Index
  nKey   = oTab.SelectedItem.Key   
  TabShow()
  Return(1)

#EndSubRoutine

#DefineSubroutine TabHide()

  For i = 2 To TabDlgNumControls
    DialogControlState(Tab_Handle,DialogProcOptions(Tab_Handle,dpo_getname,%i%),dcstate_addstyle,dcstyle_invisible)
  Next

#EndSubRoutine

#DefineSubroutine TabShow()

  For i = 2 To TabDlgNumControls
    If StrSub(DialogProcOptions(Tab_Handle,dpo_getname,%i%),1,2) == StrSub(nKey,1,2) Then
      DialogControlState(Tab_Handle,DialogProcOptions(Tab_Handle,dpo_getname,%i%),dcstate_removestyle,dcstyle_invisible)
    EndIf
  Next

#EndSubRoutine

#DefineSubRoutine TabDlg(Tab_Handle,DMsg,DCID,DEInfo,ChangeInfo)

  Switch (DMsg)
    Case msg_init                 ; Dialog Initialization
    DialogProcOptions(Tab_Handle, msg_closevia49,1)                       ; Close selected (IntControl(49....) (1-On, 0-Off).
    DialogProcOptions(Tab_Handle, dpo_disablestate,0)                     ; Dialog Disable (1-Disable, 2-Wait cursor, 0-Enable).
    DialogProcOptions(Tab_Handle, msg_combochange,1)                      ; DropList.
    DialogProcOptions(Tab_Handle, msg_calendar,1)                         ; Calendar selected.

    oTab = DialogObject(Tab_Handle,"m_co_Tab",dlgobject_getobject)
    DialogObject(Tab_Handle, "m_co_Tab", dlgobject_addevent,"Click",001001)
    TabInit()       
    DialogControlSet(Tab_Handle,"s_dl_Tab_cDrop",dc_itemboxcontents,cDrop)
    Break
  Case msg_closevia49           ; Close   
    oTab = 0
    Return 9
    Break
  Case msg_comevent             ; ComEvent   
    Switch(DialogProcOptions(Tab_Handle,dpo_getnumber,DCID))
      Case DialogProcOptions(Tab_Handle,dpo_getnumber,"m_co_Tab")
        If DeInfo.identifier == 001001 Then
          TabHide()
          nIndex = oTab.SelectedItem.Index
          nKey   = oTab.SelectedItem.Key   
          TabShow()
        EndIf
      Break
    EndSwitch
    Break
  Case msg_calendar             ; Calendar   
    Switch(DialogProcOptions(Tab_Handle,dpo_getnumber,DCID))
      Case DialogProcOptions(Tab_Handle,dpo_getnumber,"f_ca_Tab_cCal")
        cCal = DialogControlGet(Tab_Handle,"f_ca_Tab_cCal",dc_calendar)
        Break
    EndSwitch
    Break
  Case msg_combochange          ; DropList   
    Switch(DialogProcOptions(Tab_Handle,dpo_getnumber,DCID))
      Case DialogProcOptions(Tab_Handle,dpo_getnumber,"s_dl_Tab_cDrop")
        cDrop = DialogControlGet(Tab_Handle,"s_dl_Tab_cDrop",dc_itemboxselect)
        cDrop_list = DialogControlGet(Tab_Handle,"s_dl_Tab_cDrop",dc_itemboxcontents)
        Break
    EndSwitch
    Break
EndSwitch
Return -2

#EndSubRoutine
 
 
#DefineSubRoutine Init_Dialog_Constants()

   MSG_INIT               = 0    ; The one-time initilization
   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
   MSG_COMEVENT           = 14   ; Get double-click message on an ItemBox
   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 item text
   MSG_RVHEADER           = 22   ; Reportview header clicked

   DPO_DISABLESTATE       = 1000 ; codes -1=GetSetting 0=EnableDialog 1=DisableDialog
   DPO_CHANGEBACKGROUND   = 1001 ; -1=GetSetting 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 ; -1=Get Current otherise new title
   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 the number associated with a control's name.


   ;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_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 a 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_HEIGHT         = 256    ; Turns off automatic height adjustment on ItemBoxes and FileListBoxes
   DCSTYLE_CENTER         = 512    ; Center Text in VARYTEXT and STATICTEXT Controls
   DCSTYLE_RIGHT          = 1024   ; Right Justify Text in VARYTEXT and STATICTEXT Controls
   DCSTYLE_NOSELCURLEFT   = 2048   ; No selection, cursor left EDITBOX MULTILINEBOX
   DCSTYLE_NOSELCURRIGHT  = 4096   ; No selection, cursor right 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 ; Causes a separator bar graphic to display instead of text at the menu item's location in the menu MENUITEM
   DCSTYLE_MENUBREAK      = 262144 ; Cause a column break to occur at the specific item when used with drop-down, context, or submenus.  Causes a line break (new row) with menu items hosted directly by the MENUBAR MENUITEM
   DCSTYLE_NOHEADER       = 524288    ; No header bar REPORTVIEW
   DCSTYLE_COLHEADER      = 1048576   ; First row column header REPORTVIEW
   DCSTYLE_GRIDLINES      = 2097152   ; Grid lines REPORTVIEW
   DCSTYLE_SELONEROW      = 4194304   ; Only one row can be selected at a time REPORTVIEW
   DCSTYLE_SELALLROW      = 8388608   ; Highlight complete row REPORTVIEW
   DCSTYLE_SORTASC        = 16777216  ; Ascending sort REPORTVIEW
   DCSTYLE_SORTDESC       = 33554432  ; Descending sort REPORTVIEW
   DCSTYLE_EDITCOL        = 67108864  ; Edit first columns text REPORTVIEW
   DCSTYLE_COLCHECKBOX    = 134217728 ; Add checkbox to first column REPORTVIEW
   DCSTYLE_INSHEADER=268435456   ; Include column header text REPORTVIEW



   ;DialogControlSet / DialogControlGet Constants
   DC_CHECKBOX            = 1    ; CHECKBOX
   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
   DC_RADIOCONTROL        = 16   ; RADIOBUTTON
   DC_POSITION            = 17   ; RADIOBUTTON
   DC_MENUNAMES           = 18   ; ALL CONTROLS
   DC_HANDLE              = 19   ; ALL CONTROLS (Except MENUBAR and MENUITEM)
   DC_RVCOLHEAD           = 20   ; REPORTVIEW
   DC_RVCOLWIDTH          = 21   ; REPORTVIEW
   DC_RVCOLMATCH          = 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_REMOVEEVENT  = 2    ; Stop calling dialog callback when an event previously requested with 
   DLGOBJECT_GETOBJECT    = 3    ; Return an object references to the specified control
   DLGOBJECT_GETPICOBJECT = 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

#EndSubRoutine


Return

Title: Re: tabbed dialogs
Post by: JTaylor on March 05, 2014, 06:54:16 AM
Also, just tried this on a Win7 machine I just reinstalled and that control does not exist.  It does not have MSOffice installed.  Guessing if I installed that the control would be there but not certain.  Haven't tried the VBA download from MS but assume that would fix it too. 

Jim
Title: Re: tabbed dialogs
Post by: RAK on March 06, 2014, 12:13:27 AM
Thanks for the info and the new code. I do have office installed so that's probably why I had no issues. I have loads of computers around for testing. Maybe I could distribute it in the installer? I use InstallShield.

Thanks again!
Roy

>Edit
Just took a look at it and you solved it for sure. I will do some investigating when I can over the next couple weeks to see if there are licensing issues with control distribution. If not, I intend to use a tabbed dialog in the current project. 

One possible issue - can I use menu items in the same dialog?
THANKS!
Title: Re: tabbed dialogs
Post by: JTaylor on March 06, 2014, 05:54:21 AM
QuoteOne possible issue - can I use menu items in the same dialog?
THANKS!


I assume so but easy enough to find out.  Please let us know.

Jim