I just edited my wizard template and thought I should share it since its only a few hundred lines long.
I like wizard-style programs, and who knows, maybe there are som newbies here that can use it too.
The template takes care of basic navigation etc, and can become any type of wizard type program with a
few edits and tweaks, and with your own code added of course.
Edit code near UPPERCASE COMMENTS to check it out. It has a few styles to choose from, and the headers
are all webgadgets, so a tip is to add background images/sounds(intro's)/dhtml whatever to make your
wizard program stand out from the crowd.
Here you go:
Code: Select all
;-program notes
;-
;PB 4.02
;utopiomania, 20070529
;'requires' panel.png, header.png graphics
;edit/insert code at UPPERCASE comments
;-initialise
;-
;WIZARD STYLE 0, 1, 2:
global style = 1
;TEMPLATE AUTO-ADJUSTS TO EDITING winW, winH, panelW, webH, btnW:
;window widht, height
global winW = 550, winH = 400
;style 1, 2 panel width, header height
global panelW = 160, webH = 60
;button sizes
global btnW = 90, btnH = 24
;cancel(lft3), next(lft2), prev(lft1) button placement
global lft3 = winW - btnW - 20, lft2 = lft3 - btnW - 10, lft1 = lft2 - btnW - 10
global top = winH - 40
;RETURNS PANEL AND HEADER HTML:
declare.s step1panel()
declare.s step1header()
declare.s step2header()
declare.s step3header()
declare.s step4header()
declare.s step5header()
;Used in the event handler
global exit, completed = #True
declare openMainWindow()
declare disableContextMenu(nCode, wParam, lParam)
;Gadget id's
enumeration
;main Window
#win1
;step1
#web0
#web1
#img1
#step1
#next1
#cancel1
;step2
#web2
#img2
#step2
#prev2
#next2
#cancel2
;step3
#web3
#img3
#step3
#prev3
#next3
#cancel3
;step4
#web4
#img4
#step4
#prev4
#next4
#cancel4
;step5
#web5
#img5
#step5
#done
endEnumeration
;-program entry
openMainWindow()
;-program event handler
repeat
select waitWindowEvent()
case #PB_Event_Gadget
select eventGadget()
;SET CANCEL BEHAVIOUR:
case #cancel1, #cancel2, #cancel3, #cancel4
exit = #True
case #next1
;step1 --> step2
hideGadget(#step1, #True)
hideGadget(#step2, #False)
setActiveGadget(#next2)
;DISABLE [X] SHUTDOWN
completed = #False
case #prev2
;step2 --> step1
hideGadget(#step2, #True)
hideGadget(#step1, #False)
setActiveGadget(#next1)
;ENABLE [X] SHUTDOWN
completed = #True
case #next2
;step2 --> step3
hideGadget(#step2, #True)
hideGadget(#step3, #False)
setActiveGadget(#next3)
case #prev3
;step3 --> step2
hideGadget(#step3, #True)
hideGadget(#step2, #False)
setActiveGadget(#next2)
case #next3
;step3 --> step4
hideGadget(#step3, #True)
hideGadget(#step4, #False)
setActiveGadget(#next4)
case #prev4
;step4 --> step3
hideGadget(#step4, #True)
hideGadget(#step3, #False)
setActiveGadget(#next3)
case #next4
;step4 --> step5
hideGadget(#step4, #True)
hideGadget(#step5, #False)
setActiveGadget(#done)
;COMPLETE TASKS HERE...
;
;ENABLE [X] SHUTDOWN
completed = #True
case #done
;step5, done
exit = #True
;OTHER GADGET EVENTS:
;case ...
endSelect
case #PB_Event_CloseWindow
if completed
;[X] SHUTDOWN ALLOWED
exit = #True
endIf
endSelect
until exit = #True
;-program exit
;-
;remove the webgadget context menu hook
UnhookWindowsHookEx_(hHook)
end
procedure openMainWindow()
flags = #PB_Window_ScreenCentered | #PB_Window_SystemMenu
if openWindow(#win1, 0, 0, winW, winH, "Wizard template", flags)
;stickyWindow(#win1, #True)
;create a new gadget list for the current window
if createGadgetList(windowID(#win1))
;default font
idFont = loadFont(#PB_Any, "tahoma", 10)
setGadgetFont(#PB_Default, fontID(idFont))
;wizard step1
containerGadget(#step1, 0, 0, winW, winH)
;new gadget list:
select style
case 0
webGadget(#web1, 0, 0, winW, webH, step1header())
case 1
webGadget(#web0, 0, 0, panelW, winH - webH, step1panel())
webGadget(#web1, panelW + 1, 0, winW - panelW - 2, webH, step1header())
case 2
webGadget(#web0, 0, webH, panelW, winH - webH - webH, step1panel())
webGadget(#web1, 0, 0, winW, webH - 1, step1header())
endSelect
frame3DGadget(#img1, 0, winH - webH, winW, 2, "", #PB_FRAME3D_SINGLE)
buttonGadget(#next1, lft2, top, btnW, btnH, "Next >")
buttonGadget(#cancel1, lft3, top, btnW, btnH, "Cancel")
;STEP1 OTHER GADGETS:
;
closeGadgetList()
hideGadget(#step1, #False)
setActiveGadget(#next1)
;wizard step2
containerGadget(#step2, 0, 0, winW, winH)
;new gadget list:
webGadget(#web2, 0, 0, winW, webH, step2header())
frame3DGadget(#img2, 0, winH - webH, winW, 2, "", #PB_FRAME3D_SINGLE)
buttonGadget(#prev2, lft1, top, btnW, btnH, "< Previous")
buttonGadget(#next2, lft2, top, btnW, btnH, "Next >")
buttonGadget(#cancel2, lft3, top, btnW, btnH, "Cancel")
;STEP2 OTHER GADGETS:
;
closeGadgetList()
hideGadget(#step2, #True)
;wizard step3
containerGadget(#step3, 0, 0, winW, winH)
;new gadget list:
webGadget(#web3, 0, 0, winW, webH, step3header())
frame3DGadget(#img3, 0, winH - webH, winW, 2, "", #PB_FRAME3D_SINGLE)
buttonGadget(#prev3, lft1, top, btnW, btnH, "< Previous")
buttonGadget(#next3, lft2, top, btnW, btnH, "Next >")
buttonGadget(#cancel3, lft3, top, btnW, btnH, "Cancel")
;STEP3 OTHER GADGETS:
;
closeGadgetList()
hideGadget(#step3, #True)
;wizard step4
containerGadget(#step4, 0, 0, winW, winH)
;new gadget list:
webGadget(#web4, 0, 0, winW, webH, step4header())
frame3DGadget(#img4, 0, winH - webH, winW, 2, "", #PB_FRAME3D_SINGLE)
buttonGadget(#next4, lft2, top, btnW, btnH, "Finish")
buttonGadget(#cancel4, lft3, top, btnW, btnH, "Cancel")
;STEP4 OTHER GADGETS:
;
closeGadgetList()
hideGadget(#step4, #True)
;wizard step5
containerGadget(#step5, 0, 0, winW, winH)
;new gadget list:
webGadget(#web5, 0, 0, winW, webH, step5header())
frame3DGadget(#img5, 0, winH - webH, winW, 2, "", #PB_FRAME3D_SINGLE)
buttonGadget(#done, lft3, top, btnW, btnH, "Done")
;STEP5 OTHER GADGETS:
;
closeGadgetList()
hideGadget(#step5, #True)
endIf
endIf
endProcedure
procedure.s step1panel()
;this returns html for the panel that shows if style is set to 1 or 2
bg.s = GetPathPart(ProgramFileName()) + "panel.png"
s.s = "about:<body background = '" + bg + "' scroll = 'no'"
s + " oncontextmenu = 'return false;'>"
s + "<font face = 'courier new' color = '#4080ff'>"
s + "<h4>Style " + str(style) + "</h4></body>"
procedureReturn s
endProcedure
procedure.s step1header()
;returns html for step1 header graphics
bg.s = GetPathPart(ProgramFileName()) + "header.png"
s.s = "about:<body background = '" + bg + "' scroll = 'no'"
s + " oncontextmenu = 'return false;'>"
s + "<font face = 'courier new' color = '#4080ff'>"
s + "<h4>Step 1/5 - Welcome</h4></body>"
procedureReturn s
endProcedure
procedure.s step2header()
;returns html for step2 header graphics
bg.s = GetPathPart(ProgramFileName()) + "header.png"
s.s = "about:<body background = '" + bg + "' scroll = 'no'"
s + " oncontextmenu = 'return false;'>"
s + "<font face = 'courier new' color = '#4080ff'>"
s + "<h4>Step 2/5</h4></body>"
procedureReturn s
endProcedure
procedure.s step3header()
;returns html for step3 header graphics
bg.s = GetPathPart(ProgramFileName()) + "header.png"
s.s = "about:<body background = '" + bg + "' scroll = 'no'"
s + " oncontextmenu = 'return false;'>"
s + "<font face = 'courier new' color = '#4080ff'>"
s + "<h4>Step 3/5</h4></body>"
procedureReturn s
endProcedure
procedure.s step4header()
;returns html for step4 header graphics
bg.s = GetPathPart(ProgramFileName()) + "header.png"
s.s = "about:<body background = '" + bg + "' scroll = 'no'"
s + " oncontextmenu = 'return false;'>"
s + "<font face = 'courier new' color = '#4080ff'>"
s + "<h4>Step 4/5 - Finish</h4></body>"
procedureReturn s
endProcedure
procedure.s step5header()
;returns html for step5 header graphics
bg.s = GetPathPart(ProgramFileName()) + "header.png"
s.s = "about:<body background = '" + bg + "' scroll = 'no'"
s + " oncontextmenu = 'return false;'>"
s + "<font face = 'courier new' color = '#4080ff'>"
s + "<h4>Step 5/5 - Done</h4></body>"
procedureReturn s
endProcedure