Sub-Type-Listen in einem Type verwenden

Übersicht BlitzBasic FAQ und Tutorials

Neue Antwort erstellen

 

Sirrus

Betreff: Sub-Type-Listen in einem Type verwenden

BeitragSa, Okt 31, 2015 7:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein Hinweis vorweg: Ich schreibe das Tutorial auf deutsch, darum verwende ich in Texten die deutschen Worte "Funktion" und "Lokal", in Syntax-Definitionen und Programmbeispielen jedoch die englischen Keywords "Function" und "Local"

Einleitung:
Es wurde hier schon öfters behauptet, daß es nicht möglich ist, von einem Type mehrere seperate Objekt-Listen zu verwenden. Prinzipiell ist das schon richtig, denn alle Type-Objekte werden nur in einer Liste verwaltet und es ist in Blitzbasic nicht vorgesehen, das zu ändern. Jedoch als Programmierer sollte man meistens davon ausgehen, daß etwas nicht unmöglich ist, nur weil es nicht vorgesehen ist. (Ich habe am C64 schon eine Mausabfrage programmiert, als die meisten hier das Wort "Maus" noch nicht mit Computern in einen Zusammenhang gebracht haben. Aber als es den ersten C64 gab, gab es noch keine Maus und als es die Maus gab hatte das C64-Basic dafür keine Abfrage Wink )

Folgen von Types in einer Collection unterscheiden:
Um mehrere Folgen von Types innerhalb einer Collection zu unterscheiden, muß man zunächst die zusammengehörigen Types so miteinander verbinden, daß die Möglichkeit besteht Anfang und Ende eine Folge zu erkennen. Dies geht am einfachsten, indem man zwei Hilfsfelder anlegt, wo jedes Type mit einem vorherigen und einem nachfolgenden Type verlinkt wird. Eine Folge beginnt dann mit dem Type, daß auf keinen Vorgänger verlinkt und endet mit dem Type, daß auf keinen Nachfolger verlinkt.

Wenn man zwei (oder mehr) Subtype-Listen innerhalb einer Type-Collection verwendet, kann die Collection natülich auch mal größer werden und dadurch wird es zeitaufwendig und umständlich, die Collection mit Each zu durchsuchen, um Folgenanfänge zu finden. Das Problem läßt sich mit einem Hilfstype beheben, in dem man das jeweils erste und letzte Type in Zeigern ablegt. In den Subtypes kann man dann noch einen Zeiger auf das jeweilige übergeordnete List-Type und für ein untergeordnetes List-Type unterbringen. Das Ganze sieht dann etwa so aus:
BlitzBasic: [AUSKLAPPEN]
Type Liste
Field tyName$ ;Name der Typeliste
Field tyFirst.Subtype ;Zeiger auf den Anfang einer Folge
Field tyLast.Subtype ;Zeiger auf das Ende einer Folge
Field SubtypeCount%
End Type
Type Subtype
Field tyBefore.Subtype ;Zeiger auf den Vorgänger
Field tyAfter.Subtype ;Zeiger auf den Nachfolger
Field tyParent.Liste ;Zeiger auf die Liste mit der der Subtype verwaltet wird
Field tyChild.Liste ;Zeiger auf eine Liste mit untergeordneten Subtypes
Field A$ ;Das Feld ist nur symbolisch für die Felder, die man hier noch anlegen möchte.
End Type


Jetzt muss man nur noch alle Type-Funktionen für die Sublisten mit eigenen Funktionen simulieren....

Doch die werde ich jetzt nicht auch noch alle hier erklären, denn etwas könnt ihr ja auch noch programmieren Wink

nur noch ein Tip zum simulieren von Each, folgendermaßen kann man nur die Types einer Liste durchlaufen (statt alle Subtypes)
BlitzBasic: [AUSKLAPPEN]


Local S.Subtype, L.Liste
S=L\tyFirst
While S<>Null
{Anweisungen}
S=S\tyAfter
Wend


Das ist vielleicht nicht die beste Lösung, aber es funktioniert. Ich organisiere damit bei Blitz3D Menüs, Tollbar, Dockfenster und jede Art von Steuerelementen bis zu CameraViewPorts für 3D

Neue Antwort erstellen


Übersicht BlitzBasic FAQ und Tutorials

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group