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