Multiple instances of a type
BlitzMax Forums/MaxGUI Module/Multiple instances of a type
| ||
| I am trying to get a handle on this type thing ... The MaxGui example files give the code below I tried to add 2 additional instances ot TApplet (applet1 and applet2) Why does this not work... ? Strict
Type TApplet
Field window:TGadget
Field canvas:TGadget
Field timer:TTimer
Method Render()
Local x,y,width,height,t,i
width=GraphicsWidth()
height=GraphicsHeight()
t=MilliSecs()
SetBlend ALPHABLEND
SetViewport 0,0,width,height
SetClsColor 0,0,0
SetOrigin width/2,height/2
Cls
For x=-width/2 To width/2 Step 2
y=Sin(t*0.3+x)*height/2
DrawLine 0,0,x,y
Next
End Method
Method OnEvent(event:TEvent)
Select event.id
Case EVENT_WINDOWCLOSE
End
Case EVENT_TIMERTICK
RedrawGadget canvas
Case EVENT_GADGETPAINT
SetGraphics CanvasGraphics(canvas)
Render
Flip
End Select
End Method
Function eventhook:Object(id,data:Object,context:Object)
Local event:TEvent
Local app:TApplet
event=TEvent(data)
app=TApplet(context)
app.OnEvent event
End Function
Method Create:TApplet(name$)
Local a:TApplet
Local w,h
window=CreateWindow(name,20,20,512,512)
w=ClientWidth(window)
h=ClientHeight(window)
canvas=CreateCanvas(0,0,w,h,window)
canvas.SetLayout 1,1,1,1
timer=CreateTimer(100)
AddHook EmitEventHook,eventhook,Self
Return Self
End Method
End Type
AutoMidHandle True
Local applet:TApplet
Local applet1:TApplet
Local applet2:TApplet
applet=New TApplet.Create("Render Applet")
applet1=New TApplet.Create("Render1 Applet")
applet2=New TApplet.Create("Render2 Applet")
While True
WaitEvent
Wend |
| ||
| It's because the first event hook isn't returning an object back, and so the second and third object's receive a null object in their event hooks. Have a look at the [i]Information[/b] section under RunHooks in the docs. In addition, for multiple type instances, there is only really a need to create one timer which they can all respond to, and they should also only paint when their own canvas requires updating. Before, we had effectively 3 times (effectively running the same code 3 times over for each tick) and each canvas was being painted 3 times per tick. I've tweaked the code to fix these problems, and have posted it below: P.S. You can use [code ] / [codebox ] tags when posting code so that it is properly formatted. I've edited your original post to show you what it looks like. See this FAQ entry for more info: What are the forum codes? |
| ||
| Thanks for the help .. Hope not to be such a newbie someday Give me 5 years or so... |