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:Les Enumérations sont fortement recommandées si vous souhaitez utiliser des constantes séquentielles pour identifier vos objets.- 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é.
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'imageExemple
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 automatiquementExemple
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" NextExemple
#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
- 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