Das geht auch mit der ObjectLib von pb , wobei es weniger fuer Anfaenger
geeignet ist.
Code: Alles auswählen
Import "ObjectManager.lib"
PB_Object_GetOrAllocateID(*Object,id.l)
PB_Object_EnumerateStart(*Object)
PB_Object_EnumerateNext(*Object,*id)
PB_Object_FreeID(*Object, DynamicOrArrayID.l)
PB_Object_Init(StructureSize.l, IncrementStep.l, FreeID)
EndImport
Prototype SYS_FreeString(string.s)
Global SYS_FreeString.SYS_FreeString
!MOV [v_SYS_FreeString],_SYS_FreeString@4
Macro ForEachObject(obj,cursor)
PB_Object_EnumerateStart(obj)
While PB_Object_EnumerateNext(obj,@cursor)
EndMacro
;-
Macro NextObject
Wend
EndMacro
; TEST
Structure Track
title.s
interpret.s
laenge.l
EndStructure
Structure Schallplatte
name.s
nTitel.l
TitleObjListe.l
EndStructure
Global OblatenCD_Obj.l = PB_Object_Init(SizeOf(Schallplatte),10,0)
;-
Procedure NeueSchallplatte(name.s,Titelanzahl)
Protected *schallpladde.Schallplatte
*schallpladde = PB_Object_GetOrAllocateID(OblatenCD_Obj,#PB_Any)
*schallpladde\name = name
*schallpladde\nTitel = Titelanzahl
*schallpladde\TitleObjListe = PB_Object_Init(SizeOf(Track),10,0)
ProcedureReturn *schallpladde
CreateImage(0,0,0); dummy fuer simplelib
EndProcedure
;-
Procedure LiedEinfuegen(*schallpladde.Schallplatte,interpret.s,title.s,laenge.l)
Protected *lied.Track
*lied = PB_Object_GetOrAllocateID(*schallpladde\TitleObjListe,#PB_Any)
*lied\title = interpret
*lied\interpret = title
*lied\laenge = laenge
ProcedureReturn *lied
EndProcedure
;-
Procedure LeereSammlung()
Protected *schalldings.Schallplatte
Protected *titledings.Track
ForEachObject(OblatenCD_Obj,*schalldings)
SYS_FreeString(*schalldings\name)
ForEachObject(*schalldings\TitleObjListe,*titledings)
SYS_FreeString(*titledings\title)
SYS_FreeString(*titledings\interpret)
PB_Object_FreeID(*schalldings\TitleObjListe,*titledings)
NextObject
PB_Object_FreeID(OblatenCD_Obj,*schalldings)
NextObject
EndProcedure
;-
SP = NeueSchallplatte("13 Mann und ein Kapitän",2)
LiedEinfuegen(SP,"HEINO","13 MANN UND EIN KAPITÄN",250)
LiedEinfuegen(SP,"HEINO","JENSEITS DES TALES",450)
SP = NeueSchallplatte("Wenn die bunten Fahnen wehn`n",2)
LiedEinfuegen(SP,"HEINO","Wenn die bunten Fahnen wehn`n",334)
LiedEinfuegen(SP,"HEINO","Wenn Dir alle Untreu werden",123)
ForEachObject(OblatenCD_Obj,*schalldings.Schallplatte)
Debug *schalldings\name
Debug ""
ForEachObject(*schalldings\TitleObjListe,*titledings.Track)
Debug " " + *titledings\title.s
Debug " " + *titledings\interpret.s
Debug " " + Str(*titledings\laenge)
Debug ""
NextObject
Debug "-----------------------------"
NextObject
LeereSammlung()
@Fluid Byte
Das ist nicht dynamisch , da du nur einen Konstanten Wert angeben
kannst, dafuer braucht man dann aber auch kein Macro