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