| |
|
|
Nico Madysa | Yo mich veces en él intenta, el Sistema a überlisten en Klassenobjekte dynamisch aufzulisten. Mein Gedanke esta war, que un einziges Objeto quasi como Lesekopf verwendet se. Wird una neues Objeto producido, así seine Adresse en un bereich aufgelistet. Will una continuación darauf zugreifen, así el Adresse el Lesekopfobjekt zugewiesen y luego puede el deseado Operationen ausgeführt voluntad. Leider funktioniert el Ganze no tan wirklich. Sombrero alguien (IF?) una Concepto, cómo el Concepto weiterführen kann? KompilierenMarcaSeparaciónClass TPoint = x& , y&
proc TPoint.TPoint
parameters ppx& , ppy&
.x& = ppx&
.y& = ppy&
endproc
declare Point# , Stack#
neuen Punkt in die Liste eintragen
proc NewPoint
parameters px& , py&
Hier wird der Punkt als Klasse ganz gewohnt erzeugt.
Point# = New(TPoint,px&,py&)
Hier ist der Trick: Damit der Punkt nicht verloren geht, wird seine
Adresse in einer internen Liste (Stack#) gespeichert. Die Liste ist
dynamisch, daher können theoretisch unendlich viele Punkte erzeugt werden.
Dim Stack# , SizeOf(Stack#) + 4
Long Stack# , (SizeOf(Stack#) - 4) = Point#
endproc
Bei allen folgenden Prozeduren wird zuerst die Adresse des gewünschten
Punktes auf das als Lesekopf dienende Objekt übertragen. Aus ihm können
dann alle gewünschten Informationen ausgelesen werden.
proc SetPointX
parameters nr% , px&
Point# = Long(Stack#,nr% * 4)
Point#.x& = px&
endproc
proc SetPointY
parameters nr% , py&
Point# = Long(Stack#,nr% * 4)
Point#.y& = py&
endproc
proc GetPointX
parameters nr%
Point# = Long(Stack#,nr% * 4)
return Point#.x&
endproc
proc GetPointY
parameters nr%
Point# = Long(Stack#,nr% * 4)
return Point#.y&
endproc
proc Draw
parameters nr%
Point# = Long(Stack#,nr% * 4)
SetPixel Point#.x& , Point#.y& , 0
endproc
Auch hier nimmt das Lesekopfobjekt die Adresse des gewünschten Punktes an.
Dieser wird dispost und dann aus der Liste entfernt. Das Lesekopfobjekt wird
anschließend weiter verwendet.
proc DelPoint
parameters nr%
Point# = Long(Stack#,nr% * 4)
Dispose Point#
Char Stack# , (nr% * 4) = Char$(Stack#,(nr% * 4) + 4,SizeOf(Stack#) - (nr% * 4) - 4)
Dim Stack# , SizeOf(Stack#) - 4
endproc
Hier werden der Reihe nach alle Punkte dispost und danach auch die Liste selbst.
proc ClearStack
whileloop 0 , SizeOf(Stack#) , 4
Point# = Long(Stack#,&loop)
Dispose Point#
EndWhile
Dispose Stack#
endproc
Hauptprogramm
cls
whileloop 20,40
NewPoint &loop,20
EndWhile
whileloop 0,20
Draw &loop
EndWhile
ClearStack
waitinput
end
|
|
|
| |
|
|
|
| Yo vermute hier liegt lediglich el problema antes, dass Usted Speicher en uno Función reservierst welcher después de Verlassen el Función freigegeben wurde. Usted merkst Usted zwar global el Adresse, pero no el Inhalt. |
|
|
| |
|
|
|
| Apéndice: Reserviere doch Speicher Yo lo en el scrollarea.inc tue - por long m=globalAlloc(gPtr,_size) y kopiere el Klasseninhalt hay hinein. (Dadurch schliesst Usted DIM de, also no automatische Speicherfreigabe después de Verlassen el Función.)
Für Objekteigenschaften debería el trabajo, como se el con el Métodos verhält es vlt. en una otro Blatt. |
|
|
| |
|
|