Code: Alles auswählen
;XIncludeFile "SYSTEM.PB"
Prototype _SHOW(*SELF)
Prototype.l _HANDLE_EVENT(*SELF)
Prototype.l _DONE(*SELF)
Structure _OBJECT
*_NEXT._OBJECT
*_PREVIOUS._OBJECT
*OWNER._OBJECT
*CHILD._OBJECT
SHOW._SHOW
HANDLE_EVENT._HANDLE_EVENT
DONE._DONE
ID.l
TYPE.l
flags.l
EndStructure
#TYPE_OBJECT = 1000
Procedure.l FindType(*BASE._OBJECT, STYPE)
While *BASE <> #Null
If *BASE\CHILD
*value = FindType(*BASE\CHILD,STYPE)
If *value
ProcedureReturn *value
EndIf
EndIf
If *BASE\TYPE = STYPE
ProcedureReturn *BASE
EndIf
*BASE = *BASE\_NEXT
Wend
; Error("Es wurde ein Objekt des Typs "+Str(STYPE)+"innerhalb innerhalb eines Objekttyps "+Str(*BASE\TYPE)+"gesucht, aber nicht gefunden",#errWARNING)
ProcedureReturn #Null
EndProcedure
Procedure SetFlag(*SELF._OBJECT,flags.l)
*SELF\flags|flags
EndProcedure
Procedure ClearFlag(*SELF._OBJECT,flags.l)
*SELF\flags&(~flags)
EndProcedure
Procedure.l _obj_HANDLE_EVENT(*SELF._OBJECT)
If *SELF\CHILD
*CHILD._OBJECT = *SELF\CHILD
While *CHILD
If *CHILD\HANDLE_EVENT(*CHILD)
ProcedureReturn #True
EndIf
*CHILD = *CHILD\_NEXT
Wend
EndIf
ProcedureReturn #False
EndProcedure
Procedure _obj_SHOW(*SELF._OBJECT)
*BASE._OBJECT = *SELF\CHILD
While *BASE <> #Null
*BASE\SHOW(*BASE)
*BASE = *BASE\_NEXT
Wend
EndProcedure
Procedure.l _obj_DONE(*SELF._OBJECT)
*BASE._OBJECT = *SELF\CHILD
While *BASE
; mFree(*BASE\DONE(*BASE))
*BASE = *BASE\_NEXT
Wend
ProcedureReturn *SELF
EndProcedure
Procedure.l CreateObject(SIZE.l)
*_SELF._OBJECT = AllocateMemory(SIZE)
; *_SELF._OBJECT = mAlloc(SIZE)
*_SELF\HANDLE_EVENT = @_obj_HANDLE_EVENT()
*_SELF\SHOW = @_obj_SHOW()
*_SELF\DONE = @_obj_DONE()
*_SELF\OWNER = #Null
*_SELF\CHILD = #Null
*_SELF\_NEXT = #Null
*_SELF\_PREVIOUS = #Null
*_SELF\flags = 0
*_SELF\ID = _ID
_ID + 1
*_SELF\TYPE = #TYPE_OBJECT
ProcedureReturn *_SELF
EndProcedure
Schade, muss ich mit dem Konvertieren meiner Objekte noch ein bissel warten.
/edit: Fehler lautet wie folgt:
PureBasic.asm[297]:
MP12
PureBasic.asm[167] Mp12[19];
And Dword [EBP+20],DWord [EBP+20]
Error: Invalid operand