PureBasic Objekte

Einführung

Der Sinn dieses Kapitels besteht darin, das Verhalten, die Erstellung und die Handhabung von Objekten in PureBasic zu beschreiben. Zur Demonstration verwenden wir das Image (Bild) Objekt, aber dieselbe Logik gilt auch für alle anderen PureBasic Objekte. Wenn wir ein Image-Objekt erstellen, können wir dies auf zwei Weisen tun: indexiert und dynamisch.

I. Indexierte Nummerierung

Der statische bzw. indexierte Weg ermöglicht Ihnen, auf ein Objekt durch einen vordefinierten numerischen Wert zu verweisen. Die erste verfügbare Index-Zahl ist 0, weitere Indizes werden anschließend fortlaufend (sequentiell) zugeordnet. Dies bedeutet, wenn Sie die Index-Nummer 0 und dann die Nummer 1000 verwenden, werden 1001 Indizes reserviert und 999 (von 1 bis 999) bleiben unbenutzt, welches keine effiziente Art und Weise zur Benutzung von indexierten Objekten darstellt. Wenn Sie eine flexiblere Methode brauchen, verwenden Sie die dynamische Art zum Zuordnen von Objekten, wie im Abschnitt II. beschrieben.

Der indexierte Weg bietet mehrere Vorteile an:

- Einfachere Handhabung, da keine Variablen oder Arrays benötigt werden.
- 'Gruppen' Verarbeitung, ohne die Notwendigkeit eines zwischenzeitlichen Arrays.
- Benutzung des Objekts in Prozeduren, ohne irgendetwas global definierten zu müssen (bei Verwendung einer Konstante oder Zahl).
- Ein Objekt, das mit einem Index verknüpft ist, wird bei erneuter Nutzung dieses Index automatisch freigegeben.
Die maximale Index-Zahl wird auf eine obere Grenze (normalerweise von 5000 bis 60000) beschränkt und hängt vom Objekttyp ab. Enumerations (Aufzählungen) sind ausdrücklich zu empfehlen, wenn Sie mit fortlaufenden Konstanten zur Identifizierung von Objekten (was ebenso empfehlenswert ist) arbeiten möchten.

Beispiel

  CreateImage(0, 640, 480) ; Erstellt ein Bild, die n°0
  ResizeImage(0, 320, 240) ; Verändert die Größe des n°0 Bilds und ändert sein @ReferenceLink "handles" "Handle"

Beispiel

  CreateImage(2, 640, 480) ; Erstellt ein Bild, die n°2
  ResizeImage(2, 320, 240) ; Verändert die Größe des n°2 Bilds und ändert sein @ReferenceLink "handles" "Handle"
  CreateImage(2, 800, 800) ; Erstellt ein neues Bild mit dem n°2 Index, das alte wird automatisch freigegeben

Beispiel

  For k = 0 To 9
    CreateImage(k, 640, 480) ; Erstellt 10 verschiedene Bilder, nummeriert von 0 bis 9
    ResizeImage(k, 320, 240) ; Verändert die Größe der Bilder auf halbe Breite/Höhe und ändert ihre @ReferenceLink "handles" "Handles"
  Next

Beispiel

  #ImageBackground = 0
  #ImageButton     = 1

  CreateImage(#ImageBackground, 640, 480) ; Erstellt ein Hintergrund-Bild (n°0)
  ResizeImage(#ImageBackground, 320, 240) ; Verändert die Größe des Hintergrund-Bilds
  CreateImage(#ImageButton    , 800, 800) ; Erstellt ein Bild (n°1)

II. Dynamische Nummerierung

Manchmal ist die indexierte Nummerierung nicht sehr praktisch, um dynamische Situationen zu handhaben, wo wir mit einer unbekannten Anzahl von Objekten umgehen müssen. PureBasic bietet eine einfache und komplementäre Möglichkeit, Objekte auf eine dynamische Art und Weise zu erstellen. Beide Methoden (indexiert und dynamisch) können gleichzeitig - ohne irgendeinen Konflikt - verwendet werden. Um ein dynamisches Objekt zu erstellen, müssen Sie die #PB_Any Konstante anstelle einer Index-Zahl angeben, und die dynamische Nummer wird als Ergebnis der entsprechenden Funktion zurückgegeben. Dann verwenden Sie einfach diese Nummer mit den anderen Objektfunktionen an der Stelle, wo Sie sonst eine indexierte Zahl verwenden würden (außer zum Erstellen eines neuen Objekts). Diese Art und Weise des Objekt-Handlings kann sehr nützlich sein, wenn es in Verbindung mit einer verknüpften Liste verwendet wird, welche auch einen dynamischen Weg des Speicherns darstellt.

Beispiel

  DynamicImage1 = CreateImage(#PB_Any, 640, 480) ; Erstellen eines dynamisch nummerierten Bildes
  ResizeImage(DynamicImage1, 320, 240) ; Verändern der Größe von DynamicImage1
Ein vollständiges Beispiel für dynamische Objekte und verknüpfte Listen finden Sie hier:

Beispiel

MDI_ImageViewer.pb

Weitere Erläuterungen und ein Beispiel für dynamische Nummerierung mehrerer Fenster und Gadgets finden Sie im entsprechenden Kapitel des 'Einsteiger-Kapitels'.

Übersicht über die verschiedenen PureBasic-Objekte

Verschiedene PureBasic-Objekte (Fenster, Gadgets, Sprites, etc.) können den gleichen Bereich an Objekt-Nummern erneut verwenden. Somit können die folgenden Objekte jeweils beginnend bei 0 (oder einem anderen Wert) nummeriert werden und PureBasic unterscheidet sie anhand ihres Typs:
- Database
- Dialog
- Entity
- File
- FTP
- Gadget (einschließlich dem ScintillaGadget())
- Gadget3D - Image
- Library
- Light
- Mail
- Material
- Menu (nicht MenuItem(), da dies kein Objekt ist)
- Mesh
- Movie
- Music
- Network
- Node
- Particle
- RegularExpression
- SerialPort
- Sound
- Sound3D
- Sprite
- StatusBar
- Texture
- ToolBar
- Window
- Window3D
- XML