AddHook() im Type bei mehreren Referenzen
Übersicht

![]() |
FarbfinsternisBetreff: AddHook() im Type bei mehreren Referenzen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe da mal wieder ein kleines Problem. Ich möchte in einem Type ein AddHook() anwenden welches sich aber jeweils immer nur auf seine eigene Referenz beziehen soll. Im Folgenden poste ich einfach mal den kompletten Code:
Code: [AUSKLAPPEN] SuperStrict rem bbdoc: MaxGui Imagebutton Extension about: Der Imagebutton erlaubt das erweiterte Erzeugen von grafischen Benutzeroberflchen mittels MaxGUI end rem Module pub.imagebutton ModuleInfo "Version: 0.1" ModuleInfo "Author: bruZard" ModuleInfo "License: Freeware OpenSource" ModuleInfo "Modserver: PUB" Import brl.maxgui ?Win32 Import brl.win32maxgui ?MacOs Import brl.cocoamaxgui ?Linux Import brl.fltkmaxgui ? Import brl.bmploader Import brl.pngloader Import brl.jpgloader Type TImageButton Field x:Int Field y:Int Field width:Int Field height:Int Field images:TPixmap[3] Field gadget:TGadget Function Add:TImageButton(x:Int, y:Int, group:TGadget, img0:String, img1:String, img2:String) Local btn:TImageButton = New TImageButton btn.images[0] = LoadPixmap(img0) If img1.length btn.images[1] = LoadPixmap(img1) If img2.length btn.images[2] = LoadPixmap(img2) btn.x = x btn.y = y btn.width = btn.images[0].width btn.height = btn.images[0].height btn.gadget = CreatePanel(btn.x, btn.y, btn.width, btn.height, group, PANEL_ACTIVE) SetPanelPixmap btn.gadget, btn.images[0], PANELPIXMAP_FIT AddHook EmitEventHook, eventhook, btn Return btn End Function Function eventhook:Object(id:Int,data:Object,context:Object) Local btn:TImageButton = TImageButton(context) Local ev:TEvent = TEvent(data) If btn Local mx:Int = ev.x Local my:Int = ev.y Select ev.id Case EVENT_MOUSEUP If mx>0 and my>0 and mx<btn.width and my<btn.height Local NewEvent:TEvent = New TEvent NewEvent.id = EVENT_GADGETACTION NewEvent.source = btn EmitEvent(NewEvent) If btn.images[1] SetPanelPixmap btn.gadget,btn.images[1],PANELPIXMAP_FIT Else SetPanelPixmap btn.gadget,btn.images[0],PANELPIXMAP_FIT EndIf EndIf Case EVENT_MOUSEENTER If btn.images[1]<>Null SetPanelPixmap btn.gadget,btn.images[1],PANELPIXMAP_FIT EndIf Case EVENT_MOUSEDOWN If btn.images[2]<>Null SetPanelPixmap btn.gadget,btn.images[2],PANELPIXMAP_FIT EndIf Case EVENT_MOUSELEAVE SetPanelPixmap btn.gadget,btn.images[0],PANELPIXMAP_FIT EndSelect EndIf Return data EndFunction Method Free() images[0] = Null images[1] = Null images[2] = Null FreeGadget gadget RemoveHook EmitEventHook,eventhook GCCollect() End Method End Type rem bbdoc: Erzeugt einen neuen ImageButton about: Erstellt an der Position x und y einen neuen Imagebutton. Dieser hat die Ausmasse des Bildes der Dstei img0. Die Grafikdateien img0, img1 und img2 stehen fuer die Buttonstates NORMAL, MOUSEOVER und PRESSED. Der Button erzeugt ein GADGETACTION Ereignis. Es duerfen keine Gadget-Befehle auf das Objekt angewendet werden. end rem Function CreateImageButton:TImageButton(x:Int, y:Int, group:TGadget, img0:String, img1:String = "", img2:String = "") Local bn:TImageButton = TImageButton.Add(x,y,group,img0,img1,img2) Return bn End Function rem bbdoc: Loescht den angegebenen ImageButton about: Loescht den Button aus dem Arbeitsspeicher end rem Function FreeImageButton(button:TImageButton) button.Free() End Function ...ist jetzt leider schon komplett in Module-Form, sollte aber dennoch nicht allzu schwer zu lesen sein. Das Problem: Ich erzeuge zwei ImageButtons und warte im MainLoop auf ein EVENT_GADGETACTION, welches ja in der Klassenfunktion eventhook() erzeugt und gesendet wird. Klappt auch ganz prima, aber ich darf scheinbar nicht auf eine einzlene Referenz reagieren sondern bekomme das Event dauernd von allen Referenzen. Jemand einen Plan was da falsch läuft? |
||
Farbfinsternis.tv |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group