1. Win32lib Error 495 getHandle Failed.
I keep getting this when running my example for a Wizard Wizard I am
making (I tried to create a wizard from scratch but it was horrendously
complicated and quite difficult to maintain)
Here's My Code :
Wizard.ew (Wizard Library, all quite simple)
without warning
include win32lib.ew
sequence steps
steps = {}
sequence step_progression
step_progression = {}
sequence previous_step
previous_step = {}
sequence current_step
current_step = {}
sequence SFroutines
SFroutines = {-1,-1}
constant Default_width = 660
constant Default_height = 444
constant buttonheight = 24
constant buttonwidth = 70
atom width
atom height
width = -1
height = -1
global atom WizardWindow
WizardWindow = createEx( Window,"Wizard", 0, Default, Default,
Default_width, Default_height, 0, 0 )
global atom WizNext
WizNext = createEx( PushButton, "Next", WizardWindow,
Default_width-5-buttonwidth, Default_height-5-buttonheight, buttonwidth,
buttonheight, 0, 0 )
global atom WizPrev
WizPrev = createEx( PushButton, "Previous", WizardWindow, 5,
Default_height-5-buttonheight, buttonwidth, buttonheight, 0, 0 )
global procedure make_step(sequence step_name,sequence items,atom onstep)
setVisible(items,False)
steps = append(steps,{step_name,items,onstep})
end procedure
global procedure set_routines(atom start_routine,atom fin_routine)
SFroutines = {start_routine,fin_routine}
end procedure
global procedure setwizardsize(atom nwidth,atom nheight)
width = nwidth
height = nheight
end procedure
global procedure goto_step(sequence go_step)
sequence old_items
atom new_index
sequence new_items
atom finder
new_items = {}
old_items = {} -- for step 0, because it won't be found
previous_step = current_step
current_step = go_step
setVisible({WizNext,WizPrev},False)
for i = 1 to length(steps) do
if equal(steps[i][1],previous_step) then
old_items = steps[i][1]
exit
end if
end for
setVisible(old_items,False)
for i = 1 to length(steps) do
if equal(steps[i][1],go_step) then
new_index = i
exit
end if
end for
------------------------------ Call custom routine defined by user
if steps[new_index][3] != -1 then
call_proc(steps[new_index][3], {})
end if
-----------------------------
new_items = steps[new_index][1]
setVisible(new_items,True)
finder = find(go_step,step_progression)
if finder then -- if find != 0 then it's true
setVisible(WizNext,True)
setText(WizNext,"Next")
if finder = length(step_progression) then
setText(WizNext,"Finish")
end if
if finder != 1 then
setVisible(WizPrev,True)
end if
else
setText(WizNext,"OK")
end if
end procedure
global procedure set_progression(sequence order)
step_progression = order
end procedure
procedure WizNext_Onclick(integer self, integer event, sequence params)
atom finder
finder = find(current_step,step_progression)
if finder = 0 then -- Next button is acually an "OK" button
goto_step(previous_step)
elsif finder < length(step_progression) then
goto_step(step_progression[finder+1])
elsif finder = length(step_progression) then
if SFroutines[2] != -1 then
call_proc(SFroutines[2],{})
end if
end if
end procedure
procedure WizPrev_Onclick(integer self, integer event, sequence params)
atom finder
finder = find(current_step,step_progression)
if finder = 0 then
-- This should never happen. If it's not in step_progression, there
--should be no back button.
elsif finder > 1 then
goto_step(step_progression[finder-1])
elsif finder = 1 then
-- This should never happen. If it's the 1st step, there should be no
--back button.
end if
end procedure
global procedure WizardStart(sequence Wizard_Name)
if width = -1 or height = -1 then
setRect( WizardWindow, Default, Default, Default_width, Default_height,
True )
else
setRect( WizardWindow, Default, Default, width, height, True )
setRect( WizNext, width-5-buttonwidth, height-5-buttonheight,
buttonwidth, buttonheight, True )
setRect( WizPrev, 5, height-5-buttonheight, buttonwidth, buttonheight,
True )
end if
setText(WizardWindow,Wizard_Name)
setHandler( WizNext, w32HClick, routine_id("WizNext_Onclick"))
setHandler( WizPrev, w32HClick, routine_id("WizPrev_Onclick"))
setIcon(WizardWindow,"Wizard.ico")
showWindow ( WizardWindow, SW_NORMAL )
if SFroutines[1] != -1 then
call_proc(SFroutines[1],{})
end if
if length(step_progression) > 0 then
goto_step(step_progression[1])
end if
WinMain(WizardWindow,Normal)
end procedure
WizardTest.exw -- The example Program
include win32lib.ew
include wizard.ew
include msgbox.e
atom foobar
without warning
--------------------------- Page 1
constant PersonsName = createEx( CText, "Please Enter Your Name Here",
WizardWindow, 12, 8, 364, 24, 0, 0 )
procedure explain()
foobar = message_box("This is a demo of the Wizard. The Source is quite
simple."&
" To see something a little more advanced, make your favourite colour
blue.","Welcome",MB_OK)
end procedure
make_step("Name",{PersonsName},routine_id("explain"))
----------------------------- Page 2
constant PersonsColour = createEx( DropDownList , "", WizardWindow, 12,
8, 364, 24, 0, 0 )
addItem ( PersonsColour, {"Red","Blue","Green","Purple"} )
procedure Colour_onchange(integer self, integer event, sequence params)
if equal(getText(PersonsColour),"Blue") then
goto_step("Reason")
end if
end procedure
setHandler(PersonsColour,w32HChange,routine_id("Colour_onchange"))
procedure say_hello()
foobar = message_box("Hello "&getText(PersonsName)&"!","Hello",MB_OK)
end procedure
make_step("Colour",{PersonsColour},routine_id("say_hello"))
--------------------------------------- Page 3
constant PersonsAge = createEx( CText, "Please Enter Your Age Here",
WizardWindow, 12, 8, 364, 24, 0, 0 )
make_step("Age",{PersonsAge},-1)
--------------------------------------
-- Special Page you only get to see if you pick blue....
constant PersonReason = createEx( CText, "Please Enter Why you like blue
so much.", WizardWindow, 12, 8, 364, 24, 0, 0 )
make_step("Reason",{PersonReason},-1)
---------------------------------
procedure output()
atom file
file = open("output.txt","w")
puts(file,getText(PersonsName)&"'s Favourite Colour is
"&getText(PersonsColour))
if equal(getText(PersonsColour),"Blue") then
puts(file," (because "&getText(PersonReason)&")")
end if
puts(file," They are "&getText(PersonsAge)&" years old")
close(file)
end procedure
set_routines(-1,routine_id("output"))
set_progression({"Name","Colour","Age"})
WizardStart("Example Wizard")
WinMain(WizardWindow,Normal)
Running Windows XP if it matters.
2. Re: Win32lib Error 495 getHandle Failed.
On Sun, 21 Dec 2003 23:24:56 +1000, Urzumph <Urzumph at HotPOP.com>
wrote:
>new_items = steps[new_index][1]
>setVisible(new_items,True)
You're trying to setVisible("Name") rather than
setVisible({PersonsName}) which is [2].
Regards,
Pete
http://palacebuilders.pwp.blueyonder.co.uk/euphoria.html