Les objets PureBasic

Introduction

L'objectif de ce chapitre est d'assimiler la création et la manipulation des objets en PureBasic. Pour cette présentation nous allons utiliser l'objet Image, mais la même logique s'applique à tous les autres objets PureBasic. Quand nous voulons créer une image, nous avons deux possibilités: la méthode indexée et la méthode dynamique.

I. Les objets indexés

La manière indexée (statique) permet de référencer un objet à l'aide d'une valeur numérique que nous déterminons. Elle doit être comprise entre 0 et un nombre maximum qui va dépendre du type de l'objet (en principe entre 5000 et 64000). Ainsi, si vous utilisez la valeur 0 pour votre premier objet et la valeur 1000 pour votre deuxième objet, il y aura 1001 index de disponibles et 999 seront inutilisés, ce qui n'est pas très efficace (gâchis de mémoire vive). C'est pour cette raison qu'il faut autant que possible utiliser une indexation sequentielle, qui commence à 0. Si vous avez besoin d'une méthode plus flexible, il vous faudra probablement utiliser la méthode dynamique, décrite dans la section II. La méthode indexée offre plusieurs avantages:

- Manipulation plus facile, pas besoin de variables ni de tableaux.
- Manipulation 'Groupée' sans avoir à utiliser de tableaux supplémentaires.
- Utilisation des objets dans les procédures sans avoir à déclarer de globales (si on utilise une constante ou un nombre).
- Destruction automatique des objets précédents quand un index est réutilisé.
Les Enumérations sont fortement recommandées si vous souhaitez utiliser des constantes séquentielles pour identifier vos objets.

Exemple

  CreateImage(0, 640, 480) ; Crée une image à l'index n°0 dans l'indexation des images
  ResizeImage(0, 320, 240) ; Redimensionne l'image n°0 et modifie le handle de l'image

Exemple

  CreateImage(2, 640, 480) ; Crée une image à l'index n°2 dans l'indexation des images
  ResizeImage(2, 320, 240) ; Redimensionne l'image n°2 et modifie son @ReferenceLink "handles" "handle"
  CreateImage(2, 800, 800) ; Crée une nouvelle image à l'emplacement n°2. L'ancienne image n°2 est désallouée automatiquement

Exemple

  For k = 0 To 9
    CreateImage(k, 640, 480) ; Crée 10 images, aux emplacements 0 à 9
    ResizeImage(k, 320, 240) ; Redimensionne les images de moitié et modifie son @ReferenceLink "handles" "handle"
  Next

Exemple

  #ImageBackground = 0
  #ImageButton     = 1

  CreateImage(#ImageBackground, 640, 480) ; Crée une image à l'emplacement #ImageBackground (0)
  ResizeImage(#ImageBackground, 320, 240) ; Redimensionne l'image 0 (ImageBackground)  et modifie son @ReferenceLink "handles" "handle"
  CreateImage(#ImageButton    , 800, 800) ; Crée une image (n°1)

II. Les objets dynamiques

Quelquefois, les objets indexés ne sont pas pratiques pour gérer des situations où l'on ne connaît pas à l'avance le nombre d'objets nécessaire à un instant donné. Pour cela PureBasic permet de créer très facilement des objets dynamiques. Les deux méthodes (indexée et dynamique) peuvent être utilisées en même temps sans risque de conflit. Pour créer un objet dynamique, il suffit de spécifier la constante #PB_Any à la place du numéro et un numéro dynamique sera retourné comme résultat de la fonction. Cette manière de gérer les objets se marie bien avec les listes, qui sont aussi un moyen dynamique de gérer des données.

Exemple

  DynamicImage1 = CreateImage(#PB_Any, 640, 480) ; Crée une image dynamiquement
  ResizeImage(DynamicImage1, 320, 240) ; Redimensionne l'image 


Code complet d'exemple de gestion dynamique d'objets avec une liste chainée:

Exemple

MDI_ImageViewer.pb

Présentation des différents objets PureBasic

Différents objets PureBasic (Windows, gadgets, sprites, etc) peuvent utiliser la même énumération de numéros d'objet et pas d'autres. Ainsi, chacun des objets suivants peuvent être énumérés en commençant à 0 (ou autre valeur) car PureBasic les gère par leur type:
- Database
- Dialog
- Entity
- File
- FTP
- Gadget (ScintillaGadget() inclus)
- Gadget3D
- Image
- Library
- Light
- Mail
- Material
- Menu (sauf les MenuItem() qui ne sont pas des objets)
- Mesh
- Movie
- Music
- Network
- Node
- Particle
- RegularExpression
- SerialPort
- Sound
- Sound3D
- Sprite
- StatusBar
- Texture
- ToolBar
- Window
- Window3D
- XML