Introduction

PureBasic est un langage de programmation de "haut niveau" basé sur les règles du langage BASIC. Il est identique à tout autre compilateur BASIC que vous auriez pu déjà utiliser, sur PC ou Amiga. PureBasic a été créé pour être aussi accessible au débutant qu’à l’expert, il est donc très facile à apprendre. La compilation est très rapide, presque instantanée. Nous avons consacré beaucoup de temps et d’efforts pour vous proposer un langage rapide, fiable et convivial.

La syntaxe de PureBasic est simple, mais ses possibilités sont infinies grâce à certaines caractéristiques évoluées comme, entre autres, les pointeurs, structures, procédures, listes dynamiques, etc. Le programmeur expérimenté n’aura aucune difficulté à accéder aux structures du système d’exploitation et aux API’s.

PureBasic est un langage portable qui fonctionne actuellement sur AmigaOS (680x0 et PowerPC) et sur les ordinateurs PC dotés du système d’exploitation Windows ou Linux. Cela signifie qu’un même programme peut être compilé sur chacune de ces machines et en exploiter toute la puissance. PureBasic est un compilateur. Il n’utilise donc pas de code intermédiaire ou de machine virtuelle, mais produit un code optimisé directement exécutable par la machine ou le système d’exploitation sur lequel il est compilé. Les librairies externes sont écrites et optimisées manuellement en assembleur. Les commandes sont donc très rapides, souvent plus rapides que leurs équivalentes écrites en langage C/C++.

Caractéristiques techniques

- Supporte les microprocesseurs 486, Pentium, Athlon, 680x0, PowerPC
- Définitions intégrées de tableaux, listes dynamiques, structures complexes, pointeurs et variables
- Types supportés : Byte (8 bits), Word (16 bits), Long (32 bits), Flottant (32 bits), ainsi que les types définis par l’utilisateur (structures)
- Définition intégrée des chaines de caractères avec de nombreuses fonctions dédiées
- Support des constantes et valeurs octales et hexadécimales
- Réducteur d'expression (regroupement des constantes et valeurs explicites)
- Calcul arithmétique standard avec respect de la priorité des opérateurs et parenthèses : +, -, /, *, and, or, lsl, asl, lsr, asr
- Compilation très rapide (environ 300 000 lignes/minute sur un Pentium 200)
- Support des procédures pour une programmation structurée avec variables globales et locales
- Supporte tous les mots-clé évolués du langage Basic : If-Else-EndIf, Repeat-Until, For-Next, etc.
- Support de librairies externes pour la manipulation d'objets Windows : Images, fenêtres, composants graphiques, DirectX, etc.
- Les librairies externes sont également toutes écrites en langage assembleur optimisé pour plus de rapidité et de compacité
- Les API's de Windows, AmigaOS et Linux sont toutes supportées et considérées comme des mots-clé du BASIC
- Langage assembleur intégré permettant d'insérer toute commande ou routine assembleur dans le corps du programme Basic
- Constantes et structures précompilées pour une compilation encore plus rapide
- Débogueur intégré pour suivre l'exécution d'un programme et corriger les erreurs plus facilement
- Options de conpilation configurables
- Editeur dédié avec syntaxe automatiquement surlignée
- Système convivial, facile à installer, à comprendre et utiliser
- Entièrement en francais

Système nécessaire

- Windows 9x/ME ou Windows NT/2000/XP, AmigaOS 3.1+ ou Linux x86.
- DirectX 7 ou ultérieur pour les graphismes
- Pas d'autres caractéristiques particulières

Informations complémentaires

PureBasic est conçu aussi bien pour les débutants que pour les programmeurs avertis. Nous allons préciser ici quelques caractéristiques importantes qui font de PureBasic un langage très puissant et unique. La première : PureBasic utilise des librairies externes "tierces" très souples d'emploi. Un programme PureBasic peut faire appel à un nombre illimité de librairies. De nombreuses librairies sont fournies avec la version de base de PureBasic. Seules les portions utiles de librairies utilisées sont incorporées dans le logiciel exécutable final, afin d'obtenir une taille aussi réduite que possible. Elles permettent de gérer les fenêtres, le son, les interfaces graphiques, les sprites, les palettes de couleurs, OpenGL, etc. Ces librairies, écrites en assembleur, le langage le plus rapide, ont un niveau de performance équivalent au langage PureBasic.

Note: Tout utilisateur de PureBasic peut créer ses propres librairies. Les outils nécessaires sont fournis avec la version complète. Dans la version PC de PureBasic, les librairies peuvent être écrites en langage C ou assembleur.

Le système de structures et pointeurs permet au programmeur avancé d'accéder simplement aux composants du système d'exploitation par le biais de commandes Basic classiques. Toutes les fonctions Windows sont regroupées dans un (grand) fichier contenant toutes les constantes et structures nécessaires. Des fichiers 'include' sont également fournis. Ils peuvent être facilement corrigés en cas d'erreur. Un utilitaire est également fourni pour vous aider à convertir les fichiers include C ou C++ et vous faire gagner beaucoup de temps et d'efforts.

Les inconditionnels de l'assembleur (nous en faisons partie! :-)) pourront compiler leurs programmes PureBasic tout en obtenant le fichier source complet en assembleur commenté du programme compilé, directement recompilable avec l'assembleur Fasm. Il n'a jamais été aussi simple d'optimiser et de garder un contrôle complet du code généré par un compilateur Basic.

PureBasic a lui-même été programmé avec un grand souci de modularité. Pour cette raison, il peut supporter tout type de microprocesseur et de système d'exploitation. C'est pour cette raison qu'il fonctionne actuellement sur deux types d'ordinateurs très différents : l'Amiga et le PC.


Licence et Conditions

Ce programme est proposé sans aucunes garanties. Fantaisie Software ne peut en aucun cas être tenu responsable des dégâts occasionnés par PureBasic. Vous utilisez ce logiciel à vos risques et périls.

La version de démonstration de PureBasic peut être distribuée librement tant que le contenu de l'archive reste intacte. Il n'est permis de modifier, changer l'organisation de l'archive sans la permission écrite de Fantaisie Software.

La version complète de PureBasic ne doit en aucun cas être cédée à une personne autre que l'acheteur du logiciel.

Fantaisie Software détient tous les droits sur PureBasic et ses composants. Aucun module ne peut être utilisé dans une autre application sans l'autorisation de Fantaisie Software. Il est interdit d'encapsuler ou d'utiliser directement les commandes de haut niveau de PureBasic dans un autre langage de programmation que ce soit sous forme de bibliothèques dynamiques (DLL) ou statiques. Cette règle ne s'applique pas pour les utilisateurs possédant une licence de PureBasic.

PureBasic utilise le moteur 3D OpenSource OGRE et sa licence peut être consultée ici.
Les sources modifiées spécialement pour PureBasic du moteur 3D OGRE peuvent être téléchargées à l'adresse suivante: http://www.purebasic.com/OgreSources.zip.

PureBasic utilise la bibliothèque OnError, écrite et (c) 2003 par Siegfried Rings et Sebastian Lackner.

PureBasic utilise le composant d'édition Scintilla et sa licence peut être consultée ici.


Configuration système requise

PureBasic fonctionne sur n'importe quel système Windows (Windows 95/98/Me, Windows NT/2000 et Windows XP), AmigaOS (3.0 ou ultérieur), Linux (noyau 2.2 ou ultérieur) et MacOS X (10.2 (Jaguar) ou ultérieur).

Si vous rencontrez un problème sur l'une des configurations ci-dessus, n'hésitez pas à nous en informer.

Linux

Paquets nécessaires pour utiliser PureBasic sous Linux:

- sdl 1.2 devel (pour les commandes multimédias)
- gtk 1.2+ devel or/and gtk 2+ (Pour les programmes GUI)
- gcc correctement installé
PureBasic a été testé avec succès sur les configurations suivantes (cela ne veut pas dire qu'il ne fonctionne que sur celles-ci):

- Redhat 7.0, 7.2, 7.3, 8.0 et 9.0
- Mandrake 6.1, 8.0, 10.0 et 10.1
- Suse 7.3, 8.0 et 9.0
- Debian

MacOS X

Les outils de développement Apple (Apple Developer Tools) doivent être installés avant de pouvoir utiliser PureBasic. Ils sont fournis sur les CDs (ou DVD) d'installation de MacOS X ou disponible sur le site web d'Apple: http://developer.apple.com/


Installation

Pour installer PureBasic, cliquez sur l'icone d'installation et suivez les instructions. Cliquez ensuite sur l'icone PureBasic qui se trouve dans le menu démarrer ou sur le bureau.

Pour utiliser le compilateur en ligne de commande, il est conseillé de rajouter le répertoire "compilers\" de l'installation PureBasic à la variable d'environnement 'PATH'. Ainsi la commande 'pbcompiler' sera accessible à partir de n'importe quelle console.


PureBasic - Manuel de référence

Manuel de référence

Démo du panneau de navigation (Table of Contents.hhc) pour Fred MAJ 27/04/2006

L'IDE PureBasic

Débuter avec l'IDE
Gestion des fichiers
Edition du code
Compilation d'un programme
Utiliser le débogueur
Utiliser les outils de débogage
Les outils intégrés
Les outils externes
Obtenir de l'aide
Configurer l'IDE
Commutateurs de la ligne de commande

Thèmes généraux

Utiliser l'éditeur visuel
Utiliser le compilateur SHELL
Règles de syntaxe générales
Variables, Types et Opérateurs

Mots clefs de base

Break : Continue
For : Next
ForEach : Next
Gosub : Return
If : Else : EndIf
Repeat : Until
Select : EndSelect
While : Wend
Autres commandes

Tableaux, Listes et Structures

Define
 Dim : ReDim
Enumeration : EndEnumeration
Interface : EndInterface
NewList
Structure : EndStructure
With : EndWith

Procédures et portées des variables

Procedure : EndProcedure
Global
Protected
Shared
Static

Mots clefs avancés

Import : EndImport
Macro : EndMacro
Prototype
Pseudotype

Thèmes divers

Les objets PureBasic
Numéros et Identifiants (Handles)
Gestion des messages Windows
Pointeurs et accès mémoire
Data (stockage de données)
Commandes de débogage
Les fonctions 'Include'
Les directives du compilateur
Les fonctions du compilateur
L'assembleur en ligne x86
Construire une DLL
Unicode
Utiliser plusieurs versions de PureBasic

Informations supplémentaires

Bases numériques / Table d'équivalence Dec/Bin/Hexa
Formules mathématiques (géométrie 2D)
Table des codes ASCII et leur correspondance
Table des couleurs
Numéros de port (réseau)
Liens internet utiles

Bibliothèques générales

2D Drawing
AudioCD
Cipher
Clipboard
Console
Database
Date
Desktop
File
FileSystem
Font
Gadget
Help
Image
ImagePlugin
Library
Linked List
Math
Memory
Menu
Misc
Movie
Network
OnError
Packer
Preference
Printer
Process
Requester
Sort
StatusBar
String
SysTray
Thread
Toolbar
Window

Bibliothèques pour les jeux 2D

Joystick
Keyboard
Module
Mouse
Palette
Sprite & Screen
Sprite3D
Sound
SoundPlugin

Bibliothèques pour les jeux 3D

Engine3D
Billboard
Camera
Entity
Light
Material
Mesh
Particle
Terrain
Texture

Index des commandes intégrées

Index des commandes


Débuter avec l'IDE

L'IDE PureBasic est un environnement complet qui permet la création et l'édition de fichiers sources, leurs compilation, débogage ainsi que la création de l'exécutable final. Il sert d'interface au compilateur ainsi qu'au débogueur.

La fenêtre principale de l'IDE se divise en 3 parties:

La zone d'édition du code (en dessous de la barre d'outils)
Tous les codes sources sont affichés ici. Il est possible de passer de l'un vers l'autre à l'aide des onglets situés entre la barre d'outils et la zone d'édition.

La palette d'outils (par défaut située à droite de la zone d'édition)
La palette contient plusieurs outils rendant la programmation plus facile et plus productive. Les outils affichés ici peuvent être configurés, déplacés ou même enlevés si besoin est. Voir Configurer l'IDE pour plus de renseignements.

Le rapport d'activité (situé en dessous de la zone d'édition)
Les erreurs de compilation ainsi que les messages d'erreur du débogueur seront affichés dans cette partie. Il peut être visible ou caché séparément pour chaque fichier.

Le reste de l'interface se compose du menu principal et de la barre d'outils. Cette dernière est simplement un raccourcis des fonctions disponibles dans le menu et peut être complètement paramétrée (chaque fonction du menu peut être enlevée, déplacée ou ajoutée à la barre d'outils). Pour savoir ce que fait un bouton, il suffit de laisser le pointeur de la souris dessus un court instant et une aide apparaîtra (et affichera la fonction du menu correspondante). Les commandes du menu sont expliquées dans une autre section.


Gestion des fichiers

Le menu "Fichier" permet de réaliser les opérations de base tel que l'ouverture ou l'enregistrement des fichiers.

Il est possible d'éditer plusieurs codes sources simultanément, et de passer de l'un à l'autre grâce aux onglets situés sous la barre d'outils. Par défaut, les raccourcis claviers Ctrl+Tab et Ctrl+Shift+Tab permettent de passer au fichier suivant (ou précédent).

Contenu du menu "Fichier"

Nouveau
Créé un nouveau code source vide.

Ouvrir
Ouvre un code source existant pour l'éditer.

L'IDE supporte les fichiers textes ASCII avec les terminaisons de ligne de Windows (CRLF), Unix (LF) et MacOS X (CR). Le fichier sera enregistré dans le même format que celui qu'il avait lors de son ouverture. Néanmoins, il est possible de forcer le format du fichier dans les options de compilation.

L'IDE peut aussi être configuré pour gérer l'UTF-8 (voir Configurer l'IDE pour plus d'informations).

Les fichiers de type 'texte' seront tous chargés dans la zone d'édition. Il est aussi possible d'ouvrir des fichiers binaires et dans ce cas ils seront ouverts par le visualisateur de fichier interne.

Enregistrer
Enregistre le source en cours d'édition sur le disque. Si il n'a pas encore été enregistré, son nom et son emplacement devra être défini à l'aide de la fenêtre de dialogue, sinon le code sera enregistré dans le fichier précédent.

Enregistrer sous
Enregistre le code source en cours d'édition à un emplacement différent. Une boîte de dialogue demandant le nom du nouveau fichier sera affichée. L'ancien code source restera inchangé.

Enregistrer tout
Enregistre tous les codes source ouverts.

Fermer
Ferme le code source en cours d'édition. Si c'était le dernier fichier, l'IDE affichera un nouveau fichier vide.

Fermer tout
Ferme tous les codes source en cours d'édition. L'IDE affichera un nouveau fichier vide.

Trier les sources
Quand plusieurs fichiers sont ouvert en même temps, ils sont affichés dans les onglets situés en dessous de la barre d'outils. Cette fonction permet de changer l'ordre dans lequel les codes sources sont affichés sans les fermer puis les ré-ouvrir.

Une liste contenant tous les codes sources ouverts sera affichée, et chaque source pourra être monté ou descendu. Le fichier le plus en haut sera le fichier le plus à gauche.

Préférences
Cette fenêtre permet de contrôler le look et le comportement de l'IDE pour qu'il s'adapte aux besoins de chacun. Pour une description détaillée des fonctions disponibles, voir Configurer l'IDE.

Fichiers récents
Le sous-menu affiche la liste des dix derniers fichiers ouverts. Sélectionner un fichier dans le sous-menu l'ouvrira à nouveau.

Quitter
Cela permet bien entendu de quitter l'IDE. Si un ou plusieurs fichiers ne sont pas enregistrés, une confirmation pour chacun des fichiers sera demandée.


Edition du code

L'IDE du PureBasic se comporte comme un éditeur de texte classique en ce qui concerne la saisie de texte. Les touches de curseur, Page précédente, Page suivante, Début et Fin permettent de se déplacer dans le code. Ctrl+Début se rend au début du code et Ctrl+Fin se déplace à la fin.

Les raccourcis par défaut Ctrl+C (copier), Ctrl+X (couper) et Ctrl+V (coller) servent à l'édition. La touche Insérer change le mode d'édition pour déterminer si le texte doit etre remplacé ou ajouté (le mode par défaut est l'ajout). La touche Supprimer supprime une lettre à droite du curseur. Maintenir la touche Shift appuyée et utiliser les flèches permet de sélectionner du texte.

Au delà des fonctions de base, l'IDE a de nombreuses fonctionnalités dédiées à la programmation PureBasic.

Indentation

Quand un retour à ligne est effectué, la nouvelle ligne aura la même indentation (nombre d'espaces/tabulations en début de ligne) que la précédente.

Caractères de tabulation

Par défaut, l'IDE n'insère pas une vraie tabulation quand la touche Tab est utilisée. En cas d'échange de source, ceci permet d'éviter les problèmes d'affichage inhérents aux normes de tabulation utilisées.

A la place, deux caractères espaces sont insérés. Ce comportement peut être modifié dans les préférences de l'IDE (voir Configurer l'IDE).

Comportement particulier de la touche Tab

Quand la touche Tab est utilisée alors que la sélection est vide ou ne contient que quelques caractères, elle agit comme décrit ci-dessus (insertion d'un nombre d'espaces, ou d'une vraie tabulation selon le réglage défini dans les préférences de l'IDE).

Quand la touche Tab est utilisée alors qu'une ou plusieurs lignes complètes sont sélectionnées, des espaces (ou des tabulations, en fonction de la configuration) sont insérés au début de chaque ligne. Cela permet d'indenter rapidement des blocs complets de code.

Quand la combinaison de touches Shift+Tab est utilisée alors que plusieurs lignes sont sélectionnées, les espaces/tabulations au début de chaque ligne sont supprimés afin de réduire l'indentation du bloc complet.

Double-cliquer sur un mot

En principe, double-cliquer sur un mot le sélectionne. Néanmoins, dans quelques cas, le comportement est différent:

Maintenir la touche Ctrl appuyée et double-cliquer sur le nom d'une procédure , définie dans le même fichier, permet de se rendre directement à sa déclaration.

Double-cliquer sur un mot clef IncludeFile ou XincludeFile ouvrira le fichier dans l'IDE (le nom du fichier doit être spécifié en entier, sans utiliser de constante par exemple).

De la même manière, double-cliquer sur le mot clef IncludeBinary aura pour effet d'ouvrir le fichier dans le visualisateur de fichier intégré à l'IDE.

Aide syntaxique dans la barre d'état

L'IDE affichera les paramètres nécessaires pour chaque fonction PureBasic qui est en cours de frappe. Cela rend plus facile la saisie, en montrant les paramètres qui sont indispensables. Cela fonctionne aussi pour vos propres procédures, mais seulement si leur déclaration se trouve dans le même fichier source et pas dans un fichier inclus.

Options de pliage

Quand un mot-clef de pliage est rencontré (Procedure / EndProcedure par défaut, d'autres peuvent être ajoutés) l'IDE marque la région délimitée par ces deux mots-clefs par un [+] sur la ligne du premier mot et une ligne verticale jusqu'à la fin du bloc.

En cliquant sur le [+], il est possible de cacher (replier) le contenu du bloc pour garder une meilleure vue d'ensemble sur les codes sources conséquents. Le [+] se transformera alors en [-]. En cliquant de nouveau dessus, le code sera de nouveau affiché (déplié).

Note: Même si l'état des blocs est préservé lors de l'enregistrement du fichier, le fichier lui-même contient bien sûr toutes les lignes de codes. Cette option affecte seulement l'affichage du code source, pas son contenu.

Deux autres délimiteurs de replis sont activés par défaut: ";{" et ";}". Comme ";" marque le début d'un commentaire en PureBasic, ils seront ignorés par le compilateur. Néanmoins, ils permettent de placer des délimiteurs à des endroits arbitraires qui ne correspond pas forcément à un mot clef PureBasic.

Auto-complétion

Pour ne pas avoir à se souvenir de tous les noms des commandes PureBasic, il y a l'auto-complétion qui peut rendre bien des services.

Après avoir tapé le début du nom de la commande, appuyez sur Ctrl+Espace pour afficher la liste des commandes possibles qui débute par ce mot. Une fois le mot sélectionné à l'aide des flèches, il peut être inséré dans le code source en appuyant sur la touche Tab ou Entrée.

Il est aussi possible de continuer à taper les lettres pendant que la liste est affichée, pour réduire le choix. Si plus aucune proposition n'est disponible, alors la boîte se fermera automatiquement.

La touche Echappement permet de fermer la liste à tout moment. La liste se ferme aussi automatiquement si un bouton souris est utilisé dans l'IDE.

Note: Pour configurer le contenu qui sera affiché dans la liste d'auto-complétion, ainsi que ses nombreuses fonctionnalités, voir Configurer l'IDE. Par exemple, il est possible de faire apparaître la liste automatiquement sans avoir besoin d'appuyer sur Ctrl+Espace.

Panneau d'outils

La plupart des outils qui rendent la navigation et l'édition de code sources plus aisée peuvent être ajoutés au panneau d'outils située sur le côté de la zone d'édition. Pour avoir un aperçu des outils disponibles et pour les configurer, voir Les outils intégrés.

Le menu édition

Les rubriques suivantes expliquent les commandes disponibles dans le menu édition. A noter que bon nombre de ces commandes sont aussi présentes dans le menu contextuel de la zone d'édition.

Annuler
Annule la dernière action effectuée dans la zone d'édition. Il est possible d'annuler plusieurs actions à la suite.

Rétablir
Refait la dernière action annulée par la commande "Annuler".

Couper
Copie le texte sélectionné dans le presse-papier et le supprime du code.

Copier
Copie le texte sélectionné dans le presse-papier.

Coller
Insère le contenu du presse-papier dans le code, à la position du curseur. Si une partie du code était sélectionnée, elle sera alors remplacée par le contenu du presse-papier.

Insérer commentaires
Insère un commentaire (";") au début de chaque ligne sélectionnée. Cela permet de commenter rapidement un nombre conséquent de lignes.

Supprimer commentaires
Enlève le commentaire (";") du début de chaque ligne sélectionnée. Cela permet de dé-commenter rapidement un nombre conséquent de lignes. C'est la fonction inverse de "Insérer commentaire", mais elle fonctionne aussi sur des commentaires entrés manuellement.

Sélectionner tout
Sélectionne le code source en entier.

Aller à
Permet de se rendre à la ligne indiquée dans le code source.

Ligne récente
L'IDE garde une trace des lignes qui sont visualisées. Par exemple, si la position du curseur est changée par la commande "Aller à" ou en cliquant sur l'outil Navigateur de procédures, cette fonction permet de revenir rapidement à la ligne précédente. L'IDE retient 20 positions différentes.

A noter que l'enregistrement ne se fait que si le déplacement est conséquent (ex: pas si les touches haut/bas sont utilisées).

Changer le pliage courant
Change l'état du point de repli associé à la ligne courante (le déplier ou le replier le cas échéant).

Plier/Déplier tout
Change l'état de tous les points de replis dans le code source, très utile pour cacher toutes les procédures d'un code source (ou pour ré-afficher le code complet en une seule fois).

Ajouter/Supprimer un marqueur
Cette commande permet d'ajouter un marqueur sur la ligne courante (ou de le retirer si il y en avait déjà un). Un marqueur permet de retrouver rapidement une ligne de code. Il est identifié par une petite flèche horizontale (verte, par défaut) à côté de la ligne concernée. Il est possible de passer de marqueur en marqueur en utilisant la commande "Marqueur suivant".

Note: Pour ajouter/retirer un marqueur à l'aide de la souris, il faut maintenir la touche Ctrl appuyée pendant le clic sur la bordure qui affiche les marqueurs (la colonne de numérotation des lignes n'est pas prise en compte).

Aller au marqueur
Se rend au premier marqueur disponible, situé en dessous de la ligne en cours d'édition. Si il n'y a plus de marqueur en dessous de cette ligne, la recherche reprend au début du code source. En utilisant le raccourci "Marqueur suivant" (F2, par défaut) plusieurs fois, il est possible de parcourir tous les marqueurs du code très rapidement.

Effacer les marqueurs
Retire tous les marqueurs du code source en cours d'édition.

Chercher/Remplacer
Cette fenêtre permet de rechercher un mot (ou une suite de mots) dans le code source et de les remplacer par d'autres mots si nécessaire.

Le bouton "Chercher suivant" démarre la recherche. La recherche peut continuer une fois un terme trouvé en utiliser la commande du menu "Rechercher à nouveau" (raccourci F3 par défaut).

Pour rendre la recherche plus pointue, les options suivantes sont disponibles:
Respecter la casse : Seul le texte qui est strictement identique au mot recherché sera retenu (les minuscules ne sont pas identiques aux majuscules).
Mots entiers seulement : Recherche seulement les termes qui forment un mot. Les termes qui contiennent le mot recherché ne seront pas retenus.
Ne pas chercher dans les commentaires : Tous les commentaires PureBasic sont exclus de la recherche.
Ne pas chercher dans les chaînes : Tous les contenus des strings (entre " ") sont ignorés.
Rechercher seulement dans la sélection: recherche seulement dans le texte sélectionné. C'est une option très utile quand elle est utilisée en conjonction avec la fonction "Remplacer tout". Dans ce cas, le remplacement ne s'opèrera uniquement que dans la sélection.

En activant la case à cocher "Remplacer par", la fonction remplacer devient disponible. "Chercher suivant" cherchera toujours l'occurrence suivante, et chaque clic sur le bouton "Remplacer" remplacera le texte trouvé par le contenu du champ "Remplacer par".

En cliquant sur "Remplacer tout", tous les termes correspondants à la recherche situés en dessous du curseur seront remplacé (sauf si l'option "Rechercher seulement dans la sélection" est activée).

Chercher suivant
Continue la recherche correspondant à la dernière recherche entamée dans la fenêtre "Chercher/Remplacer".

Chercher dans les fichiers
Cette fonction permet de rechercher parmi tous les fichiers d'un répertoire donné (et optionnellement dans ses sous-répertoires).

Il suffit de spécifier le mot (ou la séquence de mots) à rechercher ainsi que le répertoire de base (champ "Répertoire"). Il est possible d'indiquer des filtres pour inclure uniquement les fichiers voulus (ex: *.pb). Plusieurs filtres peuvent être spécifiés, en les séparant par une virgule "," (un filtre vide ou *.* recherche dans tous les fichiers). Des options similaires à la fenêtre "Chercher/Remplacer" sont disponibles pour rendre la recherche plus pointue.

La case à cocher "Inclure les sous-répertoires" permet de rechercher dans tous les sous-répertoire (d'une manière récursive) du répertoire de base.

Quand la recherche débute, une fenêtre indépendante sera ouverte pour afficher les résultats de la recherche en indiquant le fichier, le numéro de la ligne ainsi que le contenu de la ligne.

En double-cliquant sur une des lignes, le fichier sera automatiquement ouvert dans l'IDE à la ligne concernée.


Compilation d'un programme

La compilation d'un programme est facile, il suffit de sélectionner 'Compiler/Executer' (raccourcis F5 par défaut) et le code sera compilé et exécuté.
Les "Options de compilation" permettent de paramétrer le processus de compilation. Les choix effectués sont associés à chaque fichier et sont persistants, même quand le fichier est fermé. Par défaut ces paramètres sont écrits à la fin du fichier, sous forme de commentaires (invisibles quand le fichier est chargé par l'IDE). Il est possible de changer cet emplacement si, par exemple, un outil de gestion de versions tel que CVS est utilisé (pour éviter les conflits entre les utilisateurs qui auront chacun leurs propres paramètres en fin de fichier).

Si une erreur est rencontrée lors de la compilation, un message sera affiché en indiquant la ligne incriminée. Ce message sera aussi ajouté dans le rapport d'activité.

Le menu "Compilation"

Compiler/Exécuter
Lance la compilation du code source en cours d'édition en tenant compte de ses options de compilation. Le programme est créé dans un répertoire temporaire, mais il sera exécuté comme si il avait été lancé à partir du répertoire du code source (donc charger un fichier de ce répertoire fonctionnera).
Le code source n'a pas besoin d'être enregistré pour être compilé (mais les fichiers qu'il inclut doivent être enregistrés).

La commande "Compiler/Executer" utilise le paramétrage du débogueur (actif ou inactif), qu'il soit défini à partir du menu ou des options de compilations (les deux reviennent au même).

Exécuter
Exécute le dernier programme compilé une nouvelle fois. Tout changement concernant le débogueur (actif ou inactif) ne sera pas pris en compte par cette commande.

Compiler avec le débogueur
Lance la compilation de la même manière que la commande "Compiler/Exécuter", en forcant l'utilisation du débogueur. Cela permet de tester rapidement une compilation avec le débogueur lorsqu'il est normalement désactivé.

Compiler sans le débogueur
Lance la compilation de la même manière que la commande "Compiler avec le débogueur", en désactivant le débogueur.

Relancer le compilateur (Windows uniquement)
Relance le compilateur et réinitialise toutes les bibliothèques et résidents chargées (sous Windows, le compilateur se lance lors du démarrage de l'IDE et se met en attente pour une plus grande rapidité). Cela a pour effet de mettre à jour la liste des fonctions, structures, interfaces et constantes reconnues par l'IDE. Cette commande permet de charger une nouvelle bibliothèque utilisateur nouvellement installée sans redémarrer l'IDE. De plus, pour les développeurs de bibliothèques, cela facilite le test en évitant de relancer l'IDE.

Options de compilation
Ouvre la fenêtre d'options, qui permet d'ajuster les paramètres concernant la compilation du code source en cours d'édition.

La fenêtre d'options de compilation

Fichier principal
En activant cette option, il est possible de définir un fichier principal pour la compilation du fichier actuel. Ce sera ce fichier qui sera alors utilisé lors de la compilation et non le fichier en cours d'édition.

Note: quand cette option est utilisée, le fichier en cours d'édition doit être enregistré avant de lancer la compilation, sinon les modifications ne seront pas prises en compte (car les fichiers inclus sont chargés à partir du disque). La plupart des options de compilation seront héritées du fichier principal, seuls les paramètres concernant le débogueur et la ligne de commande seront propres au fichier actuel.

Icone (Uniquement pour Windows et MacOS X)
Il est possible de spécifier une icône qui sera associée à l'exécutable et affichée dans l'Explorateur Windows (ainsi que dans le coin supérieur gauche des fenêtres du programme et dans la barre des tâches). Note: Cette option est prise en compte uniquement lors de la création d'un exécutable final, pas lors d'un "Compiler/Exécuter"

Activer le débogueur
Active ou désactive l'utilisation du débogueur pour ce fichier source (et pour le fichier principal également si celui-ci est spécifié). Cette option peut aussi être changée à partir du menu.

Activer le support de l'assembleur en ligne
Active l'assembleur en ligne, ce qui permet de mixer librement du code assembleur avec du code BASIC. Voir la section "Inline x86 ASM" pour plus d'informations.

Créer un exécutable unicode
Informe le compilateur qu'il doit utiliser les routines unicode lors de la création de l'exécutable. Les fonctions de gestion des chaînes de caractères ainsi que toutes les fonctions PureBasic fonctionneront en unicode. Pour pouvoir exploiter les chaînes de caractères unicode directement à partir du code source, il est recommandé d'activer l'encodage UTF-8 (voir plus ci-dessous).

Pour déboguer un programme unicode, il faut sélectionner le débogeur autonome dans les préférences, car le débogueur qui est intégré à l'IDE ne peut pas, pour l'instant, afficher du texte unicode (le texte est converti en ascii avant affichage).

Créer un exécutable multi-threadé
Informe le compilateur qu'il doit utiliser les routines multi-threadées lors de la création de l'exécutable (voir la bibliothèque Thread pour plus d'information).

Ce mode permet aussi au débogueur d'afficher correctement les informations si des threads sont utilisés. Sans cette option, le débogueur peut afficher un numéro de ligne érroné si une erreur intervient à l'intérieur d'un thread.

Activer le support des skins XP (Uniquement pour Windows)
Ajoute un fichier permettant la gestion des skins, lorsque le programme est exécuté sur Windows XP (fortement recommandé).

Activer le support des lignes OnError (Uniquement pour Windows)
Ajoute des informations dans l'exécutable pour pouvoir identifier la ligne qui a provoqué une erreur (à utiliser en combinaison avec les commandes de la bibliothèque OnError). Cette option influe légèrement sur les performances du programme.

Sous-système (Uniquement pour Linux/MacOSX)
Il est possible ici de sélectionner le sous-système à utiliser lors de la compilation. Pour l'instant, les sous-systèmes suivant sont supportés: Windows
nt4 : utilise les bibliothèques DirectX3 pour être compatible avec Windows NT 4.
opengl : utilise l'OpenGL pour les bibliothèques sprite et sprite3D.

Linux
gtk2 : utilise GTK+2 à la place de GTK+1.2 pour les bibliothèques concernées (Window, Gadget etc.). Nécessite le package 'gtk2-dev'

MacOSX
gtk : utilise GTK+1.2 à la place de Carbon pour les bibliothèques concernées (Window, Gadget etc.). Nécessite la surcouche X-Window pour MacOS X ansi que les bibliothèques de développement gtk-dev (qui peuvent être installées facilement à l'aide de Fink).
gtk2 : utilise GTK+2 à la place de Carbon (même chose que gtk).
Par défaut, les applications MacOS X utilisent l'interface native Carbon.

Format des exécutables
Permet de déterminer le type de l'exécutable qui sera généré:
Windows : format par défaut sous Windows, convient pour tout type d'applications.
Console : un exécutable avec une console par défaut. Il est toujours possible de créer des fenêtre, boutons etc. avec ce type d'exécutable, mais une console sera toujours ouverte quand le programme est exécuté. Si le programme est exécuté à partir d'une ligne de commande, il utilisera ce terminal pour les sorties textes, là où un programme du type "Windows" nécessite la création d'une nouvelle console (à l'aide d'OpenConsole()). Si un programme peut avoir son entrée ou sa sortie redirigée (au travers de 'pipes'), cette option doit être utilisée.
DLL Partagé : crée une DLL Windows. Voir "Créer une DLL" pour plus d'informations.
Note: Quand un code source de type DLL est lancé avec "Compiler/Exécuter", il sera traité comme un programme classique, pour permettre de tester facilement les fonctions de la DLL. La DLL sera réellement créée en appellant la commande "Créer un exécutable"

Optimisations CPU (à coté de "Format de l'exécutable")
Cette option permet d'inclure des fonctions spécialement optimisées pour un type de processeur, lorsqu'elles sont disponibles.
Tout CPU : Les fonctions génériques qui fonctionnent sur tous les processeurs seront utilisées.
CPU Dynamique : Les fonctions génériques ainsi que les fonctions spécifiques à tous les CPU supportés seront intégrées à l'exécutable. Le choix des fonctions à utiliser se fera au démarrage de l'exécutable, en détectant dynamiquement le processeur sur lequel il est lancé. Cela crée des exécutables plus gros, mais que seront aussi rapides que possible.
Les autres options : Les fonctions spécifiques à un CPU seront utilisées (ainsi que les fonctions génériques pour celle qui n'ont pas de version spécifiques). L'exécutable ne fonctionnera que sur le processeur choisi.

Note: Pour le moment, aucune fonction de PureBasic n'intègre de version spécifique, mais quelques bibliothèques utilisateurs en propose.

Ligne de commande
Le texte spécifié dans ce champ servira de ligne de commande pour le programme lorsque qu'il sera exécuté à partir de l'IDE. Cette option n'a aucun effet sur l'exécutable final.

Encodage des sources
Permet de choisir quel encodage sera utilisé lors de l'enregistrement du code source. L'encodage UTF-8 est fortement recommandé pour le développement d'un programme unicode, car les caractères unicodes peuvent être saisis directement dans l'IDE. De plus les fichiers UTF-8 peuvent aussi être utilisés pour compiler des programmes en mode ascii, ce qui permet de gérer les modes unicodes et ascii de manière transparente.

Quand l'encodage UTF-8 est sélectionné, l'IDE ajoute automatiquement un BOM (Byte Order Mark) au début du fichier, pour que le compilateur PureBasic et les autres programmes puissent identifier correctement l'encodage du fichier.

Format des sources
Cette fonctionnalité n'affecte pas la compilation, mais permet de définir le format utilisé par le code source lorsqu'il sera enregistré sur le disque. Ce paramètre est déterminé automatiquement lors du chargement initial du fichier (ou utilise la valeur par défaut lors de la création de nouveaux sources). Si le format est modifié, alors le fichier utilisera ce format la prochaine fois qu'il sera enregistré sur le disque.

Pour pemettre la portabilité totale des sources sur les différentes plateformes que PureBasic supporte, l'IDE gère plusieurs type de format de fichiers textes. Par contre, les autres programmes n'en feront probablement pas de même donc il est conseillé, si possible, de garder le format natif de l'OS.

Informations de version

Si cette fonction est activée, une 'ressource' sera ajoutée à l'exécutable final contenant les informations de version du programme. Il est possible de les consulter en utilisant l'explorateur Windows et de sélectionner 'Propriétés' dans le menu contextuel. D'autres outils peuvent utiliser ces informations, comme par exemple les installateurs de programmes.

Les champs marqués avec une '*' sont indispensables, sinon les informations ne seront pas affichées correctement sur toutes les versions de Windows.
Les deux premiers champs doivent contenir 4 nombres séparés par des virgules. Tous les autres champs peuvent contenir n'importe quel texte. Dans les 3 boites vides, il est possible de définir ses propres champs à inclure dans les informations de version.

Dans tous les champs texte, il est possible d'intégrer des tags spéciaux qui seront remplacés par leur valeur associée lors de la compilation:
%OS : remplacé par la version de Windows utilisée pour compiler le programme.
%SOURCE : remplacé par le nom du fichier source (sans son chemin).
%EXECUTABLE : remplacé par le nom de l'exécutable créé (fonctionne uniquement quand "Créer un exécutable" est utilisé).

De plus, il possible d'utiliser n'importe quels tags supportés par la commande FormatDate(). Ils seront alors remplacés par leur valeur par rapport à la date de la compilation (ex: %yy correspondra à l'année de la compilation).

Définition des 3 champs du bas:

Fichier OS
Spécifie l'OS pour lequel ce programme est compilé (utiliser VOS_DOS ou VOS_WINDOWS16 n'a pas vraiment de sens pour un programme PureBasic, ils sont présents uniquement pour avoir une liste exhaustive).

Type du fichier
Défini le type de l'exécutable (ici seuls VFT_UNKNOWN, VFT_APP et VFT_DLL ont un sens pour les programmes PureBasic).

Langue
Spécifie la langue dans laquelle sont décrites ces informations de version.

Resources

Permet d'inclure autant de scripts de ressources (fichiers *.rc) que nécessaire. Ils seront alors compilés et ajoutés à l'exécutable, et accessible dans le programme via les commandes API (étant donné que les ressources sont spécifiques à Windows, PureBasic ne les supporte pas de manière implicite, pour plus de renseignement consultez la MSDN). Pour créer facilement ces scripts, il est conseillé d'utiliser un éditeur de ressources tel que celui présent dans 'PellesC'.


Utiliser le débogueur

PureBasic est fourni avec un puissant débogueur pour trouver rapidement les erreurs et les bugs des programmes. Il permet de contrôler le flux d'exécution du programme, d'observer le contenu des variables, tableaux et listes chaînées, d'afficher des informations de débuggage etc. Il supporte aussi des fonctions avancées tels que l'affichage du contenu des registres (assembleur), voir le contenu de la pile ou d'une zone de mémoire quelconque. Un moniteur de mémoire et de temps CPU est aussi intégré pour surveiller les performances du ou des programmes testés (de façon simultanée).

Pour activer le débogueur, il suffit de choisir "Utiliser le débogueur" dans menu "Débogueur" (ou de l'activer dans les "Options de compilation"). En choisissant le menu "Compiler avec le débogueur", le débogueur sera activé seulement pour une compilation.

Le débogueur du PureBasic se présente sous 3 formes:

- Un débogueur intégré directement dans l'IDE, pour une utilisation facile et rapide. C'est ce débogueur qui propose le plus de fonctionnalités.

- Un débogueur indépendant, qui est utile dans plusieurs cas spéciaux (par exemple si le programme est déjà en cours de débuggage et qu'il doit être exécuté une nouvelle fois) ou pour être utilisé par un éditeur de code tierce. Il propose quasiment toutes les fonctionnalités du débogueur intégré, mais parce qu'il est séparé de l'IDE, la rapidité des commandes est légèrement diminuée.
Ce débogueur n'est pas disponible pour MacOS X pour l'instant.

Un débogueur en ligne de commande uniquement. Le but premier de ce débogueur est de pouvoir tester et développer un programme PureBasic sur un système dépourvu d'environnement graphique (comme un serveur linux), et/ou développer à distance via SSH.

Le type de débogueur à utiliser est sélectionnable dans les préférences.

Bien entendu, quand un programme utilise le débogueur, il fonctionne bien plus lentement. Cela ne devrait pas poser de problèmes majeurs étant donné que la rapidité est toujours acceptable, et que ce mode est utilisé uniquement pendant le développement.
Si quelques parties du programme ont déjà été testées et nécessitent une rapidité maximale même pendant les phases de déboguages, il est possible d'utiliser les directives de compilation DisableDebugger et EnableDebugger autour de ces parties.

Le débogueur intégré

Toutes les commandes relatives au débogueur lorsqu'un programme est en cours d'exécution sont disponibles à partir du menu "Débogueur" (ou de la barre d'outils et des raccourcis claviers). Les points d'arrêt, le rapport d'activité et le moniteur CPU sont toujours accessibles, même quand le programme n'est pas en cours d'exécution.

Tant que le programme est en cours de débuggage, tous les fichiers sources qui sont en rapport avec ce programme sont verrouillés en lecture seule jusqu'à la fin de son exécution. Ceci est fait pour assurer que le code qui sera affiché lors du 'pas à pas' ou lors d'une erreur sera correct (et qu'il n'a pas été édité entre temps sans avoir été recompilé).

A noter qu'un programme ne peut être débogué qu'une seule fois par le débogueur intégré. Si le même programme est de nouveau compilé pour être debuggé, le débogueur indépendant sera utilisé. Par contre il est possible de déboguer plusieurs programmes différents simultanément avec le débogueur intégré.

Astuce
Sous Windows, le menu "Débogueur" est aussi ajouté au menu système de la fenêtre principale de l'IDE (le menu qui apparaît lors d'un click sur l'icône située dans le coin supérieur gauche de la fenêtre). Cela permet aussi d'accéder à ce menu à partir de la barre des tâches, en cliquant avec le bouton de droit de la souris sur l'icône correspondant à l'IDE.

Controle de l'exécution

Ces fonctions permettent le contrôle sur le déroulement du programme en cours de débuggage. Le programme peut être stoppé, exécuté pas à pas (ligne par ligne), examiné (voir le contenu des variables à cet instant etc.). Quand le programme est stoppé, la ligne qui va être exécuté est marquée (par défaut en bleu clair) dans le code source correspondant.
L'état du programme est indiqué dans la barre d'état de l'IDE et dans le rapport d'activité.

Commandes du menu permettant le contrôle du programme:

Stop
Stoppe l'exécution du programme et affiche la ligne qui va être exécutée.

Continue
Reprend l'exécution du programme, de manière normale.

Tuer le programme
Force le programme à se terminer et ferme toutes les fenêtres de débuggage associées à ce programme.

Pas
Exécute la ligne du programme actuellement affichée et stoppe de nouveau l'exécution.

Pas <n>
Execute le nombre de lignes indiqué et stoppe l'exécution du programme.

Passer au-delà
Exécute la ligne du programme actuellement affichée et stoppe de nouveau l'exécution, comme un 'Pas' normal. La différence survient si la ligne contient un ou plusieurs appels à des procédures. Dans ce cas, les procédures seront toutes exécutées, sans arrêt, contrairement au mode 'Pas' qui rentre dans chaque procédure. Ceci permet de passer rapidement sur des procédures qui sont connues comme étant correctes.

Sortir
Exécute le reste du code de la procédure en cours d'exécution et s'arrête à sa sortie. Si la ligne courante n'est pas dans une procédure, un 'Pas' normal sera fait.

Points d'arrêt

Les points d'arrêt sont une autre manière de contrôler l'exécution d'un programme. Avec la commande "Point d'arrêt" du menu, la ligne courante sera considérée comme un point d'arrêt (ou retire le point d'arrêt si cette ligne en était un). Quand le programme atteint un point d'arrêt, alors l'exécution est stoppée sur cette ligne (la ligne n'a pas encore été exécutée). A noter que si le point se trouve sur une ligne ou aucun code n'est exécutable (commentaire, ligne vide, structure etc.), le programme s'arrêtera sur la prochaine ligne exécutable rencontrée.

Un fois que l'exécution du programme a été interrompue par un point d'arrêt, il est possible d'utiliser n'importe quelle commande du "Contrôle de l'exécution" pour continuer à déboguer le programme.

Les points d'arrêts peuvent être ajoutés ou retirés de manière dynamique pendant l'édition ou pendant l'exécution du programme. La commande "Effacer les points d'arrêt" permettent d'enlever tous les points d'arrêt du fichier source en cours d'édition.

Note: Pour ajouter/retirer un point d'arrêt à l'aide de la souris, il faut maintenir la touche 'Alt' appuyée pendant le clic sur la bordure qui affiche les points d'arrêts (la colonne de numérotation des lignes n'est pas prise en compte).

Erreurs dans le programme

Si le débogueur rencontre une erreur dans le programme en cours de débuggage, il arrêtera l'exécution et marquera la ligne qui contient l'erreur (par défaut en rouge) et affichera le message d'erreur dans la barre d'état et le rapport d'activité.

A ce moment, il est toujours possible de regarder le contenu des variables, de la mémoire et l'historique des appels des procédures, mais les autres fonctionnalités telles que l'affichage des registres ou l'état de la pile ne sont plus disponibles.
Si l'erreur est considérée comme fatale (comme un accès interdit à une zone mémoire ou une division par 0) il ne sera pas possible de continuer l'exécution du programme. Par contre, si l'erreur est reportée par une commande PureBasic, il est possible de continuer tout de même l'exécution du programme, mais dans ce cas d'autres erreurs anormales peuvent apparaître.

Après une erreur (même fatale), la commande "Tuer le programme" doit etre utilisée pour finir l'exécution du programme et reprendre l'édition du code source. Le programme n'est pas automatiquement tué après une erreur pour permettre au développeur d'utiliser les fonctionnalités du débogueur (comme examiner le contenu des variables) pour essayer de détecter la cause de l'erreur.
Note: il est possible de paramétrer le débogueur pour qu'il termine automatiquement l'exécution du programme en cas d'erreur (voir Paramétrer l'IDE).

Le rapport d'activité

Le rapport d'activité est utilisé pour l'affichage des erreurs de compilation, ainsi que des messages survenant durant le débuggage. Les messages sont toujours affichés dans le rapport d'activé du fichier concerné, donc si une erreur survient dans un fichier inclu, ce dernier sera affiché et un message ajouté dans son rapport d'activité.

Le sous-menu "Rapport d'activité" du menu "Débogueur" contient les commandes pour sa gestion:

Afficher/Cacher
Affiche ou cache le rapport d'activité pour le fichier en cours d'édition.

Effacer
Efface toutes les lignes du rapport d'activité du fichier en cours d'édition.

Copier
Copie le contenu du rapport d'activité dans le presse-papier.

Effacer les erreurs
Une fois que le programme a été tué, les erreurs affichées dans le code sources restent afin de repérer facilement les lignes qui ont causé des problèmes et de les corriger. Cette commande permet d'enlever le surlignage sur les lignes d'erreur. Il est aussi possible de configurer l'IDE pour ôter automatiquement le surlignage des erreurs lorsque le programme se termine (voir Paramétrer l'IDE)

Le débogueur indépendant

Le débogueur indépendant est très similaire à celui intégré à l'IDE et sera seulement expliqué brièvement:

Sur la fenêtre du débogueur sont présents les boutons permettant le contrôle sur l'exécution du programme comme décrit plus haut. Le bouton "Pas" avance d'autant de lignes que défini dans le champ à sa droite. Quand le débogueur est fermé à l'aide du bouton "Quitter" ou en cliquant sur le bouton de fermeture de la fenêtre, le programme en cours de débuggage est immédiatement tué.

La zone de rapport d'activité peut être cachée à l'aide du bouton 'flèche vers le haut' pour rendre la fenêtre de débuggage plus petite.

La zone d'affichage du code source est utilisée pour montrer la ligne en cours d'exécution ainsi que les erreurs ou les points d'arrêt. La liste déroulante située au dessus permet de sélectionner les différents fichiers composants le programme. Les boutons "Mettre point d'arrêt", "Enlever point d'arret" et "Effacer points d'arrêt" permettent de gérer dynamiquement les points d'arrêt dans le fichier source affiché.

Les outils du débogueur peuvent être affichés à l'aides des boutons situés dans la partie inférieure de la fenêtre. L'utilisation de ces outils est la même qu'avec le débogueur intégré. Le moniteur CPU n'est pas disponible avec le débogueur indépendant.

Note: Le débogueur indépendant n'a pas de configuration spéciale. Il utilise les paramètres du débogueur et de coloration syntaxique de l'IDE. Donc si un éditeur de code tierce est utilisé pour le développement, il convient de régler ces paramètres à l'aide de l'IDE.

Exécution du débogueur indépendant à partir de la ligne de commande:

Pour exécuter un programme compilé en ligne de commande avec le débogueur activé (option /DEBUGGER (Windows) ou -d (Linux/MacOS X)), le débogueur doit être invoqué comme suit:

pbdebugger <fichier exécutable> <paramètres ligne de commande pour l'exécutable>

Si le programme est exécuté immédiatement après une compilation par ligne de commande, le débogueur indépendant est automatiquement utilisé.

Le débogueur en ligne de commande

Le débogueur en ligne commande ne fait pas partie de l'IDE, il ne sera donc pas expliqué en détail dans cette section.

Lorsque le programme est en cours d'exécution, la combination Ctrl+C dans le terminal permet de le stopper et d'invoquer le débogueur. La commande "help" permet d'avoir un apercu des commandes disponibles et "help <commandname>" affichera une aide sur l'utilisation d'une commande. Sous Windows le débogueur en ligne de commande est utilisé uniquement si l'option /CONSOLE est spécifiée.

Déboguer un programme multi-threadé:

Pour utiliser le débogueur avec un proramme qui utilise des threads, l'option 'Créer un exécutable multi-threadé' doit être activé dans les Options de compilation, sinon les informations affichées par le débogueur concernant les numéros de lignes, les erreurs, les variables locales peuvent être erronnées, à cause des threads.

Les limitations suivantes doivent être prises en compte lors du déboguage d'un programme multi-threadé:

Quand le programme est en cours d'exécution, la visionneuse de variables, l'affichage de la pile ou le débogueur assembleur afficheront uniquement les informations du thread principal. Quand un programme est sur arrêt, ils afficheront les informations sur le thread courant. Donc, pour examiner les variables locales d'un thread, l'exécution doit être arrêtée dans ce thread (en utilisant un point d'arrêt ou CallDebugger). Les commandes 'Pas à pas' du débogueur s'appliquent uniquement au thread où l'exécution est arrêtée.

Si une erreur survient, l'exécution est stoppée dans ce thread, donc toute information affichée par la visonneuse de variables ou l'affichage de la pile sera relative à ce thread.

La 'Liste de visualisation' des variables affiche seulement les variables locales du thread principal.

Quand le débogueur s'arrête dans un thread, l'exécution de tous les autres threads est suspendue.


Utiliser les outils de débogage

Ces outils proposent de nombreuses fonctionnalités pour inspecter le programme en cours de déboguage. Ils ne peuvent pas être utilisés lorsque que le code source est en train d'être édité. Ils sont tous disponibles à partir du débogueur intégré ou du débogueur indépendant (excepté le moniteur CPU). Le débogueur en ligne de commande propose aussi bon nombre de ces fonctionnalités mais uniquement à l'aide de commandes, rendant leurs utilisations moins facile.

Certains de ces outils permettent d'afficher le contenu des variables. Voici comment est présenté l'affichage pour ces données:

Scope
Le scope d'une variable est la zone dans laquelle elle est valide. Un variable peut être globale, locale, partagée ou statique, en fonction de sa déclaration dans le code source. Le terme 'byref' ("par référence", c'est à dire en utilisant l'adresse) est utilisé pour indiquer un tableau ou une liste chaînée qui a été passé en paramètre d'une procédure.

Type des variables
Le type des variables est indiqué à l'aide d'une icône colorée, pour faciliter leur reconnaissance:
B : Byte
W : Word
L : Long
Q : Quad
F : Float
D : Double
S : String (Texte)
Sn : Fixed String (Texte)

Une structure est soit indiquée à l'aide d'un point, ou d'une flèche. Si c'est une flèche, alors le contenu de la structure peut être affiché en double-cliquant sur la ligne. L'icône est alors remplacée par une flèche vers le bas. Une structure représentée par un point ne peut pas être consultée (souvent car il s'agit d'un pointeur vers une structure).

La fenêtre de débug

C'est dans cette fenêtre qu'apparaîtra les résultats de la commande "Debug". Cette commande est un moyen rapide et simple pour afficher des messages destinés au débuggage du programme.

Cette fenêtre sera affichée automatiquement la première fois qu'un message sera émis par le programme. Si elle est fermée, elle ne sera plus affichée automatiquement pour les messages suivants, mais ils seront tout de même enregistrés. Il est possible de copier le contenu de cette fenêtre dans le presse-papier ou de l'enregistrer dans un fichier. Un bouton est aussi présent pour effacer tous les messages précédents.

La fenêtre de surveillance

Elle est utilisée pour surveiller en temps réel les valeurs des variables. Il n'est possible d'afficher que des variables de type basique (pas de structures complètes), cependant ces variables peuvent faire partie d'une structure.

Pour ajouter une variable, il faut choisir sa procédure (si c'est une variable locale) ou "--- Principal ---" si c'est une variable globale, une composante d'un tableau ou d'une liste chaînée. Il suffit d'entrer ensuite le nom de la variable dans le champ correspondant et d'appuyer sur "Ajouter".

Exemples:
  MyVariable$                      - ajoute une variable de type string
  Array(1, 5)                      – ajoute une case d'un tableau
  Structure\subfield[5]\value      – ajoute un champ d'une structure
  MyLinkedList()\structuresubfield – ajoute un champ d'une liste chaînée
Il est aussi possible d'ajouter une nouvelle variable à la liste de surveillance à partir du "Visualisateur de variables", en cliquant avec le bouton droit de la souris sur une variable et en sélectionnant "Surveiller".

Dans la liste, les valeurs des variables surveillées seront affichées. Si la valeur est affichée avec "---", cela veut dire qu'elle n'est pas valide à cet endroit du programme (par exemple une variable locale en dehors de la procédure concernée ou une liste chaînée sans élément).

Les variables surveillées sont persistantes entre les sessions de débuggage, et même sauvegardées avec les options de compilation, il n'est donc pas nécessaire de les saisir à chaque fois.

Le visualisateur de variables

Il permet d'examiner les variables locales et globales, tableaux et listes chaînées présents dans le programme. Dans l'onglet "Variables", les variables globales et locales (si le programme se trouve dans une procédure) sont visibles.

Dans l'onglet "Tableaux", il y a la liste de tous les tableaux du programme ainsi que leurs dimensions (-1 indique que Dim n'a pas encore été appelé pour ce tableau). Pour mettre à jour la liste des tableaux et de leurs dimensions, il faut utiliser le bouton "Actualiser".
Après avoir sélectionné un tableau, il est possible d'en consulter son contenu en choisissant les limites inférieures et supérieures et cliquer sur "Afficher". Pour afficher le contenu complet du tableau, il suffit de cliquer sur "Afficher tout".

Dans l'onglet "Listes" se trouve l'énumération de toutes les listes chaînées du programme, le nombre d'élément ("-" indique que NewList n'a pas encore été appelé), ainsi que l'index actuel de l'élément courant pour chaque liste ("-" indique qu'il n'y a pas d'élément courant). Pour mettre à jour la liste des listes chaînées, il faut utiliser le bouton "Actualiser".
Apres avoir sélectionné une liste chaînée, il est possible de modifier son élément courant en renseignant le champ "Elément courant" et cliquer sur "Changer" (pour ne plus avoir d'élément courant, uiliser -1). En dessous, il est possible définir les limites inférieures et supérieures des éléments à afficher. Comme pour les tableaux, le bouton "Afficher tout" permet d'afficher la liste complète des éléments.

En utilisant le bouton droit de la souris sur n'importe quelle variable, tableau ou liste chainées il est possible de copier sa valeur dans le presse-papier ou de l'ajouter à la fenêtre de surveillance temps réel des variables.

L'onglet "Voir Tableau/Liste" permet de d'afficher les éléments d'un tableau ou d'une liste chaînée. Pour ce faire, il faut spécifier le nom du tableau ou de la liste chaînee sans les parenthèses, choisir le type d'éléments à afficher et appuyer sur "Afficher".

"Afficher tout" montre tous les éléments. "Afficher éléménts non-nuls" affiche seulement les éléments qui ne sont pas égaux à 0. Cela permet d'afficher des gros tableaux/listes plus facilement si seulement quelques éléments sont utilisés. Une structure est considérée comme "nulle" si tous ses champs sont à 0.

"Afficher partiellement" permet d'afficher seulement une partie du tableau ou de la liste. Pour les tableaux, l'intervalle peut être spécifié séparément pour chaque dimension en utilisant une virgule. Si une dimension n'est pas du tout spécifiée, tous ses éléments seront affichés.
Voici quelques exemples d'intervalles:
  "1-2, 2-5, 2" : la première dimension entre 1 et 2, la deuxième entre 2 et 5, la troisième à 2.
  "1, 2-5"      : la première dimension à 1, la deuxième entre 2 et 5
  "1, , 5"      : la première dimension à 1, tous les éléments de la deuxième dimension, la troisième à 5.

L'historique des procédures

Cet outil montre les procédures qui ont été appelées pour en arriver à la position actuelle du programme. Chaque élément de la liste représente une procédure, la ligne et le fichier où elle est déclarée ainsi que ses arguments qui ont été utilisés lors de son appel. En cliquant sue le bouton "Variables", il est possible de voir les variables de cette procédure.

Cela permet de tracer facilement, à partir de quelle partie du code une procédure a été appelée. L'historique des procédures ne se met à jour automatiquement que lorsque le programme est arrêté, ou en mode pas à pas. Quand le programme est en cours d'exécution, il est nécessaire d'appuyer sur le bouton "Actualiser" pour mettre à jour la liste.

L'onglet "Statistiques" montre le nombre de fois qu'une procédure a été appelée. Il est possible de réinitialiser un compteur en sélectionnant la procédure puis en appuyant sur "Réinitialiser". De même, en cliquant sur "Réinitialiser tout", tous les compteurs seront remis à 0. Comme pour l'historique des procédures, la mise à jour des compteurs n'est pas automatique quand le programme n'est pas arrété ou en mode pas à pas, il convient d'utiliser le bouton "Actualiser".

Le visualisateur de mémoire

Il permet d'afficher le contenu d'une zone de mémoire arbitraire de votre programme. Une fois les limites inférieures et supérieures renseignées, cliquez sur "Afficher". Si la zone de mémoire est valide, elle sera affichée. Si la zone complète ou seulement une portion est invalide, alors un message d'erreur sera affiché.

La façon de présenter le contenu de la mémoire peut être défini grâce à la liste déroulante située en bas à gauche. Les modes suivants sont disponibles:

Hexadécimal
La mémoire sera affichée en hexadécimal à la manière des visualisateurs hexadécimaux classiques, avec l'adresse de la mémoire à gauche, suivie par le contenu en hexadécimal et la représentation sous forme de caractères dans la colonne de droite.

Tableau Byte/Char/Word/Long/Quad/Float/Double
La mémoire sera montrée sous forme de tableau en fonction du type choisi. Il est possible de configurer ce tableau en mode colonne simple ou multi-colonne dans les préférences (voir “Configurer l'IDE”)

Texte
Affiche la zone mémoire sous forme de texte, avec tous les caractères non ascii affichés entre [] (par exemple: "[NULL]" pour le caractère 0. A linebreak is added after newline characters and [NULL] to improve the readability of the output. The memory area can be interpreted as an Ascii, Unicode or Utf8 string.

Il est aussi possible d'exporter la zone de mémoire affichée:

Copier (Texte): Copie la zone de mémoire affichée dans le presse-papier.
Enregistrer (Texte): Enregistre la zone de mémoire affichée dans un fichier.
Enregistrer (Binaire): Enregistre la zone de mémoire affichée dans un fichier sous forme binaire.

Le visualisateur de bibliothèque

Le visualisateur de bibliothèque donne des informations à propos des objets PureBasic qui ont été créés avec les bibliothèques qui supportent cette fonctionnalité. Par exemple, elle permet de vérifier rapidement les images actuellement chargées dans le programme, ou quels gadgets ont été créés.

Une fois que le programme est démarré, la liste déroulante en haut de la fenêtre peut être utilisée pour sélectionner la bibliothèque à examiner. La liste de tous les objets de cette bibliothèque apparaîtra et en cliquant sur un objet, des informations relatives à cet objet seront affichées. Certaines bibliothèques affichent même un aperçu de l'objet (sprite, image par exemple).

Si la liste déroulante affiche "Aucune information", cela veut dire que l'exécutable n'a utilisé aucune bibliothèque qui utilise cette fonctionnalité.

Pour l'instant, les bibliothèques suivantes sont supportées:
Thread
Gadget
Window
File
Image
Sprite
Sprite3D

Le débogueur assembleur

Le débogueur assembleur est utile pour les développeurs expérimentés qui veulent pouvoir examiner le contenu des registres CPU ou de la pile (surtout quand de l'assembleur en ligne est utilisé).

La fenêtre des registres est uniquement disponible quand le programme est stoppé, ou en pas à pas. Il est possible de changer le contenu des registres en modifiant les valeurs des champs puis en cliquant sur "Changer".

L'analyse de la pile affiche le contenu de la pile du programme par rapport au registre ESP. Si la position actuelle de la pile n'est pas alignée sur une valeur multiple de 4, il n'est pas possible de la décoder correctement, donc elle sera affichée sous forme hexadécimale.
Si le pointeur est correctement aligné, le contenu de la pile est affiché avec des commentaires par rapports aux valeurs rencontrées (détails des valeurs passées en paramètres des fonctions PureBasic etc.)

L'affichage du contenu de la pile est actualisé automatiquement quand le programme est stoppé ou en mode pas à pas. Il est possible de désactiver cette mise à jour automatisée dans les préférences de l'IDE, dans ce cas un bouton "Actualiser" sera disponible.

Note: Le débogueur assembleur n'est pas pour l'instant disponible sur MacOS X.

Le moniteur CPU

Le moniteur CPU affiche la consommation mémoire et processeur de chaque programme en cours de débuggage. Il affiche également la charge totale du système et la quantité totale de mémoire disponible. En sélectionnant la case à cocher devant chaque programme, il est possible de choisir quel programme sera monitoré. En double-cliquant sur le nom d'un programme, il est possible de changer sa couleur dans le graphique.

L'intervalle d'actualisation de la liste et du graphique est paramétrable. Le pourcentage affiché est une moyenne de la charge durant le dernier intervalle.
Pour garder toujours l'affichage du moniteur CPU au premier plan, il suffit de cocher la case à cocher "Au premier plan" (non disponible sous linux avec GTK+1.2).

A noter que la mémoire affichée pour "Mémoire totale" et "Mémoire libre" est la mémoire physique, alors que la mémoire affichée pour chaque programme est la mémoire totale (physique + virtuelle).


Les outils intégrés

L'IDE PureBasic intègre un grand nombre d'outils intégrés, pour rendre la programmation aisée et productive. La plupart d'entre eux peuvent être affichés dans une fenêtre séparée (accessibles alors par le menu) ou dans la palette d'outils située sur le côté de la zone d'édition.

Pour plus d'informations quand à la configuration de ces outils et comment ils sont affichés, voir Configurer l'IDE.

Outils disponibles pour la palette.

Navigateur de procédures
Cet outil affiche la liste de toutes les procédures déclarées dans le fichier source en cours d'édition. En cliquant sur un élément de cette liste, le curseur changera immédiatement pour aller à la déclaration de cette procédure.

Les macros seront identifiées avec un signe "+" avant le nom.

Il est aussi possible de mettre des commentaires particuliers dans le code qui sera alors aussi affiché dans le navigateur de procédures. Ils ont la forme suivante: ";- <description>". Le ';' démarre le commentaire et le '-' qui le suit immédiatement défini ce type de commentaire. la 'description' sera alors affichée dans la liste et un clique sur cet élément changera la position du curseur pour cette ligne. Ce type de commentaire se distingue dans la liste par l'ajout du caractère '>' devant la description.

La liste des procédures peut être triée, et peut aussi afficher les paramètres de la procédure/macro. Pour ces options, voir Configuration de l'IDE.

Explorer
L'outil Explorer affiche une liste de fichiers et de répertoires à partir de laquelle il est possible d'ouvrir rapidement n'importe quel type de fichier, en double-cliquant dessus. Les fichiers 'texte' seront chargés directement dans la zone d'édition et les fichiers binaires seront ouverts par le visualisateur interne de fichiers.

Visualisateur de variables
Le visualisateur de variables peut en fait afficher les variables, tableaux, listes chaînées, constantes, structures et interfaces définies dans le source en cours d'édition, ou dans tous les fichiers ouverts. La configuration de ce qui doit être affiché se fait dans les préférences.
Note: l'affichage des variables est un peu limité pour l'instant. Seules les variables qui sont déclarées par Define, Global, Shared, Protected ou Static seront reconnues.

Modèles de codes
Cet outil permet d'organiser de manière hierarchisée une liste de petits bouts de code qui sont souvent utilisés. Ils peuvent être inseré rapidement à n'importe quel endroit du fichier en cours d'édition en double-cliquant sur le code voulu.

Choix de couleur
Cet outil aide à trouver la couleur parfaite quand le besoin s'en fait sentir. Il est possible de sélectionner la couleur avec la souris dans la mire colorée et de modifier la luminosité avec le curseur situé juste au dessus. Les deux petites flèches peuvent être utilisées pour réinitialiser la selection au centre. En complément, il est possible d'ajuster précisément la couleur à l'aide des curseurs Rouge, Vert et Bleu. A noter que changer la valeur des curseurs RVB ne change pas la sélection dans la mire colorée, mais l'inverse fonctionne.
Le bouton "Insérer Couleur" insère la couleur au format hexadécimal dans le code source (ex: "$FF00FF"). Le bouton "Insérer RGB" insère la couleur en utilisant la syntaxe de la commande RGB() (ex: "RGB(255, 0, 255)") Le bouton "Valeurs décimales" détermine si les valeurs affichées à côté des curseurs RVB sont en décimales ou en hexadécimales.
Le bouton "Sauvegarder couleur" enregistre la couleur dans l'historique situé à côté de la couleur actuelle. Il est possible de rappeler une couleur enregistrée en cliquant dessus.

Table ASCII
La table ASCII affiche une liste contenant tous les caractères ASCII (de 0 à 255) avec leurs correspondances en décimal, hexadécimal et HTML. En double-cliquant sur une ligne, ce caractère sera inséré dans le code source. Les boutons en dessous de la liste permettent de choisir le format dans lequel le caractère sera inséré.

Les autres outils intégrés

Visualisateur de structures
Cet outil permet de voir toutes les structures, interfaces et constantes qui sont prédéfinies dans PureBasic. Double-cliquer sur une structure ou une interface affichera la déclaration (le contenu) de l'élément. Il est possible de filtrer l'affichage en choisissant une lettre dans les boutons affichés au dessus de la liste.
Le bouton "Retour" revient à l'affichage précédent le double-clique.
Le bouton "Insérer nom" insère uniquement le nom de l'élément sélectionné.
Le bouton "Insérer copie" insère une copie de la déclaration d'élément sélectionné.
Le bouton "Insérer" permet d'entrer le nom d'une variable et d'insérer tous les champs de la structure ou interface sélectionnée (en utilisant cette variable comme base).

Visualisateur de fichier
Le visualisateur de fichier permet d'afficher plusieurs types de fichiers: textes, images et pages web (Windows seulement). Si un type de fichier n'est pas reconnu, il sera affiché sous forme hexadécimale. Le bouton "Ouvrir" ouvre un nouveau fichier et le bouton "X" ferme le fichier courant. Les flèches permettent de naviguer dans les fichiers ouverts.
A noter qu'il est aussi possible d'ouvrir des fichiers dans le visualisateur interne en double-cliquant sur des fichiers binaires dans l'outil 'Explorer' ou sur le mot clef IncludeBinary dans la zone d'édition.

Outils accessibles uniquement par le menu

Visual Designer
Le 'Visual Designer' de PureBasic est très utile pour créer des interfaces graphiques pour une application. Ce n'est pas un outil intégré à l'IDE mais un programme séparé, qui a son propre fichier d'aide (voir VisualDesigner.chm dans le répertoire PureBasic pour plus d'informations).

Smart Update Cet outil est lui aussi un programme indépendant. Il est utile pour vérifier si PureBasic est à jour et le cas échéant télécharger uniquement les fichiers nécessaires pour la mise à jour. Il est aussi utile pour réparer une installation corrompue car il peut détecter quels fichiers ont été modifiés et les télécharger à nouveau si nécessaire.

Lorsque cet outil est lancé, l'IDE se ferme automatiquement.


Les outils externes

L'IDE du PureBasic vous permet de configurer des programmes externes pour qu'ils soient appelés directement à partir d'un menu, de raccourcis, de la barre d'outils ou d'évènements "déclencheurs" spéciaux (ex: ouverture de fichier, fermeture etc..). Ceci permet un accès aisé à ces outils tout en programmant.

Vous pouvez également écrire vos propres petits outils en PureBasic pour effectuer des actions spéciales sur le code source que vous êtes en train d'éditer, afin d'automatiser les tâches récurrentes (ex : réorganisation du code, statistiques, etc..). De plus, vous pouvez configurer des visualisateurs de fichiers externes pour remplacer le visualisateur de fichier intégré à l'IDE pour des types particuliers de fichier ou pour tous les fichiers.

La commande "Outils personnalisés" du menu "Outils" ouvre la fenêtre de gestion des outils externes. La liste affiche tous les outils déjà configurés par ordre d'apparition dans le menu "Outils" (les outils ayant l'option 'caché' figurent aussi). Vous pouvez ajouter (bouton Nouveau) et supprimer (bouton Effacer) des outils, ou modifier leur ordre de priorité en cliquant sur les boutons "Vers le haut" / "Vers le bas" après avoir sélectionné un élément.

Chaque outil peut être rapidement activé ou désactivé à partir de la fenêtre "Outils personnalisés" du menu "Outils", en cochant ou décochant la case à gauche du nom de l'outil.

Configurer un outil

Les seuls éléments obligatoires dans la configuration sont la ligne de commande du programme à exécuter et son nom dans la liste du menu "Outils". Tout le reste est optionnel.

Ligne de commande
Contient le chemin et le nom du programme à exécuter.

Arguments
Contient les arguments qui seront passés au programme. Vous pouvez écrire des options fixes, tout comme des mots-clefs spéciaux qui seront remplacés lors de l'exécution du programme) :

%PATH : sera remplacé par le chemin du fichier source en cours d'édition. Il sera vide si le code source n'a pas encore été enregistré.

%FILE : sera remplacé par le nom du fichier source en cours d'édition. Il sera vide si le code source n'a pas encore été enregistré. Si l'outil est destiné à remplacer le visualisateur de fichier intégré, ce mot-clef représentera le fichier à ouvrir.

%TEMPFILE : quand cette option est spécifiée, le fichier source en cours d'édition est enregistré dans un fichier temporaire dont le nom est inséré ici. Ce fichier est créé uniquement pour l'outil et peut être librement modifié ou effacé.

%COMPILEFILE : ce mot-clef est uniquement valide pour les déclencheurs de compilation (voir ci-dessous). Il sera remplacé par le nom du fichier temporaire qui est envoyé au compilateur pour effectuer la compilation. En modifiant ce fichier, il est possible de changer ce qui sera effectivement compilé.

%EXECUTABLE : sera remplacé par le nom de l'exécutable créé par la dernière commande "Créer un exécutable". Pour le déclencheur "Après Compiler/Exécuter", il sera remplacé par le nom du fichier exécutable temporaire créé par le compilateur.

%CURSOR : sera remplacé par la position actuelle du curseur dans le code en cours d'édition, sous la forme : LIGNExCOLONNE.

%SELECTION : sera remplacé par la sélection actuelle sous la forme : LIGNEDEBUTxCOLONNEDEBUTxLIGNEFINxCOLONNEFIN. Il peut être utilisé en conjonction avec %TEMPFILE, si vous voulez que votre outil effectue des actions basées sur le texte sélectionné.

%WORD : sera remplacé par le mot actuellement situé sous le curseur.

Note : pour chaque mot-clef désignant un fichier ou un chemin, il est généralement conseillé de les placer entre "" (ex: "%TEMPFILE") pour s'assurer que les chemins contenant des espaces seront correctement transmis à l'outil. Ces mots-clefs ainsi qu'une brève description peuvent aussi être consultés en cliquant sur le bouton "Info" à droite du champ Arguments.

Dossier de travail
Permet de choisir un répertoire que l'outil utilisera lors de son lancement. Si aucun répertoire n'est indiqué, l'outil utilisera le répertoire du code source en cours d'édition.

Nom
Permet d'attribuer un nom à l'outil. Ce nom s'affichera dans la liste des outils, et si l' outil n'est pas caché, dans le menu "Outils".

Evènement pour déclencher l'outil

Ici vous pouvez choisir quand l'outil devra être lancé. Plusieurs outils peuvent avoir le même déclencheur, ils seront tous executés quand cet évènement déclencheur se produira. L'ordre de leur execution dépend de l'ordre dans lequel ils apparaissent dans la liste des outils.

Menu ou raccourci
L'outil ne sera pas lancé automatiquement. Il sera exécuté à partir d'un raccourci clavier ou d'un menu. Note : pour exécuter un programme à partir de la barre d'outils, il faut lui ajouter un bouton dans Fichier/Préférences/Général/Barre d'outils (voir Configurer l'IDE pour plus d'informations).

Si ce déclencheur est choisi, l'option "Raccourci" devient active et permet d'entrer un raccourci qui lancera cet outil.

Démarrage de l'éditeur
L'outil sera exécuté immédiatement après le démarrage complet de l'IDE.

A la fermeture de l'éditeur
L'outil sera exécuté juste avant que l'IDE ne quitte. Notez que tous les fichiers sources auront déjà été fermés.

Avant Compiler/Exécuter
L'outil sera exécuté juste avant la compilation du fichier source. En utilisant le mot-clef %COMPILEFILE, il est possible de modifier le code à compiler. Ceci permet par exemple de créer un petit pré-processeur pour le code source. Notez que vous devriez activer l'option "Attendre la fin du programme" si vous voulez que les modifications soient prises en compte par le compilateur.

Après Compiler/Exécuter
L'outil sera exécuté juste après la compilation, mais avant que le programme ne soit executé. En utilisant le mot-clef %EXECUTABLE, il est possible de récupérer le nom du fichier qui vient d'être généré. Les modifications sont autorisées, mais si le fichier est effacé, alors une erreur surviendra lorsque l'IDE essaiera d'exécuter le fichier.

Démarrage d'un programme compilé
L'outil sera lancé lorsque la commande "Exécuter" du menu "Compilateur" est activée. L'outil est lancé avant que le programme ne soit exécuté. Le mot-clef %EXECUTABLE est valide ici aussi.

Avant de créer un exécutable
Cet évènement est identique à "Avant Compiler/Exécuter", mais il est déclenché juste avant la création de l'exécutable final.

Après avoir créé un exécutable
L'outil sera lancé une fois que l'exécutable final aura été créé. Le mot-clef %EXECUTABLE peut servir à récupérer le nom de l'exécutable créé et ainsi effectuer des actions dessus (ex: pour le compresser).

Code source chargé
L'outil se lancera à chaque fois qu'un code source sera chargé dans l'IDE. Les mots-clefs %FILE et %PATH sont toujours valides, car le fichier est forcément chargé à partir d'un média (disque, réseau etc..).

Code source enregistré
L'outil se lancera à chaque fois qu'un code source sera enregistré par l'IDE. Les mots-clefs %FILE et %PATH sont toujours valides, car le fichier vient d'être enregistré sur un média (disque, réseau etc.).

Code source fermé
L'outil se lancera à chaque fois qu'un code source sera sur le point d'être fermé. A ce stade le fichier est toujours là, donc vous pouvez obtenir son contenu avec le mot-clef %TEMPFILE. Le mot-clef %FILE sera vide si le fichier n'a jamais été enregistré.

Remplace le visualisateur - Tous les fichiers
L'outil remplacera complètement le visualisateur de fichier intégré. Si on essaie d'ouvrir un fichier qui ne peut être édité dans l'IDE, l'IDE va d'abord essayer les outils externes ayant comme déclencheur ce type de fichier particulier, et si aucun ne correspond, alors le fichier sera géré par cet outil. Utilisez le mot-clef %FILE pour récupérer le nom du fichier qui doit être ouvert.

Note : un seul outil peut être associé à ce déclencheur. Tous les autres outils associés à ce déclencheur seront ignorés.

Remplace le visualisateur - Fichiers inconnus
Cet outil remplacera le visualisateur hexadécimal intégré, qui est normalement utilisé pour ouvrir les fichiers de types inconnus. Il sera executé, lorsque l'extension du fichier est inconnue pour l'IDE, et si aucun autre outil externe n'a été configuré pour gérer ce fichier (si un outil est configuré avec le déclencheur "Remplace le visualisateur - Tous les fichiers", alors cet outil ne sera jamais appelé).

Note : un seul outil peut être associé à ce déclencheur.

Remplace le visualisateur – Fichier spécial
Ce déclencheur permet à l'outil de gérer des extensions de fichiers spécifiques. Il a une plus haute priorité que les évènements "Remplace le visualisateur - Tous les fichiers", "Remplace le visualisateur – Fichiers inconnus" et plus haute également que le visualisateur de fichier intégré. Indiquez les extensions que l'outil doit gérer dans le champ prévu à cet effet, sur la droite. Plusieurs extensions peuvent être attribuées.

Une utilisation courante de ce déclencheur est, par exemple, la configuration d'un programme comme Acrobat Reader pour gérer les fichiers ayant l'extension "pdf". Ce qui permet d'ouvrir facilement ces fichiers à partir de l'Explorateur, du visualisateur de fichier intégré ou en double-cliquant sur le mot-clef "IncludeBinary" dans le source.

Autres options sur le côté droit

Attendre la fin du programme
L'IDE sera complètement bloqué jusqu'à ce que l'outil termine son exécution. Cette option est requise si l'outil doit modifier un fichier source qui doit être rechargé par la suite, ou passé au compilateur par les déclencheurs de compilation.

Démarrer caché
L'outil sera lancé en mode invisible. Ne pas utiliser cette option si le programme nécessite une interaction avec l'utilisateur, car il ne pourra plus être fermé.

Cacher l'éditeur
Uniquement disponible si l'option "Attendre la fin du programme" est activée. Cache l'éditeur pendant l'exécution de l'outil.

Recharger la source à la fin du programme
Uniquement disponible si l'option "Attendre la fin du programme" est activée, et quand le mot-clef %FILE ou %TEMPFILE est utilisé dans le champ "Arguments".

Une fois que l'outil a terminé son exécution, l'IDE rechargera le fichier source dans l'éditeur. Il est possible de choisir si le fichier doit être rechargé dans l'onglet actuel ou dans un nouvel onglet.

Cacher l'outil du menu principal
N'affiche pas l'outil dans la liste du menu "Outils" de l'IDE. C'est utile pour les outils qui doivent uniquement être exécutés à partir de déclencheurs spéciaux, mais pas à partir du menu.

Extensions des fichiers supportées (ext1,ext2,...)
Uniquement disponible pour le déclencheur "Remplace le visualisateur - Fichier spécial". Permet de saisir la liste des extensions gérées.

Astuces pour l'écriture de vos propres outils de traitement

L'IDE fournit des informations supplémentaires pour les outils sous la forme de variables d'environnement. Elles peuvent être facilement lues par l'outil à l'aide des commandes de la bibliothèque Process.

Voici une liste des variables fournies. Notez que celles qui donnent des informations sur le fichier en cours d'édition ne sont pas accessibles pour les outils exécutés au démarrage ou à la fermeture de l'IDE.
  PB_TOOL_IDE        - Chemin complet et nom de l'exécutable de l'IDE
  PB_TOOL_Compiler   - Chemin complet et nom de l'exécutable du compilateur
  PB_TOOL_Language   - Langue actuellement utilisée dans l'IDE
  PB_TOOL_FileList   - Liste de tous les fichiers ouverts dans l'IDE, séparés par un Chr(10)

  PB_TOOL_Debugger   - Ces variables fournissent les paramètres correspondant à ceux de la fenêtre d'options de compilation
  PB_TOOL_InlineASM    pour le source en cours. Elles sont à 1 si l'option
  PB_TOOL_Unicode      est activée, à 0 sinon.
  PB_TOOL_Thread
  PB_TOOL_XPSkin
  PB_TOOL_OnError

  PB_TOOL_SubSystem  - Contenu du champ Bibliothèque Sous-système dans les options de compilation
  PB_TOOL_Executable - Identique au mot-clef %COMPILEFILE pour la ligne de commande
  PB_TOOL_Cursor     - Identique au mot-clef %CURSOR      pour la ligne de commande
  PB_TOOL_Selection  - Identique au mot-clef %SELECTION   pour la ligne de commande
  PB_TOOL_Word       - Identique au mot-clef %WORD        pour la ligne de commande

  PB_TOOL_MainWindow - Identifiant système (Handle) de la fenêtre principale de l'IDE
  PB_TOOL_Scintilla  - Identifiant système (Handle) du composant d'édition de code Scintilla pour le source en cours
Quand les mots-clefs %TEMPFILE ou %COMPILEFILE sont utilisés, l'IDE ajoute les options de compilation à la fin du fichier temporaire (sous forme de commentaires), même si l'utilisateur a choisi de ne pas sauver ces options en enregistrant un code source.

Ceci permet à l'outil de lire les options de compilation spécifiques à ce fichier, et de les prendre en compte dans les actions qu'il va effectuer.


Obtenir de l'aide

L'IDE du Purebasic permet l'accés immédiat à l'aide de PureBasic, ainsi qu'aux autres fichiers d'aides disponibles sur la plateforme de développement sans quitter l'éditeur.

Accès rapide à l'aide de référence

En sélectionnant la commande "Aide..." du menu "Aide" ou en utilisant son raccourci clavier (par défaut F1) quand le curseur est sur un mot-clef ou une fonction PureBasic, l'aide sera ouverte à la page correspondante.
Si le mot à la position du curseur n'a pas de rubrique dédiée dans l'aide, la page de référence sera affichée.

Accès rapide à l'aide sur l'API Windows

Il y a deux méthodes pour accéder rapidement à l'aide des fonctions de l'API Windows supportées par PureBasic:

Le "Microsoft Plateform SDK"
Ce SDK regroupe toute l'aide actuellement disponible pour le développement d'un programme sous Windows. Il contient des informations sur toutes les fonctions API, ainsi que des petits tutoriaux et des discussions techniques sur des points particuliers. De ce fait, il est plutôt conséquent (jusqu'à 400 Mo en fonction des composants installés).
Pour l'intégration avec l'IDE, il est possible d'installer l'édition de "Fevrier 2003" ou de "Windows Server 2003 SP1".

Le SDK peut être téléchargé à partir du lien suivant:
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
A noter qu'il peut aussi être commandé par CD. Par ailleurs, il est aussi fourni dans la plupart des logiciels de développement de Microsoft (comme Visual Studio).

Le fichier d'aide Win32.hlp
Il y a une autre alternative bien plus petite au SDK complet (7.5 Mo). Ce fichier d'aide est très ancien (écrit pour Windows 95), donc il ne contient pas d'informations concernant les API introduites depuis là. Néanmoins, il contient les informations essentielles à propos des API les plus utilisées, qui sont toujours d'actualités car elles n'ont quasiment pas évoluées. Ce fichier est recommandé seulement pour une utilisation occasionnelle des API (et que le SDK n'est pas disponible).

Le fichier peut être téléchargé ici:
http://www.purebasic.com/download/WindowsHelp.zip
Pour l'utiliser à partir de l'IDE, il suffit de créer le sous-répertoire "Help" dans le dossier "PureBasic" et d'y copier le fichier "Win32.hlp".

Accéder à d'autres fichiers d'aide

Pour accéder à d'autres fichiers d'aide à partir de l'IDE, il faudra créer le sous-répertoire "Help" dans le dossier "PureBasic" puis les copier dedans. Ces fichiers apparaîtront alors dans le sous-menu "Aide externe" du menu "Aide" (et dans le menu contextuel de la zone d'édition). Les fichiers .chm et .hlp seront affichés par les visualisateurs Microsoft. L'IDE ouvrira les fichiers d'aide dans le visualisateur interne. Les fichiers tels que les textes seront donc directement consultables. Pour les autres types, il faudra utiliser le menu Configuration des outils pour paramétrer un outil externe qui gérera ce type de fichier. L'aide sera alors affichée en utilisant cet outil.

Par exemple, si des fichiers d'aide sont en pdf, il suffit de paramétrer un outil externe qui ouvrira les pdf et mettre les fichiers pdf dans le sous-répertoire "Help" du dossier "PureBasic". Lorsqu'un de ces fichier d'aide sera sélectionné dans le sous-menu "Aides externes", il sera ouvert en utilisant cet outil.


Configurer l'IDE

L'IDE du PureBasic propose un nombre très conséquent d'options pour qu'il puisse s'adapter aux habitudes des programmeurs qui l'utiliseront. Ces paramètres sont regroupés dans la fenêtre de la commande Préférences du menu "Fichier", et la description de chacune est decrite dans ce document.

Tout changement ne sera effectif uniquement lorsque le bouton "OK" ou "Appliquer" sera utilisé.

Général

Cette section regroupe les options qui influent sur le comportement général de l'IDE.

Ne lancer qu'un éditeur
Si cette option est activé, l'IDE ne pourra être exécuté qu'une seule fois, et tout exécution ulterieure activera l'IDE déjà ouvert. Par exemple cliquer sur un fichier .pb dans l'explorateur ouvrira le fichier dans un nouvel onglet au lieu de lancer une nouvelle instance de l'IDE.

Désactiver l'écran de démarrage
Désactive l'écran "PureBasic" qui est affiché lors du démarrage de l'IDE.

Mémoriser la position des fenêtres
Enregistre la position et la taille des fenêtres de l'IDE lorsqu'elles sont fermées. Pour avoir les fenêtres toujours ouvertes avec les même dimensions, il faudra les placer à l'endroi désiré, activer cette option, puis quitter l'IDE (pour enregistrer les options). Au prochain démarrage, désactiver cette option et les fenêtres utiliseront la taille et la position précédement enregistrées.

Afficher la barre d'outils principale
Permet d'afficher ou de cacher la barre d'outils principale, pour gagner un peu de place dans la fenêtre d'édition.

Afficher le contenu lors de l'utilisation des splitters
Si l'ordinateur de dévellopement est rapdie, cette option peut être activée, sinon déplacer les splitters peut entrainer un scintillement désagréable.

Recharger automatiquement les derniers fichiers ouverts
Recharge automatiquement tous les fichiers qui étaients ouvert lorsque l'IDE a quitté pour la dernière fois.

Afficher automatiquement le fichier contenant une erreur
Quand une erreur de compilation survient, l'IDE essaiera de charger le fichier concerné et afficher la line contenant l'erreur. Si cette option est désactivée, aucun fichier source ne sera ouvert.

Afficher le chemin complet dans le titre de l'IDE
Si cette option est activée, le titre de la fenêtre principale de l'IDE affichera le chemin complet du fichier en cours d'édition, sinon seul le nom de fichier sera affiché.

Afficher les icônes dans le menu (Windows seulement)
Affiche des icônes dans les menus de l'IDE. Si le rendu des menus avec les icônes ne convient pas, il est possible de le désactiver, et les menus 'standards' de Windows seront alors utilisés.

Nb de fichiers récents
Nombre de fichiers récents à afficher dans le sous-menu "Fichiers récents" du menu "Fichier".

Nb de recherches récentes
Détermine le nombre de mots récents qui seront mémorisés dans les commandes "Rechercher/Remplacer" et "Rechercher dans les fichiers".

Éditeur visuel
Permet de choisir un autre programme pour éditer des interfaces graphiques en PureBasic, lorsque que l'on utilise le menu ou le bouton de la barre d'outils.

Général - Langue

Permet de change la langue utilisée par l'IDE. La liste déroulante affiche les langues disponibles et des informations relatives à la traduction (ex: la personne qui a fait la traduction et la date).

Général - Raccourcis claviers

Dans cette section il est possible de paramétrer absolument tous les raccourcis pour les commandes de l'IDE. Créer un nouveau raccourcis, choisir la commande dans la liste, sélectioner la touche de raccourcis et cliquer sur "Appliquer".

A noter que les touches Tab et Shift+Tab sont réservées pour l'indentation des blocs de code et ne peuvent pas être modifiés. De plus certaines combinaisons de touches peuvent avoir un sens particulier pour l'OS et ne pourront pas être utilisées.

Général - Barre d'outils

La barre d'outils est entièrement paramètrable. Pour changer la position des icônes, utiliser les boutons de la section "Position". Pour modifier un bouton ou en ajouter un nouveau, utiliser les boutons de la section "Configuration de l'élément" (les nouveaux éléments sont toujours ajoutés en fin de liste).

Types des éléments:
Séparateur : une barre verticale de séparation.
Espacement : un espace vide de la taille d'une icône.
Icône standard : permet de choisir une icône système (fournie par l'OS) dans la liste déroulante.
Icône de l'IDE : permet de choisir une icône propre à l'IDE dans la liste déroulante.
Fichier icône : permet de choisir une icône à partir d'un fichier spécifié dans le champs à droite (sous Windows, seuls les fichiers icônes (.ico) sont acceptés, sous Linux/MacOSX seuls les fichiers PNG sont acceptés).

Si le type de l'élément n'est pas un "Séparateur" ni un "Espacement", alors il est possible de lui associer une action lorsque le bouton sera pressé:
Element d'un menu : exécutera la commande correspondante à l'élement du menu specifié dans la liste déroulante.
Lancer un outil : exécutera l'outil externe spécifié dans la liste déroulante.

La section "Configurations de la barre d'outils" contient les deux configurations de base de la barre d'outils qu'il est possible de choisir et de modifier à convenance.

Editeur

Paramètres qui influent sur l'édition des codes sources

Enregistrement automatique avant 'Compiler/Exécuter'
Enregistre le code source en cours d'édition avant chaque 'Compiler/Exécuter'. A noter que les fichiers inclus ne sont jamais enregistrés automatiquement.

Enregistrement automatique avant 'Créer un exécutable'
Enregistre le code source en cours d'édition avant de créer un fichier exécutable.

Enregistrement automatique de tous les codes sources
Enregistre Saves all sources instead of just the current one with one of the Auto-save options.

Mémoriser la position du curseur
Enregistre la position du curseur ainsi que l'état de tous les replis pour le fichier en cours d'édition.

Mémoriser la position des marqueurs
Enregistre la position des marqueurs pour le fichier en cours d'édition.

Toujours cacher le journal d'erreurs
Le journal d'erreurs est montré ou caché en fonction de la configuration de chaque code source. Cette option permet de s'assurer que le journal d'erreurs ne sera jamais affiché si l'utilisateur le souhaite. La partie du menu concernant le journal d'erreur est aussi supprimée.

Enregistrer les options
Permet de déterminer oû les options propres à chaque fichiers doivent être enregistrées:

à la fin du fichier source
Enregistre les options dans un bloc de commentaire à la fin du fichier. Lorsqu'un fichier contenant ce type de commentaires est ouvert par l'IDE, ils resteront invisibles.

dans un fichier <nomdufichier>.pb.cfg
Créé un fichier .pb.cfg pour chaque fichier enregistré qui contient ces informations.

dans un fichier project.cfg pour chaque répertoire
Crée un fichier nommé project.cfg dans chaque répertoire ou des fichiers PureBasic sont enregistrés. Ce fichier contiendra les options de tous les fichiers du répertoire.

nulle part
Les options ne sont pas enregistrées du tout. Quand les fichiers seront ouverts, ils utiliseront toujours les valeurs par défaut.

Valeur d'une tabulation
Permet de spécifier le nombre d'espace qui seront insérés à chaque tabulation.

Utiliser les vrais tabulations (Ascii 9)
Si cette option est activée, les tabulation utiliseront le caractère 'tab' au lieu des espaces. A noter que si cette option est activée, le champ "Valeur d'une tabulation" défini la taille de la tabulation affichée.

Répertoire par défaut
Défini le répertoire par défaut qui sera utilisé par les commandes "Ouvrir" et "Enregistrer" si aucun fichier n'est ouvert, ou que le fichier en cours d'édition n'a pas encore été enregistré. Il est conseillé de mettre le répertoire ou sont principalement stockés les codes sources

Editeur - Valeurs par défauts

Cette page permet de définir les options de compilation qui seront utilisées par défaut quand un nouveau code source est créé avec l'IDE.
Pour une explication détailler de chaque option, voir "Options de compilation".

Editeur - Polices/Marges

Utiliser "Selectionner une police" pour changer la police de caractère utilisée pour l'affichage du code source. Pour assurer une bonne lisité du code, la police doit être de taille fixe (c'est à dire que tous les caractères ont la même largeur), si possible même pour les lettres en gras.

Activer la coloration syntaxique
Active ou désactive la coloration des codes sources. Le désactiver rend l'IDE légèrement plus rapide, mais bien moins convivial.

Afficher les mot clefs en gras
Si la police de caractère n'affiche pas les lettres en gras avec la même taille que les lettres normales, il est conseillé de désactiver cette option.

Activer la correction de la casse
Corrige automatiquement les mots clefs PureBasic, les fonctions PureBasic et API ainsi que les contantes prédéfinies pour qu'ils soient exactement comme défini initialement (ex: 'openwindow()' sera automatiquement changé en 'OpenWindow()').

Afficher la numérotation des lignes
Affiche ou cache la numération des lignes situé à gauche de la zone d'édition.

Activer les marqueurs
Active ou désactive la fonctionnatilé "Marqueur" du menu d'édition.

Activer la possibilité de replier le code
Active ou désactive la possibilité de replier ou non le code. Si les "replis" et les "marqueurs" sont désactivés, alors la colonne à gauche de la zone d'édition dédiée aux symboles sera cachée.

Editeur - Couleurs

Cette partie permet de modifier les couleurs utilisées par la coloration syntaxique ainsi que les marqueurs du débogueur. Des configurations prédéfinies sont disponibles dans la liste déroulante en bas de la fenêtre (une fois appliquées, elles sont modifiables).

Note: utiliser la couleur de fond pour les marqueurs du débogueur ou de la ligne courante permet de supprimer la différenciation de ces lignes.

Note: The 'Accessibility' color scheme has (apart from high-contrast colors) a special setting to always use the system color for the selection in the code editor. This helps screen-reader applications to better detect the selected text.

Editeur - Replis

Il est possible d'ajouter des mot clefs pour marquer le debut et la fin d'un bloc repliable dans le code source. Un nombre illimité de mot clef peuvent être saisis. Les mots qui sont dans les commentaires sont ignorés sauf sur le mot clef defini un symbol immédiatement après le commentaire (comme le mot clef par défaut ";{").
Un mot clef ne peut pas contenir d'espace.

Editeur - Auto-complétion

Activer l'auto-complétion
Active ou désactive complètement l'auto-complétion.

Afficher toute la liste des mots auto-complétables
Affiche toujours toute la listes des mots qui sont géré par l'aut-complétion, mais choisi tout le même le mot le plus proche.

Afficher tous les mots commencant par le 1er caractère
Affiche uniquement les mots qui commencent par le premier caractère saisi. Le mot le plus proche est tout de même sélectionné.

Afficher seulement les mots commençant par le terme saisi
Affiche seulement les mots commençant par le terme saisi. Si aucun mot ne correspond, la liste ne sera pas affichée du tout.

Largeur de la liste / Hauteur de laliste
La dimension de la liste d'auto-complétion peut être définie ici (en pixels).

Ajout des parenthèses aux fonctions/tableaux/listes
Ajoute automatiquement la parenthèse ouvrante "(" après charque fonction, tableau ou liste insérée par l'auto-complétion. Les fonctions sans paramètres et les listes chainées auront automatiquement les double parenthèses "()" ajoutées.

Ajout d'un espace après les mots-clefs PureBasic suivis d'une expression
Quand un mot clef PureBasic ne peut pas être utilisé tout seul (tel que If, For, While etc.) et nécessite une expression, un espace sera automatiquement ajouté lors de l'auto-complétion.

Ajout du mots clé de fermeture si Tabulation/Entrée est appuyée deux fois
Si la touche 'Entrée' ou 'Tabulation' est appuyée deux fois, le mot clef de fermeture sera automatiquement inséré (ex: "EndSelect" pour "Select", "EndIf " pour "If") après le mot clef lui-même (et après le curseur, dont il possible de continuer l'édition immédiatement après l'auto-complétion).

Affichage automatique de la liste
Si cette option est désactivée, la liste d'auto-complétion n'est affichée que lorsque le raccourci Ctrl+Espace est utilisé. Sinon, elle s'affichera automatiquement qu'après avoir saisi un certain nombre de caractères (et qu'un choix est possible). A noter que dans ce cas le raccourcis clavier Ctrl+Espace est toujours disponible.

Désactiver l'affichage de la liste dans les commentaires
Désactive l'affichage de la liste d'auto-complétion lorsque que le curseur se situe dans un commentaire.

Désactiver l'affichage de la liste dans les strings
Désactive l'affichage de la liste d'auto-complétion lorsque que le curseur se situe dans un string (entre "").

Caractères nécessaires avant l'affichage de la liste
Permet le configurer le nombre minimum de caractères saisi avant que la liste ne soit automatiquement affichée.

Editeur - Auto-complétion – Eléments affichés

Permet d'ajuster avec précision quels éléments seront affichés dans la liste d'auto-complétion.

A noter que pour les variables, seules celle déclarées à l'aide d'un mot clef seront prises en compte pour l'instant (déclarées avec Define, Global, Shared, Protected ou Static).

Débogueur

Permet de paramétrer le comportement du débogueur intégré ou indépendant. Le débogueur en ligne de commande ne se configure que par l'intermédiaire du terminal.

Type de débogueur
Selectionne le type du débogueur à utiliser lorsqu'un programme est compilé dans l'IDE.

Mémoriser la position des fenêtres du débogueur
Même fonction que l'option "Mémoriser la position des fenêtres" de la section "Général", mais appliquée aux fenêtres du débogueur.

Mettre toutes les fenêtre de débuggage en premier plan
Toutes les fenêtres de débuggage seront au toujours premier plan, même devant les autres applications. Cela peut faciliter le débuggage des applications prenant toute la surface du bureau.

Ramener toutes les fenêtres de débuggage en avant quand une est activée
Avec cette option activée, lorsqu'une fenêtre de débuggage est activée à l'aide de la souris ou du clavier, les autres fenêtres ouvertes sont automatiquement ramenées au premier plan.

Afficher l'heure dans le rapport d'activités
Ajoute l'heure de chaque évènement dans le rapport d'activité.

Stopper l'exécution au début du programme
Chaque programme sera stoppé au début de son exécution, pour donner la possibilité de dérouler le programme pas à pas (sans avoir besoin de mettre un point d'arrêt au début de chaque source).

Stopper l'exécution avant la fin du programme
Chaque programme sera stoppé juste avant de quitter réellement. Cela permet par exemple d'utiliser les outils de débuggage pour examiner les variables ou la memoire avant que le programme ne quitte.

Tuer le programme automatiquement après une erreur
Si le programme rencontre une erreur, il sera alors terminé automatiquement et toutes les fenêtres de débuggages seront fermées. Cela permet d'éditer le code immédiatement après une erreur, mais ce n'est plus possible d'examiner le programme pour essayer de déterminer la cause de l'erreur.

Garder les marqueurs d'erreurs après la fin du programme
N'efface pas les marqueurs d'erreurs quand le programme se termine. Cela permet de voir plus clairement ou l'erreur est survenue lors du retour à l'édition du code. Les marqueurs peuvent ensuite être enlevés à l'aide de la commande "Effacer les marqueurs d'erreurs" du sous-menu "Rapport d'activité".

Effacer le rapport d'activité à chaque exécution
Efface le rapport d'activité à chaque fois qu'un programme est exécuté. Cela assure que le rapport ne deviendra pas trop conséquent (cette option est aussi disponible quand le débogueur en ligne de commande est sélectionné).

Debuggeur - Configuration des outils

Cela permet de contrôler l'affichage et le comportement des outils intégrés au débogueur. Les options "Afficher les valeurs en hexadecimal" change l'affichage des octets, word ou long du format décimal (base 10) au format héxadecimal (base 16).

Fenêtre de déboguage – Ajouter l'heure
Ajoute l'heure à chaque ligne affiché dans la fenêtre de déboguage.

Débogueur ASM – Actualiser automatiquement l'état de la pile
Met à jour automatiquement l'état de la pile à chaque "Pas" ou "Stop" effectués. Si cette option est désactivée, un bouton "Actualiser" sera affiché dans la fenêtre ASM. Updates the stack trace automatically on each step/stop you do. If disabled, a manual update button will be displayed in the Asm window.

Observateur de mémoire – Voir les tableaux en une seule colonne
Si la zone de mémoire est affiché en mode "tableau", cette option indique si ce tableau sera multi-colonnes (avec 16 octets par colonne) ou seulement avec une colonne.

Débogueur - Fenêtres ouvertes

Les fenêtres cochées sur cette page seront ouvertes automatiquement à chaque fois qu'un programme sera lancé avec le débogueur.

Palette d'outils

Gère la configuration des outils internes qui peuvent être affichés dans le panneau latéral. Chaque outil qui est dans la liste des "Outils affichés" sera affiché dans la palette d'outil. Les outils qui ne sont pas présents dans cette liste sont accessibles à partir du menu "Outils". Ils seront ouvert dans une fenêtre indépendante.
Il est préférable de ne mettre que les outils que sont utilisés très fréquemment dans la palette d'outil, et de mettre le plus utilisé en premier, car c'est celui qui est affiché le premier lorsque l'IDE démarre.

En selectionnant un outil dans l'une des deux listes, un panneau de configuration spécifique à cet outil (si il y en a un) apparaitra dans la partie "Configuration".

Les outils suivants peuvent être configurés:

Exploreur
Il est possible de choisir entre un affichage en mode liste ou en mode hierarchique (arbre) et de mémoriser ou non le dernier répertoire affiché (s'il n'est pas mémorisé, alors le "Répertoire par défaut" défini dans les options "Général" sera utilisé)

Palette de couleur
Le nombre de couleurs mémorisables affichées dans la palette de couleur est configurable.

Navigateur de procédures
"Trier les procédures par nom": trie la liste des procédures par ordre alphabétique (par défaut, les procédures apparaissent dans l'ordre de leurs déclarations)
"Grouper les marqueurs": groupe les marqueurs (";-") entre eux.
"Afficher les arguments des procédures": Affiche le nom de la procédure et tous ses paramètres.

Visualisateur de variables
L'option "Afficher les éléments de tous les fichiers ouverts" détermine si la liste doit contenir les éléments du fichier en cours d'édition, ou de tous les fichiers actuellement ouverts par l'IDE.
De plus, il est possible de selectionner le type d'éléments qui seront affichés dans le visualisation de variables.

Palette d'outils – Options

L'apparence de la palette d'outil en elle même peut être configurée dans cette section: le coté qui sera utilisé pour afficher la palette (à droite ou à gauche de la zone d'édition), la police de caractère, ainsi que la couleur de fond et d'avant plan utilisée par les outils affichés.

Ignorer la couleur/police dans les fenêtre indépendantes
Si cette option est activée, les options de couleur/police ne seront appliqués que si l'outil est affiché dans la palette d'outils (ceux ouverts via le menu "Outils" utiliseront la couleur/police par défaut).

Cacher automatiquement la palette d'outils
Pour gagner un peu de place, la palette d'outils peut se cacher automatiquement si la souris ne se trouve pas au dessus d'elle. Par la faire ré-apparaitre, il suffit de déplacer la souris sur la zone situé sur le coté de la zone d'édition.

Delai en millisecondes avant de cacher la palette
Défini un delai (en ms), après lequel la palette d'outils sera cachée si la souris n'est plus au dessus d'elle.

Importer/Exporter

Il est possible d'importer et d'exporter la configuration de l'IDE dans un format indépendant, et de l'importer dans un autre IDE (sous un autre OS par exemple, ou pour le partarger avec d'autres utilisateurs).

Pour réaliser une exportation, il faut sélectionner le type des paramètres à exporter, saisir un nom de fichier et cliquer sur le bouton "Enregistrer"

Pour importer des paramètres, il suffit de choisir le nom du fichier et de cliquer sur "Ouvrir". Les paramètres disponibles seront alors affichés, il faudra décocher les paramètres indésirables puis cliquer sur "Importer".

Pour que les nouveaux paramètres prennent effet, il faudra appuyer sur le bouton "Appliquer".

Note: il est possible d'importer les fichiers 'styles' de l'éditeur jaPBe, mais seul les paramètres concernant les couleurs seront importés.


Commutateurs de la ligne de commande

L'IDE de PureBasic permet de modifier les chemins et les fichiers utilisés lors de son lancement. Cela permet de créer plusieurs raccourcis qui vont lancer l'IDE avec une configuration particulière pour chaque utilisateur, ou pour chaque projet.

Les paramètres possibles sont:

  /P <fichier Préférences> charge (et enregistre) la configuration à partir du fichier spécifié.
  /T <Templates file>      charge (et enregistre) les modèles de code à partir du fichier spécifié.
  /A <tools file>          charge (et enregistre) la configuration des outils externes à partir du fichier spécifié.
  /S <Source path>         change l'option "Répertoire principal" des préférences.
  /E <Explorer path>       démarre l'outil 'Explorer' avec le chemin spécifié.
  /L <Line number>         déplace le curseur à la ligne indiqué (seulement dans le dernier fichier chargé).
  /NOEXT                   désactive l'association automatique des fichiers '.pb' dans la base de registre.
Par défaut, les fichiers utilisés par les paramètres /P /T et /A se trouvent dans le répertoire 'PureBasic'.
Le paramètre /NOEXT est particulièrement utile lorque plusieurs versions de PureBasic cohabitent sur un même système (pour tester les versions bêta par exemple). Ainsi les fichiers .pb seront toujours associés à la même version de PureBasic.

Il est aussi possible d'ajouter des noms de fichiers à ouvrir sur la ligne de commande (et même de spécifier un masque, par exemple “*.pb” chargera tous les fichiers sources d'un répertoire).


Utiliser l'éditeur visuel

Généralités

L'éditeur visuel de PureBasic (concepteur d'interfaces graphiques utilisateur) a été créé pour le langage de programmation PureBasic et est bien sûr développé en PureBasic. Il deviendra de plus en plus puissant et supportera les fonctionnalités avancées tels que les boites de dialogue, l'édition de gadgets à partir de fichiers sources PureBasic, etc...

Utilisation

L'éditeur visuel est fourni avec son propre fichier d'aide. Vous le trouverez dans votre répertoire PureBasic, il s'agit du fichier "Visual Designer.chm".


Utiliser le compilateur SHELL

Introduction

Le compilateur SHELL est situé dans le répertoire 'Compilers\' de la distribution PureBasic. La manière la plus simple d'y accéder est d'ajouter ce répertoire à la variable PATH de Windows, ce qui vous donnera un accès permanent à toutes les commandes de ce répertoire.

Paramètres du compilateur

/? : affiche une aide simplifiée sur le compilateur.

/COMMENTED : créé un fichier de sortie '.asm' commenté en même temps que l'exécutable. Ce fichier peut être ré-assemblé ultérieurement après l'avoir modifié selon vos besoins. Cette option est à destination des programmeurs avancés.

/DEBUGGER : active le débogueur.

/EXE "NomFichier" : créé un fichier exécutable indépendant spécifié par NomFichier.

/ICON "IconName" : Ajoute l'icône spécifiée par IconName dans l'exécutable.

/INLINEASM : Active la fonction assembleur en ligne (des routines asm peuvent être écrites directement dans le code source BASIC).

/RESIDENT "NomFichier" : Crée un fichier résident spécifié par NomFichier.

/CONSOLE: le fichier de sortie est au format Console. Le format par défaut est Win32.

/DLL: le fichier de sortie est une DLL.

/NT4: Intègre la compatibilité NT4 pour les fonctions multimédia (Sprite, Keyboard, Mouse).

/XP: Ajoute le support des thèmes ('skins') pour Windows XP.

/REASM: Réassemble le fichier PureBasic.asm file en fichier exécutable. Ceci permet d'utiliser la fonction /COMMENTED, de modifier le fichier de sortie asm et de recréer un exécutable.

/LINENUMBERING: Ajoute des informations concernant les lignes et les fichiers sources à l'exécutable, qui peut le ralentir considérablement. Cela a été concu pour fonctionner en conjonction avec la bibliothèque OnError.

/QUIET: Désactive toutes les éditions de texte inutiles. Très pratique lorsque vous utilisez un éditeur tiers.

/STANDBY: Charge le compilateur en mémoire, lequel attend de commandes externes (éditeurs, scripts...).

/MMX, /3DNOW, /SSE or /SSE2: Génère un exécutable spécifique à un type de processeur. Si une routine est disponible dans une version optimisée pour le type de processeur choisi, elle sera utilisée. Du coup, l'exécutable ne fonctionnera correctement que sur ce type de processeur.

/DYNAMICCPU: Génère un exécutable qui contient toutes les versions des routines spécialement optimisées pour un type de processeur. Quand le programme se lance, il déterminera dynamiquement le type du processeur et choisira les routines les plus adaptées. Cela produit un exécutable plus gros mais plus rapide.

/RESOURCE "NomFichier": Ajoute un fichier de resource Windows (.rc) à l'exécutable ou la DLL. Ce fichier ne doit pas être un fichier resource compilé, mais un fichier texte contenant des directives. Il est possible de ne specifier qu'un seul fichier resource, mais il peut en inclure d'autre si besoin est, à l'aide des directives adéquates.
/LINKER "FichierCommandes": Spécifie un fichier qui contient des commandes à passer directement au linker. Sur Windows, PureBasic utilise le linker de PellesC (polink), plus d'informations à propos des options possible sont disponible dans l'aide de PellesC.

/IGNORERESIDENT "Fichier": Ne charge pas le fichier résident quand au démarrage du compilateur. C'est principalement utilisé quand un mise à jour d'un fichier résident déjà existant est nécessaire (en conjonction avec /CREATERESIDENT).

/CONSTANT Nom=Valeur: Crée la constante spécifiée avec la valeur indiquée.
Exemple: 'pbcompiler test.pb /CONSTANT MaConstante=10'. La constante #MaConstante sera créée automatiquement avec la valeur 10 avant de commencer la compilation. Très utile pour faire de la compilation ciblée à partir de scripts.

Exemple:

  shell> pbcompiler sourcecode.pb
Le compilateur compile le code 'codesource.pb' et l'exécute.
  shell> pbcompiler sourcecode.pb /DEBUGGER /INLINEASM
Le compilateur compile le code 'codesource.pb' et l'exécute avec le débogueur actif en autorisant l'assembleur en ligne.


Règles de syntaxe générales

PureBasic a défini des règles qui ne changent jamais. Elles sont:

Commentaires

Les commentaires sont signalés par ';' . Tout le texte situé après le caractère ';' est ignoré par le compilateur jusqu'à la fin de la ligne.

Exemple:

  If a = 10 ; Ceci est un commentaire pour indiquer quelque chose.

Fonctions

Toutes les fonctions doivent avoir un nom suivi d'un '(' à défaut de quoi elle ne sera pas considérée comme une fonction. Cela est vrai y compris lorsque la fonction ne prend aucun paramètre.

Exemple:

  WindowEvent() ; est une fonction.
  WindowEvent   ; est une variable.

Constantes

Toutes les constantes ont un nom précédé par un #

Exemple:

  #Hello = 10 ; est une constante.
  Hello  = 10 ; est une variable.

Labels

Tous les labels doivent être suivis par un ':'. Les noms de label ne peuvent pas contenir d'opérateurs (+,-,...) ou de caractères spéciaux (é,à,ß,ä,ö,ü,...).

Exemple:

  Je_suis_un_label:

Expressions

On appelle expression toute séquence de code qui peut être évaluée. Une expression peut regrouper toute variable, constante ou fonction d'un même type. Lorsque vous utilisez des nombres dans une expression, vous pouvez utiliser le symbole $ en tête pour préciser qu'il s'agit d'une valeur hexadécimale ou un % pour signifier une valeur binaire. Sans l'un ou l'autre de ces deux symboles, la valeur sera toujours considérée comme décimale. Les chaînes de caractères doivent être délimitées par des guillemets.

Exemple:

  a+1+(12*3)
  a+WindowHeight()+b/2+#MaConstante
  a <> 12+2
  b+2 >= c+3
  a.s = b.s+"ceci est une chaine"+c.s
  foo + $69 / %1001 ; Utilisation de nombres hexadécimal et binaire

Regroupement des commandes

Il est possible de placer un nombre quelconque de commandes sur la même ligne en les séparant par ':' .

Exemple:

  If OpenScreen(0,320,200,8,0) : PrintN("Ok") : Else : PrintN("Erreur") : EndIf

Glossaire

Les mots suivants utilisés dans ce manuel ont toujours le même sens :

<variable> : une variable basic.
<expression> : une expression comme commenté ci-dessus.
<constant> : une constante numérique.
<label> : un label de programme.
<type> : tout type, (standard ou structuré).

Autres

Dans ce manuel, tous les sujets sont listés en ordre alphabétique pour réduire tout temps de recherche.

La valeur retournée par les commandes est le plus souvent un Long. Dans le cas contraire, le type de la valeur est indiqué dans la description (ligne de syntaxe) de la commande.


Variables, Types et Opérateurs

Déclaration des variables

La déclaration d'une variable en PureBasic se fait en la nommant. Vous pouvez également spécifier le type que vous souhaitez pour cette variable. Les variables n'ont pas besoin d'être explicitement déclarées et peuvent être utilisées "à la volée". Le mot clef Define peut être utilisé pour déclarer plusieurs variables sur une même ligne.

Exemple:

  a.b ; Déclare une variable 'a' du type byte (.b).
  c.l = a*d.w ; 'd' est déclarée ici au milieu d'une expression !
Note: les noms de variables ne peuvent pas commencer avec un chiffre (0, 1, etc.) et ne peuvent pas contenir d'opérateurs (+, -, etc.) ni de caractères spéciaux(é, à, ß, ä, ö, ü, etc.).

Si le contenu d'une variable ne change pas tout au long de l'exécution du programme (utilisation d'une valeur fixe), il est préférable d'utiliser une constante.

Types basiques

PureBasic autorise la définition des types de variables. Ces types sont signés et peuvent être des entiers standards, des nombres flottants ou des chaînes de caractères. Voici la liste des types natifs supportés:

Nom
Extension
Encombrement en mémoire
Plage
Byte | .b | 1 octet | -128 à +127
Caractere | .c | 1 octet (ascii) | 0 à +255
Caractere | .c | 2 octets (unicode) | 0 à +65535
Word | .w | 2 octets | -32768 à +32767
Long | .l | 4 octets | -2147483648 à +2147483647
Float | .f | 4 octets | illimité (voir informations plus bas)
Quad | .q | 8 octets | -9223372036854775808 à +9223372036854775807
Double | .d | 8 octets | illimité (voir informations plus bas)
String | .s | longueur de la chaine + 1 | illimité
String Fixe | .s{Longueur} | longueur de la chaine | illimité

Types non-signés: mis à part le type caractère (.c) (qui est un 'byte' non-signé en mode ascii, et un 'word' non-signé en mode unicode), PureBasic ne supporte pas nativement les types non-signés. Néanmoins, il est possible d'utiliser l'astuce suivante pour émuler un type non-signé:
  a.b = 192
  Debug a & 255  ; affichera 192

Notation des variables chaîne de caractères: Il est possible d'utiliser '$' comme dernier caractère d'une variable pour indiquer qu'il s'agit d'une chaîne de caractères. De cette façon vous pouvez utiliser 'a$' et 'a.s' , ce sont deux variables différentes.
Note : Vous devrez conserver le '$' à la fin de la variable a$, contrairement au '.s' de la variable a.s, qui n'est nécessaire que la première fois pour la déclarer.
  a.s = "Une chaîne"
  a$ = "Une autre chaîne"
  Debug a   ; Affichera "Une chaîne"
  Debug a$  ; Affichera "Une autre chaîne"

Opérateurs

Les opérateurs peuvent être intégrés aux expressions pour combiner les variables, constantes et tout ce qui est nécessaire. La table ci-dessous montre tous les opérateurs utilisables en PureBasic. (LHS = Left Hand Side ou partie gauche, RHS = Right Hand Side ou partie droite).

Opérateur
Description / Exemple
=
 Egal. Peut être utilisé selon deux acceptions. La première est pour l'affectation de la variable LHS à la valeur résultat de l'expression RHS. La seconde signification est l'utilisation dans une expression de comparaison entre LHS et RHS. Si le résultat de LHS est identique au résultat de RHS la valeur 'vrai' sera retournée sinon se sera la valeur 'faux'.

Exemple:
a=b+c ; Affecte la valeur de "b+c" à la variable "a"
If abc=def ; Test si les valeurs de abc et def sont identiques et utilise le résultat dans la commande If
+
 Plus. Donne le résultat de la valeur de l'expression RHS ajoutée à la valeur de l'expression LHS. Si le résultat de cet opérateur n'est pas utilisé et qu'il y a une variable LHS, alors la valeur de l'expression RHS sera directement ajoutée à la valeur LHS.

Exemple:
nombre=mavaleur+2 ; Ajoute la valeur 2 à "mavaleur" et utilise le résultat avec l'opérateur =
variable+expression ; La valeur de "expression" est directement ajoutée à "variable"
-
 Moins. Soustrait la valeur de l'expression RHS de la valeur de l'expression LHS. Si il n'y a pas d'expression LHS l'opérateur prend la valeur négative de la valeur RHS. Si le résultat de l'opérateur n'est pas utilisé et qu'il n'y a pas de variable LHS, alors la valeur de RHS est directement soustraite à la valeur de la variable LHS. Cet opérateur ne peut être utilisé avec les variables de type chaine.

Exemple:
var=#MaConstante-chose; Soustrait la valeur de "chose" de "#MyConstant" et utilise le résultat avec l'opérateur égal.
uneautre=uneautre+ -var ; Calcule la valeur négative de "var" et utilise le résultat avec l'opérateur +.
variable-expression ; La valeur "expression" est directement soustraite à "variable"
*
 Multiplication. Multiplie la valeur de l'expression LHS par la valeur de RHS. Si le résultat de l'opérateur n'est pas utilisé et qu'il y a une variable LHS, alors la valeur de la variable est directement multipliée par la valeur de l'expression RHS. Cet opérateur ne peut être utilisé dans une variable de type chaine.

Exemple:
total=prix*quantite ; Multiplie la valeur de "prix" par la valeur de "quantite" et utilise le résultat avec l'opérateur =
variable*expression ; "variable" est multiplé directement par la valeur de "expression"
/
 Division. Divise la valeur de l'expression LHS par la valeur de l'expression RHS. Si le résultat de l'opérateur n'est pas utilisé et qu'il y a une variable LHS, alors la valeur de la variable est directement divisée par la valeur de l'expression RHS. Cet opérateur ne peut être utilisé dans les variables de type chaine.

Exemple:
quantite=total/prix ; Divise la valeur "total" par la valeur "prix" et utilise le résultat avec l'opérateur =
variable/expression ; "variable" est directement divisé par la valeur "expression"
&
 AND est un ET logique (binaire). Il vous faut être familiarisé avec les nombres binaires pour utiliser cet opérateur. Le résultat de cet opérateur est le résultat d'un ET logique entre les valeurs des expressions LHS et RHS, bit à bit. La valeur de chaque bit résultant est fixée comme indiqué dans la table ci-dessous. De plus, si le résultat de l'opérateur n'est pas utilisé et qu'il y a une variable LHS, alors le résultat sera directement stocké dans cette variable. Cet opérateur ne peut être utilisé avec une variable de type chaine.
LHS | RHS |Résultat
------------------
 0  |  0  |    0
 0  |  1  |    0
 1  |  0  |    0
 1  |  1  |    1
 Exemple:
; La représentation binaire des valeurs est utilisée pour une présentation plus claire et lisible
a.w = %1000 & %0101 ; Le résultat sera 0
b.w = %1100 & %1010 ; Le résutlat sera %1000
bits = a & b ; Effectue un ET bit à bit entre a et b et utilise le résultat avec l'opérateur =
a & b ; Effectue un ET bit à bit entre a et b et place le résultat directement dans la variable "a"
|
 OR est un OU logique. (binaire). Vous devez être familiarisé avec les nombres binaires pour utiliser cet opérateur. Le résultat de cet opérateur est le résultat d'un OU logique entre les valeurs des expressions LHS et RHS bit à bit. La valeur de chaque bit résultant est fixée comme indiqué dans la table ci-dessous. De plus, si le résultat de l'opérateur n'est pas utilisé et qu'il et qu'il y a une variable LHS alors le résultat est directement stocké dans cette variable. Cet opérateur ne peut être utilisé avec une variable de type chaine.
LHS | RHS |Résultat
------------------
 0  |  0  |    0
 0  |  1  |    1
 1  |  0  |    1
 1  |  1  |    1
 Example:
; La représentation binaire des valeurs est utilisée pour une présentation claire et lisible
a.w = %1000 | %0101 ; Le résultat sera %1101
b.w = %1100 | %1010 ; Le résultat sera %1110
bits = a | b ; Effectue un OU bit à bit entre a et b et utilise le résultat avec l'opérateur =
a | b ; Effectue un OU bit à bit entre a et b et place le résultat directement dans la variable "a"
!
 XOR est un OU Exclusif logique (binaire). Vous devez être familiarisé avec les nombres binaires pour utiliser cet opérateur. Le résultat de cet opérateur est le résultat d'un OU Exclusif entre les valeurs LHS et RHS bit à bit. La valeur de chaque bit résultant est fixée comme indiqué dans la table ci-dessous. De plus, si le résultat de l'opérateur n'est pas utilisé et qu'il y a une variable LHS alors le résultat est directement stocké dans cette variable. Cet opérateur ne peut être utilisé avec une variable de type chaine.
LHS | RHS |Résultat
------------------
 0  |  0  |    0
 0  |  1  |    1
 1  |  0  |    1
 1  |  1  |    0
 Exemple:
; La représentation binaire des valeurs est utilisée pour une présentation claire et lisible
a.w = %1000 ! %0101 ; Le résultat sera %1101
b.w = %1100 ! %1010 ; Le résultat sera %0110
bits = a ! b ; Effectue un OU Exclusif bit à bit entre a et b et utilise le résultat avec l'opérateur =
a ! b ; Effectue un OU Exclusif bit à bit entre a et b et place le résultat directement dans "a"
~
 NOT est une inversion logique (binaire). Vous devez être familiarisé avec les nombres binaires pour utiliser cet opérateur. Le résultat de cet opérateur est une inversion bit à bit de la valeur RHS. La valeur de chaque bit est fixée comme indiqué dans la table ci-dessous. Cet opérateur ne peut être utilisé avec une variable de type chaine.
RHS |Résultat
----------
 0  |    1
 1  |    0
Exemple:
; La représentation binaire des valeurs est utilisée pour une présentation claire et lisible
a.w = ~%1000 ; Le résultat sera %0111
b.w = ~%1010 ; Le résultat sera %0101
()
 Parenthèses. Vous pouvez utiliser les parenthèses pour forcer l'évaluation prioritaire d'une partie d'une expression ou modifier l'ordre d'évaluation.

Exemple:
a = (5 + 6) * 3 ; Le résultat est 33 car 5+6 est évalué en premier
b = 4 * (2 - (3 - 4)) ; Le résutlat est 12 car 3-4 est évalué en premier, ensuite 2-résultat puis la mutiplication pour finir
<
 Inférieur à. Utilisé pour comparer les valeurs des expressions LHS et RHS. Si la valeur de LHS est plus petite que la valeur de RHS cet opérateur rend un résultat vrai, sinon le résultat est faux.
>
 Supérieur à. Utilisé pour comparer les valeurs des expressions LHS et RHS. Si la valeur de LHS est plus grande que la valeur de RHS cet opérateur rend un résultat vrai, sinon le résultat est faux.
<=
 Inférieur ou égal à. Utilisé pour comparer les valeurs des expressions LHS et RHS. Si la valeur de LHS est plus petite ou égale à la valeur de RHS cet opérateur rend un résultat vrai, sinon le résultat est faux.
>=
 SUpérieur ou égal à. Utilisé pour comparer les valeurs des expressions LHS et RHS. Si la valeur de LHS est plus grande ou égale à la valeur de RHS cet opérateur rend un résultat vrai, sinon le résultat est faux.
<>
 Différent. Utilisé pour comparer les valeurs des expressions LHS et RHS. Si la valeur de LHS est différente de la valeur de RHS cet opérateur rend un résultat vrai, sinon le résultat est faux.
And
 ET logique. Peut être utilisé pour combiner les résultats vrais ou faux des opérateurs de comparaison en donnant un résultat fixé comme indiqué dans la table ci-dessous.
  LHS  |  RHS  |Résultat
-----------------------
  faux |  faux |  faux
  faux |  vrai |  faux
  vrai |  faux |  faux
  vrai |  vrai |  vrai
Or
 OU logique. Peut être utilisé pour combiner les résultats vrais ou faux des opérateurs de comparaison en donnant un résultat fixé comme indiqué dans la table ci-dessous.
  LHS  |  RHS  |Résultat
-----------------------
  vrai |  faux |  faux
  faux |  vrai |  vrai
  vrai |  faux |  vrai
  vrai |  vrai |  vrai
XOr
 OU exclusif logique. Peut être utilisé pour combiner les résultats vrais ou faux des opérateurs de comparaison en donnant un résultat fixé comme indiqué dans la table ci-dessous.
  LHS  |  RHS  | Résultat
-----------------------
 faux | faux | faux
 faux | vrai | vrai
 vrai | faux | vrai
 vrai | vrai | faux
Not
 Le résultat de cet opérateur sera la négation de l'expression RHS. Cet opérateur ne fonctionne pas avec les strings.
  RHS  | Résultat
---------------
 faux | vrai
 vrai | faux
<<
 Décalage à gauche. Décale vers la gauche les bits du nombre LHS de RHS places. Decaler les bits vers la gauche revient à faire une multiplication par un multiple de 2. Il est conseillé de bien comprendre les opérations binaires avant d'utiliser cet opérateur.

Exemple:
a=%1011 << 1 ; La valeur de 'a' sera %10110. (en decimal: %1011=11 et %10110=22)
b=%111 << 4 ; La valeur de 'b' sera %1110000. (en decimal: %111=7 et %1110000=208)
c.l=$8000000 << 1 ; La valeur de 'c' sera 0. Les bits supérieurs sont perdus car ils dépassent la capacité du type.
>>
 Décalage à droite. Décale vers la droite les bits du nombre LHS de RHS places. Decaler les bits vers la droite revient à faire une division par un multiple de 2. Il est conseillé de bien comprendre les opérations binaires avant d'utiliser cet opérateur.

Exemple:
d=16 >> 1 ; La valeur de 'd' sera 8. (en binaire: 16=%10000 et 8=%1000)
e.w=%10101010 >> 4 ; La valeur de 'e' sera %1010. (en décimal: %10101010=170 et %1010=10).
f.b=-128 >> 1 ; La valeur de 'f' sera -64. -128=%10000000, -64=%11000000. Lors du décalage, le bit le plus fort reste (conservation du signe).
%
 Modulo. Calcule le reste de la division entière de RHS par LHS.

Exemple:
a=16 % 2 ; La valeur sera 0 car 16/2 = 8 (aucun reste)
b=17 % 2 ; La valeur sera 1 car 17/2 = 8*2+1 (reste 1)

Priorité des opérateurs

  Niveau de priorité  |    Opérateurs
  --------------------+---------------------
         7  (haute)   |        ~
         6            |    <<, >>, %, !
         5            |       |, &
         4            |       *, /
         3            |       +, -
         2            | >, >=, <, <=, =, <>
         1  (basse)   |   And, Or, XOr, Not

Types structurés

Les types structurés peuvent être définis avec les options propres aux structures. Voyez le chapitre structures pour plus d'information.

Information concernant les nombres flottants

Un nombre flottant est stocké de telle manière que la 'virgule flotte' autour de la partie réelle. De la sorte, il est possible d'avoir des nombres dont la valeur peut être aussi bien grande que petite. Toutefois vous ne pouvez pas stocker de grands nombres avec une précision aussi élevée que des petits nombres.

Une autre limitation concernant les nombres flottants est qu'ils restent concrètement représentés sous une forme binaire. Ainsi, ils ne peuvent être restitués qu'à partir de multiples et de divisions en base 2. Celà est important pour comprendre que la représentation décimale lors de l'affichage ou du calcul n'est pas tout à fait identique à ce que l'on peut attendre dans une représentation humaine. Représenter 0.5 ou 0.125 est simple car ce sont des divisions parfaites de 2, cela est plus complexe pour des nombres comme 0.11 ou 0.10999999. L'affichage approché de la valeur est toujours correct à un nombre limité de décimales, mais ne soyez pas surpris si au-delà le nombre affiché s'écarte de la valeur que vous attendez!

Ces remarques s'appliquent aux nombres flottants traités par ordinateur d'une manière générale et non spécifiquement à Purebasic.

Comme leur nom l'indique, les 'doubles' sont des flottants 'double-precision' (64 bits) comparativement aux flottants 'simple-precision' que sont les floats (32 bits). Donc, pour avoir plus de précision dans la manipulation des nombres à virgule, il est préférable d'utiliser les 'doubles'.

Pour plus d'information sur le format 'IEEE 754', consulter l'article Wikipedia.


Break : Continue

Syntax
Break [Niveau]
Description
Break permet de quitter à n'importe quel moment une ou plusieurs des boucles suivantes: Repeat, For, ForEach et While. Le paramètre optionnel 'Niveau' indique le nombre de boucles qui doivent être abrégées. Sans paramètre, Break quitte la boucle courante.

Exemple: Boucle simple

  For k=0 To 10
    If k=5
      Break  ; Quitte immédiatement la boucle For/Next
    EndIf
    Debug k
  Next

Exemple: Boucles imbriquées

  For k=0 To 10
    Counter = 0
    Repeat
      If k=5
        Break 2 ; Quitte immédiatement les boucles Repeat/Until et For/Next
      EndIf
      Counter+1
    Until Counter > 1
    Debug k
  Next

Syntax
Continue
Description
Continue permet de passer directement à la prochaine itération dans l'une des boucles suivantes: Repeat, For, ForEach et While.

Exemple:

  For k=0 To 10
    If k=5
      Continue  ; N'affichera pas 'Debug 5' car la fin de cette itération sera ignorée
    EndIf
    Debug k
  Next


For : Next

Syntax
For <variable> = <expression1> To <expression2> [Step <constante>]
  ...
Next [<variable>]
Description
La fonction For : Next est utilisée pour produire une boucle dans le programme, avec les paramètres définis. A chaque cycle, <variable> est incrémentée de 1 (ou d'une valeur correspondant au pas indiqué dans Step <constante>). Le première valeur de <variable> est <expression1>. La boucle est interrompue dès que la valeur de <variable> atteint la valeur de <expression2>.

Exemple:

  For k = 0 To 10
    Debug k
  Next
Dans cet exemple, le programme bouclera 11 fois (0 a 10) et sortira.

Exemple:

  a = 2
  b = 3
  For k = a+2 To b+7 Step 2
    Debug k
  Next k
Ici, le programme bouclera 4 fois avant de sortir (k est augmentée de 2 à chaque cycle et prend donc successivement les valeurs 4, 6, 8 et 10=. La lettre k après le mot clef Next indique que ce Next ferme la boucle "For k". Si un autre nom de variable est utilisé, le compilateur génèrera une erreur. Cela est utile pour la lisibilité d'un code comprenant des boucles imbriquées.

Exemple:

  For x=0 To 319
    For y=0 To 199
      Plot(x,y)
    Next y
  Next x


ForEach : Next

Syntax
ForEach LinkedList()
  ...
Next
Description
ForEach énumère tous les élèments d'une liste chaînée. Si la liste est vide, ForEach : Next quitte immédiatement, sans entrer dans la boucle. Pour de plus amples renseignements sur les listes chainées, cliquez ici.

Il est possible de quitter une boucle ForEach : Next à tout moment à l'aide de la commande Break. La commande Continue permet de passer directement à l'itération suivante, sans exécuter la fin du code contenu dans la boucle.

Exemple:

  NewList Number()

  AddElement(Number())
  Number() = 10

  AddElement(Number())
  Number() = 20

  AddElement(Number())
  Number() = 30

  ForEach Number()
    Debug Number() ; Affichera 10, 20 et 30
  Next


Gosub : Return

Syntax
Gosub MonLabel

MonLabel:
  ...
Return
Description
Gosub signifie 'Go to sub routine', en français: 'Aller au sous-programme'. Un label doit être spécifié après Gosub pour que l'exécution du programme se poursuive à la position du label et jusqu'à ce qu'un Return soit rencontré. Lorsque le Return est atteint, le programme revient à l'instruction suivant le Gosub. Gosub est très pratique pour construire rapidement un code structuré.

Les procédures sont une autre alternative pour la conception rapide d'un programme structuré.

Exemple:

  a = 1
  b = 2
  Gosub OperationComplexe
  Debug a
  End

  OperationComplexe:
    a = b*2+a*3+(a+b)
    a = a+a*a
  Return

Syntax
FakeReturn
Description
Lorsque vous souhaitez sauter d'un sous-programme à une autre partie du code extérieur au sous-programme (en utilisant une commande Goto), vous pouvez utiliser un FakeReturn qui simule un Return sans l'effectuer réellement. Si vous n'utilisez pas ce dispositif, votre programme génèrera une erreur. Cette commande ne devrait pas avoir d'utilité car un programme bien conçu ne devrait pas utiliser de Goto. Toutefois, dans certains cas où la performance est critique, cela peut aider le programmeur.

Exemple:

  Gosub SousProgramme1

  SousProgramme1:
    ...
    If a = 10
      FakeReturn
      Goto ProgrammePrincipal
    EndIf
  Return


If : Else : EndIf

Syntax
If <expression>
  ...
[ElseIf <expression>]
  ...
[Else]
  ...
EndIf
Description
La structure If est utilisée pour effectuer des tests et/ou changer le déroulement du programme selon le résultat (vrai ou faux) du test. ElseIf est utilisé pour produire un nombre quelconque de tests additionnels si le premier n'a pas eu un résultat vrai. La commande optionnelle Else est utilisée pour exécuter une séquence de code si tous les tests précédents de la structure ont échoué. Les structures If peuvent être imbriquées sans limite de profondeur.

Exemple:

  If a=10
    PrintN("a=10")
  Else
    PrintN("a<>10")
  EndIf

Exemple:

  If a=10 And b>=10 Or c=20
    If b=15
      PrintN("b=15")
    Else
      PrintN("Autre possibilité")
    EndIf
  Else
    PrintN("Erreur de test")
  EndIf


Repeat : Until

Syntax
Repeat
  ...
Until <expression> [ou Forever]
Description
Cette fonction boucle jusqu'à ce que <expression> soit vrai. Si une boucle infinie est requise il est préférable d'utiliser le mot clef Forever à la place de Until.

Exemple:

  a=0
  Repeat
    a=a+1
    Debug a
  Until a>100
Ceci produira une boucle jusqu'à ce que "a" prenne une valeur strictement supérieure à 100, (il y aura donc 101 cycles).


Select : EndSelect

Syntax
Select <expression1>
  Case <expression> [, <expression> [<expression> To <expression>]]
     ...
  [Case <expression>]
     ...
  [Default]
     ...
EndSelect
Description
Select permet d'opérer des choix rapides. Le programme exécute <expression1> et retient la valeur en mémoire. Cette valeur est ensuite comparée à chacune des valeurs "Case <expression>" et s'il y a égalité, le code du bloc Case est exécuté pour quitter ensuite la structure Select. Case supporte les valeurs multiples ainsi que les intervalles à l'aide du mot-clef To. Si aucune des valeurs Case n'est vraie, alors le code du bloc Default code, (s'il est spécifié) est exécuté.

Exemple:

Exemple:

  Value = 2

  Select Value
    Case 1
      Debug "Value = 1"

    Case 2
      Debug "Value = 2"

    Case 20
      Debug "Value = 20"

    Default
      Debug "I don't know"
  EndSelect

Exemple: Cas multiples et intervalles

  Value = 2

  Select Value
    Case 1, 2, 3
      Debug "Value is 1, 2 or 3"

    Case 10 To 20, 30, 40 To 50
      Debug "Value is between 10 and 20, equal to 30 or between 40 and 50"

    Default
      Debug "I don't know"

  EndSelect


While : Wend

Syntax
While <expression>
  ...
Wend
Description
While produit une boucle jusqu'à ce que l'expression devienne fausse. Il est à noter qu'avec le test accompagnant While, si la première tentative échoue, le programme n'entrera pas dans la boucle et évitera donc cette section de code contrairement à une boucle Repeat qui est toujours exécutée au moins une fois (car le test est effectué en sortie de code conditionnel).

Exemple:

  b = 0
  a = 10
  While a = 10
    b = b+1
    If b=10
      a=11
    EndIf
  Wend
Ce programme boucle jusqu'à ce que la valeur "a" devienne différente de 10. La boucle sera donc exécutée 10 fois.


Autres commandes

Syntax
Goto <label>
Description
Cette commande permet de transférer directement l'exécution du programme à l'emplacement d'un label. Soyez attentif en utilisant Goto car une mauvaise utilisation peut provoquer une fin anormale du programme...

Syntax
End [CodeDeSortie]
Description
Termine et quitte le programme de manière correcte à n'importe quel endroit du code source. Le paramètre optionnel 'CodeDeSortie' peut être utilisé pour renvoyer un code d'erreur différent de 0 (valeur par défaut) lorsque le programme se termine (souvent utilisé par les programmes en mode console).

The 'CodeDeSortie' peut-être récupéré dans un autre programme à l'aide de la commande ProgramExitCode().

Syntax

Swap <expression>, <expression>
Description
Echange la valeur des deux expressions, de manière très rapide. Chaque <expression> doit être soit une variable, un tableau ou un élément de liste chaînée (structuré ou non) et être d'un des type natifs: long (.l), quad (.q), string, etc.

Exemple:

  Hello$ = "Hello"
  World$ = "World"

  Swap Hello$, World$

  Debug Hello$+" "+World$


Define

Syntax
Define.<type> [<variable>, <variable>,...]
Description
Si aucune <variable> n'est spécifiée, Define est utilisé pour changer le type par défaut pour les variables qui seront ensuite utilisées sans déclaration (y compris les paramètres des procedures et les paramètres des méthodes dans les interfaces. Le type par défaut initial est le type long (.l).

Exemple:

  d = e+f
  Define.w
  a = b+c
Les variables d, e et f sont créées avec le type long, puisqu'il n'y a pas eu de type spécifié. Les variables a, b et c sont des mots signés (.w) car aucun type ne leur est spécifié, le type par défaut ayant été passé à .w.

Si des variables sont précisées avec la commande Define le type par défaut n'est pas changé seules les variables nommées utilisant le type indiqué.

Exemple:

  Define.b a,b,c,d
a,b,c,d sont de type octet (.b)


Dim

Syntax
Dim nom.<type>(<expression>, [<expression>], ...)
Description
Dim est utilisé pour dimensionner un nouveau tableau. Un tableau peut être composé d'éléments de type quelconque connu sous PureBasic, incluant les structures et les types définis par l'utilisateur (Attention : les éléments d'un tableau sont tous de même type). Une fois le tableau créé il peut être redimensionné mais son contenu sera alors effacé, sauf si ReDim est utilisé. Les tableaux sont alloués dynamiquement ce qui signifie que le dimensionnement peut se faire à partir d'une variable ou d'une expression.

Les tableaux sont toujours locaux par défaut, donc pour acceder à partir d'une procedure à un tableau défini dans le code source principal du programme, l'utilisation de Global ou Shared est requise.

Pour effacer le contenu complet d'un tableu et libérer la mémoire qu'il occupe, appeler Dim avec 0 éléments.

Note: La vérification des accès à un tableau est effectuée uniquement quand le débogueur est activé.

Exemple:

  Dim MonTableau.l(41)
  MonTableau(0) = 1
  MonTableau(1) = 2

Exemple: Tableau à dimensions multiples

  Dim TableauMultiple.b(NbColonnes, NbLignes)
  TableauMultiple(10, 20) = 10
  TableauMultiple(20, 30) = 20

Syntax
ReDim nom.<type>(<expression>, [<expression>], ...)
Description
ReDim permet de redimensionner un tableau déjà déclaré tout en préservant son contenu. La nouvelle taille peut être plus grande ou plus petite, mais le nombre de dimensions ne peut pas être modifié.

Si ReDim est utilisé sur un tableau à plusieurs dimensions, seule la dernière dimension peut être changée.

Exemple:

  Dim MyArray.l(1) ; We have 2 elements
  MyArray(0) = 1
  MyArray(1) = 2

  ReDim MyArray(4) ; Now we want 5 elements
  MyArray(2) = 3

  For k = 0 To 2
    Debug MyArray(k)
  Next


Enumérations

Syntax
Enumeration [<constant> [Step <constant>]]
  #Constant1
  #Constant2 [= <constant>]
  #Constant3
  ...
EndEnumeration
Description
Les énumerations sont très pratiques pour déclarer rapidement une série de constantes sans s'occuper de leur valeur numérique. La premiere constante de l'énumeration prendra la valeur 0, la constante suivante prendra la valeur 1 etc. Il est possible de changer la valeur de départ de l'énumeration et d'ajuster la valeur utilisée pour l'incrémentation de chaque constante. Si nécessaire, il est possible d'affecter directement une valeur numérique à une constante (grace à l'opérateur '=') et les constantes suivantes utiliseront cette nouvelle valeur comme valeur de base.

La constante réservée #PB_Compiler_EnumerationValue stocke la prochaine valeur qui sera utilisée par l'énumeration. Cela peut être utile pour chaîner plusieurs énumerations.

Exemple: Enumération simple

  Enumeration
    #GadgetInfo ; Sera 0
    #GadgetText ; Sera 1
    #GadgetOK   ; Sera 2
  EndEnumeration

Exemple: Enumération avec un pas déterminé

  Enumeration 20 Step 3
    #GadgetInfo ; Sera 20
    #GadgetText ; Sera 23
    #GadgetOK   ; Sera 26
  EndEnumeration

Exemple: Enumération avec un changement dynamique

  Enumeration
    #GadgetInfo      ; Sera 0
    #GadgetText = 15 ; Sera 15
    #GadgetOK        ; Sera 16
  EndEnumeration

Exemple: Enumérations chainées

  Enumeration
    #GadgetInfo ; Sera 0
    #GadgetText ; Sera 1
    #GadgetOK   ; Sera 2
  EndEnumeration

  Enumeration #PB_Compiler_EnumerationValue
    #GadgetCancel ; Sera 3
    #GadgetImage  ; Sera 4
    #GadgetSound  ; Sera 5
  EndEnumeration


Interfaces

Syntax
Interface <name> [Extends <name>]
  ...
EndInterface
Description
Les Interfaces sont utilisées pour accéder facilement aux modules 'Orientés Objets' tels que les bibliothèques COM (Component Object Model) ou DirectX. Ce type de bibliothèques sont de plus en plus courantes sous Windows et les interfaces permettent une exploitation de ces fonctions sans impacts de performances. Les interfaces jettent aussi les bases pour une 'Programmation Orientée Object' (OOP en anglais) avec PureBasic mais de solides connaissances sont nécessaires pour en tirer parti (les interfaces n'ont pas été conçues pour ajouter une couche objet à PureBasic mais plutôt pour accéder facilement à des objets dejà conçus). La plupart des interfaces utilisées sous Windows sont déjà incluses dans les fichiers résidents 'Interfaces.res' et 'InterfaceDX.res', ce qui rend leur utilisation immédiate.

Le paramètre optionnel Extends permet d'étendre une interface sans avoir à dupliquer ses fonctions (ces 'fonctions' sont aussi communément appelées 'méthodes' dans les autres langages objet tels que C++ ou Java). Toutes les fonctions contenues dans l'interface étendue seront disponibles dans la nouvelle interface. C'est utile pour un héritage simple d'objets.

La commande SizeOf peut être utilisée avec les interfaces pour déterminer la taille d'une interface et la commande OffsetOf peut être utilisée pour déterminer l'index d'une fonction dans une interface.

Les pseudotypes peuvent être utilisés pour les paramètres des fonctions de l'interface, mais pas pour le type de retour.

Note: Les concepts objets sont principalement appropriés pour les développeurs expérimentés et il n'est pas nécessaire de les maîtriser ou même les comprendre pour réaliser des applications ou jeux professionnels.

Exemple: Appel à une fonction objet

  ; Nous allons considérer que vous voulez accéder à une fonction
  ; d'un objet externe en PureBasic. Premièrement, déclarez son interface.
  ;
  Interface MyObject
    Move(x,y)
    MoveF(x.f,y.f)
    Destroy()
  EndInterface

  ; CreateObject est la fonction qui permet la création de l'objet.
  ; Création du premier objet..
  ;
  Object1.MyObject = MyCreateObject()

  ; Et du deuxieme.
  ;
  Object2.MyObject = MyCreateObject()

  ; Nous pouvons alors utiliser les fonctions de l'objet directement comme suit:
  ;
  Object1\Move(10, 20)
  Object1\Destroy()

  Object2\MoveF(10.5, 20.1)
  Object2\Destroy()

Exemple: Utilisation de 'Extends'

  ; Définition d'une interface générique 'Cube'
  ;
  Interface Cube
    GetPosition()
    SetPosition(x)
    GetWidth()
    SetWidth(Width)
  EndInterface

  Interface ColoredCube Extends Cube
    GetColor()
    SetColor(Color)
  EndInterface

  Interface TexturedCube Extends Cube
    GetTexture()
    SetTexture(TextureID)
  EndInterface

  ; Nous avons maintenant 3 interfaces pour chaque objet:
  ;
  ; - 'Cube' a les fonctions Get/SetPosition() et Get/SetWidth()
  ; - 'ColoredCube' a les fonctions Get/SetPosition(), Get/SetWidth() et Get/SetColor()
  ; - 'TexturedCube' a les fonctions Get/SetPosition(), Get/SetWidth() et Get/SetTexture()
  ;

Exemple: Créer ses propres objets en PureBasic (voir le répertoire 'Advanced Examples')


NewList

Syntax
NewList nom.<type>()
Description
NewList permet de déclarer une nouvelle liste chaînée. Chaque élément de la liste est alloué dynamiquement. Il n'y a pas de limite, ce qui permet d'en créer autant que nécessaire. Une liste peut avoir tout type standard ou structuré valide. Pour connaître toutes les commandes disponibles pour la gestion des listes chaînées, consultez la bibliothèque LinkedList.

Les listes chaînées sont toujours locales par défaut, donc pour accéder à partir d'une procédure à une liste chaînée définie dans le code source principal du programme, l'utilisation de Global ou Shared est requise.

Exemple:

  NewList MaListe.l()

  AddElement(MaListe())
  MaListe() = 10

  AddElement(MaListe())
  MaListe() = 20

  AddElement(MaListe())
  MaListe() = 30

  ForEach MaListe()
    Debug MaListe()
  Next


Structures

Syntax
Structure <nom> [Extends <name>]
  ...
EndStructure
Description
Structure est utile pour définir un type utilisateur et accéder à des zones mémoires du système d'exploitation par exemple. Les structures peuvent être utilisées pour rendre l'accès à des grands fichiers plus facilement. Cela peut être plus efficace dans la mesure où vous pouvez regrouper dans un même objet des informations communes. On accède aux structures avec le caractère \ . Les structures peuvent s'imbriquer. Les tableaux statiques sont acceptés dans une structure.

Le paramètre optionnel Extends permet d'étendre une structure existante avec de nouveaux champs. Tous les champs se trouvant dans la structure étendue se retrouveront en tête de la nouvelle structure. C'est très utile pour faire un héritage simple de structures.

Quand beaucoup de champs doivent être remplis en une fois, it est conseillé d'utiliser With : EndWith pour réduire la quantité de code à saisir et améliorer sa lisibilité.

Exemple:

  Structure Personne
    Nom.s
    Prenom.s
    Age.w
  EndStructure

  Dim MesAmis.Personne(100)

  ; Ici la position '0' du tableau MesAmis()
  ; contiendra une personne et ses informations personnelles

  MesAmis(0)\Nom = "Michel"
  MesAmis(0)\Prenom = "Durand"
  MesAmis(0)\Age = 32

Exemple: Structure plus complexe (Tableau statique imbriqué)

   Structure Fenetre
    *FenetreSuivante.Fenetre  ; Pointe vers un autre objet fenêtre
    x.w
    y.w
    Nom.s[10]  ; 10 noms possibles
  EndStructure

Exemple: Structure étendue

  Structure MyPoint
    x.l
    y.l
  EndStructure

  Structure MyColoredPoint Extends MyPoint
    color.l
  EndStructure

  ColoredPoint.MyColoredPoint\x = 10
  ColoredPoint.MyColoredPoint\y = 20
  ColoredPoint.MyColoredPoint\color = RGB(255, 0, 0)

Syntax
StructureUnion
  Field1.Type
  Field2.Type
  ...
EndStructureUnion
Description
StructureUnion est prévu pour les programmeurs avancés qui souhaitent économiser de la mémoire en partageant certains champs à l'intérieur d'une même structure. Il s'agit d'un équivalent du mot clef 'union' en C/C++.

Exemple:

  Structure Type
    Name$
    StructureUnion
      Long.l      ; Chaque champ (Long, Float et String) est placé à la
      Float.f     ; meme adresse mémoire.
      String.s    ;
    EndStructureUnion
  EndStructure


With : EndWith

Syntax
With <expression>
  ...
EndWith
Description
Le bloc With : EndWith permet de réduire la quantité de code à saisir et améliore sa lisibilité quand beaucoup de champs d'une structure doivent être renseignés. L'<expression> spécifiée sera automatiquement insérée avant chaque caractère anti-slash '\' qui suit un espace ou un opérateur. C'est une directive de compilateur qui fonctionne de la même manière qu'une macro: la ligne complète est recréée lors de la compilation, puis elle est traitée. Les blocs With : EndWith ne peuvent pas être imbriqués, car cela pourrait générer des bugs difficiles à résoudre.

Exemple:

  Structure Person
    Name$
    Age.l
    Size.l
  EndStructure

  Friend.Person

  With Friend
    \Name$ = "Yann"
    \Age   = 30
    \Size  = 196

    Debug \Size+\Size
  EndWith

Exemple:

  Structure Body
    Weight.l
    Color.l
    Texture.l
  EndStructure

  Structure Person
    Name$
    Age.l
    Body.Body[10]
  EndStructure

  Friend.Person

  For k = 0 To 9
    With Friend\Body[k]
      \Weight = 50
      \Color  = 30
      \Texture = \Color*k

      Debug \Texture
    EndWith
  Next


Procedures

Syntax
Procedure[.<type>] nom(<variable1>[,<variable2>,...])
  ...
  [ProcedureReturn valeur]
EndProcedure
Description
Une procédure est une partie du code indépendante du programme principal qui peut avoir des paramètres et des variables propres. En PureBasic, les procédures sont récursives et peuvent donc s'appeler elles-mêmes. Lors de chaque appel à la procédure, les variables locales sont automatiquement initialisées avec la valeur 0. Pour accéder aux variables du programme principal, ils faut les partager en utilisant les mots clefs Shared ou Global (voir aussi: Protected et Static).

Une procédure peut avoir une valeur de retour si nécessaire. Il faut en définir le type après Procedure et utiliser le mot clef ProcedureReturn à tout moment opportun dans la procédure.

Les paramètres en fin de procédure peuvent avoir une valeur par défaut (une expression constante est requise). Les paramètres ayant une valeur par défaut pourront être omis lors de l'appel de la procédure, la valeur par défaut de chaque paramètre manquant sera utilisée.

Note: Pour renvoyer une chaîne de caractères dans une DLL, voir DLLs. Pour les programmeurs chevronnés, ProcedureC est disponible pour déclarer la procédure en utilisant la convention d'appel 'cdecl' au lieu de 'stdcall'.

Exemple:

  Procedure.l Maximum(nb1.l, nb2.l)
    If nb1>nb2
      Resultat.l = nb1
    Else
      Resultat = nb2
    EndIf

    ProcedureReturn Resultat
  EndProcedure

  Resultat.l = Maximum(15,30)
  Debug Resultat
  End

Syntax
Declare[.<type>] nom(<variable1>[,<variable2>,...])
Description
Dans certains cas une procédure peut appeler une autre procédure qui n'a pas été déclarée avant sa propre définition. Ce cas peut se produire et provoquer une erreur de compilation 'Procedure not found'. Declare permet de traiter ce cas particulier en déclarant seulement l'en-tête de la procédure. Il est essentiel que les attributs de la fonction Declare et la déclaration réelle de la procédure soient identiques.

Exemple:

  Declare Maximum(Valeur1, Valeur2)

  Procedure Traitement(Valeur)
    Maximum(10, 2)      ; A cet instant Maximum() n'est pas connu du compilateur.
  EndProcedure

  Procedure.l Maximum(Valeur1.l, Valeur2.l)
    If Valeur1>Valeur2
      Resultat.l = Valeur1
    Else
      Resultat = Valeur2
    EndIf

    ProcedureReturn Resultat
  EndProcedure


Global

Syntax
Global <variable> [,<variable>,...]
Description
Global permet à des variables d'être utilisées globalement, pouvant ainsi être accessibles depuis l'intérieur de n'importe quelle procédure. Global peut aussi être utilisé avec les tableaux et les listes chaînées.

Les instructions Protected et permettent de déclarer une variable locale dans une procédure qui a le même nom qu'une variable globale, sans risque de conflit.

Exemple:

Exemple: Avec des variables

  Global a.l, b.b, c, d = 20

  Procedure Change()
    Debug a  ; Affiche 10 car la variable 'a' est globale
  EndProcedure

  a = 10
  Change()

Exemple: Avec un tableau

  Global Dim Array(2)

  Procedure Change()
    Debug Array(0)  ; Affiche 10 car le tableau 'Array()' est global
  EndProcedure

  Array(0) = 10
  Change()


Protected

Syntax
Protected <variable> [,<variable>,...]
Description
Protected permet de créer une variable locale dans une procédure. Elle supplante l'éventuelle variable globale du même nom pendant toute la procédure (contrairement à une variable locale classique non protégée).

La valeur de la variable locale sera réinitialisée à chaque appel de la procédure. Pour éviter cela, Static permet de déclarer une variable locale indépendante des variables globales tout en gardant sa valeur au fil des appels de la procédure.

Exemple: Avec une variable

  Global a
  a = 10

  Procedure Change()
    Protected a
    a = 20
  EndProcedure

  Debug a ; Affichera 10 car la variable a été protégée.

Exemple: Avec un tableau

  Global Dim Array(2)
  Array(0) = 10

  Procedure Change()
    Protected Dim Array(2) ; This array is protected, it will be local.
    Array(0) = 20
  EndProcedure

  Change()
  Debug Array(0) ; Will print 10, as the array has been protected.


Shared

Syntax
Shared <variable> [,<variable>,...]
Description
Shared permet de rendre une variable, un tableau ou une liste chaînée d'une procédure accessible depuis l'extérieur. Quand Shared est utilisé avec un tableau ou une liste chaînée, seul le nom suivit de '()' doit être spécifié.

Exemple: Avec une variable

  a = 10

  Procedure Change()
    Shared a
    a = 20
  EndProcedure

  Change()
  Debug a   ; Will print 20, as the variable has been shared.

Exemple: Avec un tableau et une liste chaînée

  Dim Array(2)
  NewList List()
  AddElement(List())

  Procedure Change()
    Shared Array(), List()
    Array(0) = 1
    List() = 2
  EndProcedure

  Change()
  Debug Array(0)  ; Will print 1, as the array has been shared.
  Debug List()    ; Will print 2, as the linkedlist has been shared.


Static

Syntax
Static <variable> [,<variable>,...]
Description
Static permet de créer des variables locales persistantes dans une procedure. Les variables statiques sont prioritaires sur les variables globales, ce qui implique qu'une variable globale sera ignorée dans une procédure si une variable statique portant le même nom est déjà déclarée. La valeur de la variable statique n'est pas réinitialisée à chaque appel de la procédure: c'est donc un bon moyen pour avoir une variable globale affectée à une seule procédure.

Static peut aussi être utilisé avec les tableaux et les listes chaînées. Lors de la déclaration d'un tableau static, ses paramètres doivent être une valeur constante.

Exemple: Avec une variable

  Global a
  a = 10

  Procedure Change()
    Static a
    a+1
    Debug "In Procedure: "+Str(a) ; Will print 1, 2, 3 as the variable increments at each procedure call.
  EndProcedure

  Change()
  Change()
  Change()
  Debug a ; Will print 10, as the static variable doesn't affect global one.

Exemple: Avec un tableau

  Global Array(2)
  Array(0) = 10

  Procedure Change()
    Static Dim Array(2)
    Array(0)+1
    Debug "In Procedure: "+Str(Array(0)) ; Will print 1, 2, 3 as the value of the array field increments at each procedure call.
  EndProcedure

  Change()
  Change()
  Change()
  Debug Array(0) ; Will print 10, as the static array doesn't affect global one.


Import : EndImport

Syntax
Import "NomFichier"
  FunctionName.<type>(<parametre>, [, <parametre> [= ValeurDefaut]...]) [As "NomSymbol"]
  ...
  VariableName.<type> [As "NomSymbol"]
EndImport
Description
Pour les programmeurs chevronnés. Import : EndImport permet de déclarer facilement des fonctions et des variables externes à partir d'un fichier bibliothèque (.lib) ou objet (.obj).

Une fois déclarées, les fonctions importées sont directement disponibles dans le programme, comme n'importe quelle autre commande. Le compilateur ne vérifie pas si la fonction existe réellement dans le fichier importé, donc si une erreur survient, elle sera reportée par le linker.

Les fonctions importées remplacent avantageusement les commandes OpenLibrary()/CallFunction(): la vérification du type, le nombre de paramètres sont validés par le compilateur. De plus, contrairement à CallFunction(), une fonction importée peut gérer les types 'double', 'float' et 'quad' sans aucun problème.

Les paramètres en fin de fonction peuvent avoir une valeur par défaut (une expression constante est requise). Les paramètres ayant une valeur par défaut pourront être omis lors de l'appel de la fonction, la valeur par défaut de chaque paramètre manquant sera utilisée.

Par défaut, le symbole de la fonction importée est décoré suivant le schéma suivant: _NomFonction@tailleargument.Cela devrait fonctionner pour la plupart des fonctions qui utilise la convention standard d'appel (stdcall). Par contre, si la bibliothèque est écrite en C, et que les fonctions exportées ne sont pas stdcall, ImportC devra être utilisé à la place de Import. Dans ce cas, par défaut le symbole est décoré comme ceci: _NomFonction.

Les pseudotypes peuvent être utilisés pour les paramètres, mais pas pour le type de retour.

Exemple:

  Import "User32.lib"

    ; No need to use 'As' as PureBasic decores the function correctly
    ; We also define the 'Flags' as optional, with a default value of 0 (when ommited)
    ;
    MessageBoxA(Window.l, Body$, Title$, Flags.l = 0)

    ; This time PureBasic can't find it alone as the function
    ; name isn't the same than the one used by the symbol
    ;
    MsgBox(Window.l, Body$, Title$, Flags.l) As "_MessageBoxA@16"

  EndImport

  MessageBoxA(0, "Hello", "World") ; We don't specify the flags
  MsgBox(0, "Hello", "World 2", 0)

Exemple: Avec les pseudotypes

  Import "User32.lib"

    ; We use the 'p-unicode' pseudotype for the string parameters, as
    ; MessageBoxW() is an unicode only function. The compiler will
    ; automatically converts the strings to unicode when needed.
    ;
    MessageBoxW(Window.l, Body.p-unicode, Title.p-unicode, Flags.l = 0)

  EndImport

  ; It will work correctly in ascii and in unicode mode, even if the API is unicode
  ; only as the compiler will take care of the conversion itself.
  ;
  MessageBoxW(0, "Hello", "World")


Macros

Syntax
Macro <nom> [(Parametre [, ...])]
  ...
EndMacro
Description
Le système de macro est une fonctionnalité très puissante, principalement utile pour les programmeurs chevronnés. Une macro est un bout de code quelconque (un mot clef, une ligne, plusieurs lignes) qui peut être inséré à n'importe quel endroit dans le code source en indiquant le nom de la macro. En ce sens, une macro est différente d'une procedure, car les procédures ne dupliquent pas leur code à chaque appel.

The Macro : EndMacro declaration must be done before the macro will be called for the first time. Because macros will be completely replaced by their related code at compile time, they are not local to a procedure.

Une macro ne peut pas avoir un type de retour, ou des paramètres typés, car cela n'a pas de sens. Quand une macro a des paramètres, ils sont remplacés dans le code de la macro par l'expression littérale qui a été passée lors de l'appel. Aucune évaluation n'est faite à ce stage, ce qui est très important à comprendre: l'évaluation de la ligne ne commence uniquement lorsque toutes les macros trouvées sur cette ligne ont été traitées.

Les macros sont divisées en deux catégories: les simples (sans paramètres) et les complexes (avec paramètres, obligation d'utiliser les parenthèses pour les appeler). Quand aucun paramètre n'est spécifié, il est possible de remplacer n'importe quel mot avec un autre mot (ou une autre expression). Les macros peuvent être utilisées de manière récursive, mais si un des paramètres passés contient le caractère de concatenation '#', il ne sera pas géré.

Exemple: Macro simple

  Macro MyNot
    Not
  EndMacro

  a = 0
  If MyNot a   ; Here the line will be expanded to : 'If Not a'
    Debug "Ok"
  EndIf
En utilisant les paramètres, il est possible de créer des macros très flexibles. Le caractère de concaténation '#' est disponible pour créer des nouveaux mots ou labels en combinant le code de la macro et l'expression passée en paramètre (les espaces ne sont pas acceptées entre chaque mots devant être concaténés). Il est aussi possible de définir des valeurs par défaut pour chaque paramètre, pour qu'ils puissent être omis lors de l'appel de la macro.

Exemple: Macro avec paramètres

  Macro UMsgBox(Title, Body)
    MessageRequester(Title, UCase(Body), 0)
  EndMacro

  Text$ = "World"
  UMsgBox("Hello", "-"+Text$+"-") ; Here the line will be expanded like that:
                                  ; 'MessageRequester("Hello", UCase("-"+Text$+"-"), 0)'

Exemple: Macro avec paramètre par defaut

  Macro UMsgBox(Title, Body = "Ha, no body specified")
    MessageRequester(Title, UCase(Body), 0)
  EndMacro

  UMsgBox("Hello") ; Here the line will be expanded like that:
                   ; 'MessageRequester("Hello", UCase("Ha, no body specified"), 0)'

Exemple: Macro et concatenation

  Macro XCase(Type, Text)
    Type#Case(Text)
  EndMacro

  Debug XCase(U, "Hello")
  Debug XCase(L, "Hello")

Exemple: Macro complexe sur plusieurs lignes

  Macro DoubleQuote
    "
  EndMacro

  Macro Assert(Expression)
    CompilerIf #PB_Compiler_Debugger  ; Only enable assert in debug mode
      If Expression
        Debug "Assert (Line " + Str(#PB_Compiler_Line) + "): " + DoubleQuote#Expression#DoubleQuote
      EndIf
    CompilerEndIf
  EndMacro

  Assert(10 <> 10) ; Will display nothing
  Assert(10 <> 15) ; Should display the assert


Prototypes

Syntax
Prototype.<type>(<parametre>, [, <parametre> [= ValeurDefaut]...])
Description
Pour les programmeurs chevronnés. Un Prototype permet la déclaration d'un type particulier qui servira à appeler une fonction. Cela permet de faire facilement des pointeurs de fonctions, car ce type peut être affecté à une variable.

Cette fonctionnalité peut remplacer CallFunction() car elle présente quelques avantages: vérification du type de paramètre, du nombre de paramètres.

Contrairement à CallFunction(), le prototype peut gérer les paramètres de types 'double', 'float' et 'quad' sans aucun problème. GetFunction() permet d'obtenir facilement le pointeur d'une fonction dans une bibliothèque.

Les paramètres en fin de prototype peuvent avoir une valeur par défaut (une expression constante est requise). Les paramètres ayant une valeur par défaut pourront être omis lors de l'appel du prototype, la valeur par défaut de chaque paramètre manquant sera utilisée.

Par défaut, la fonction utilisera la convention d'appel 'stdcall'. Si le pointeur de fonction appelle une fonction C utilisant la convention d'appel 'cdecl', PrototypeC est fortement conseillé.

Les pseudotypes peuvent être utilisés pour les paramètres, mais pas pour le type de retour.

Exemple:

  Prototype.l ProtoMessageBox(Window.l, Body$, Title$, Flags.l = 0)

  If OpenLibrary(0, "User32.dll")

    ; 'MsgBox' is a variable with a 'ProtoMessageBox' type
    ;
    MsgBox.ProtoMessageBox = GetFunction(0, "MessageBoxA")

    MsgBox(0, "Hello", "World") ; We don't specify the flags
  EndIf

Exemple: Avec des pseudotypes

  ; We use the 'p-unicode' pseudotype for the string parameters, as
  ; MessageBoxW() is an unicode only function. The compiler will
  ; automatically converts the strings to unicode when needed.
  ;
  Prototype.l ProtoMessageBoxW(Window.l, Body.p-unicode, Title.p-unicode, Flags.l = 0)

  If OpenLibrary(0, "User32.dll")

    ; 'MsgBox' is a variable with a 'ProtoMessageBoxW' type
    ;
    MsgBox.ProtoMessageBoxW = GetFunction(0, "MessageBoxW")

    MsgBox(0, "Hello", "World") ; We don't specify the flags
  EndIf


Pseudotypes

Description
Pour les programmeurs chevronnés. Les pseudotypes sont destinés à faciliter la programmation quand l'utilisation de bibliothèques externes nécessitant des types non supportés par PureBasic sont requises. Plusieurs types prédéfinis sont disponibles et permettent une conversion à la volée des types PureBasic vers ces types. Etant donné que ce ne sont pas des types normaux, leur notation est volontairement différente: un préfixe 'p-' (pour 'pseudo') fait partie du nom du type. Les pseudotypes disponibles sont:
  p-ascii: se comporte comme un type 'string', mais la chaîne de caractères sera toujours convertie en
           ascii lors de l'appel de la fonction, même si le programme est compilé en mode unicode.
           C'est très utile pour appeler les fonctions d'une bibliothèque qui ne supporte pas
           l'unicode, dans un programme unicode.

  p-utf8: se comporte comme un type 'string', mais la chaîne de caractères sera toujours convertie en
          utf-8 lors de l'appel de la fonction. C'est très utile pour appeler les fonctions d'une bibliothèque qui ne supporte que
          l'utf-8 comme format de chaîne de caractères.

  p-bstr: se comporte comme un type 'string', mais la chaîne de caractères sera toujours convertie en
          bstr lors de l'appel de la fonction. C'est très utile pour appeler les fonctions d'une bibliothèque qui ont besoin
          des chaînes de caractères bstr, comme les composants COM.

  p-unicode: se comporte comme un type 'string', mais la chaîne de caractères sera toujours convertie en
             unicode lors de l'appel de la fonction, même si le programme est compilé en mode ascii.
             C'est très utile pour appeler les fonctions d'une bibliothèque qui ne supporte que
             l'unicode, dans un programme ascii.

  p-variant: se comporte comme un type numérique, en ajustant l'appel de la fonction pour utiliser correctement
             un paramètre de type 'VARIANT'. C'est très utile pour appeler les fonctions d'une bibliothèque qui ont besoin
             des paramètres de type 'VARIANT', comme les composants COM.
Les pseudotypes peuvent être utilisés uniquement avec les prototypes, les interfaces et les fonctions importées. Ils ne font la conversion que si c'est nécessaire: par exemple utiliser le pseudotype 'p-ascii' dans un programme compilé en mode ascii n'a aucun effet, car les chaînes internes de PureBasic sont déjà en ascii.

Exemple:

  Import "User32.lib"

    ; We use the 'p-unicode' pseudotype for the string parameters, as
    ; MessageBoxW() is an unicode only function. The compiler will
    ; automatically converts the strings to unicode when needed.
    ;
    MessageBoxW(Window.l, Body.p-unicode, Title.p-unicode, Flags.l = 0)

  EndImport

  ; It will work correctly in ascii and in unicode mode, even if the API is unicode
  ; only as the compiler will take care of the conversion itself.
  ;
  MessageBoxW(0, "Hello", "World")


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). Etant donné que c'est indexé, 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 à partir de 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 tableau.
- Manipulation 'Groupée' sans avoir à utiliser de tableaux supplémentaires.
- Utilisation des objects dans les procedures 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 Enumerations 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'emplacement 0
  ResizeImage(0, 320, 240) ; Retaille l'image n°0

Exemple:

  CreateImage(2, 640, 480) ; Crée une image à l'emplacement 2
  ResizeImage(2, 320, 240) ; Retaille l'image n°2
  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) ; Recrée une nouvelle image à l'emplacement n°2. L'ancienne image n°2 est désallouée automatiquement
  Next

Exemple:

  #ImageBackground = 0
  #ImageButton     = 1

  CreateImage(#ImageBackground, 640, 480) ; Crée une image à l'emplacement #ImageBackground (0)
  ResizeImage(#ImageBackground, 320, 240) ; Retaille l'image 0 (ImageBackground)
  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é. 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 chaînées, qui sont aussi un moyen dynamique de gérer des données.

Exemple:

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

Exemple: Gestion dynamique d'objets avec une liste chainée


Numéros et Identifiants (Handles)

Les numéros

Tous les objets crées sont identifiés par un numéro arbitraire (qui n'est pas l'identifiant de l'objet, comme défini ci-dessous). Dans ce manuel, les numéros s'écrivent sous la forme #Numéro (par exemple, chaque gadget créé a un numéro #Gadget).

Les numéros que vous leurs attribuez n'ont pas besoin d'être des constantes, mais ils doivent être uniques pour chaque objet de votre programme (une image peut avoir le même numéro qu'un gadget, parce que ce sont des types d'objets différents). Ces numéros sont utilisés pour accéder ultérieurement à ces objets dans votre programme.

Par exemple, les fonctions de gestion des évènements renvoient des numéros :
  EventGadget()
  EventMenu()
  EventWindow()

Les identifiants

Tous les objets ont également un numéro unique qui leur est attribué par le système. Ces numéros uniques sont appelés identifiants. Parfois, une fonction PureBasic n'a pas besoin du numéro comme paramètre, mais de l'identifiant. Dans ce manuel, ce genre de besoin est indiqué, à l'aide du suffixe ID.

Exemple:

  ImageGadget(#Gadget, x, y, Largeur, Hauteur, ImageID [, Options])
  ; #Gadget doit être le numéro que vous voulez attribuer au Gadget
  ; ImageID doit être l'IDentifiant (numéro unique) de l'image.
Pour obtenir l'identifiant d'un objet, il y a des fonctions spéciales telles que :
  WindowID()
  GadgetID()
  ImageID()
  MemoryID()
  FontID()
La plupart des fonctions qui créent ces objets renvoient cet identifiant comme résultat, si tout s'est bien passé. Ceci est seulement le cas si #PB_Any n'a pas été utilisé pour créer l'objet. Si #PB_Any est utilisé, ces fonctions renvoient le numéro de l'objet qui a été attribué par PB pour elles, mais pas l'identifiant.

Exemple:

  GadgetHandle = ImageGadget(...)


Gestion des messages Windows

Introduction

Les messages de votre programme seront transférés par Windows dans une file d'attente, qui est traitée uniquement si vous le désirez. Windows transmet un millier de messages à votre programme sans avertissement direct.

Par exemple si vous changez le statut d'un gadget (que ce soit en ajoutant une saisie ou en changeant l'image d'un ImageGadget), un message est envoyé à la file d'attente de votre programme.

Il y a deux possibilités de récupérer et de traiter les messages Windows dans PureBasic : WaitWindowEvent() and WindowEvent(). La différence est, que WaitWindowEvent() attend qu'un message arrive alors que WindowEvent() permet de continuer à travailler. Les messages dans la file d'attente ne seront cependant traités qu'après l'appel à WindowEvent() ou WaitWindowEvent().

Spécificités de WindowEvent()

La commande WindowEvent() n'attend pas, qu'un message arrive, mais vérifie seulement s'il y en a un dans la file d'attente. Si Oui, le message est traité et WindowEvent() renvoie le numéro du message. Si aucun message n'est dans la file, alors zéro (0) est renvoyé.

Exemple:

  While WindowEvent() : Wend
Fait en sorte, que WindowEvent() soit appelée tant qu'elle ne renvoie pas 0, c'est à dire jusqu'à ce que tous les messages de la file d'attente soient traités

Insérer un simple 'WindowEvent()' après un SetGadgetState() ne suffit pas pour traiter ce message en particulier. Premièrement il peut toujours y avoir d'autres messages dans la file d'attente, qui sont arrivés auparavant, et deuxièmement Windows envoie également un nombre conséquent d'autres messages, dont nous n'avons que faire... mais qui néanmoins sont dans la file d'attente.

Un simple appel à
  WindowEvent()
ne suffit pas, le programme peut fonctionner correctement dans certaines circonstances sur une version de Windows, mais pas sur une autre version. Les différentes versions de Windows ont un fonctionnement interne tellement spécifique, qu'une version envoie seulement 1 message mais une autre version peut envoyer 5 messages pour le même cas de figure. .

A cause de cela, on utilise toujours pour la mise à jour :
  While WindowEvent() : Wend
Bien sûr il y a aussi l'alternative
  Repeat : Until WindowEvent() = 0
possible, qui n'est cependant pas très courante.

La méthode While WindowEvent() : Wend est fréquement utilisée avec la commande Delay(), lorsqu'une une boucle est insérée AVANT le Delay(), par exemple pour attendre que la mise à jour d'un ImageGadget soit effective, après avoir changé une image avec SetGadgetState().


Pointeurs et accès mémoire

Pointeurs

L'utilisation des pointeurs est possible en plaçant une * devant le nom de variable. Un pointeur est une variable de type long qui stocke une adresse. Le pointeur est généralement associé avec un type structure. Cela permet d'accéder à la structure via le pointeur.

Exemple:

  *MonEcran.Ecran = OpenScreen(0,320,200,8,0)
  mouseX = *MonEcran\SourisX ; La structure Ecran devant contenir un champ SourisX
Il existe seulement trois méthodes valides pour fixer la valeur d'un pointeur:
- Obtenir le résultat par une fonction (voir l'exemple ci-dessous)
- Copier la valeur d'un autre pointeur
- Trouver l'adresse d'une variable, procédure ou label (voir ci-dessous)

Adresses des variables

Pour trouver l'adresse d'une variable dans votre code, utilisez le symbole @.La raison la plus fréquente d'utiliser ce système est le transfert d'une variable de type structure à une procédure. Il faut passer un pointeur à la procédure car il est impossible de passer directement la structure comme argument.

Exemple:

  Structure astruct
    a.w
    b.l
    c.w
  EndStructure

  Procedure SetB(*monpointeur.astruct)
    *monpointeur\b = 69
  EndProcedure

  Define.astruct mavariable
  mavariable\b = 0
  SetB( @mavariable )
  Debug mavariable\b

Adresses des procédures

En principe seuls les programmeurs avancés ont à connaître l'adresse d'une procédure. La raison la plus fréquente est de devoir négocier des échanges de bas niveau avec le système d'exploitation. Certains systèmes autorisent la mise en place de callbacks ou points d'ancrage (hooks) permettant au système d'exploitation de dialoguer avec le programme en étendant ainsi les capacités du système d'exploitation. L'adresse d'une procédure est accessible d'une manière similaire à une variable.

Exemple:

  Procedure WindowCB(WindowID.l, Message.l, wParam.l, lParam.l)
    ; C'est ici que le traitement de votre callback sera effectué
  EndProcedure

  ; Un callback spécifique pour Windows permet de traiter les évènements sur les fenêtres
  SetWindowCallback( @WindowCB() )

Adresses des labels

Il peut également être utile de connaître l'adresse d'un label dans votre programme. Cela peut être le cas pour accéder au code ou aux données placées à cet endroit ou toute autre bonne raison qui peut vous venir à l'esprit. Pour trouver l'adresse d'un label dans votre programme, placez un '?' devant le nom du label.

Exemple:

  Debug "Taille du fichier de données = " + Str(?endofmydata - ?mydata)

  DataSection
    mydata:
      IncludeBinary "somefile.bin"
    endofmydata:


Data

Introduction

PureBasic autorise l'utilisation de données pour stocker des blocs d'informations prédéfinies dans votre programme. Ceci est utile pour disposer de valeurs par défaut (messages textuels par exemple) ou dans un jeu pour définir le cheminement prédéfini d'un sprite.

DataSection doit être placé en tête du bloc de données. Tous les labels et composants data sont stockés dans cette partie data dont l'accès est plus rapide que la zone de code. Data est utilisé pour entrer des données. EndDataSection doit être spécifié si du code à exécuter est situé après. Il est intéressant de pouvoir placer plusieurs zones de données à différents endroits du code source. Les données peuvent être chargées à l'aide des commandes Restore et Read.

Syntax
DataSection
Description
Débute une zone de données.

Syntax
EndDataSection
Description
Termine une zone de données.

Syntax
Data.NomType
Description
Définit les données. Le type peut être choisi parmi les types natifs (long, word, byte, float, string). Un nombre quelconque de données peut être placé sur une même ligne, chacune étant séparée par une virgule.

Exemple:

  Data.l 100, 200, -250, -452, 145
  Data.s "Bonjour", "Qu'est", "ce que ", "c'est ?"
Pour les programmeurs chevronnés: il est aussi possible de mettre l'adresse d'une procedure ou d'un label avec Data si le type long (.l) est utilisé. Par exemple, des tables de fonctions virtuelles peuvent être créées facilement.

Exemple:

  Procedure Max(Number, Number2)
  EndProcedure

  Label:

  DataSection
    Data.l ?Label, @Max()
  EndDataSection

Syntax
Restore label
Description
Ce mot clef permet de placer un indicateur de début de zone pour la commande Read.

Exemple:

  Restore DonneesTexte
  Read MonPremierTexte$
  Read MonSecondTexte$

  Restore DonneesNumeriques
  Read a
  Read b

  DataSection

    DonneesNumeriques:
      Data.l 100, 200, -250, -452, 145

    DonneesTexte:
      Data.s "Bonjour", "Qu'est-ce", "que ", "c'est ?"

Syntax
Read
Description
Lit la donnée suivante. Le pointeur peut être modifié en utilisant la commande Restore. Par défaut, la donnée suivante est la première donnée déclarée.


Commandes de débogage

Introduction

PureBasic runtime debugger est un programme externe contrôlant l'exécution du programme. Les paramètres passés aux fonctions sont contrôlés en temps réel, les opérations interdites évitées (comme une division par zéro) et plus encore. Avec PureBasic, l'exécution peut être stoppée, analysée pas à pas pour localiser les erreurs. Le programme peut être interrompu à tout instant ! Cela peut être très utile lorsque le programme arrive dans une boucle infinie. De plus il est possible de tracer toutes les variables y compris les registres ASM si la fonction de validation ASM en ligne est activée dans les options de compilations.

Fonctions

Stop

Arrête l'exécution et affiche la position courante dans le code.

Cont

Continue l'exécution d'un programme préalablement stoppé.

Step

Ce bouton permet d'exécuter le code ligne-à-ligne. C'est une aide précieuse pour l'analyse des erreurs.

Asm

Affiche une fenêtre de contrôle ASM avec les registres et les indicateurs CPU. Il s'agit d'une aide pour les programmeurs avancés ayant une connaissance du langage ASM. La fonction ASM en ligne doit être validée dans les options de compilation et le debugger doit être stoppé (Stop ou Step) pour accéder à cette fenêtre. Cet outil de contrôle est utile pour l'analyse de codes ASM en ligne, mais pas pour le code basic standard. Une fonction pratique est la possibilité de modifier à la volée le contenu d'un registre en utilisant le bouton 'Write New Value'.

Show variables

Affiche une fenêtre montrant toutes les variables globales utilisées dans le programme. Le contenu des variables est rafraîchi en temps réel pour permettre un suivi facile de l'exécution du programme.

Show Output Window

Affiche une fenêtre qui montre le contenu de sortie de la commande Debug.

Exit

Cette fonction sort du Debugger, du compilateur et de tout programme en cas de problème (par exemple d'une boucle infinie ne permettant de sortir normalement).

Mots clefs du Debugger en PureBasic

Syntax

  CallDebugger
Description
Appel du "debugger" et arrêt immédiat du programme au point courant du code.

Syntax

  Debug <expression> [, NiveauDebug]
Description
Affiche la fenêtre DebugOutput et le résultat correspondant. L'expression peut être toute expression valide en PureBasic, de forme numérique ou chaine. Un point important est que toute commande Debug et les expressions associées sont totalement ignorées (non compilées) si le debugger est désactivé. Cela singifie qu'il n'est pas nécessaire de passer les instruction Debug en commentaires lors de la création de l'exécutable final tout en ayant la possibilité de tracer facilement l'exécution du programme pour le développeur.

'NiveauDebug' est le niveau de priorité des messages du Debugger. Tous les messages (avec un niveau non spécifié) sont affichés automatiquement. Lorsqu'un niveau est spécifié alors le message correspondant ne sera affiché que si le niveau de debug courant est égal ou supérieur au niveau associé au message. Cela permet de réaliser une traçabilité hiérarchisée en affichant des informations de plus en plus précises en fonction de la valeur 'NiveauDebug' utilisée.

Syntax

  DebugLevel
Description
Fixe le niveau courant pour les messages 'Debug'.

Syntax

  DisableDebugger
Description
Interrompt l'utilisation du Debugger sur les lignes du code qui suivent cette commande.

Syntax

  EnableDebugger
Description
Active l'utilisation du Debugger sur les lignes de code qui suivent cette commande (lorsque le debugger a été préalablement interrompu par la commande DisableDebugger).


Les fonctions 'Include'

Syntax
IncludeFile  "NomFichier"
XIncludeFile "NomFichier"
Description
IncludeFile permet d'inclure tout fichier source spécifié à l'endroit où la commande est située. XIncludeFile réalise la même fonction en évitant toutefois d'inclure le même fichier plusieurs fois.

Exemple:

  XIncludeFile "Sources\monfichier.pb" ; monfichier sera inséré.
  XIncludeFile "Sources\monfichier.pb" ; monfichier sera ignoré dans tout appel supplémentaire.

Syntax
IncludeBinary "NomFichier"
Description
IncludeBinary inclut le fichier nommé à l'endroit où la commande est placée.

Exemple:

  IncludeBinary "Data\map.data"

Syntax
IncludePath "Chemin"
Description
IncludePath spécifie le chemin d'accès par défaut pour tous les fichiers inclus appelés après la commande. Très pratique pour l'inclusion de nombreux fichiers provenant d'un même répertoire.

Exemple:

  IncludePath  "Sources\Data"
  IncludeFile  "Sprite.pb"
  XIncludeFile "Music.pb"


Les directives du compilateur

Syntax
CompilerIf  <expression constante>
  ...
[CompilerElse]
  ...
CompilerEndIf
Description
Si le résultat <expression constante> est vrai, le code inclus dans la structure 'If' sera compilé, sinon il sera totalement ignoré. Cette directive permet de construire des programmes multi-plateformes en personnalisant des parties du code source avec des fonctions spécifiques pour chaque système d'exploitation.

Exemple:

  CompilerIf #PB_Compiler_OS = #PB_OS_Linux
    ; code spécifique Linux..
  CompilerEndIf

Syntax
CompilerSelect  <constante numérique>
  CompilerCase
    ...
  [CompilerElse]
    ...
  [CompilerDefault]
    ...
CompilerEndSelect
Description
Fonctionne exactement comme un Select : EndSelect classique en opérant une compilation conditionnelle. Cette directive permet de construire des programmes multi-plateformes en personnalisant des parties du code source avec des fonctions spécifiques pour chaque système d'exploitation.

Exemple:

  CompilerSelect #OS
    CompilerCase #AmigaOS
      ; code spécifique Amiga
    CompilerCase #Linux
      ; code spécifique Linux
  CompilerEndSelect

Syntax
CompilerError <message>
Description
Génère une erreur, comme si c'était une erreur de syntaxe et affiche le message spécifié. Ceci peut être utile pour faire des routines spécifiques et indiquer qu'elles ne sont pas disponibles pour un OS particulier.

Exemple:

  CompilerIf #PB_Compiler_OS = #PB_OS_AmigaOS
    CompilerError "AmigaOS n'est pas supporté, désolé."
  CompilerElse
    CompilerError "OS Supporté, vous pouvez me mettre en commentaire."
  CompilerEndIf

Syntax
EnableExplicit
DisableExplicit
Description
Active ou désactive le mode explicite. Quand il est actif, toutes les variables qui ne sont pas explicitement déclarées avec Define, Global, Protected, Static ou Shared ne seront pas acceptées par le compilateur et génèreront une erreur. Cela peut aider à éviter les erreurs de frappe.

Exemple:

  EnableExplicit

  Define a

  a = 20 ; Ok, car déclaré avec 'Define'
  b = 10 ; Erreur

Constantes prédéfinies

Le compilateur PureBasic déclare automatiquement plusieurs constantes avant chaque compilation pour donner plus d'informations sur l'environnement de développement:
    - #PB_Compiler_OS: Permet de savoir sur quelle plateforme est exécuté le compilateur
    - #PB_OS_Windows : Le compilateur est exécuté sur Windows
    - #PB_OS_Linux   : Le compilateur est exécuté sur Linux
    - #PB_OS_AmigaOS : Le compilateur est exécuté sur AmigaOS
    - #PB_OS_MacoOS  : Le compilateur est exécuté sur Mac OS X

  #PB_Compiler_Date     : La date actuelle, au moment de la compilation, au format date PureBasic.
  #PB_Compiler_File     : Chemin complet et nom du fichier en cours de compilation, utile pour debogguer.
  #PB_Compiler_Line     : Numéro de la ligne du fichier en cours de compilation, utile pour debogguer.
  #PB_Compiler_Version  : Version du compilateur, nombre flottant sous la forme '4.00'.
  #PB_Compiler_Home     : Chemin complet du répertoire PureBasic, utile pour localiser des fichiers inclus
  #PB_Compiler_Debugger : Egal à 1 si le débogueur est activé, égal 0 sinon. Quand un exécutable est
                          créé, le débogueur est toujours désactivé (cette constante sera égale à 0).
  PB_Compiler_Thread    : Egal à 1 si l'exécutable est compilé en mode 'multi-threadé', égal à 0 sinon.
  PB_Compiler_Unicode   : Egal à 1 si l'exécutable est compilé en mode unicode, égal à 0 sinon.


Les fonctions du compilateur

Syntax
SizeOf(Type)
Description
La commande SizeOf permet de renvoyer la taille en octets que prendra une structure complexe (ne fonctionne pas avec les types de base tels que les 'long', les 'word' etc.), une interface ou même une variable. C'est très utile dans de nombreux cas, notamment lors de l'utilisation des commandes API.

Exemple:

  Structure Person
    Name.s
    ForName.s
    Age.w
  EndStructure

  Debug " La taille d'une personne est "+Str(Sizeof(Person))+" octets" ; Affichera 10 (4+4+2)

  John.Person\Name = "John"

  Debug SizeOf(John) ; Affichera 10 aussi
Note: si une variable et une structure ont le même nom, la structure aura la priorité sur la variable.

Syntax
OffsetOf(Structure\Champs)
OffsetOf(Interface\Fonction())
Description
La commande OffsetOf permet de déterminer l'index d'un champ dans le cas d'une structure ou l'index d'une fonction dans le cas d'une interface (qui sera sa position en mémoire soit IndexDeLaFunction*4).

Exemple:

  Structure Person
    Name.s
    ForName.s
    Age.w
  EndStructure

  Debug OffsetOf(Person\Age) ; Affichera 8 car un 'string' occupe 4 octets en memoire

  Interface ITest
    Create()
    Destroy(Flags)
  EndInterface

  Debug OffsetOf(ITest\Destroy()) ; Affichera 4

Syntax
Result = Subsystem(<expression texte constante>)
Description
Subsystem permet de savoir si un sous-système est utilisé pour le programme en cours de compilation. Le nom de sous-système n'est pas sensible à la casse.

Exemple:

  CompilerIf Subsystem("OpenGL")
    Debug "Compiling with the OpenGL subsystem"
  CompilerEndIf

Syntax
Result = Defined(Nom, Type)
Description
Defined détermine si un objet tel qu'une structure, interface, variables etc. est déjà défini dans le programme. Le paramètre 'Nom' doit être spécifié sans aucune forme de décoration (sans le '#' pour une constante, sans les '()' pour un tableau ou une liste chaînée).

Le paramètre 'Type' peut être une des valeurs suivantes:
  #PB_Constant
  #PB_Variable
  #PB_Array
  #PB_LinkedList
  #PB_Structure
  #PB_Interface

Exemple:

  #PureConstante = 10

  CompilerIf Defined(PureConstante, #PB_Constant)
    Debug "La constante 'PureConstante' est déjà déclarée"
  CompilerEndIf

  Test = 25

  CompilerIf Defined(Test, #PB_Variable)
    Debug "La variable 'Test' est déjà déclarée"
  CompilerEndIf


L'assembleur en ligne x86

PureBasic permet d'inclure toute commande assembleur x86 (y compris les instructions MMX et FPU) directement dans le code source comme dans un vrai source assembleur. Vous pouvez également utiliser directement les variables ou pointeurs avec les instructions assembleur et pouvez intégrer plusieurs commandes assembleur sur une même ligne. La syntaxe est celle de FAsm (http://flatassembler.net), la lecture du guide FAsm est recommandée si vous souhaitez plus d'informations sur la syntaxe.

Règles

Vous devez respecter plusieurs règles précises pour inclure de l'assembleur dans un source Basic:

- Les variables et les pointeurs utilisés doivent être déclarés préalablement à leur utilisation dans un contexte assembleur
- Lorsque vous faites référence à un label vous devez précéder son nom par un 'l_'. Cette règle est due au fait que PureBasic place un 'l_' devant les labels BASIC pour éviter les conflits avec les labels internes. Le label référencé en assembleur doit être en minuscule.

Exemple:

  MOV ebx,l_monlabel
  ...
  MonLabel:
- Les erreurs dans une section asm ne sont pas reportées par PureBasic mais par FAsm. Vérifiez votre code si une telle erreur survient.
- Les registres volatiles sont: eax, edx et ecx. Tous les autres doivent être préservés.

Quand on utilise l'assembleur dans une procédure, il est utile de connaître les points suivants:
- Pour renvoyer directement la valeur du registre 'eax' comme valeur de retour, il suffit d'utiliser 'ProcedureReturn', sans paramètre. Le contenu du registre 'eax' restera inchangé et sera utilisé comme valeur de retour.

Exemple:

  Procedure.l MyTest()
    MOV eax, 45
    ProcedureReturn  ; La valeur de retour sera 45
  EndProcedure
- Les variables locales en PureBasic sont directement indexées par rapport au registre de la pile (ESP) ce qui implique qu'un changement de la valeur de ce registre par une instruction assembleur (tel que PUSH, POP etc..) la référence vers la variable ne sera plus correcte.

- Il est possible de passer directement une ligne complète à l'assembleur sans aucune modification en utilisant le caractère '!' en début de ligne. Ceci permet d'avoir un accès total aux fonctionnalités de l'assembleur. Pour faciliter l'accès aux variables locales, une notation a été mise en place: 'p.v_NomVariable' pour une variable standard et 'p.p_NomPointeur' pour un pointeur.

Exemple:

  Procedure Test(*Pointer, Variable)
    ! MOV dword [p.p_Pointer], 20
    ! MOV dword [p.v_Variable], 30
    Debug *Pointer
    Debug Variable
  EndProcedure

  Test(0, 0)

Exemple:

Exemple

AsmInline.pb


Construire une DLL

Introduction

PureBasic permet de créer des librairies dynamiques liées au standard Microsoft Windows (DLL : Dynamic Linked Library). Le code d'une DLL est de même nature que le code PureBasic excepté qu'aucun code ne peut exister en dehors d'une procédure. Lors de l'écriture d'une DLL, tout le code est intégré dans des procédures. Lorsqu'une procédure doit être publique (accessible par un programme tiers qui doit accéder à la DLL), le mot clef ProcedureDLL est utilisé au lieu de Procedure. C'est la seule différence pour écrire un programme.

Lorsque le codage est ainsi fait, il suffit de sélectionner 'Shared DLL' comme format de sortie (fenêtre 'Compiler Option' dans l'éditeur PureBasic ou commutateur /DLL dans la ligne de commande) et une DLL nommée PureBasic.dll sera créée dans le répertoire PureBasic\Compilers\ .

Exemple:

  ProcedureDLL MaFonction()
    MessageRequester("Bonjour", "Voici une DLL PureBasic !", 0)
  EndProcedure

  ; Voici le programme client qui utilise la DLL
  ;
  If OpenLibrary(0, "PureBasic.dll")
    CallFunction(0, "MaFonction")
    CloseLibrary(0)
  EndIf
Pour les programmeurs avancés, il existe 4 procédures spéciales qui sont appelées par Windows lorsque l'un des évènements suivants survient:
- une DLL est attachée à un nouveau process
- une DLL est détachée d'un process
- une DLL est attachée à un nouveau thread
- une DLL est détachée d'un thread

Pour gérer cela, il est possible de déclarer 4 procédures spéciales nommées: AttachProcess(Instance), DetachProcess(Instance), AttachThread(Instance) et DetachThread(Instance). Cela signifie que ces 4 noms sont réservés et ne peuvent être utilisés par le programmeur pour d'autres usages.

Exemple

DLLSample.pb


Unicode

Introduction

'Unicode' est un terme utilisé pour désigner un jeu de caractères étendu destiné à afficher du texte dans de nombreux langages différents (y compris les langages non latins, avec beaucoup de symboles différents tel que le Japonais, le Coréen etc.). En unicode, chaque symbole a sa place propre, et il n'est pas nécessaire d'avoir une table de caractères par langue. Si une application doit fonctionner dans plusieurs langues, il est fortement recommandé d'activer le mode unicode lors du commencement du développement, car cela limitera les bugs qui pourraient survenir en cas de conversion tardive ascii vers unicode.

Pour simplifier, l'unicode peut être vu comme une très grande table ascii, qui n'a pas 256 caractères mais 65536. Donc, pour stocker un caractère, 2 octets seront nécessaires en mémoire (c'est important de noter cette différence, notamment lors de l'utilisation de pointeurs vers des chaînes de caractères). Le type natif 'caractère' (.c) de PureBasic change de taille automatiquement (de 1 octet à 2 octets) si le mode unicode est activé.

Voici quelques liens pour se faire une meilleure idée de l'unicode (lecture vivement conseillée):

Information générale sur l'unicode (Français)
Information générale sur l'unicode (Anglais)
L'unicode et les BOM

Unicode et Windows

Sous Windows, en mode unicode, PureBasic utilise l'encodage UCS2 qui est le format utilisé de manière interne par l'API, donc aucune conversion n'est nécessaire lorsqu'un fonction est appelée. Si le programme utilise des fonctions API, PureBasic utilisera automatiquement la version unicode de la fonction si elle est disponible (par exemple MessageBox_() pointera vers MessageBoxW() en mode unicode, et vers MessageBoxA() en mode ascii). Il en va de même pour toutes les structures et les constantes API supportées par PureBasic. Ainsi il est possible d'utiliser le même code source API et de le compiler en mode ascii ou unicode sans aucun changement.

Unicode est supporté nativement uniquement sur Windows NT et supérieur (Windows 2000/XP/Vista): un programme unicode ne fonctionnera pas sur Windows 95/98/NT. Il y a une solution en qui consiste à utiliser la dll 'unicows' mais elle n'est pas gérée par PureBasic pour l'instant. Si le programme doit fonctionner sur Win 9x, le mieux est de fournir deux versions de l'exécutable: un en mode ascii et l'autre en mode unicode. Comme il faut uniquement spécifier une option de compilation pour passer du mode ascii au mode unicode, ça devrait être aisé.

UTF-8

L'UTF-8 est une autre façon d'encoder une chaîne de caractères unicode. Contrairement à UCS2 qui prend toujours 2 octets par caractère, UTF-8 utilise un encodage variable pour chaque caractère (jusqu'à 4 octets pour représenter un caractère). Le point fort de l'UTF-8 est qu'il ne contient pas de caractère nul lors de son encodage, donc le texte peut être édité facilement. De plus, les caractères ASCII de 1 à 127 sont conservés (ils ne sont pas modifiés lors de l'encodage) ce qui rend le texte à peu près lisible pour les langues latines. Son point faible est le côté variable de ses caractères, ce qui nécessite des routines de gestion de texte plus lentes.

PureBasic utilise l'UTF-8 comme encodage par défaut pour l'écriture et la lecture des chaînes de caractères dans les fichiers, lorsque l'exécutable est en mode unicode (bibliothèques Fichier et Préférence), pour que les fichiers soient complètement indépendants de la plateforme.

Le compilateur du PureBasic gère aussi les fichiers sources ascii et UTF-8 (les fichiers UTF-8 doivent avoir une entête BOM). Les deux types de fichiers peuvent être combinés dans un programme sans problème: un fichier source ASCII peut inclure un fichier source UTF-8 et vice-versa. Lors du développement d'un programme unicode, il est recommandé de mettre l'IDE en mode UTF-8, pour que tous les fichiers sources soient enregistrés en UTF-8. Comme les sources au format UTF-8 peuvent aussi servir à compiler un programme en mode ASCII, il n'est pas nécessaire de changer le format de fichier à chaque changement de mode.


Utiliser plusieurs versions de PureBasic

Introduction

Il est possible d'installer plusieurs versions de PureBasic sur votre disque dur. C'est utile pour finir un projet avec une ancienne version de PureBasic, tout en commençant le développement d'un nouveau projet avec une version plus récente de PureBasic.

Comment procéder

Créez différents répertoires comme par exemple "PureBasic_v3.94" et "PureBasic_v4" et installez les versions de PureBasic correspondant à chaque répertoire.

Quand un des fichiers "PureBasic.exe" est démarré, il associe tous les fichiers ".pb" à la version de PureBasic correspondante. Aussi quand un code source est chargé en double cliquant sur son fichier, c'est la version de PureBasic associée en cours qui sera démarrée. PureBasic ne changera rien, qui pourrait affecter les autres versions de PureBasic dans les autres répertoires.

Pour éviter l'association automatique des fichiers ".pb" au démarrage de l'IDE, un raccourci peut être créé depuis PureBasic.exe avec "/NOEXT" comme paramètre. La ligne de commande optionnelle depuis l'IDE est décrite ici.


Travailler avec différentes bases numériques

(Note: Ces exemples utilisent le symbole ^ pour signifier 'élevé à la puissance de' - ceci est seulement une convention dans ce document, PureBasic n'a pas actuellement d'opérateur d'élévation à la puissance ! Utilisez plutôt la commande PureBasic Pow() de la bibliothèque "Math".)

Introduction

Une base numérique est une manière de représenter les nombres, en utilisant une certaine quantité de symboles possibles par chiffre. La plus courante que vous devez connaître est la base 10 (c-a-d décimale), car il y a 10 chiffres utilisés (0 à 9), et c'est celle que la plupart des humains peuvent manipuler le plus facilement.

Le but de cette page est d'expliquer différentes bases numériques et comment vous pouvez travailler avec elles. En effet les ordinateurs travaillent en binaire (base 2) et il y a certains cas où il est avantageux de le comprendre (par exemple, lors de l'utilisation d'opérateurs logiques, masques de bits, etc).

Vue d'ensemble des bases numériques

Le système Décimal

Pensez à un nombre décimal, et réfléchissez à sa représentation en colonnes. Prenons par exemple le nombre 1234. Séparé en colonnes, nous avons :
  1   2   3   4
Réfléchissez à ce que sont les en-têtes de chaque colonne. Nous savons qu'il y a les unités, les dizaines, les centaines et les milliers, présentés ainsi :
  1000  100   10    1
     1    2    3    4
Nous pouvons voir que le nombre 1234 est constitué de
    1*1000=1000
  + 2* 100= 200
  + 3*  10=  30
  + 4*   1=   4
  Total   =1234
Si nous regardons également les en-têtes de colonne, vous verrez qu'à chaque fois que vous bougez d'une colonne vers la gauche nous multiplions par 10, qui justement s'avère être la base numérique. Chaque fois que vous bougez d'une colonne vers la droite, vous divisez par 10. Les en-têtes de colonnes peuvent être appelées les poids, puisque pour obtenir tout le nombre nous devons multiplier les chiffres de chaque colonne par le poids. Nous pouvons exprimer les poids en utilisant des index. Par exemple 10^2 signifie '10 élevé à la puissance de 2' ou 1×10×10 (=100). De même, 10^4 signifie 1×10×10×10×10 (=10000). Remarquez dans ces exemples, que peu importe la valeur de l'index, il correspond au nombre de fois que nous multiplions le nombre qui doit être élevé. 10^0 signifie 1 (puisque nous multiplions par 10 aucune fois). Utiliser des nombres négatifs montre que nous devons diviser, par exemple 10^-2 signifie 1÷10÷10 (=0.01). Les valeurs de l'index prennent plus de sens quand nous attribuons un numéro à chaque colonne - vous verrez souvent des choses comme 'bit 0' qui signifie en fait 'chiffre binaire en colonne 0'.
  Dans cet exemple, ^ signifie élevé à la puissance de, donc 10^2 signifie 10 élevé à la puissance de 2.
  Numéro de colonne          3     2     1     0
  Poids (index)           10^3  10^2  10^1  10^0
  Poids (valeur réelle)   1000   100    10     1
  Nombre exemple (1234)      1     2     3     4
Précédemment nous avons vu comment convertir le nombre 1234 dans son équivalent décimal. Conversion peu justifiée, car il était déjà en décimal mais nous pouvons en tirer la méthode générale - voici donc comment convertir n'importe quel nombre en sa valeur décimale :
  B = Valeur de la base numérique

  1) Séparer le nombre, peu importe la base, en colonnes. Par
     exemple, si nous avions la valeur 'abcde' dans notre base numérique fictive 'B',
     les colonnes seraient : a   b   c   d   e

  2) Multiplier chaque symbole par le poids de chaque colonne (le poids étant
     calculé par 'B' élevé à la puissance du numéro de la colonne):
       a * B^4 = a * B * B * B * B
       b * B^3 = b * B * B * B
       c * B^2 = c * B * B
       d * B^1 = d * B
       e * B^0 = e

  3) Calculer la somme de toutes ces valeurs. En écrivant toutes ces valeurs dans leur
     équivalent décimal pendant les calculs, il devient beaucoup plus facile de voir le
     résultat and de faire le calcul (si nous convertissons en décimal).
Convertir dans la direction opposée (de décimal vers la base numérique 'B') s'effectue en utilisant la division au lieu de la multiplication :
  1) Commencer par le nombre décimal que vous voulez convertir (e.g. 1234).

  2) Diviser par la base numérique ciblée ('B') et prendre note du quotient et du
     reste.

  3) Diviser le quotient de (2) par la base numérique ciblée ('B') et prendre note du
     quotient et du reste.

  4) Continuer à diviser comme ça jusqu'à ce que vous obteniez un quotient de 0.

  5) Votre nombre dans la base numérique ciblée est constitué des restes écrits dans l'ordre
     du dernier calculé au premier calculé. Par exemple, votre nombre serait constitué
     des restes des étapes dans cet ordre 432.
Des exemples plus particuliers seront donnés dans les paragraphes concernant les bases numériques particulières.

Système binaire

Tout dans un ordinateur est stocké en binaire (base 2, avec les symboles définis '0' ou '1') mais le travail avec des nombres binaires suit les mêmes règles qu'en décimal. Chaque symbole dans un nombre binaire est appelé bit, abréviation de BInary digiT (chiffre binaire). Généralement, vous travaillerez avec des bytes (octets, 8 bits), words (mots, 16 bits) ou longwords (mots longs, 32 bits) car ce sont les tailles par défaut des types intégrés à PureBasic. Les poids pour un byte (octet) sont les suivants :
  (^ signifie 'élevé à la puissance de', la base numérique est 2 pour le binaire)
  Bit/numéro de colonne      7     6     5     4     3     2     1     0
  Poids (index)            2^7   2^6   2^5   2^4   2^3   2^2   2^1   2^0
  Poids (valeur réelle)    128    64    32    16     8     4     2     1
Donc, par exemple, si nous avions le nombre 00110011 (Base 2), nous pourrions établir sa valeur comme ceci :
    0 * 128
  + 0 *  64
  + 1 *  32
  + 1 *  16
  + 0 *   8
  + 0 *   4
  + 1 *   2
  + 1 *   1
  =      51
Un exemple de conversion inversée serait d'écrire la valeur 69 en binaire. Nous ferions comme ceci :
  69 / 2 = 34 r 1     ^
  34 / 2 = 17 r 0    /|\
  17 / 2 =  8 r 1     |
   8 / 2 =  4 r 0     |    Lire les restes dans cette direction
   4 / 2 =  2 r 0     |
   2 / 2 =  1 r 0     |
   1 / 2 =  0 r 1     |
  (Arrêt ici car le quotient de la dernière division était 0)

 Lire les restes de bas en haut pour obtenir la valeur en binaire = 1000101
Une autre chose à considérer lorsque l'on travaille avec des nombres binaires est la représentation des nombres négatifs. Comme nous le faisons quotidiennement, nous pourrions simplement mettre un symbole négatif devant le nombre décimal. Nous ne pouvons pas faire cela en binaire, mais il y a un moyen (après tout, PureBasic travaille principalement avec des nombres signés, et doit donc être capable de gérer les nombres négatifs). Cette méthode est appelée 'complément à deux' et indépendamment de toutes les bonnes fonctionnalités que cette méthode possède (et qui ne seront pas expliquées ici, pour épargner une certaine confusion) la manière la plus simple de la comprendre, est de se dire que le poids du bit le plus significatif (Most Significant bit / le MSb est le numéro du bit avec la plus grande valeur. Dans le cas d'un octet (byte), ce serait le bit 7) est réellement une valeur négative. Donc pour un système de complément à deux, les poids des bits sont modifés en :
  (^ signifie 'élevé à la puissance de', la base numérique est 2 pour le binaire)
  Bit/numéro de colonne     7     6     5     4     3     2     1     0
  Poids (index)          -2^7   2^6   2^5   2^4   2^3   2^2   2^1   2^0
  Poids (valeur réelle)  -128    64    32    16     8     4     2     1
et vous pourrez faire la conversion de binaire vers décimal exactement de la même manière que ci-dessus, mais en utilisant le nouveau jeu de poids. Par exemple, le nombre 10000000 (Base 2) est -128, et 10101010 (Base 2) est -86.

Pour convertir un nombre binaire positif en négatif et vice versa, vous inversez tous les bits et ensuite ajoutez 1. Par exemple, 00100010 passerait en négatif en inversant -> 11011101 et additionant 1 -> 11011110.

Ceci facilite la conversion de décimal à binaire, car vous pouvez convertir les nombres décimaux négatifs comme leurs équivalents positifs (en utilisant la méthode ci-dessus) et ensuite rendre le nombre binaire négatif à la fin.

Les nombre binaires dans PureBasic sont précédés du symbol 'pourcentage', et évidement tous les bits du nombre doivent être un '0' ou un '1'. Par exemple, vous pouvez utiliser la valeur %110011 dans PureBasic pour signifier 51. Notez que vous n'avez pas besoin de mettre les '0' de tête (ce nombre serait vraiment %00110011) mais cela peut faciliter la lisibilité de votre source si vous écrivez l'ensemble des bits.

Le système Hexadécimal

L'hexadecimal (pour base 16, symboles '0'-'9' suivis de 'A'-'F') est une base numérique qui est plus généralement employée en informatique, car il s'agit probablement de la base numérique non décimale la plus facile à comprendre pour les humains, et vous n'avez pas à écrire de longues chaines de symboles pour vos nombres (comme c'est le cas avec le binaire).

Les mathématiques hexadécimales suivent les mêmes règles qu'en décimal, bien que vous ayez maintenant 16 symboles par colonne jusqu'à ce que vous ayez besoin d'une retenue. La conversion entre l'hexadécimal et le décimal suit les mêmes principes qu'entre le binaire et le décimal, sauf que les poids sont des multiples de 16 et les divisions sont faites par 16 au lieu de 2 :
  Numéro de colonne          3      2      1      0
  Poids (index)           16^3   16^2   16^1   16^0
  Poids (valeur réelle)   4096    256     16      1
Convertir la valeur hexadécimale BEEF (Base 16) en décimal serait fait comme ceci :
    B * 4096 = 11 * 4096
  + E *  256 = 14 *  256
  + E *   16 = 14 *   16
  + F *    1 = 15 *    1
  =                48879
Et convertir la valeur 666 en hexadécimal serait fait comme ceci :
  666 / 16 = 41 r 10    ^
   41 / 16 =  2 r  9   /|\    Lire les chiffres dans cette direction, se souvenir de convertir
    2 / 16 =  0 r  2    |     en chiffres hexadecimaux où nécessaire
  (Arrêt ici car le quotient de la dernière division était 0)
  La valeur hexadécimale de 666 est 29A
La chose vraiment intéressante avec l'hexadécimal c'est qu'il permet également de convertir vers le binaire très facilement. Chaque chiffre hexadécimal représente 4 bits, pour convertir entre hexadécimal et binaire, vous devez juste convertir chaque chiffre hexadécimal en 4 bits ou chaque groupe de 4 bits vers un chiffre hexadécimal (en se rappelant que 4 est un diviseur de toutes les tailles communes de nombres binaires dans un CPU). Par exemple :
  Nombre hexadécimal     5        9        D        F           4E
  Valeur binaire      0101     1001     1101     1111       01001110
Lorsque vous utilisez des valeurs hexadécimales dans PureBasic, vous mettez un symbole 'dollar' devant le nombre, par exemple $BEEF.

Pour terminer ce sujet vous avez ici une table avec les nombres de 0 à 255 au format décimal, binaire et hexadécimal.


Table d'équivalence des nombres

Nombres de 0 à 255 en décimal, binaire et héxadecimal

Décimal Binaire Hexa Décimal Binaire Hexa Décimal Binaire Hexa Décimal Binaire Hexa
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 		00000000
00000001
00000010
00000011
00000100
00000101
00000110
00000111
00001000
00001001
00001010
00001011
00001100
00001101
00001110
00001111
00010000
00010001
00010010
00010011
00010100
00010101
00010110
00010111
00011000
00011001
00011010
00011011
00011100
00011101
00011110
00011111
00100000
00100001
00100010
00100011
00100100
00100101
00100110
00100111
00101000
00101001
00101010
00101011
00101100
00101101
00101110
00101111
00110000
00110001
00110010
00110011
00110100
00110101
00110110
00110111
00111000
00111001
00111010
00111011
00111100
00111101
00111110
00111111 		00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
20
21
22
23
24
25
26
27
28
29
2A
2B
2C
2D
2E
2F
30
31
32
33
34
35
36
37
38
39
3A
3B
3C
3D
3E
3F 		64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
 01000000
01000001
01000010
01000011
01000100
01000101
01000110
01000111
01001000
01001001
01001010
01001011
01001100
01001101
01001110
01001111
01010000
01010001
01010010
01010011
01010100
01010101
01010110
01010111
01011000
01011001
01011010
01011011
01011100
01011101
01011110
01011111
01100000
01100001
01100010
01100011
01100100
01100101
01100110
01100111
01101000
01101001
01101010
01101011
01101100
01101101
01101110
01101111
01110000
01110001
01110010
01110011
01110100
01110101
01110110
01110111
01111000
01111001
01111010
01111011
01111100
01111101
01111110
01111111
 40
41
42
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F
50
51
52
53
54
55
56
57
58
59
5A
5B
5C
5D
5E
5F
60
61
62
63
64
65
66
67
68
69
6A
6B
6C
6D
6E
6F
70
71
72
73
74
75
76
77
78
79
7A
7B
7C
7D
7E
7F 		128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
 10000000
10000001
10000010
10000011
10000100
10000101
10000110
10000111
10001000
10001001
10001010
10001011
10001100
10001101
10001110
10001111
10010000
10010001
10010010
10010011
10010100
10010101
10010110
10010111
10011000
10011001
10011010
10011011
10011100
10011101
10011110
10011111
10100000
10100001
10100010
10100011
10100100
10100101
10100110
10100111
10101000
10101001
10101010
10101011
10101100
10101101
10101110
10101111
10110000
10110001
10110010
10110011
10110100
10110101
10110110
10110111
10111000
10111001
10111010
10111011
10111100
10111101
10111110
10111111
 80
81
82
83
84
85
86
87
88
89
8A
8B
8C
8D
8E
8F
90
91
92
93
94
95
96
97
98
99
9A
9B
9C
9D
9E
9F
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
AA
AB
AC
AD
AE
AF
B0
B1
B2
B3
B4
B5
B6
B7
B8
B9
BA
BB
BC
BD
BE
BF
 192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255 		11000000
11000001
11000010
11000011
11000100
11000101
11000110
11000111
11001000
11001001
11001010
11001011
11001100
11001101
11001110
11001111
11010000
11010001
11010010
11010011
11010100
11010101
11010110
11010111
11011000
11011001
11011010
11011011
11011100
11011101
11011110
11011111
11100000
11100001
11100010
11100011
11100100
11100101
11100110
11100111
11101000
11101001
11101010
11101011
11101100
11101101
11101110
11101111
11110000
11110001
11110010
11110011
11110100
11110101
11110110
11110111
11111000
11111001
11111010
11111011
11111100
11111101
11111110
11111111 		C0
C1
C2
C3
C4
C5
C6
C7
C8
C9
CA
CB
CC
CD
CE
CF
D0
D1
D2
D3
D4
D5
D6
D7
D8
D9
DA
DB
DC
DD
DE
DF
E0
E1
E2
E3
E4
E5
E6
E7
E8
E9
EA
EB
EC
ED
EE
EF
F0
F1
F2
F3
F4
F5
F6
F7
F8
F9
FA
FB
FC
FD
FE
FF


Formules mathématiques (géométrie 2D)

Introduction

Ci-dessous vous trouverez un ensemble de diverses formules mathématiques. Données pour référence, elles seront également utiles, pour combler vos éventuelles lacunes. Car sans une bonne connaissance des mathématiques, les jeux et les applications avancées ne peuvent pas être réalisés. .

Note: A la place du symbole '^' Utilisez plutôt la commande PureBasic Pow() de la bibliothèque 'Math'. 'PI' réfère à la valeur constante "PI = 3.1415...". Un exemple pour réaliser une telle formule en langage PureBasic : A = PI*r^2 devient A = PI*Pow(r,2)

Carré

l = Longueur du côté
e = Diagonale (mesure)
A = Surface
U = Périmètre

Surface : A = l^2

Périmètre : U = 4*l

Diagonale (mesure) : e = SQR(2)*l

Exemple:

  ; Longueur d'un côté du carré
  Longueur = 35

  ; Racine de 2
  #RacineDeDeux = 1.414213538

  ; Surface
  Surface = Pow(Longueur, 2) ; ou encore Longueur * Longueur (c'est plus rapide)

  ; Périmètre
  Perimetre = 4 * Longueur

  ; Longueur de la Diagonale
  Diagonale = Sqr(2) * Longueur ; Pour accélérer le calcul il est possible de remplacer Sqr(2) par #RacineDeDeux

  ;Affiche le résultat
  Debug "Longueur d'un côté du carré = " + Str(Longueur) + " m"
  Debug "Diagonale du carré = " + Str(Diagonale) + " m"
  Debug "Surface du carré = " + Str(Surface) + " m²"
  Debug "Périmètre du carré = " + Str(Perimetre) + " m"

Rhombe/Losange

l = Longueur du côté
b = Largeur
A = Surface
U = Périmètre

Surface : A = l*b

Périmètre : U = 4*l

Exemple:

  ; Longueur
  Longueur = 35

  ; largeur
  Largeur = 23

  ; Surface
  Surface = Longueur * Largeur

  ; Périmètre
  Perimetre = 4 * Longueur

  ;Affiche le résultat
  Debug "Longueur = " + Str(Longueur) + " m"
  Debug "Largueur = " + Str(Largeur) + " m"
  Debug "Surface du losange = " + Str(Surface) + " m²"
  Debug "Périmètre du losange = " + Str(Perimetre) + " m"

Rectangle

l = Longueur
b = Largeur
e = Diagonale (mesure)
A = Surface
U = Périmètre

Surface : A = l*b

Périmètre : U = 2*l+2*b

Diagonale (mesure) : e = SQR(l^2+b^2))

Exemple:

  ; Longueur
  Longueur = 35

  ; largeur
  Largeur = 23

  ; Diagonale
  Diagonale = Sqr(Longueur * Longueur + Largeur * Largeur)
  ; Surface
  Surface = Longueur * Largeur

  ; Périmètre
  Perimetre = 2 * Longueur + 2 * Largeur

  ;Affiche le résultat
  Debug "Longueur = " + Str(Longueur) + " m"
  Debug "Largueur = " + Str(Largeur) + " m"
  Debug "Diagonale du rectangle = " + Str(Diagonale) + " m"
  Debug "Surface du rectangle = " + Str(Surface) + " m²"
  Debug "Périmètre du rectangle = " + Str(Perimetre) + " m"

Rhomboïde/Parallélogramme

l = Longueur
h = Hauteur
b = Largeur
A = Surface
U = Périmètre

Surface : A = l*h

Périmètre : U = 2*l+2*b

Trapèze

a = Côté 1
b = Côté 2
c = Côté 3
d = Côté 4
lm = Longueur médiane
h = Hauteur
A = Surface
U = Périmètre

Surface : A = (a+c)/2*h

Périmètre : U = a+b+c+d

Longueur médiane : lm = (a+c)/2

Triangle

a = Côté 1
b = Côté 2
c = Côté 3
l = Longueur de la base
h = Hauteur
A = Surface
U = Périmètre

Surface :
A = (l*h)/2
A = 1/4*SQR(U*(U-2*a)*(U-2*b)*(U-2*c))

Périmètre : U = a+b+c

Polygone

l = Longueur du côté
d = Diamètre du cercle inscrit
D = Diamètre du cercle circonscrit
n = Nombre de côtés
alpha = Angle au centre
beta = Angle au sommet
A = Surface
U = Périmètre

Diamètre du cercle inscrit : d = SQR(D*D-l*l)

Diamètre du cercle circonscrit : D = SQR(d*d+l*l)

Longueur du côté : l = D*SIN(180/n)

Angle au centre : alpha = 360/n

Angle au sommet : beta = 180-alpha

Surface : A = n*l*d/4

Périmètre : U = l*n

Cercle

r = Rayon
D = Diamètre
A = Surface
U = Périmètre
Surface :
A = PI*r^2
A = PI/4*d^2

Périmètre :
U = 2*PI*r
U = PI*d

Arc de cercle

r = Rayon
D = Diamètre
l = Longueur de la corde
lb = Longueur de l'arc
alpha = Angle au centre
A = Surface
U = Périmètre

Longueur de la corde : l = 2*r*SIN(alpha/2)

Longueur de l'arc : lb = PI*r*alpha/180

Surface :
A = PI*D^2*alpha/1440
A = lb*r/2

Périmètre : U = lb+D

Section de cercle

r = Rayon
D = Diamètre
l = Longueur de la corde
lb = Longueur de l'arc
alpha = Angle au centre
b = Largeur
A = Surface
U = Périmètre

Longueur de la corde :
l = 2*r*SIN(alpha/2)
l = 2*SQR(b*(2*r-b))

Longeur de l'arc : lb = PI*r*alpha/180

Largeur :
b = l/2*TAN(alpha/4)
b = r-SQR(r^2-l^2/4)

Rayon : r = b/2+l^2/(8*b)

Surface :
A = PI*d^2*alpha/1440-(l*(r-b))/2
A = (lb*r-l*(r-b))/2

Périmètre : U = lb+l

Anneau

d = Diamètre interne
D = Diamètre externe
dm = Diamètre intermédiaire
b = Largeur
A = Surface

Diamètre intermédiaire : dm = (D+d)/2

Surface :
A = PI*dm*b
A = PI/4*(D^2-d^2)

Consommation mémoire d'une image

a = Largeur de l'image (en Pixel)
b = Hauteur de l'image (en Pixel)
bits = Profondeur de couleurs de l'image (en Bits)

taille = a * b * (bits / 8)

Distance entre deux points

(x1|y1) = coordonnées XY du point n°1
(x2|y2) = coordonnées XY du point n°2
a = Distance entre les points

a = SQR((x1-x2)^2 + (y1-y2)^2)

"Mélange" de deux valeurs

a = 1er Nombre
b = 2ème Nombre
v = Rapport (0% - 100%)
e = Résultat

e = ((a*v)/100) + ((b*(100-v)) / 100)


Table des codes ASCII et leur correspondance

Codes ASCII de 0 à 255

ASCII
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Figure
NUL
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BS
TAB
LF
VT
FF
CR
SO
SI
DLE
DC1
DC2
DC3
DC4
NAK
SYN
ETB
CAN
EM
SUB
ESC
FS
GS
RS
US
ASCII
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Figure
Space
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
ASCII
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
Figure
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
ASCII
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
Figure
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
DEL
ASCII
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
Figure
€

‚
ƒ
„
…
†
‡
ˆ
‰
Š
‹
Œ

Ž

‘
’
“
”
•
–
—
˜
™
š
›
œ

ž
Ÿ
ASCII
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
Figure

¡
¢
£
¤
¥
¦
§
¨
©
ª
«
¬

®
¯
°
±
²
³
´
µ
¶
·
¸
¹
º
»
¼
½
¾
¿
ASCII
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
Figure
À
Á
Â
Ã
Ä
Å
Æ
Ç
È
É
Ê
Ë
Ì
Í
Î
Ï
Ð
Ñ
Ò
Ó
Ô
Õ
Ö
×
Ø
Ù
Ú
Û
Ü
Ý
Þ
ß
ASCII
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
Figure
à
á
â
ã
ä
å
æ
ç
è
é
ê
ë
ì
í
î
ï
ð
ñ
ò
ó
ô
õ
ö
÷
ø
ù
ú
û
ü
ý
þ
ÿ

Caractères DOS en mode étendu (0 à 127: ASCII, 128 à 255: DOS étendu)

128 | 129 | 130 | 131
132 | 133 | 134 | 135
136 | 137 | 138 | 139
140 | 141 | 142 | 143
144 | 145 | 146 | 147
148 | 149 | 150 | 151
152 | 153 | 154 | 155
156 | 157 | 158 | 159
160 | 161 | 162 | 163
164 | 165 | 166 | 167
168 | 169 | 170 | 171
172 | 173 | 174 | 175
176 | 177 | 178 | 179
180 | 181 | 182 | 183
184 | 185 | 186 | 187
188 | 189 | 190 | 191
192 | 193 | 194 | 195
196 | 197 | 198 | 199
200 | 201 | 202 | 203
204 | 205 | 206 | 207
208 | 209 | 210 | 211
212 | 213 | 214 | 215
216 | 217 | 218 | 219
220 | 221 | 222 | 223
224 | 225 | 226 | 227
228 | 229 | 230 | 231
232 | 233 | 234 | 235
236 | 237 | 238 | 239
240 | 241 | 242 | 243
244 | 245 | 246 | 247
248 | 249 | 250 | 251
252 | 253 | 254 | 255

Description des caractères non visibles (de 0 à 31)

ASCII | Description
0 | Null character, typically (and especially in PureBasic) used to indicate the end of the string.
1 | Start of heading. Indicates the start of a block of data, or the header portion of a block of data.
2 | Start of text. Typically sent as the first character in a block of text, during communications.
3 | End of text. Typically sent as the last character in a block of text, during communications.
4 | End of heading. Used to indicate the end of a transmission.
5 | Enquiry. Sent to a receiver in order to get a response.
6 | Acknowledge. Sent by a receiver to show that it has received and/or understood the request.
7 | Bell. Makes an audible noise (typically makes the PC speaker 'beep')
8 | Backspace. Moves the cursor one position to the left (might also delete the character to the left before the move)
9 | Tab. Horizontal tab, typically used to format text based tables.
10 | Linefeed. The character used to represent the function of moving forward one line on a typewriter or text mode printer. Typically used as the, or part of the, end of line characters.
11 | Vertical tab. Same as (horizontal) tab, but moves down one row rather than across one column.
12 | Form feed. Typically used as the character to tell a (text mode) printer to move onto the next page (form)
13 | Carridge return. The character which represents moving the head of a typewriter or printer back to the start of the line. Typically used as the, or part of the, end of line characters.
14 | Shift out. Start of a block of characters whose meaning is implementation dependant.
15 | Shift in. Closes the transmission of the above type of block.
16 | Data Link Escape. Used to indicate that the following control character should be interpreted as data rather than a control character.
17 | Device control 1. Typically used to turn on a piece of equipment. The most common use today is as the XON character in software flow controlled serial communications.
18 | Device control 2. Another situation-dependant device control character.
19 | Device control 3. Typically used to turn off a piece of equipment. The most common use today is as the XOFF character in software flow controlled serial communications.
20 | Device control 4. Another situation-dependant device control character.
21 | Negative acknowledge. Typically used to indicate unreceived or not understood (errored) data.
22 | Synchronous idle. As the name implies, a signal which was sent synchronously (at periodic times) to indicate that the communications channel is idle, but still active.
23 | End of transmission block. Used to control transmission of data by indicating an end of block. This is not the same as EOT.
24 | Cancel. Commonly means that previously sent data should be ignored, although specifics are application dependant.
25 | End of medium. Used to indicate the end of some media, for example the end of a tape drive
26 | Substitute. A placeholder character used to indicate that a character has been substituted.
27 | Escape character. Usually the character produced by pressing the 'Esc' key on your keyboard, used in "escape sequences" to provide formatting information to text based displays (consoles, printers, etc)
28 | File separator
29 | Group separator
20 | Record separator
31 | Unit separator


Table des couleurs

Généralités

Le tableau suivant représente 216 couleurs dans différentes variations. Cela donne un aperçu des couleurs possibles ainsi que leurs valeurs numériques (en hexadécimale).

La plupart des commandes PureBasic qui ont une couleur comme paramètre peuvent utiliser directement la valeur de la couleur. Par exemple: Plot(x,y,$FFFFFF) au lieu de Plot(x,y,RGB(r,g,b)).

Table des couleurs

000000 | 000033 | 000066 | 000099 | 0000CC | 0000FF

330000 | 330033 | 330066 | 330099 | 3300CC | 3300FF

660000 | 660033 | 660066 | 660099 | 6600CC | 6600FF

990000 | 990033 | 990066 | 990099 | 9900CC | 9900FF

CC0000 | CC0033 | CC0066 | CC0099 | CC00CC | CC00FF

FF0000 | FF0033 | FF0066 | FF0099 | FF00CC | FF00FF

003300 | 003333 | 003366 | 003399 | 0033CC | 0033FF

333300 | 333333 | 333366 | 333399 | 3333CC | 3333FF

663300 | 663333 | 663366 | 663399 | 6633CC | 6633FF

993300 | 993333 | 993366 | 993399 | 9933CC | 9933FF

CC3300 | CC3333 | CC3366 | CC3399 | CC33CC | CC33FF

FF3300 | FF3333 | FF3366 | FF3399 | FF33CC | FF33FF

006600 | 006633 | 006666 | 006699 | 0066CC | 0066FF

336600 | 336633 | 336666 | 336699 | 3366CC | 3366FF

666600 | 666633 | 666666 | 666699 | 6666CC | 6666FF

996600 | 996633 | 996666 | 996699 | 9966CC | 9966FF

CC6600 | CC6633 | CC6666 | CC6699 | CC66CC | CC66FF

FF6600 | FF6633 | FF6666 | FF6699 | FF66CC | FF66FF

009900 | 009933 | 009966 | 009999 | 0099CC | 0099FF

339900 | 339933 | 339966 | 339999 | 3399CC | 3399FF

669900 | 669933 | 669966 | 669999 | 6699CC | 6699FF

999900 | 999933 | 999966 | 999999 | 9999CC | 9999FF

CC9900 | CC9933 | CC9966 | CC9999 | CC99CC | CC99FF

FF9900 | FF9933 | FF9966 | FF9999 | FF99CC | FF99FF

00CC00 | 00CC33 | 00CC66 | 00CC99 | 00CCCC | 00CCFF

33CC00 | 33CC33 | 33CC66 | 33CC99 | 33CCCC | 33CCFF

66CC00 | 66CC33 | 66CC66 | 66CC99 | 66CCCC | 66CCFF

99CC00 | 99CC33 | 99CC66 | 99CC99 | 99CCCC | 99CCFF

CCCC00 | CCCC33 | CCCC66 | CCCC99 | CCCCCC | CCCCFF

FFCC00 | FFCC33 | FFCC66 | FFCC99 | FFCCCC | FFCCFF

00FF00 | 00FF33 | 00FF66 | 00FF99 | 00FFCC | 00FFFF

33FF00 | 33FF33 | 33FF66 | 33FF99 | 33FFCC | 33FFFF

66FF00 | 66FF33 | 66FF66 | 66FF99 | 66FFCC | 66FFFF

99FF00 | 99FF33 | 99FF66 | 99FF99 | 99FFCC | 99FFFF

CCFF00 | CCFF33 | CCFF66 | CCFF99 | CCFFCC | CCFFFF

FFFF00 | FFFF33 | FFFF66 | FFFF99 | FFFFCC | FFFFFF


Numéros de Port

Généralités

Vous trouverez ci-dessous la liste des plus importants numéros de port et leurs significations. Lorsque vous accédez à Internet, par exemple à un serveur FTP avec les commandes réseaux de PureBasic (voir l'exemple "PureBasic/Examples/Atomic FTP Server"), vous devez indiquer un numéro de port. De plus amples informations sur les "normes de protocoles d'Internet" sont disponibles, entre autres, sur le site : http://www.rfc-editor.org/rfcxx00.html.

Note : Des fournisseurs d'accès peuvent restreindre l'accès sur des numéros de port particuliers !

Numéros de Port

     9 : discard
    15 : netstat
    19 : chargen
    21 : ftp
    23 : telnet
    25 : smtp
    39 : rlp
    67 : boot
    79 : finger
    80 : http
    87 : link
   110 : pop3
   113 : ident
   119 : nntp
   139 : net bios
   513 : login
   515 : pkill
   533 : netwall
   560 : rmonitor
   561 : monitor
  1080 : firewall-port
  5580 : mil.http
  8080 : http|mil.http


Liens internet utiles

Forums PureBasic

Forum officiel [anglais]
Forum allemand
Forum français

Tchat PureBasic

Nom du serveur : irc.freenode.net
          Port : 6667
         Canal : #purebasic [anglais]
         Canal : ##purebasic.de [allemand] (bien mettre les deux #)

Ressources PureBasic

  Site officiel de PureBasic            : Développeur & Editeur International [anglais]
  Site de l'éditeur visuel de PureBasic : Maintenu par Berikco [anglais]
  PureArea.net                          : Archive de codes, Freeware & Shareware en PureBasic & plus [anglais & allemand]
  The Pure Project Network              : Bibliothèques utilisateurs, Exemples de codes & plus [anglais]
  PureVision                            : Editeur visuel d'interfaces [anglais]
  PBDev                                 : Environnement de programmation [anglais]
  Robsite                               : Tutoriels PureBasic [allemand]
  Support de l'API Microsoft Windows    : Interface de Programmation d'Applications [anglais]
  AllAPI.net                            : Autre source pour l'utilisation des fonctions de l'API [anglais]

Revendeurs PureBasic

Equipe de développement & Editeur International
Editeur Allemand

Jeux écrits avec PureBasic

Restricted Area
Krakout Unlimited 2
Bricklinker
Hostile Skies
Ladies Garden
DEW.Line
Tributoids
Lethal Judgement + les suites 2 & 3
Puckman

Sites personnels dédiés à PureBasic

Andreas' PureBasic Site [allemand]
Freak's PureBasic Place [anglais]
Horst Schaeffer [anglais]

Vous trouverez d'autres sites dédiés à PureBasic (dont certains en français) en consultant les liens de PureArea.net.


2DDrawing

PureBasic - 2DDrawing

General

La bibliothèque 2DDrawing contient toutes les commandes permettant de dessiner en deux dimensions sur une surface prédéfinie, que ce soit une fenêtre, un écran ou même une imprimante. Vous pourrez ainsi tracer un trait, un rectangle, un cercle, mais aussi écrire du texte.

Les dessins commencent toujours après avoir appelé la fonction StartDrawing() et ils se terminent lorsque StopDrawing() est appelé.

Sommaire des commandes

BackColor
Box
Circle
DrawAlphaImage
DrawImage
DrawText
DrawingBuffer
DrawingBufferPitch
DrawingBufferPixelFormat
DrawingFont
DrawingMode
Ellipse
FillArea
FrontColor
Line
LineXY
Plot
Point
StartDrawing
StopDrawing
TextHeight
TextWidth

Exemple

2DDrawing.pb
DirectScreenDrawing.pb

OS Supportés

Tous

Guide de référence - Index


BackColor()

Syntaxe

BackColor(Couleur)
Description
Fixe la couleur de fond pour les commandes graphiques et l'affichage du texte. La fonction RGB() peut être utilisée pour obtenir facilement la couleur désirée.

Un tableau avec les couleurs les plus courantes est disponible ici.

OS Supportés

Tous


Box()

Syntaxe

Box(x, y, Largeur, Hauteur [, Couleur])
Description
Dessine un rectangle coloré à la position x,y sur la surface de dessin en cours, et de dimensions Largeur x Hauteur. Si le paramètre 'Couleur' n'est pas spécifié, la couleur fixée par la fonction FrontColor() sera utilisée. La fonction RGB() peut être utilisée pour obtenir facilement la couleur désirée. La surface de dessin est fixée par la fonction StartDrawing().

Exemple:

  ; Plusieurs rectangles de couleur aléatoire
  Largeur=200
  Hauteur=150
  If OpenWindow(0, 0, 0, Largeur, Hauteur, "Rectangles", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If StartDrawing(WindowOutput(0))
      y = 0
      #StepX = 10
      StepY = Round(#StepX*Hauteur/Largeur, 0)
      For x = 0 To Largeur/2-5 Step #StepX
        Box(x, y, Largeur-2*x, Hauteur-2*y ,RGB(Random(255),Random(255),Random(255)))
        y + StepY     ; C'est équivalent à y = y + StepY
      Next x
      StopDrawing()   ; C'est absolument indispensable quand les opérations de dessins sont terminées !!! Ne jamais l'oublier !
    EndIf

    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


Circle()

Syntaxe

Circle(x, y, Rayon [, Couleur])
Description
Dessine un cercle coloré de dimension 'Rayon' à la position x,y sur la surface de dessin en cours. Si le paramètre 'Couleur' n'est pas spécifié, la couleur fixée par la fonction FrontColor() sera utilisée. La fonction RGB() peut être utilisée pour obtenir facilement la couleur désirée. La surface de dessin est fixée par la fonction StartDrawing().

Exemple:

  ; Plusieurs cercles de couleur aléatoire
  Largeur=200
  Hauteur=150
  If OpenWindow(0, 0, 0, Largeur, Hauteur, "Cercles", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If StartDrawing(WindowOutput(0))
      x = Largeur/2
      y = Hauteur/2
      For Rayon = Hauteur/2 To 10 Step -10
        Circle(x, y, rayon ,RGB(Random(255),Random(255),Random(255)))
      Next Rayon
      StopDrawing() ; C'est absolument indispensable quand les opérations de dessins sont terminées !!! Ne jamais l'oublier !
    EndIf

    Repeat : Event = WaitWindowEvent() : Until  Event = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


DrawAlphaImage()

Syntaxe

DrawAlphaImage(ImageID, x, y)
Description
Affiche l'image à la position x,y sur la surface de dessin en cours en prenant en compte ses composantes alpha. 'ImageID' peut être obtenu facilement en utilisant la fonction ImageID() de la bibliothèque Image.

L'image doit être chargée à partir d'un fichier qui supporte la composante alpha, tel que le format PNG et TIFF en 32 bits.

OS Supportés

Windows


DrawImage()

Syntaxe

DrawImage(ImageID, x, y [, Largeur, Hauteur])
Description
Affiche l'image à la position x,y sur la surface de dessin en cours. 'ImageID' peut être obtenu facilement en utilisant la fonction ImageID() de la bibliothèque Image. Si les paramètres 'Largeur' et 'Hauteur' sont spécifiés, alors l'image sera redimensionnée en temps réel avant d'être affichée. La taille de l'image originale n'est pas modifiée. La surface de dessin est fixée par la fonction StartDrawing().

OS Supportés

Tous


DrawText()

Syntaxe

Resultat = DrawText(x, y, Texte$ [CouleurTexte [, CouleurFond]])
Description
Affiche la chaîne Texte$ sur la surface de dessin en cours aux coordonnées (x,y). La fonction DrawingMode() peut être utilisée pour afficher un fond coloré ou transparent. La surface de dessin est fixée par la fonction StartDrawing().

Si le paramètre 'CouleurTexte' est omis, alors la couleur des caractères sera celle indiquée par FrontColor(). Si le paramètre 'CouleurFond' est omis, alors la couleur du fond sera celle indiquée par BackColor() (si le mode de dessin n'est pas 'transparent'). RGB() peut être appelé pour choisir une couleur valide.

OS Supportés

Tous


DrawingBuffer()

Syntaxe

AdresseMemoire = DrawingBuffer()
Description
Retourne l'adresse mémoire du buffer de dessin. Cela peut correspondre directement à la mémoire vidéo si la sortie est ScreenOutput() ou SpriteOutput() et permet des manipulations binaires rapides. Si 'AdresseMemoire' est 0 alors l'accès direct en mémoire n'est pas possible.

Note: cette commande est destinée aux programmeurs chevronnés. Pour obtenir plus d'informations sur le buffer, les commandes suivantes peuvent être utilisées : DrawingBufferPixelFormat() et DrawingBufferPitch(). Cette fonction doit être appelée à chaque fois que l'accès au buffer est nécessaire.

L'exemple qui suit montre comment utiliser DrawingBuffer pour créer de jolis effets graphiques:
DirectScreenDrawing.pb

OS Supportés

Windows, Linux


DrawingBufferPitch()

Syntaxe

Resultat = DrawingBufferPitch()
Description
Retourne la longueur réelle d'une ligne du buffer courant, en octets. Cela est nécessaire lors des accès directs en mémoire vidéo pour passer d'une ligne à la suivante.

OS Supportés

Windows, Linux


DrawingBufferPixelFormat()

Syntaxe

Resultat = DrawingBufferPixelFormat()
Description
Renvoie le format vidéo courant. Il peut être l'un des suivants:
  #PB_PixelFormat_8Bits       ; 1 octet par pixel, palettisé
  #PB_PixelFormat_15Bits      ; 2 octets par pixel
  #PB_PixelFormat_16Bits      ; 2 octets par pixel
  #PB_PixelFormat_24Bits_RGB  ; 3 octets par pixel (RRGGBB)
  #PB_PixelFormat_24Bits_BGR  ; 3 octets par pixel (BBGGRR)
  #PB_PixelFormat_32Bits_RGB  ; 4 octets par pixel (RRGGBB)
  #PB_PixelFormat_32Bits_BGR  ; 4 octets par pixel (BBGGRR)

OS Supportés

Windows, Linux


DrawingFont()

Syntaxe

DrawingFont(FontID)
Description
Change la police de caractères actuellement utilisée par la fonction DrawText(). Tous les textes affichés ensuite le seront avec cette nouvelle police. La variable 'FontID' peut être obtenue par la fonction FontID() de la bibliothèque Font. Avant d'utiliser cette fonction, La police doit être chargée à l'aide de la fonction LoadFont(). Pour revenir à la police par défaut, #PB_Default peut être utilisé comme 'FontID'.

OS Supportés

Tous


DrawingMode()

Syntaxe

DrawingMode(Mode)
Description
Change la mode d'affichage pour les textes et les dessins.

Mode peut être une combinaison des valeurs suivantes:
  #PB_2DDrawing_Default    : Mode par défaut, le texte est affiché avec un fond, les dessins (cercles, rectangles...) sont remplis.
  #PB_2DDrawing_Transparent: Le fond des textes sera transparent (invisible).
  #PB_2DDrawing_XOr        : Tous les dessins seront en mode 'XOR'. La couleur n'a plus d'importance.
  #PB_2DDrawing_Outlined   : Tous les dessins (cercles, rectangles...) seront détourés (seule la ligne de contour sera visible).
Pour utiliser plusieurs modes en même temps, il suffit d'utiliser l'opérateur '|' (OR). Exemple pour des dessins détourés en mode 'xor':
  DrawingMode(#PB_2DDrawing_Outlined | #PB_2DDrawing_XOr)

OS Supportés

Tous


Ellipse()

Syntaxe

Ellipse(x, y, RayonX, RayonY [, Couleur])
Description
Dessine une ellipse colorée à la position x,y sur la surface de dessin en cours, avec les dimensions de RayonX et RayonY. Si le paramètre 'Couleur' n'est pas spécifié, la couleur fixée par la fonction FrontColor() sera utilisée. La fonction RGB() peut être utilisée pour obtenir facilement la couleur désirée. La surface de dessin est fixée par la fonction StartDrawing().

Exemple:

  ; Plusieurs ellipses de couleur aléatoire
  Largeur=200
  Hauteur=150
  If OpenWindow(0, 0, 0, Largeur, Hauteur, "Ellipses", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If StartDrawing(WindowOutput(0))
      x = Largeur/2
      y = Hauteur/2
      For Rayon = Hauteur/2 To 10 Step -10
        Ellipse(x, y, Rayon*Largeur/Hauteur, rayon, RGB(Random(255),Random(255),Random(255)))
      Next Rayon
      StopDrawing() ; C'est absolument indispensable quand les opérations de dessins sont terminées !!! Ne jamais l'oublier !
    EndIf

    Repeat : Event = WaitWindowEvent() : Until  Event = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


FillArea()

Syntaxe

FillArea(x, y, CouleurBord [, Couleur])
Description
Remplit une zone arbitraire en commençant à la position x, y jusqu'à rencontrer la couleur CouleurBord. Cela permet de remplir tout type de forme. Si le paramètre Couleur n'est pas précisé, la couleur par défaut définie par FrontColor() est utilisée. RGB() peut être appelé pour choisir une couleur valide. La sortie courante est fixée par StartDrawing().

Si le paramètre 'Couleur' est -1, alors la zone sera remplie par la couleur trouvée aux coordonnées (x,y).

OS Supportés

Windows, Linux, MacOS X


FrontColor()

Syntaxe

FrontColor(Couleur)
Description
Fixe la couleur utilisée par les fonctions graphiques et l'affichage de texte. La fonction RGB() peut être utilisée pour obtenir facilement la couleur désirée. Un tableau avec les couleurs les plus courantes est disponible ici.

OS Supportés

Tous


Line()

Syntaxe

Line(x, y, Largeur, Hauteur [, Couleur])
Description
Trace une ligne partant de la position x, y, jusqu'à la position x + Largeur, y + hauteur sur la surface de dessin en cours. Si le paramètre 'Couleur' n'est pas spécifié, la couleur fixée par la fonction FrontColor() sera utilisée. La fonction RGB() peut être utilisée pour obtenir facilement la couleur désirée. La surface de dessin est fixée par la fonction StartDrawing().

Exemple:

  ; Plusieurs lignes de couleur aléatoire
  Largeur=200
  Hauteur=150
  If OpenWindow(0, 0, 0, Largeur, Hauteur, "Lignes", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If StartDrawing(WindowOutput(0))
      yDebut = 0
      yFin   = Hauteur-yDebut
      xDebut = 10
      For xFin=xDebutt To Largeur-xDebut Step 1
        Line(xDebut, yDebut, xFin, yFin ,RGB(Random(255),Random(255),Random(255)))
      Next
      StopDrawing() ;  C'est absolument indispensable quand les opérations de dessins sont terminées !!! Ne jamais l'oublier !
    EndIf

    Repeat : Event = WaitWindowEvent() : Until  Event = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


LineXY()

Syntaxe

LineXY(x1, y1, x2, y2 [, Couleur])
Description
Trace une ligne partant de la position x1,y1 jusqu'à la position x2,y2 sur la surface de dessin en cours. Si le paramètre 'Couleur' n'est pas spécifié, la couleur fixée par la fonction FrontColor() sera utilisée. La fonction RGB() peut être utilisée pour obtenir facilement la couleur désirée. La surface de dessin est fixée par la fonction StartDrawing().

OS Supportés

Tous


Plot()

Syntaxe

Plot(x, y [, Couleur])
Description
Affiche un point à la position x,y sur la surface de dessin en cours. Si le paramètre 'Couleur' n'est pas spécifié, la couleur fixée par la fonction FrontColor() sera utilisée. La fonction RGB() peut être utilisée pour obtenir facilement la couleur désirée. La surface de dessin est fixée par la fonction StartDrawing().

OS Supportés

Tous


Point()

Syntaxe

Couleur = Point(x, y)
Description
Renvoie dans la variable 'Couleur' la couleur affichée à la position x,y de la surface de dessin en cours. La valeur retournée dans Couleur est un nombre codé sur 24 bits qui contient la combinaison des trois couleurs de base (Rouge, Vert, Bleu) codées chacune sur 8 bits (valeur 0 à 255).

La couleur peut être facilement décomposée en valeur RVB à l'aide des commandes Red(), Green() et Blue().

OS Supportés

Tous


StartDrawing()

Syntaxe

Resultat = StartDrawing(OutputID)
Description
Change la surface de dessin par celle mentionnée par 'OutputID'. Après avoir utilisé cette fonction, toutes les commandes de dessin seront exécutées sur la nouvelle surface. Lorsque tous les dessins sont terminés, la fonction StopDrawing() doit être appelée. Le 'Resultat' doit être toujours testé avant de continuer avec les operations de dessins, pour être sûr que la surface est disponible. La couleur d'arrière plan est le noir (ie: RGB(0,0,0)) et la couleur d'avant plan est le blanc (ie: RGB(255,255,255)).

'OutputID' peut être une des fonctions suivantes:
  WindowOutput()  : Les dessins seront rendus directement sur la fenêtre.
  ScreenOutput()  : Les dessins seront rendus directement sur l'ecran (utile pour les jeux).
  SpriteOutput()  : Les dessins seront rendus directement sur le sprite (utile pour les jeux).
  ImageOutput()   : Les dessins seront rendus directement sur l'image (see CreateImage())
  PrinterOutput() : Les dessins seront rendus directement sur l'imprimante.
  TextureOutput() : Les dessins seront rendus directement sur la texture.

Pour dessiner, les fonctions suivantes sont disponibles:
  Box()       : Carré ou rectangle
  Circle()    : Cercle
  Ellipse()   : Ellipse
  FillArea()  : Remplissage de forme
  Line()      : Ligne (largeur et hauteur)
  LineXY()    : Ligne (de x1,y1 à x2,y2)
  Plot()      : Point
  DrawImage() : Affiche une image
  DrawText()  : Affiche du texte

Note: Sous Windows, il est nécessaire de redessiner les graphiques si on utilise WindowOutput() après chaque recouvrement, réduction de la fenêtre etc.. Il est donc recommandé de créer le dessin sur une image en utilisant ImageOutput() et de l'afficher à l'aide d'un ImageGadget(). Si une mise à jour de l'image est nécessaire, il suffit d'utiliser SetGadgetState() et Windows rafraîchira correctement le dessin.

La valeur de retour 'Resultat' est le DC (Device Context) qui correspond à la surface en cours d'utilisation. Cette valeur peut être utilisée dans les commandes API nécessitant un DC.

OS Supportés

Tous


StopDrawing()

Syntaxe

StopDrawing()
Description
Lorsque tous les affichages graphiques ont été réalisés, cette fonction doit être appelée afin de permettre aux autres applications en cours d'effectuer leurs propres affichages graphiques. Une application graphique typique doit donc ressembler à cela :
  If StartDrawing(WindowOutput())
    Box(10,10,20,20)
    Line(30,50,100,100)
    ; ....
    StopDrawing()
  EndIf

OS Supportés

Tous


TextHeight()

Syntaxe

Hauteur = TextHeight(Texte$)
Description
Retourne la hauteur (en pixels) que ferait la chaîne Texte$ sur la surface de dessin en cours avec la police de caractères actuelle.

OS Supportés

Tous


TextWidth()

Syntaxe

Longueur = TextWidth(Texte$)
Description
Retourne la longueur (en pixels) que ferait la chaîne Texte$ sur la surface de dessin en cours avec la police de caractères actuelle. C'est une fonction pratique lorqu'on veut connaître la longueur réelle d'une chaîne de caractères utilisant une police non proportionnelle.

OS Supportés

Tous


AudioCD

PureBasic - AudioCD

General

Les CD-Audio sont un bon moyen d'écouter de la musique en qualité Hi-Fi pendant que l'on joue ou travaille sur son ordinateur, sans que cela pénalise trop les performances de la machine. Cette bibliothèque propose toutes les fonctions nécessaires pour gérer facilement la lecture de CD-Audios dans un programme PureBasic.

Sommaire des commandes

AudioCDLength
AudioCDName
AudioCDStatus
AudioCDTrackLength
AudioCDTrackSeconds
AudioCDTracks
EjectAudioCD
InitAudioCD
PauseAudioCD
PlayAudioCD
ResumeAudioCD
StopAudioCD
UseAudioCD

Exemple

AudioCD.pb

OS Supportés

Tous

Guide de référence - Index


AudioCDLength()

Syntaxe

Duree = AudioCDLength()
Description
Renvoie la durée totale d'un CD-Audio en secondes.

OS Supportés

Tous


AudioCDName()

Syntaxe

Lecteur$ = AudioCDName()
Description
Renvoie le nom du lecteur de CD (dépendant de l'O.S.) où est placé le CD-Audio. Par exemple, le nom retourné peut être 'D:\' dans un système Windows, si le lecteur de CD occupe la position 'D:\' dans le système

OS Supportés

Tous


AudioCDStatus()

Syntaxe

Etat = AudioCDStatus()
Description
Renvoie l'état actuel du lecteur de CD. La variable 'Etat' peut prendre les valeurs suivantes :

-1 : Lecteur de CD non prêt (vide ou avec tiroir ouvert)
0 : Lecteur de CD arrêté (mais un CD est à l'intérieur et détecté)
>0 : Plage audio en cours de lecture.

OS Supportés

Tous


AudioCDTrackLength()

Syntaxe

Duree = AudioCDTrackLength(NumeroPiste)
Description
Renvoie la durée de la piste audio, en secondes.

OS Supportés

Tous


AudioCDTrackSeconds()

Syntaxe

Secondes = AudioCDTrackSeconds()
Description
Renvoie le nombre de secondes écoulées en lecture depuis le début de la piste.

OS Supportés

Tous


AudioCDTracks()

Syntaxe

NombrePistes = AudioCDTracks()
Description
Renvoie dans 'NombrePistes' le nombre total de pistes audio disponibles

OS Supportés

Tous


EjectAudioCD()

Syntaxe

EjectAudioCD(Etat)
Description
Ouvre ou ferme le tiroir du lecteur de CD. Si 'Etat' = 1, le tiroir sera ouvert, sinon, il sera fermé.

OS Supportés

Tous


InitAudioCD()

Syntaxe

Resultat = InitAudioCD()
Description
Tente d'initialiser les ressources nécessaires pour exécuter les fonctions de la bibliothèque. Cette fonction doit être appelée avant toute autre fonction de la bibliothèque CD-Audio. Si Resultat = 0, l'intialisation a échoué ou n'a pas trouvé de lecteur de CD, sinon, 'Resultat' contient le nombre de lecteurs de CD reconnus par le système.

OS Supportés

Tous


PauseAudioCD()

Syntaxe

PauseAudioCD()
Description
Interrompt la lecture du CD-Audio (Pause). La lecture peut être reprise en appelant la fonction ResumeAudioCD().

OS Supportés

Tous


PlayAudioCD()

Syntaxe

PlayAudioCD(PlageDebut, PlageFin)
Description
Commence la lecture du CD-Audio depuis la plage PlageDebut jusqu'à la plage PlageFin. La première plage lue porte le numéro 1.

OS Supportés

Tous


ResumeAudioCD()

Syntaxe

ResumeAudioCD()
Description
Reprend la lecture du CD après un pause demandée par la fonction PauseAudioCD().

OS Supportés

Tous


StopAudioCD()

Syntaxe

StopAudioCD()
Description
Arrête la lecture du CD-Audio en cours.

OS Supportés

Tous


UseAudioCD()

Syntaxe

UseAudioCD(LecteurCD)
Description
Comme la fonction InitAudioCD() nous permet de savoir combien de lecteurs de CD sont reconnus par le système, UseAudioCD() permet de changer le lecteur CD en cours. Il est alors possible de lire plusieurs CD-Audio simultanément.

OS Supportés

Tous


Cipher

PureBasic - Cipher

General

La bibliothèque Cipher est un jeu de fonctions utiles pour le chiffrement ou l'encodage des données. Par exemple la signature MD5 (Message Digest 5) est utilisée dans de nombreux domaines en raison de sa résistance aux piratage: Linux, BSD et Unix utilisent ce système comme voie alternative pour le codage des mots de passe sur disque.

Sommaire des commandes

Base64Decoder
Base64Encoder
CRC32Fingerprint
DESFingerprint
MD5FileFingerprint
MD5Fingerprint

Exemple

Cipher.pb

OS Supportés

Windows, Linux, MacOS X

Guide de référence - Index


Base64Decoder()

Syntaxe

Base64Decoder(BufferSource, LongueurSource, BufferDestination, LongueurDestination)
Description
Décode le buffer source préalablement encodé en Base64. La taille du buffer de destination peut être jusqu'à 33% plus petite que la taille du buffer source (avec un minimum de 64 octets). Il est tout de même recommandé de choisir une taille légèrement plus grande pour éviter les risques de dépassement mémoire. Base64Encoder() permet d'encoder un buffer quelconque en Base64.

OS Supportés

Windows, Linux, MacOS X


Base64Encoder()

Syntaxe

Base64Encoder(BufferSource, LongueurSource, BufferDestination, LongueurDestination)
Description
Encode le buffer source avec l'algorithme Base64. Il est largement utilisé dans les programmes de messagerie mais peut également être utile dans toute application nécessitant un encodage basé sur le code ASCII seul (7 bits, caractères 32 à 127) pour les fichiers binaires. Le buffer de sortie devrait être 33% plus long que le buffer d'entrée, avec une taille minimale de 64 octets.

OS Supportés

Windows, Linux, MacOS X


CRC32Fingerprint()

Syntaxe

Resultat = CRC32Fingerprint(Buffer, Longueur)
Description
Calcule le CRC32 correspondant au contenu du buffer spécifié. Le CRC32 est une signature 32 bits non prévue pour le stockage des mots de passe car il est facilement décodable, mais plutôt pour le contrôle rapide d'intégrité des données. Par exemple les fichiers zip utilisent un CRC32 à la fin de chaque fichier pour s'assurer que le zip n'est pas corrompu. L'avantage principal du CRC32 par rapport au MD5 ou à d'autres algorithmes de signature est sa rapidité d'exécution.

OS Supportés

Windows, Linux, MacOS X


DESFingerprint()

Syntaxe

Resultat$ = DESFingerprint(MotDePasse$, Cle$)
Description
Cet algorithme est basé sur la méthode de chiffrement DES (Data Encryption Standard) pour générer une chaîne de 13 caractères. Cette chaîne est unique et non réversible entrainant une grande difficulté pour la décoder lorsque le mot de passe est correctement choisi. Le paramètre MotDePasse$ peut contenir jusqu'à 8 caractères (tous les caractères supplémentaires seront ignorés). MD5Fingerprint() peut être utilisée pour traiter un buffer plus long. Le paramètre Cle$ est également appelé 'Salt' (grain de sel), bien connu des utilisateurs Linux/Unix/BSD. Lorsque l'on utilise une clé Cle$ de 2 caractères, cette fonction retourne une chaîne 'Salt2', compatible avec tout mot de passe standard Linux (/etc/passwd). Cette commande est basée sur la fonction open-source 'crypt()'.

OS Supportés

Windows, Linux, MacOS X


MD5FileFingerprint()

Syntaxe

Resultat$ = MD5FileFingerprint(NomFichier$)
Description
Retourne un code MD5 (Message Digest 5) de 32 caractères correspondant à un identifiant unique du fichier. Voici une courte présentation basée sur la RFC 1321 concernant MD5:

'L'algorithme prend en entrée un message de longueur arbitraire et produit une signature sur 128 bits ou "message digest" à partir des données en entrée. Il est supposé qu'il est irréaliste de calculer deux messages ayant la même signature ou de prédéterminer le "message digest" d'une entrée donnée. L'algorithme MD5 est prévu pour les applications traitant les signatures numériques.'

Les codes MD5 sont souvent utilisés pour le chiffrement des mots de passe, donnant une protection normalisée et élevée. Vous pourrez trouver plus d'informations sur la RFC 1321 sur : http://www.ietf.org/rfc/rfc1321.txt

OS Supportés

Windows, Linux, MacOS X


MD5Fingerprint()

Syntaxe

Resultat$ = MD5Fingerprint(Buffer, Longueur)
Description
Retourne un code MD5 (Message Digest 5) de 32 caractères correspondant à l'identifiant unique du contenu du buffer spécifié. Voici une courte présentation basée sur la RFC 1321 concernant MD5:

'L'algorithme prend en entrée un message de longueur arbitraire et produit une signature sur 128 bits ou "message digest" à partir des données en entrée. Il est supposé qu'il est irréaliste de calculer deux messages ayant la même signature ou de prédéterminer le "message digest" d'une entrée donnée. L'algorithme MD5 est prévu pour les applications traitant les signatures numériques.'

Les codes MD5 sont souvent utilisés pour le chiffrement des mots de passe, donnant une protection normalisée et élevée. Vous pourrez trouver plus d'informations sur la RFC 1321 sur : http://www.ietf.org/rfc/rfc1321.txt

OS Supportés

Windows, Linux, MacOS X


Clipboard

PureBasic - Clipboard

General

Le presse-papier (clipboard) est le moyen standard pour partager des informations entre les applications lancées depuis le système d'exploitation. Par exemple lorsque l'on coupe un texte dans un éditeur, il est envoyé dans le presse-papier et peut ensuite être retrouvé et déposé par un autre éditeur de texte. PureBasic permet de copier et récupérer facilement du texte et des images dans le presse-papier du système.

Sommaire des commandes

ClearClipboard
GetClipboardImage
GetClipboardText
SetClipboardImage
SetClipboardText

Exemple

Clipboard.pb

OS Supportés

Tous

Guide de référence - Index


ClearClipboard()

Syntaxe

ClearClipboard()
Description
Efface le presse-papier. Toute information préalablement stockée est totalement effacée et ne peut plus être retrouvée.

OS Supportés

Tous


GetClipboardImage()

Syntaxe

Resultat = GetClipboardImage(#Image [, Profondeur])
Description
Crée une nouvelle #Image à partir du contenu du presse-papier (si une image est disponible). Si #PB_Any est utilisé pour le paramètre '#Image', le numéro de la nouvelle image sera renvoyé dans 'Resultat'. Si un probleme est survenu, ou qu'aucune image n'est disponible, alors 0 est renvoyé dans 'Resultat'.

Si le paramètre optionel 'Profondeur' est omis ou égal à #PB_Image_DisplayFormat, le format de l'image sera le même que celui du bureau (écran). Dans ce mode, les images sont plus rapide à afficher, mais il peut y avoir des pertes au niveaux des couleurs, par exemple si l'image est en 32 bits alors que le bureau est en 16 bits. Les autres valeurs valides pour 'Profondeur' sont: 1, 2, 4, 8, 16, 24 et 32 bits. Lors de la manipulation des images riches en couleurs, il est conseillé d'utiliser une profondeur de 24 ou 32 bits pour éviter une perte d'information.

L'image ainsi obtenue peut être détruite à l'aide de la commande FreeImage(). Pour plus d'information sur les images, voir la bibliothèque Image.

OS Supportés

Windows


GetClipboardText()

Syntaxe

Texte$ = GetClipboardText()
Description
Renvoit le texte actuellement stocké dans le presse-papier.

OS Supportés

Tous


SetClipboardImage()

Syntaxe

SetClipboardImage(#Image)
Description
Met une copie de l'#Image dans le presse-papier. Si une image est déjà présente dans le presse-papier, elle sera remplacée par cette #Image.

Une image est créée à l'aide des commandes du type CreateImage() et LoadImage().

Exemple:
  If CreateImage(0,26,20)
    StartDrawing(ImageOutput(0))
      Box(0,0,26,20,RGB(255,255,255))
      Circle(13,10,5,RGB(255,0,0))
    StopDrawing()
    SetClipboardImage(0)
  EndIf

  ; Maintenant ouvrez un logiciel de dessin (par exemple 'Paint') et collez le contenu du presse-papier (Edition puis Coller),
  ; et vous verrez le drapeau japonais ;-)

OS Supportés

Windows


SetClipboardText()

Syntaxe

SetClipboardText(Texte$)
Description
Place un texte dans le presse-papier. Si le presse-papier contient déjà un texte celui-ci est remplacé.

OS Supportés

Tous


Console

PureBasic - Console

General

La bibliothèque Console permet de créer une application en mode console. On utilise ce mode pour créer des programmes de petite taille ne nécessitant pas d'interface utilisateur avancé, ou pour une utilisation dans des scripts (ligne de commande). Ces instructions sont également utiles pour le programmeur lors du déboggage d'application en permettant d'afficher des informations sur la console sans interrompre le cours du programme.

Sommaire des commandes

ClearConsole
CloseConsole
ConsoleColor
ConsoleCursor
ConsoleError
ConsoleLocate
ConsoleTitle
EnableGraphicalConsole
Inkey
Input
OpenConsole
Print
PrintN
RawKey
ReadConsoleData
WriteConsoleData

Exemple

Console.pb

OS Supportés

Windows, Linux, MacOS X

Guide de référence - Index


ClearConsole()

Syntaxe

ClearConsole()
Description
Efface tout le contenu de la console. Le fond d'écran est déterminé par ConsoleColor(). La console doit être en mode graphique.

Exemple:

  If OpenConsole()
    EnableGraphicalConsole(1)

    PrintN("Vous ne me verrez jamais")
    ClearConsole()

    PrintN("Appuyez sur [Entree] pour quitter")
    Input()
  EndIf

OS Supportés

Windows


CloseConsole()

Syntaxe

Resultat = CloseConsole()
Description
Ferme la console précédement ouverte avec OpenConsole(). Une fois que la console est fermée il n'est plus possible d'utiliser les fonctions de cette bibliothèque. Si le résultat est 0, l'appel OpenConsole() a échoué. La console se ferme automatiquement à la fin de l'exécution du programme.

Exemple:

  For i = 0 To 4
    If OpenConsole()
      PrintN("C'est la console #"+Str(i))
      PrintN("Appuyez sur [Entree] pour quitter")
      Input()
      CloseConsole()
    EndIf
  Next

OS Supportés

Windows, Linux, MacOS X


ConsoleColor()

Syntaxe

Resultat = ConsoleColor(CouleurCaractere, CouleurFond)
Description
Change les couleurs utilisées par l'écran texte. Les couleurs peuvent aller de 0 à 15 correspondant aux 16 couleurs disponibles en mode console.

Les deux couleurs peuvent avoir une valeur de 0 à 15 qui représente une couleur prédéfinie. Voici la table des couleurs disponibles:
  0 - Noir (fond par défaut)
  1 - Bleu
  2 - Vert
  3 - Cyan
  4 - Rouge
  5 - Magenta
  6 - Brun
  7 - Gris clair (couleur caractère par defaut)
  8 - Gris foncé
  9 - Bleu clair
  10 - Vert clair
  11 - Cyan clair
  12 - Rouge clair
  13 - Magenta clair
  14 - Jaune
  15 - Blanc

Exemple:

  If OpenConsole()
    For Foreground = 0 To 15
      For Background = 0 To 15
        ConsoleColor(Foreground, Background)
        Print(Right(Hex(Background), 1))
      Next

      PrintN("")
    Next

    ConsoleColor(7, 0)
    PrintN("Appuyez sur [Entree] pour quitter")
    Input()
  EndIf

OS Supportés

Windows


ConsoleCursor()

Syntaxe

Resultat = ConsoleCursor(Hauteur)
Description
Change le curseur affiché. La hauteur 0 correspond à un curseur invisible. La hauteur peut avoir une valeur non nulle allant de 1 à 10. La console doit être en mode graphique.

Actuellement, 3 valeurs sont disponibles:
  1 : Curseur souligné
  5 : Curseur demi-pavé
  10: Curseur pavé

Exemple:

If OpenConsole()
  For HauteurCurseur=0 To 10
    ConsoleCursor(HauteurCurseur)
    PrintN("Appuyez sur [Entree] pour augmenter la hauteur du curseur")
    Input()
  Next

  PrintN("Appuyez sur [Entree] pour quitter")
  Input()
  CloseConsole()
EndIf
End

OS Supportés

Windows


ConsoleLocate()

Syntaxe

Resultat = ConsoleLocate(x, y)
Description
Déplace le curseur à la position indiquée, en caractères. La console doit être en mode graphique.

Exemple:

  If OpenConsole()
    EnableGraphicalConsole(1)

    For i = 0 To 200
      ConsoleLocate(Random(79), Random(24))
      Print("*")
    Next

    ConsoleLocate(30, 10)
    PrintN("Appuyez sur [Entree] pour quitter")
    Input()
  EndIf

OS Supportés

Windows


ConsoleTitle()

Syntaxe

ConsoleTitle(Titre$)
Description
Remplace le titre de la console par celui qui est spécifié.

Exemple:

  If OpenConsole()
    ConsoleTitle("Ceci est le titre de la console")
    PrintN("Appuyez sur [Entree] pour quitter")
    Input()
  EndIf

OS Supportés

Windows


EnableGraphicalConsole()

Syntaxe

EnableGraphicalConsole(Mode)
Description
Change la manière d'afficher les caractères dans la console. Si le 'Mode' est 1, alors la console sera en mode graphique, sinon si 'Mode' est 0, elle sera en mode texte.

Le mode par défaut de la console est le mode texte, ce qui implique que le texte ne peut pas être positionné arbitrairement dans la console. Cependant, les redirections (pipes) fonctionnent correctement, ce qui peut être utile si le programme est destiné à être utilisé dans des scripts.

Quand le mode graphique est activé, les commandes comme ClearConsole() ou ConsoleLocate() sont disponibles, et le texte peut être positionné n'importe où dans la console, ce qui permet de faire des jeux ou des applications console (qui peuvent par exemple être accédées à distance via telnet ou ssh). La redirection (pipes) ne fonctionne pas si la console est en mode graphique.

Exemple:

  If OpenConsole()
    EnableGraphicalConsole(1)
    ConsoleLocate(7, 8)
    PrintN("Appuyez sur [Entree] pour quitter")
    Input()
  EndIf

OS Supportés

Windows


Inkey()

Syntaxe

Caractere$ = Inkey()
Description
Renvoi un 'Caractere$' si une touche est appuyée lors de l'appel de Inkey(). Cette commande ne bloque pas l'exécution du programme. Si des touches spéciales (non-ascii) doivent être gérées, RawKey() peut être appelé après Inkey().

Exemple:

  If OpenConsole()
    PrintN("Appuyez sur [Echap] pour quitter")

    Repeat
      KeyPressed$ = Inkey()

      If KeyPressed$ <> ""
        PrintN("Vous avez appuye sur : " + KeyPressed$)
        PrintN("Son identifiant numerique est : "+Str(RawKey()))
      ElseIf RawKey()
        PrintN("Vous avez appuye sur une touche qui n'est pas alpha-numerique.")
        PrintN("Son identifiant numerique est : "+Str(RawKey()))
      Else
        Delay(20) ; Evite de monopoliser tout le temps processeur. Utile pour un OS multi-tâches.
      EndIf

    Until KeyPressed$ = Chr(27) ; Attends jusqu'à ce que la touche [Echap] soit appuyée
  EndIf

Un tableau contenant les valeurs ascii est disponible ici.

OS Supportés

Windows, Linux, MacOS X


Input()

Syntaxe

Chaine$ = Input()
Description
Permet de saisir une ligne complète de caractères. Cette commande bloque le programme et attend jusqu'à ce que l'utilisateur appuie sur la touche entrée. Si la console est en mode graphique la ligne saisie ne peut pas dépasser la largeur de la console.

Si la console n'est pas en mode graphique, une valeur de retour spéciale #PB_Input_Eof (égale à Chr(4)) sera reçue si l'utilisateur tape Ctrl+D dans la console, ou si la redirection d'un fichier vers la console est terminée. Pour des raisons de compatibilité avec les autres applications console sous Windows, #PB_Input_Eof est aussi reçu quand l'utilisateur tape Ctrl+Z dans la console.

Si une entrée binaire est nécessaire, ReadConsoleData() peut être utilisé en mode non graphique.

Exemple:

If OpenConsole()
    Print("Entrez votre nom et appuyez sur [Entree]: ")
    name$=Input()

    ; L'appui sur la touche [Entree] n'est pas pris en compte par la console
    ; donc nous devons utiliser PrintN("") pour aller a la ligne
    PrintN("")

    PrintN("Bonjour, "+name$+", enchante.")
    PrintN("Appuyez sur [Entree] pour quitter")
    Input()
    CloseConsole()
EndIf
End

OS Supportés

Windows, Linux, MacOS X


OpenConsole()

Syntaxe

Resultat = OpenConsole()
Description
Ouvre une fenêtre console. Cette fonction doit être appelée avant toute autre opération sur la console. Une seule console peut être ouverte au même moment sous PureBasic. Si le résultat est 0, l'ouverture a échoué et tous les appels aux fonctions de la bibliothèque doivent être inhibés. La console peut être fermée en utilisant la commande CloseConsole().

La commande EnableGraphicalConsole() permet de permuter entre le mode texte et le mode graphique.

Sous Microsoft Windows, deux formats d'exécution sont disponibles: Win32 et Console. Si vous souhaitez créer une application standard sur console, telle que 'dir', 'del', etc vous devez compiler l'exécutable en utilisant le format Console (Menu option du compilateur PureBasic IDE).

Exemple:

  OpenConsole()
  Delay(2000)

OS Supportés

Windows, Linux, MacOS X


Print()

Syntaxe

Resultat = Print(Texte$)
Description
Affiche la valeur de Texte$ sur la console sans retour de ligne à la fin. Si la console est en mode graphique, la longueur de Texte$ ne peut pas dépasser la largeur de la console, sinon le texte sera tronqué. Pour modifier la position du curseur, utilisez la commande ConsoleLocate(). Pour changer la couleur du texte affiché, utilisez la commande ConsoleColor().

Une fois le 'Texte$' affiché, le curseur est automatiquement déplacé après le dernier caractère. Si le texte dépasse la largeur de la console, il est automatiquement coupé et affiché sur la ligne suivante. Si la console est remplie, le texte est automatiquement déplacé vers le haut.

Pour afficher des données binaires en mode non-graphique (par exemple lors d'une redirection), la commande WriteConsoleData() peut être utilisée.

Exemple:

  If OpenConsole()
    Print("C'est une longue chaîne de caractere. ")
    Print("Celle-ci se place immediatement apres la première... ")
    Print("C'est parce que le curseur se place en fin de chaîne, sans retour a la ligne. ")

    PrintN("Appuyez sur [Entree] pour quitter")
    Input()
  EndIf

OS Supportés

Windows, Linux, MacOS X


PrintN()

Syntaxe

Resultat = PrintN(Texte$)
Description
Affiche la valeur de Texte$ sur la console avec un retour de ligne à la fin. Si la console est en mode graphique, la longueur de Texte$ ne peut pas dépasser la largeur de la console, sinon le texte sera tronqué. Pour modifier la position du curseur, utilisez la commande ConsoleLocate(). Pour changer la couleur du texte affiché, utilisez la commande ConsoleColor().

Une fois le 'Texte$' affiché, le curseur est automatiquement déplacé après le dernier caractère. Si le texte dépasse la largeur de la console, il est automatiquement coupé et affiché sur la ligne suivante. Si la console est remplie, le texte est automatiquement déplacé vers le haut.

Pour afficher des données binaires en mode non-graphique (par exemple lors d'une redirection), la commande WriteConsoleData() peut être utilisée.

Exemple:

  If OpenConsole()
    PrintN("C'est la premiere ligne..")
    PrintN("..suivie de la deuxieme..")
    PrintN(".. et de la troisieme !")

    PrintN("Appuyez sur [Entree] pour quitter")
    Input()
    CloseConsole()
  EndIf

OS Supportés

Windows, Linux, MacOS X


RawKey()

Syntaxe

Resultat = RawKey()
Description
Renvoie l'identifiant numérique de la touche capturée lors du dernier appel de la commande Inkey(). Cela permet de gérer les touches qui n'ont pas de caractères ASCII associés (par exemple F1, F2, les flèches etc.).

Note: Les touches alpha-numériques ne sont pas les seules à avoir une correspondance dans la table ASCII, par exemple la touche 'echappement' a la valeur ASCII 27, la touche entrée la valeur ASCII 10 etc.

Exemple:

  If OpenConsole()
    PrintN("Appuyez sur [Echap] pour quitter")

    Repeat
      KeyPressed$ = Inkey()

      If KeyPressed$ <> ""

        PrintN("Vous avez appuye sur : " + KeyPressed$)
        PrintN("Son identifiant numerique est : "+Str(RawKey()))

      ElseIf RawKey()

        PrintN("Vous avez appuye sur une touche qui n'est pas alpha-numerique.")
        PrintN("Son identifiant numerique est : "+Str(RawKey()))

      Else
        Delay(20) ; Evite de monopoliser tout le temps processeur. Utile pour un OS multi-tâches.
      EndIf

    Until KeyPressed$ = Chr(27) ; Attends jusqu'à ce que la touche [Echap] soit appuyée
 EndIf

OS Supportés

Windows, Linux, MacOS X


ReadConsoleData()

Syntaxe

Resultat = ReadConsoleData(*Buffer, Taille)
Description
Lit l'entrée de la console de manière binaire. Cette commande fonctionne uniquement si le console n'est pas en mode graphique. Elle est utile pour lire des données qui ne sont pas basées sur des lignes de texte (à l'inverse de la commande Input()) ou des données qui on été redirigées vers le programme à travers un 'pipe'.

La commande lit le nombre d'octets specifié par le paramètre 'Taille' dans le '*Buffer' qui devra être auparavant alloué avec AllocateMemory.

Cette commande est bloquante, ce qui signifie que si aucune données n'est disponible en entrée, alors le programme attendra l'arrivée d'une donnée.

Valeur de retour

Renvoie le nombre d'octets lus à partir de l'entrée de la console. Si la valeur zéro est renvoyée, alors il n'y a plus de données à lire (un indicateur de fin de fichier a été reçu).

Exemple:

  ; Ce programme lit une image passée en paramètre depuis une console et l'affiche dans une fenêtre.
  ; Il faut le compiler et créer un exécutable, ensuite le lancer de cette façon "MonExecutable < image.bmp"
  ;
  ; (Dans les options du compilateur sélectionnez "Console" pour le "format de l'exécutable" !)
  ; (Fonctionne seulement avec des BMP ou des icônes à moins d'utiliser un décodeur d'images (voir ImagePlugin))
  ;
  OpenConsole()
  TotalSize = 0
  BufferFree = 10000
  *Buffer = AllocateMemory(BufferFree)

  Repeat
    ReadSize = ReadConsoleData(*Buffer+TotalSize, BufferFree) ; Lit un bloc de données
    TotalSize + ReadSize
    BufferFree - ReadSize
    If BufferFree < 100  ; Redimensionne le buffer s'il n'est pas assez grand
      BufferFree = 10000
      *Buffer = ReAllocateMemory(*Buffer, TotalSize+10000)
    EndIf
  Until ReadSize = 0 ; Une fois que 0 est retourné, il n'y a plus rien à lire

  If TotalSize > 0 ; display the image if successfull
    If CatchImage(0, *Buffer, TotalSize)
      If OpenWindow(0, 0, 0, ImageWidth(0), ImageHeight(0), "Image", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
        If CreateGadgetList(WindowID(0))
          ImageGadget(0, 0, 0, ImageWidth(0), ImageHeight(0), ImageID(0))
          Repeat
          Until WaitWindowEvent() = #PB_Event_CloseWindow
          End
        EndIf
      EndIf
    EndIf
  EndIf
  MessageRequester("Erreur", "Ce n'est pas une image valide.")

OS Supportés

Windows, Linux, MacOS X


WriteConsoleData()

Syntaxe

Resultat = WriteConsoleData(*Buffer, Taille)
Description
Ecrit le contenu binaire du buffer dans la sortie standard de la console. Cette commande fonctionne uniquement si le console n'est pas en mode graphique. Elle est utile pour écrire autre chose que du texte dans la console, ce qui peut être intéressant lorsqu'elle est ensuite redirigée vers un fichier ou un autre programme.

Valeur de retour

Renvoie le nombre d'octets réellement écrit dans la sortie standard de la console.

OS Supportés

Windows, Linux, MacOS X


Database

PureBasic - Database

General

La bibliothèque database est un jeu d'instructions simple pour l'accès à tous types de bases de données (Oracle, MySQL, Access, etc..) via l'API commune ODBC. La bibliothèque est basée sur des requêtes SQL pour lire / écrire des données dans une base. Il est donc recommandé de disposer d'une documentation si nécessaire.

Voici quelques liens concernant la syntaxe SQL:
Tutorial SQL W3Schools
Commandes SQL de SQLite

L'environnement de gestion des bases de données est initialisé à l'aide de la commande InitDatabase().

Sommaire des commandes

CloseDatabase
DatabaseColumnName
DatabaseColumnType
DatabaseColumns
DatabaseDriverDescription
DatabaseDriverName
DatabaseError
DatabaseQuery
DatabaseUpdate
ExamineDatabaseDrivers
FirstDatabaseRow
GetDatabaseDouble
GetDatabaseFloat
GetDatabaseLong
GetDatabaseQuad
GetDatabaseString
InitDatabase
IsDatabase
NextDatabaseDriver
NextDatabaseRow
OpenDatabase
OpenDatabaseRequester
PreviousDatabaseRow

Exemple

Database.pb

OS Supportés

Windows, Linux, MacOS X

Guide de référence - Index


CloseDatabase()

Syntaxe

CloseDatabase(#BaseDeDonnees)
Description
Ferme la #BaseDeDonnees spécifiée (et les connexions / transactions si il en existe). Aucune opération ne peut plus être faite sur la base concernée.

OS Supportés

Windows, Linux, MacOS X


DatabaseColumnName()

Syntaxe

Texte$ = DatabaseColumnName(#BaseDeDonnees, Colonne)
Description
Renvoie le nom du champ spécifié dans #BaseDeDonnees spécifiée.

OS Supportés

Windows, Linux, MacOS X


DatabaseColumnType()

Syntaxe

Resultat = DatabaseColumnType(#BaseDeDonnees, Colonne)
Description
Retourne le type du champ spécifié dans la #BaseDeDonnees spécifiée. Si le résultat est 0, le type est indéterminé ou la commande a échoué (impossibilité de retrouver le type).

Les valeur du type peuvent être:
  1: Format numérique         :  Long (.l) sous PureBasic
  2: Format chaîne            :  String (.s) sous PureBasic
  3: Format numérique flottant:  Float (.f) sous PureBasic
  4: Format numérique double  :  Double (.d) sous PureBasic
  5: Format numérique quad    :  Quad (.q) sous PureBasic

OS Supportés

Windows, Linux, MacOS X


DatabaseColumns()

Syntaxe

Resultat = DatabaseColumns(#BaseDeDonnees)
Description
Renvoie le nombre de champs (colonnes) dans la #BaseDeDonnees spécifiée.

OS Supportés

Windows, Linux, MacOS X


DatabaseDriverDescription()

Syntaxe

Texte$ = DatabaseDriverDescription()
Description
Renvoie la description du pilote en cours d'examen. Les pilotes sont listés d'après les commandes ExamineDatabaseDrivers() and NextDatabaseDriver().

OS Supportés

Windows, Linux, MacOS X


DatabaseDriverName()

Syntaxe

Texte$ = DatabaseDriverName()
Description
Renvoie le nom du pilote en cours d'examen. Les pilotes sont listés d'après les commandes ExamineDatabaseDrivers() and NextDatabaseDriver().

OS Supportés

Windows, Linux, MacOS X


DatabaseError()

Syntaxe

Erreur$ = DatabaseError()
Description
Renvoie sous forme de texte la dernière erreur survenue lors de l'exécution d'une commande sur la base de données. C'est particulièrement utile avec les commandes suivantes: OpenDatabase(), DatabaseQuery() et DatabaseUpdate().

Exemple
  ; D'abord, il faudra se connecter à une base de données qui contient une table 'employee'
  ;
  If DatabaseQuery(#Database, "SELECT * FROM employee") ; Recupère tous les enregistrements de la table 'employee'
    ; ...
  Else
    MessageRequester("Erreur", "Impossible d'executer la requete: "+DatabaseError())
  EndIf

OS Supportés

Windows, Linux, MacOS X


DatabaseQuery()

Syntaxe

Resultat = DatabaseQuery(#BaseDeDonnees, Requete$)
Description
Exécute une requête SQL sur la #BaseDeDonnees spécifiée. Si le résultat est 0 la requête ne peut être exécutée correctement (la description exacte de l'erreur peut être récupérée grâce à DatabaseError()), sinon la requête a abouti et NextDatabaseRow() peut être utilisé pour lister les enregistrements renvoyés. Cette commande affecte toujours NextDatabaseRow() même si aucun enregistrement n'est retourné par la requête. Il est conseillé d'utiliser DatabaseUpdate() quand une requête ne retourne jamais d'enregistrement.

Exemple
  ; D'abord, il faudra se connecter à une base de données qui contient une table 'employee'
  ;
  If DatabaseQuery(#Database, "SELECT * FROM employee") ; Recupère tous les enregistrements de la table 'employee'

    While NextDatabaseRow(#Database) ; Enumeration des enregistrements
      Debug GetDatabaseString(#Database, 0) ; Affichage du contenu du premier champ
    Wend

  EndIf

OS Supportés

Windows, Linux, MacOS X


DatabaseUpdate()

Syntaxe

Resultat = DatabaseUpdate(#BaseDeDonnees, Requete$)
Description
Exécute une requête SQL sur la #BaseDeDonnees spécifiée. Si le résultat est 0 la requête ne peut être exécutée correctement (la description exacte de l'erreur peut être récupérée grâce à DatabaseError()), sinon la requête a abouti. Cette commande n'affecte pas NextDatabaseRow(), il est donc possible d'utiliser cette commande tout en conservant les enregistrements obtenus par DatabaseQuery(). Par contre, il n'est pas possible d'effectuer des sélections ('SELECT' en SQL) ou d'autres type de requêtes qui renvoient des enregistrements.

Exemple
  ; D'abord, il faudra se connecter à une base de données qui contient une table 'employee'
  ;
  If DatabaseQuery(#Database, "SELECT * FROM employee") ; Recupère tous les enregistrements de la table 'employee'

    While NextDatabaseRow(#Database) ; Enumération des enregistrements

      ; Mise à jour du champs 'checked'  pour chaque enregistrement, en assumant  que le champ 'id'
      ; est le premier de la table 'employee'
      ;
      DatabaseUpdate("UPDATE employee SET checked=1 WHERE id="+GetDatabaseString(#Database, 0))
    Wend
  EndIf

OS Supportés

Windows, Linux, MacOS X


ExamineDatabaseDrivers()

Syntaxe

Resultat = ExamineDatabaseDrivers()
Description
Examine les pilotes de bases de données disponibles dans le système. Si ODBC n'est pas installé ou qu'aucun pilote n'est disponible, la valeur retournée est 0, sinon NextDatabaseDriver() peut être utilisé pour lister tous les pilotes.

OS Supportés

Windows, Linux, MacOS X


FirstDatabaseRow()

Syntaxe

Resultat = FirstDatabaseRow(#BaseDeDonnees)
Description
Récupère les informations relatives au premier enregistrement de la #BaseDeDonnees. Si le résultat est 0, aucun enregistrement n'est disponible. Pour accéder aux informations à l'intérieur de l'enregistrement on peut utiliser GetDatabaseLong(), GetDatabaseFloat() et GetDatabaseString().

OS Supportés

Windows, Linux, MacOS X


GetDatabaseDouble()

Syntaxe

Resultat.d = GetDatabaseDouble(#BaseDeDonnees, Colonne)
Description
Renvoie le contenu du champ de la #BaseDeDonnees au format numérique double. Pour connaître le type d'un champ il faut utiliser DatabaseColumnType().

Note: Cette commande peut être appelée seulement une fois par colonne (il faut stocker le résultat dans une variable si il doit être utilisé plusieurs fois, car un nouvel appel sur la même colonne retournerait une valeur erronée). C'est une limitation de la technologie ODBC.

OS Supportés

Windows, Linux, MacOS X


GetDatabaseFloat()

Syntaxe

Resultat.f = GetDatabaseFloat(#BaseDeDonnees, Colonne)
Description
Renvoie le contenu du champ de la #BaseDeDonnees au format numérique flottant. Pour connaître le type d'un champ il faut utiliser DatabaseColumnType().

Note: Cette commande peut être appelée seulement une fois par colonne (il faut stocker le résultat dans une variable si il doit être utilisé plusieurs fois, car un nouvel appel sur la même colonne retournerait une valeur erronée). C'est une limitation de la technologie ODBC.

OS Supportés

Windows, Linux, MacOS X


GetDatabaseLong()

Syntaxe

Resultat = GetDatabaseLong(#BaseDeDonnees, Colonne)
Description
Renvoie le contenu du champ de la #BaseDeDonnees au format numérique standard. Pour connaître le type d'un champ il faut utiliser DatabaseColumnType().

Note: Cette commande peut être appelée seulement une fois par colonne (il faut stocker le résultat dans une variable si il doit être utilisé plusieurs fois, car un nouvel appel sur la même colonne retournerait une valeur erronée). C'est une limitation de la technologie ODBC.

OS Supportés

Windows, Linux, MacOS X


GetDatabaseQuad()

Syntaxe

Resultat.q = GetDatabaseQuad(#BaseDeDonnees, Colonne)
Description
Renvoie le contenu du champ de la #BaseDeDonnees au format numérique quad. Pour connaître le type d'un champ il faut utiliser DatabaseColumnType().

Note: Cette commande peut être appelée seulement une fois par colonne (il faut stocker le résultat dans une variable si il doit être utilisé plusieurs fois, car un nouvel appel sur la même colonne retournerait une valeur erronée). C'est une limitation de la technologie ODBC.

OS Supportés

Windows, Linux, MacOS X


GetDatabaseString()

Syntaxe

Texte$ = GetDatabaseString(Colonne)
Description
Renvoie le contenu du champ de la #BaseDeDonnees au format texte. Pour connaître le type d'un champ il faut utiliser DatabaseColumnType().

Note: Cette commande peut être appelée seulement une fois par colonne (il faut stocker le résultat dans une variable si il doit être utilisé plusieurs fois, car un nouvel appel sur la même colonne retournerait une valeur erronée). C'est une limitation de la technologie ODBC.

OS Supportés

Windows, Linux, MacOS X


InitDatabase()

Syntaxe

Resultat = InitDatabase()
Description
Initialise l'environnement base de données pour un usage ultérieur. La bibliothèque ODBC est chargée et les ressources requises allouées. Si le résultat est 0 ODBC n'est pas disponible ou dans une version non compatible (ODBC 3.0 ou supérieur est requis) et tous les appels de fonctions de base de données doivent être inhibés.

Une fois l'environnement initialisé les commandes OpenDatabase() et OpenDatabaseRequester() permettent d'ouvrir une base de données afin d'y effectuer des opérations de lecture ou d'écriture.

Il peut être utile de lister les 'drivers' ODBC disponibles sur la machine à l'aide de la commande ExamineDatabaseDrivers().

OS Supportés

Windows, Linux, MacOS X


IsDatabase()

Syntaxe

Resultat = IsDatabase(#BaseDeDonnees)
Description
Teste si la #BaseDeDonnees est une base de données correctement initialisée. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, Linux, MacOS X


NextDatabaseDriver()

Syntaxe

Resultat = NextDatabaseDriver()
Description
Renvoie les informations sur le pilote de base de données suivant. Si le résultat est nul il n'y a plus aucun pilote suivant disponible. Cette commande doit être appelée après ExamineDatabaseDrivers(). Pour obtenir les informations sur le pilote, utiliser DatabaseDriverName() et DatabaseDriverDescription().

OS Supportés

Windows, Linux, MacOS X


NextDatabaseRow()

Syntaxe

Resultat = NextDatabaseRow(#BaseDeDonnees)
Description
Renvoie les informations relatives à l'enregitrement suivant dans la #BaseDeDonnees. Si le résultat est 0, il n'y a plus d'enregistrement suivant (fin de fichier). Pour accéder aux informations à l'intérieur de l'enregistrement, utiliser GetDatabaseLong(), GetDatabaseFloat() et GetDatabaseString().

OS Supportés

Windows, Linux, MacOS X


OpenDatabase()

Syntaxe

Resultat = OpenDatabase(#BaseDeDonnees, NomBaseDeDonnesODBC$, Utilisateur$, MotdePasse$)
Description
Ouvre la base de données ODBC spécifiée. Si #PB_Any est utilisé pour le paramètre '#Database', le numéro de la nouvelle base de données sera renvoyé dans 'Resultat'. Toutes les opérations consécutives sont effectuées sur cette base. Si le résultat est 0, la base n'a pas pu être trouvée ou le compte utilisateur n'est pas valable (la description exacte de l'erreur peut être récupérée grâce à DatabaseError()). Le mot de passe peut être une chaîne nulle si aucun mot de passe n'est requis. Pour déclarer une base de données ODBC, lire le document d'aide de Windows. Si une autre base de données a déjà été ouverte sous le même numéro, la base précédement gérée par ce numéro est automatiquement fermée.

OS Supportés

Windows, Linux, MacOS X


OpenDatabaseRequester()

Syntaxe

Resultat = OpenDatabaseRequester(#BaseDeDonnees)
Description
Ouvre une boite de dialogue standard Windows ODBC pour sélectionner une base de données. Si #PB_Any est utilisé pour le paramètre '#Database', le numéro de la nouvelle base de données sera renvoyé dans 'Resultat'. Si le résultat est 0, la base ne peut être ouverte (la description exacte de l'erreur peut être récupérée grâce à DatabaseError()).

OS Supportés

Windows, Linux


PreviousDatabaseRow()

Syntaxe

Resultat = PreviousDatabaseRow(#BaseDeDonnees)
Description
Renvoie les informations relatives à l'enregistrement précédent de la #BaseDeDonnees. Si le résultat est 0, il n'y a plus d'enregistrement précédent disponible (début de fichier). Pour accéder aux informations à l'intérieur d'un enregistrement utiliser les commandes GetDatabaseLong(), GetDatabaseFloat() et GetDatabaseString().

Note: Si cette commande renvoie 0 même s'il y a des enregistrements avant l'enregistrement courant, alors cette commande n'est pas supportée par le driver ODBC. En effet, un driver ODBC n'est pas obligé d'implémenter cette commande (contrairement à NextDatabaseRow()) pour être conforme à la norme ODBC. Bien entendu, si cette commande fonctionne correctement avec un driver, elle fonctionnera correctement sur tous les ordinateurs utilisant ce driver.

OS Supportés

Windows, Linux, MacOS X


Date

PureBasic - Date

General

La bibliothèque Date permet de gérer le temps et les dates depuis 1970 jusqu'à 2034, en utilisant le modèle Unix (nombre de secondes écoulées depuis le 1er janvier 1970).

Sommaire des commandes

AddDate
Date
Day
DayOfWeek
DayOfYear
FormatDate
Hour
Minute
Month
ParseDate
Second
Year

Exemple

Date.pb

OS Supportés

Windows, Linux, MacOS X

Guide de référence - Index


AddDate()

Syntaxe

Date = AddDate(Date, Plage, Valeur)
Description
Ajoute une quantité 'Valeur' à une date. 'Plage' peut être l'une des constantes suivantes:
  #PB_Date_Year   : ajoute 'Valeur' années à la date
  #PB_Date_Month  : ajoute 'Valeur' mois à la date
  #PB_Date_Week   : ajoute 'Valeur' semaines à la date
  #PB_Date_Day    : ajoute 'Valeur' jours à la date
  #PB_Date_Hour   : ajoute 'Valeur' heures à la date
  #PB_Date_Minute : ajoute 'valeur' minutes à la daet
  #PB_Date_Second : ajoute 'valeur' secondes à la date

Exemple:

  Debug FormatDate("%dd/%mm/%yyyy", AddDate(Date(), #PB_Date_Year, 2)) ; Retourne la date courante augmentée de 2 ans

OS Supportés

Windows, Linux, MacOS X


Date()

Syntaxe

Date = Date([Annee, Mois, Jour, Heure, Minute, Seconde])
Description
Retourne la valeur du temps système. Si les variables Annee, Mois, Jour, Heure, Minute et Seconde sont spécifiées, la représentation en secondes de cette date est retournée. FormatDate() peut être utilisé pour transformer la date en format utilisateur.

OS Supportés

Windows, Linux, MacOS X


Day()

Syntaxe

Resultat = Day(Date)
Description
Retourne la valeur du jour correspondant à la date. Le résultat est toujours compris entre 1 et 31.

Exemple:

  Debug Day(Date(2002, 10, 3, 0, 0, 0))  ; Le résultat est '3'.

OS Supportés

Windows, Linux, MacOS X


DayOfWeek()

Syntaxe

Resultat = DayOfWeek(Date)
Description
Retourne la valeur du jour de la semaine correspondant à la date spécifiée. Le résultat est toujours compris entre 0 et 6. La table de correspondance suivante est utilisée:
  0 : Dimanche
  1 : Lundi
  2 : Mardi
  3 : Mercredi
  4 : Jeudi
  5 : Vendredi
  6 : Samedi

OS Supportés

Windows, Linux, MacOS X


DayOfYear()

Syntaxe

Resultat = DayOfYear(Date)
Description
Retourne le nombre de jours écoulés depuis le début de l'année correspondant à la date spécifiée. Le résultat est toujours compris entre 1 et 366.

Exemple:

  Debug DayOfYear(Date(2002, 2, 1, 0, 0, 0))  ; Le résultat est '32'. (31 jours pour janvier + 1)

OS Supportés

Windows, Linux, MacOS X


FormatDate()

Syntaxe

Text$ = FormatDate(Masque$, Date)
Description
Retourne la représentation de la date correspondant au masque spécifié. Masque$ est une chaîne indiquant comment formater la date. Il est possible d'utiliser les identifiants suivants:
  %yyyy: sera remplacé par la valeur de l'année sur 4 chiffres.
  %yy: sera remplacé par la valeur de l'année sur 2 chiffres.
  %mm: sera remplacé par la valeur du mois sur 2 chiffres.
  %dd: sera remplacé par la valeur du jour sur 2 chiffres.
  %hh: sera remplacé par la valeur de l'heure sur 2 chiffres.
  %ii: sera remplacé par la valeur des minutes sur 2 chiffres.
  %ss: sera remplacé par la valeur des secondes sur 2 chiffres.

Exemple:

  Debug FormatDate("A=%yyyy, M= %mm, J=%dd", Date()) ; Affiche la date sous la forme
                                                     ; "A=2002, M=10, J=03"

  Debug FormatDate("%hh:%ii:%ss", Date())  ; affiche le temps selon un format 00:00:00

OS Supportés

Windows, Linux, MacOS X


Hour()

Syntaxe

Resultat = Hour(Date)
Description
Retourne la valeur de l'heure correspondant à la date spécifiée. Le résultat est toujours compris entre 0 et 23.

Exemple:

  Debug Hour(Date(1970, 1, 1, 11, 3, 45))  ; Le résultat est '11'.

OS Supportés

Windows, Linux, MacOS X


Minute()

Syntaxe

Resultat = Minute(Date)
Description
Retourne la valeur des minutes correspondant à la date spécifiée. Le résultat est toujours compris entre 0 et 59.

Exemple:

  Debug Day(Date(1970, 1, 1, 11, 3, 45))  ; Le résultat est '3'.

OS Supportés

Windows, Linux, MacOS X


Month()

Syntaxe

Resultat = Month(Date)
Description
Retourne la valeur du mois correspondant à la date spécifiée. Le résultat est toujours compris entre 1 et 12.

Exemple:

  Debug Month(Date(2002, 10, 3, 0, 0, 0))  ; Le résultat est '10'.

OS Supportés

Windows, Linux, MacOS X


ParseDate()

Syntaxe

Date = ParseDate(Masque$, Chaine$)
Description
Transforme une date donnée sous forme de chaîne de caractères en valeur date numérique pouvant être utilisée par les autres fonctions de la bibliothèque. Si la date est incorrecte, la valeur retournée est -1. Cette fonction est particulièrement utile pour retrouver et traiter des dates stockées (dans un fichier de type journal d'évènements par exemple). La chaîne Masque$ indique le format de la date à utiliser. Les identifiants suivants sont accessibles:
  %yyyy: sera remplacé par la valeur de l'année sur 4 chiffres.
  %yy: sera remplacé par la valeur de l'année sur 2 chiffres.
  %mm: sera remplacé par la valeur du mois sur 2 chiffres.
  %dd: sera remplacé par la valeur du jour sur 2 chiffres.
  %hh: sera remplacé par la valeur de l'heure sur 2 chiffres.
  %ii: sera remplacé par la valeur des minutes sur 2 chiffres.
  %ss: sera remplacé par la valeur des secondes sur 2 chiffres.

Exemple:

  Debug ParseDate("%yy/%mm/%dd", "02/12/01") ; Retourne la date numérique correspondant à "02/12/01"

OS Supportés

Windows, Linux, MacOS X


Second()

Syntaxe

Resultat = Second(Date)
Description
Retourne la valeur des secondes correspondant à la date spécifiée. Le résultat est toujours compris entre 0 et 59.

Exemple:

  Debug Second(Date(1970, 1, 1, 11, 3, 45))  ; Le résultat est '45'.

OS Supportés

Windows, Linux, MacOS X


Year()

Syntaxe

Resultat = Year(Date)
Description
Retourne la valeur de l'année correspondant à la date spécifiée. Le résultat est toujours compris entre 1970 et 2034.

Exemple:

  Debug Year(Date(2002, 10, 3, 0, 0, 0))  ; Le résultat est '2002'.

OS Supportés

Windows, Linux, MacOS X


Desktop

PureBasic - Desktop

General

La bibliothèque desktop permet d'obtenir des informations sur l'environnement de travail (le bureau) de l'utilisateur (dimension, résolution, position du curseur etc.).

Sommaire des commandes

DesktopDepth
DesktopFrequency
DesktopHeight
DesktopMouseX
DesktopMouseY
DesktopName
DesktopWidth
ExamineDesktops

Exemple

Desktop.pb

OS Supportés

Windows, Linux, MacOS X

Guide de référence - Index


DesktopDepth()

Syntaxe

Profondeur = DesktopDepth(#Bureau)
Description
Renvoie la pronfondeur (en bits par pixels: 1, 2, 4, 8, 15, 16, 24 ou 32 bits) du #Bureau spécifié. Le bureau principal a toujours la valeur 0. ExamineDesktops() doit être appelée avant cette commande pour mettre à jour les informations concernant les bureaux.
  ExamineDesktops()
  MessageRequester("Information d'affichage", "Résolution = "+Str(DesktopWidth(0))+"x"+Str(DesktopHeight(0))+"x"+Str(DesktopDepth(0)))

OS Supportés

Windows, Linux, MacOS X


DesktopFrequency()

Syntaxe

Profondeur = DesktopFrequency(#Bureau)
Description
Renvoie le taux de rafraîchissement (en Hertz) du #Bureau spécifié. Le bureau principal a toujours la valeur 0. ExamineDesktops() doit être appelée avant cette commande pour mettre à jour les informations concernant les bureaux.
  ExamineDesktops()
  Frequency = DesktopFrequency(0)
  If Frequency = 0
    MessageRequester("Information d'affichage", "Il n'y a aucun réglage utilisateur, le taux de rafraîchissement par défaut du matériel est utilisé.")
  Else
    MessageRequester("Information d'affichage", "taux de rafraîchissement du bureau: "+Str(Frequency)+" Hz.")
  EndIf

OS Supportés

Windows, Linux, MacOS X


DesktopHeight()

Syntaxe

Hauteur = DesktopHeight(#Bureau)
Description
Renvoie la hauteur (en pixels) du #Bureau spécifié. Le bureau principal a toujours la valeur 0. ExamineDesktops() doit être appelée avant cette commande pour mettre à jour les informations concernant les bureaux.
  ExamineDesktops()
  MessageRequester("Information d'affichage", "Résolution = "+Str(DesktopWidth(0))+"x"+Str(DesktopHeight(0))+"x"+Str(DesktopDepth(0)))

OS Supportés

Windows, Linux, MacOS X


DesktopMouseX()

Syntaxe

Resultat = DesktopMouseX()
Description
Renvoie la position absolue en X de la souris à partir du coin supérieur gauche du bureau.
  If OpenWindow(0, 0, 0, 300, 30, "Position de la souris sur le bureau", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    CreateGadgetList(WindowID(0))
      TextGadget(0, 10, 6, 200, 20, "")

    Repeat
      Event = WindowEvent()

      If Event = 0 ; Il n'y a plus d'événement dans la file d'attente, libère le processeur quelques millisecondes pour le multi-tâches
        SetGadgetText(0, "Coordonnées : "+Str(DesktopMouseX())+","+Str(DesktopMouseY()))
        Delay(20)
      EndIf

    Until Event = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux, MacOS X


DesktopMouseY()

Syntaxe

Resultat = DesktopMouseY()
Description
Renvoie la position absolue en Y de la souris à partir du coin supérieur gauche du bureau.
  If OpenWindow(0, 0, 0, 300, 30, "Position de la souris sur le bureau", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    CreateGadgetList(WindowID(0))
      TextGadget(0, 10, 6, 200, 20, "")

    Repeat
      Event = WindowEvent()

      If Event = 0 ; Il n'y a plus d'événement dans la file d'attente, libère le processeur quelques millisecondes pour le multi-tâches
        SetGadgetText(0, "Coordonnées : "+Str(DesktopMouseX())+","+Str(DesktopMouseY()))
        Delay(20)
      EndIf

    Until Event = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux, MacOS X


DesktopName()

Syntaxe

Nom$ = DesktopName(#Bureau)
Description
Renvoie le nom, si il existe, du #Bureau spécifié. Le bureau principal a toujours la valeur 0. ExamineDesktops() doit être appelée avant cette commande pour mettre à jour les informations concernant les bureaux.
  ExamineDesktops()
  MessageRequester("Information bureau", "Nom du bureau principal = "+DesktopName(0))

OS Supportés

Windows, Linux, MacOS X


DesktopWidth()

Syntaxe

Largeur = DesktopWidth(#Bureau)
Description
Renvoie la largeur (en pixels) du #Bureau spécifié. Le bureau principal a toujours la valeur 0. ExamineDesktops() doit être appelée avant cette commande pour mettre à jour les informations concernant les bureaux.
  ExamineDesktops()
  MessageRequester("Information d'affichage", "Résolution = "+Str(DesktopWidth(0))+"x"+Str(DesktopHeight(0))+"x"+Str(DesktopDepth(0)))

OS Supportés

Windows, Linux, MacOS X


ExamineDesktops()

Syntaxe

Resultat = ExamineDesktops()
Description
Examine les caractéristiques des bureaux que l'utilisateur a à sa disposition. Cette commande doit être appelée avant d'utiliser les fonctions suivantes: DesktopDepth(), DesktopFrequency(), DesktopHeight(), DesktopName() et DesktopWidth(). Si la commande s'exécute avec succès, elle renvoie le nombre de bureaux détectés, sinon elle renvoie 0. En règle générale, un utilisateur en utilise qu'un seul, mais il est possible d'en avoir plusieurs en cas de double-écrans par exemple.
  MessageRequester("Information bureau", "Vous avez "+Str(ExamineDesktops())+" bureau(x)")

OS Supportés

Windows, Linux, MacOS X


File

PureBasic - File

General

Les fichiers sont les principaux modes de stockage d'informations des ordinateurs actuels. PureBasic vous permet de les gérer de manière simple et efficace. Un nombre quelconque de fichiers peuvent être ouverts simultanément. Cette bibliothèque utilise des fonctions optimisées pour accélérer la vitesse de lecture/écriture des informations. Toutes les fonctions permettent la gestion des très gros fichiers, jusqu'à 2^64 octets si le système de fichiers les supporte.

Sommaire des commandes

CloseFile
CreateFile
Eof
FileBuffersSize
FileID
FileSeek
FlushFileBuffers
IsFile
Loc
Lof
OpenFile
ReadByte
ReadCharacter
ReadData
ReadDouble
ReadFile
ReadFloat
ReadLong
ReadQuad
ReadString
ReadStringFormat
ReadWord
WriteByte
WriteCharacter
WriteData
WriteDouble
WriteFloat
WriteLong
WriteQuad
WriteString
WriteStringFormat
WriteStringN
WriteWord

Exemple

File.pb

OS Supportés

Tous

Guide de référence - Index


CloseFile()

Syntaxe

CloseFile(#Fichier)
Description
Ferme le #Fichier qui ne pourra plus être utilisé ultérieurement. Lorsqu'un fichier est fermé, toutes ses informations sont effectivement écrites sur le disque. A noter : A la fin du programme, PureBasic prend la précaution de fermer tous les fichiers ouverts, il n'est donc pas obligatoire de le faire.

OS Supportés

Tous


CreateFile()

Syntaxe

Resultat = CreateFile(#Fichier, NomFichier$)
Description
Crée un fichier vide. Si #PB_Any est utilisé pour le paramètre '#Fichier', le numéro du nouveau fichier sera renvoyé dans 'Resultat'. Si le fichier existe déjà, il est ouvert et devient vide! Cette fonction doit donc être manipulée avec prudence. #Fichier est le numéro de fichier qui doit être unique à ce fichier. NomFichier$ est le nom du fichier. Si Resultat est différent de 0, le fichier est créé, sinon, la création a échoué. 'Resultat' doit toujours être testé car la manipulation d'un fichier non créé peut occasionner un plantage sérieux.

Exemple:

  If CreateFile(0, "Text.txt")         ; création d'un nouveau fichier texte...
    For a=1 To 10
      WriteStringN(0, "Ligne "+Str(a))  ; écriture de 10 lignes (suivies du code 'Fin de Ligne')
    Next
    For a=1 To 10
      WriteString(0, "Chaîne"+Str(a))  ; ajoute 10 chaînes sur la même ligne (le code 'Fin de Ligne' n'est pas ajouté)
    Next
    CloseFile(0)                       ; ferme le fichier précédemment ouvert et enregistre les données
  Else
    MessageRequester("Information","Impossible de créer le fichier!")
  EndIf

OS Supportés

Tous


Eof()

Syntaxe

Resultat = Eof(#Fichier)
Description
Eof (End Of File) renvoie l'information de Fin de Fichier pour le #Fichier specifié. Si 'Resultat' est différent de 0, la fin du fichier est atteinte, sinon, Resultat = 0.

OS Supportés

Tous


FileBuffersSize()

Syntaxe

FileBuffersSize(#Fichier, Taille)
Description
Change la taille des caches de lecture/écriture pour le #Fichier spécifié. Cette méthode, disponible pour les programmeurs chevronnés, permet d'avoir un contrôle plus fin sur le système de cache, pour pouvoir améliorer les performances d'accès aux fichiers dans certains cas particuliers. La taille par défaut du cache est de 4096 octets. Si la 'Taille' est mise à 0, alors le cache est complètement désactivé et les informations sont immédiatement écrites dans le fichier.

Note: Pour des raisons de performances, le cache devrait être d'au moins 1024 octets. Quand le cache est actif, les informations ne sont réellement écrite dans le fichier que lorsque le cache est plein, ou que le fichier est fermé. La commande FlushFileBuffers() permet de forcer cette écriture à tout moment.

OS Supportés

Tous


FileID()

Syntaxe

Result = FileID(#Fichier)
Description
Renvoie l'identifiant unique du #Fichier dans le système d'exploitation.

OS Supportés

Windows, Linux, MacOS X


FileSeek()

Syntaxe

FileSeek(#Fichier, Position)
Description
Change la position du pointeur de lecture/écriture dans le #Fichier spécifié.

Exemple:

  file$ = OpenFileRequester("Select a file","","Text (.txt)|*.txt|All files (*.*)|*.*",0)
  If file$
    If ReadFile(0, file$)
      length = Lof(0)                       ; Lit la taille en octets du fichier
      FileSeek(0, length - 10)              ; place le pointeur 10 caractères avant la fin du fichier
      Debug "Position: " + Str(Loc(0))      ; Affiche la position du pointeur
      *MemoryID = AllocateMemory(10)        ; alloue un bloc mémoire pour 10 octets
      If *MemoryID
        bytes = ReadData(0, *MemoryID, 10)  ; Lit les 10 derniers caractères du fichier
        Debug PeekS(*MemoryID)
      EndIf
      CloseFile(0)
    EndIf
  EndIf

OS Supportés

Tous


FlushFileBuffers()

Syntaxe

FlushFileBuffers(#Fichier)
Description
Ecrit immédiatement le contenu du cache dans le #Fichier. Pour plus d'information sur la gestion du cache des fichiers, consulter FileBuffersSize().

OS Supportés

Tous


IsFile()

Syntaxe

Resultat = IsFile(#Fichier)
Description
Teste si le #Fichier est correctement initialisé. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, Linux, MacOS X


Loc()

Syntaxe

Position = Loc(#Fichier)
Description
Renvoie la position du pointeur de lecture/écriture dans le #Fichier.

OS Supportés

Tous


Lof()

Syntaxe

Longueur = Lof(#Fichier)
Description
Lof (Length Of File) renvoie la longueur en octets du #Fichier.

Exemple:

  file$ = OpenFileRequester("Sélectionnez un fichier","","Text (.txt)|*.txt|All files (*.*)|*.*",0)
  If file$
    If ReadFile(0, file$)
      length = Lof(0)                            ; Lit la taille en octets du fichier
      *MemoryID = AllocateMemory(length)         ; alloue un bloc mémoire de la taille du fichier
      If *MemoryID
        bytes = ReadData(0, *MemoryID, length)   ; Lit les données du fichier et les place dans le bloc mémoire
        Debug "Nombre d'octets lus: " + Str(bytes)
      EndIf
      CloseFile(0)
    EndIf
  EndIf

OS Supportés

Tous


OpenFile()

Syntaxe

Resultat = OpenFile(#Fichier, NomFichier$)
Description
Ouvre le fichier NomFichier$ ou en crée un nouveau sous ce nom s'il n'existe pas. Si #PB_Any est utilisé pour le paramètre '#Fichier', le numéro du nouveau fichier sera renvoyé dans 'Resultat'. Vous pouvez ensuite lire et/ou écrire des informations dans ce fichier. Si Resultat est différent de 0, l'ouverture du fichier a réussi, sinon, le fichier n'a pu être ouvert. 'Resultat' doit toujours être testé car la manipulation d'un fichier non créé peut occasionner un plantage sérieux.

Note: pour que l'ouverture du fichier avec OpenFile() soit un succès, le fichier doit avoir les droits en lecture et écriture. Ceci peut devenir un problème si il faut manipuler des fichiers sur un CD-Rom par exemple. Dans ce cas, il convient d'utiliser ReadFile() quand seule la lecture du fichier est nécessaire.

OS Supportés

Tous


ReadByte()

Syntaxe

Nombre.b = ReadByte(#Fichier)
Description
Lit un byte (1 octet) à partir du #Fichier.

OS Supportés

Tous


ReadCharacter()

Syntaxe

Nombre.c = ReadCharacter(#Fichier)
Description
Lit un caractère (1 octet en mode ascii, 2 octets en mode unicode) à partir du #Fichier.

OS Supportés

Tous


ReadData()

Syntaxe

Resultat = ReadData(#Fichier, *Buffer, Longueur)
Description
Lit le contenu du #Fichier et place les informations en mémoire à partir de l'adresse contenue dans le pointeur *Buffer. 'Longueur' précise le nombre d'octets à transférer.

Le nombre d'octets effectivement lus est renvoyé dans 'Resultat' (utile pour vérifier que la lecture s'est bien déroulée).

OS Supportés

Tous


ReadDouble()

Syntaxe

Nombre.d = ReadDouble(#Fichier)
Description
Lit un double (8 octets) à partir du #Fichier.

OS Supportés

Tous


ReadFile()

Syntaxe

Resultat = ReadFile(#Fichier, NomFichier$)
Description
Ouvre un fichier pour des opérations de lecture d'informations uniquement. Si #PB_Any est utilisé pour le paramètre '#Fichier', le numéro du nouveau fichier sera renvoyé dans 'Resultat'. Si Resultat est différent de 0, l'ouverture du fichier a réussi, sinon, le fichier n'a pu être ouvert. 'Resultat' doit toujours être testé car la manipulation d'un fichier non créé peut occasionner un plantage sérieux.

Exemple:

  If ReadFile(0, "Texte.txt")  ; Si le fichier peut être lu , on continue...
    While Eof(0) = 0           ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
      Debug ReadString(0)      ; Affiche ligne par ligne le contenu du fichier
    Wend
    CloseFile(0)               ; Ferme le fichier précédemment ouvert
  Else
    MessageRequester("Information","Impossible d'ouvrir le fichier!")
  EndIf

OS Supportés

Tous


ReadFloat()

Syntaxe

Nombre.f = ReadFloat(#Fichier)
Description
Lit un float (4 octets) à partir du #Fichier.

OS Supportés

Tous


ReadLong()

Syntaxe

Nombre.l = ReadLong(#Fichier)
Description
Lit un long (4 octets) à partir du #Fichier.

OS Supportés

Tous


ReadQuad()

Syntaxe

Nombre.q = ReadQuad(#Fichier)
Description
Lit un quad (8 octets) à partir du #Fichier.

OS Supportés

Tous


ReadString()

Syntaxe

Texte$ = ReadString(#Fichier [, Options])
Description
Lit une chaîne de caractères à partir du #Fichier spécifié, jusqu'au prochain retour chariot (les formats de fichiers texte DOS, Unix et MacOS sont supportés). Si le paramètre 'Option' n'est pas spécifié, la chaîne de caractères est lue au format UTF-8 si le programme est compilé en mode unicode, sinon la lecture s'effectue en ASCII.

Le paramètre facultatif 'Options' peut prendre l'une des valeurs suivantes:
  #PB_Ascii  : Lit le texte en ASCII, même si le programme est compilé en mode unicode.
  #PB_UTF8   : Lit le texte en UTF-8, même si le programme est compilé en mode ASCII.
  #PB_Unicode: Lit le texte en UTF-16 (le programme peut être soit en mode unicode, soit en mode ASCII).

OS Supportés

Tous


ReadStringFormat()

Syntaxe

Resultat = ReadStringFormat(#Fichier)
Description
Détermine si la position actuelle du fichier contient un BOM (Byte Order Mark) pour essayer d'identifier l'encodage des caractères utilisé par le fichier. Si un BOM est détecté, le curseur du fichier sera placé juste après le BOM.

Le 'Resultat' peut prendre l'une des valeurs suivantes:
  #PB_Ascii  : Aucun BOM détecté. C'est probablement un fichier texte standard
  #PB_UTF8   : BOM UTF-8 détecté.
  #PB_Unicode: BOM UTF-16 (little endian) détecté.
  #PB_UTF16BE: BOM UTF-16 (big endian) BOM détecté.
  #PB_UTF32  : BOM UTF-32 (little endian) BOM détecté.
  #PB_UTF32BE: BOM UTF-32 (big endian) BOM détecté.
Les resultats #PB_Ascii, #PB_UTF8 et #PB_Unicode peuvent être utilisés directement avec ReadString() pour lire le texte à partir du fichier. Les autres constantes sont incluses pour faciliter la détection du type de fichier, mais ne sont pas prises en compte nativement par PureBasic.

Le BOM (Byte Order Mark) est un moyen couramment utilisé pour indiquer le type d'encodage d'un fichier texte. Il est habituellement placé au début du fichier. Néanmoins, ce n'est pas un standard ni une norme, mais une pratique courante. Ainsi, si aucun BOM n'est détecté au début du fichier, cela ne veut pas forcément dire qu'il s'agit d'un fichier ASCII. WriteStringFormat() peut être utilisé pour écrire un BOM dans un fichier.

Pour plus d'information, consulter cet article Wikipedia.

OS Supportés

Tous


ReadWord()

Syntaxe

Nombre.w = ReadWord(#Fichier)
Description
Lit un word (2 octets) à partir du #Fichier.

OS Supportés

Tous


WriteByte()

Syntaxe

WriteByte(#Fichier, Nombre.b)
Description
Ecrit une valeur de type byte (1 octet) dans le #Fichier. Le fichier doit être accessible en écriture (donc pas ouvert par ReadFile()).

OS Supportés

Tous


WriteCharacter()

Syntaxe

WriteCharacter(#Fichier, Nombre.c)
Description
Ecrit une valeur de type character (1 octet en mode ascii, 2 octets en mode unicode) dans le #Fichier. Le fichier doit être accessible en écriture (donc pas ouvert par ReadFile()).

OS Supportés

Tous


WriteData()

Syntaxe

WriteData(#Fichier, *Buffer, Longueur)
Description
Ecrit dans le #Fichier la zone de mémoire qui commence à l'adresse contenue dans le pointeur *Buffer. Le paramètre 'Longueur' précise le nombre d'octets en mémoire à écrire.

Exemple:

  *MemoryID = AllocateMemory(1000)       ; Alloue un bloc mémoire
  If *MemoryID
    PokeS(*MemoryID, "Enregistre ce texte dans le bloc mémoire")   ; Ecriture d'une chaîne de caractères dans le bloc mémoire
  EndIf
  If CreateFile(0, "Texte.txt")          ; Création d'un nouveau fichier...
    WriteData(0, PeekS(*MemoryID), 10)   ; On écrit les 10 premiers caractères du bloc mémoire dans le fichier
    CloseFile(0)                         ; Ferme le fichier précédemment ouvert et enregistre les données
  Else
    Debug "Impossible de créer le fichier!"
  EndIf

OS Supportés

Tous


WriteDouble()

Syntaxe

WriteDouble(#Fichier, Nombre.d)
Description
Ecrit une valeur de type double (8 octets) dans le #Fichier. Le fichier doit être accessible en écriture (donc pas ouvert par ReadFile()).

OS Supportés

Tous


WriteFloat()

Syntaxe

WriteFloat(#Fichier, Nombre.f)
Description
Ecrit une valeur de type float (4 octets) dans le #Fichier. Le fichier doit être accessible en écriture (donc pas ouvert par ReadFile()).

OS Supportés

Tous


WriteLong()

Syntaxe

WriteLong(#Fichier, Nombre)
Description
Ecrit une valeur de type long (4 octets) dans le #Fichier. Le fichier doit être accessible en écriture (donc pas ouvert par ReadFile()).

OS Supportés

Tous


WriteQuad()

Syntaxe

WriteQuad(#Fichier, Nombre.q)
Description
Ecrit une valeur de type quad (8 octets) dans le #Fichier. Le fichier doit être accessible en écriture (donc pas ouvert par ReadFile()).

OS Supportés

Tous


WriteString()

Syntaxe

WriteString(#Fichier, Texte$ [, Options])
Description
Ecrit une chaîne de caractères dans le #Fichier. Le fichier doit être accessible en écriture (donc pas ouvert avec ReadFile()). Si le paramètre 'Option' n'est pas spécifié, la chaîne de caractères est écrite au format UTF-8 si le programme est compilé en mode unicode, ou en ASCII sinon.

Le paramètre facultatif 'Options' peut prendre l'une des valeurs suivantes:
  #PB_Ascii  : Ecrit le texte en ASCII, même si le programme est compilé en mode unicode.
  #PB_UTF8   : Ecrit le texte en UTF-8, même si le programme est compilé en mode ASCII.
  #PB_Unicode: Ecrit le texte en UTF-16 (le programme peut être soit en mode unicode, soit en mode ASCII).

OS Supportés

Tous


WriteStringFormat()

Syntaxe

WriteStringFormat(#Fichier, Format)
Description
Ecrit un BOM (Byte Order Mark) à la position actuelle du #Fichier. C'est une pratique courante pour indiquer le type d'encodage du fichier texte.

Le paramètre 'Format' peut prendre l'une des valeurs suivantes:
  #PB_Ascii  : N'écrit aucun BOM (fichier texte standard).
  #PB_UTF8   : Ecrit le BOM UTF-8.
  #PB_Unicode: Ecrit le BOM UTF-16 (little endian).
  #PB_UTF16BE: Ecrit le BOM UTF-16 (big endian) BOM.
  #PB_UTF32  : Ecrit le BOM UTF-32 (little endian) BOM.
  #PB_UTF32BE: Ecrit le BOM UTF-32 (big endian) BOM.
Les constantes #PB_Ascii, #PB_UTF8 et #PB_Unicode correspondent aux options supportés par WriteString() et WriteStringN(). Après avoir placé un BOM, toutes les opérations d'écriture devraient utiliser ce format.

Le BOM (Byte Order Mark) est un moyen couramment utilisé pour indiquer le type d'encodage d'un fichier texte. Il est habituellement placé au début du fichier. Néanmoins, ce n'est pas un standard ni une norme, mais une pratique courante. Ainsi, si aucun BOM n'est détecté au début du fichier, cela ne veut pas forcément dire qu'il s'agit d'un fichier ASCII. ReadStringFormat() peut être utilisé pour detecter le BOM d'un fichier.

Pour plus d'information, consulter cet article Wikipedia.

OS Supportés

Tous


WriteStringN()

Syntaxe

WriteStringN(#Fichier, Texte$ [, Options])
Description
Ecrit une chaîne de caractères dans le #Fichier suivie du code 'Fin de Ligne'. Le fichier doit être accessible en écriture (donc pas ouvert avec ReadFile()). Si le paramètre 'Option' n'est pas spécifié, la chaîne de caractères est écrite au format UTF-8 si le programme est compilé en mode unicode, ou en ASCII sinon.

Le paramètre facultatif 'Options' peut prendre l'une des valeurs suivantes:
  #PB_Ascii  : Ecrit le texte en ASCII, même si le programme est compilé en mode unicode.
  #PB_UTF8   : Ecrit le texte en UTF-8, même si le programme est compilé en mode ASCII.
  #PB_Unicode: Ecrit le texte en UTF-16 (le programme peut être soit en mode unicode, soit en mode ASCII).

OS Supportés

Tous


WriteWord()

Syntaxe

WriteWord(#Fichier, Nombre)
Description
Ecrit une valeur de type word (2 octets) dans le #Fichier. Le fichier doit être accessible en écriture (donc pas ouvert par ReadFile()).

OS Supportés

Tous


FileSystem

PureBasic - FileSystem

General

La bibliothèque FileSystem vous permet de manipuler les fichiers et répertoire de vos périphériques de sauvegarde (Lecteurs de disquettes, disques durs, etc...). Vous pourrez par exemple examiner le contenu d'un répertoire, en créer un nouveau, etc...

Sommaire des commandes

CheckFilename
CopyDirectory
CopyFile
CreateDirectory
DeleteDirectory
DeleteFile
DirectoryEntryAttributes
DirectoryEntryDate
DirectoryEntryName
DirectoryEntrySize
DirectoryEntryType
ExamineDirectory
FileSize
FinishDirectory
GetCurrentDirectory
GetFileDate
GetHomeDirectory
GetTemporaryDirectory
IsDirectory
NextDirectoryEntry
RenameFile
SetCurrentDirectory
SetFileDate

Exemple

FileSystem.pb

OS Supportés

Tous

Guide de référence - Index


CheckFilename()

Syntaxe

Resultat = CheckFilename(NomFichier$)
Description
Vérifie si le nom de fichier spécifié ne contient aucun caractère interdit par le système de fichiers. Par exemple, les caractères '/' et '\' sont interdits sous Windows. Si le nom de fichier est valide, alors le Resultat est 1, sinon Resultat est 0. Le nom de fichier ne doit pas inclure son chemin complet.

OS Supportés

Tous


CopyDirectory()

Syntaxe

Resultat = CopyDirectory(RepertoireSource$, RpertoireDestination$, Masque$ [, Mode])
Description
Copie le répertoire source dans le répertoire destination. Attention, si le répertoire existe déjà, son contenu sera automatiquement écrasé. Si Resultat est 0, le répertoire ne peut être copié.

Masque$ doit être une séquence compatible avec le système d'exploitation. Par exemple: "*.*" copie tous les fichiers situés dans le répertoire. "*.exe" copie seulement les fichiers .exe. Par défaut, une chaîne Masque$ vide permet la copie de tous les fichiers.

Le paramètre 'Mode' est facultatif et peut être une combinaison des valeurs suivantes:
  #PB_FileSystem_Recursive: Copie d'un répertoire et de tous les sous-répertoires.
  #PB_FileSystem_Force    : Remplace également les fichiers protégés (Lecture seule).

OS Supportés

Tous


CopyFile()

Syntaxe

Resultat = CopyFile(NomFichierSource$, NomFichierDestination$)
Description
Copie le fichier source dans le fichier destination. ATTENTION : Si le fichier destination existe déjà, il sera écrasé. Si le fichier n'a pu être copié, 'Resultat' reçoit alors la valeur 0.

OS Supportés

Tous


CreateDirectory()

Syntaxe

Resultat = CreateDirectory(NomRepertoire$)
Description
Crée un nouveau répertoire. Si Resultat = 0, le répertoire n'a pu être créé.

OS Supportés

Tous


DeleteDirectory()

Syntaxe

Resultat = DeleteDirectory(Repertoire$, Masque$ [, Mode])
Description
Efface le répertoire spécifié. Attention, cette commande est dangereuse et doit être utilisée avec précautions.Si le résultat est 0 le répertoire n'a pu être totalement effacé.

'Masque$' doit être une séquence valide pour le système d'exploitation. Par exemple : "*.*" effacera tous les fichiers du répertoire. "*.exe" n'effacera que les fichiers se terminant par .exe. Par défaut une valeur nulle pour Masque$ efface tous les fichiers.

Le paramètre 'Mode' est facultatif et peut être une combinaison des valeurs suivantes:
  #PB_FileSystem_Recursive: Efface le répertoire et tous les sous-répertoires
  #PB_FileSystem_Force    : Efface également les fichiers protégés (Lecture seule).

OS Supportés

Tous


DeleteFile()

Syntaxe

Resultat = DeleteFile(NomFichier$)
Description
Supprime le fichier contenu dans NomFichier$. Si Resultat = 0, le fichier n'a pu être effacé.

OS Supportés

Tous


DirectoryEntryAttributes()

Syntaxe

Attributs = DirectoryEntryAttributes(#Repertoire)
Description
Renvoie les attributs du fichier courant dans le #Repertoire examiné par les fonctions ExamineDirectory() et NextDirectoryEntry(). Les attributs sont une combinaison des valeurs suivantes:
  #PB_FileSystem_Hidden    : Fichier caché
  #PB_FileSystem_Archive   : Fichier archivé
  #PB_FileSystem_Compressed: Fichier compressé
  #PB_FileSystem_Normal    : Fichier normal
  #PB_FileSystem_ReadOnly  : Fichier en lecture seule
  #PB_FileSystem_System    : Fichier système.
Pour vérifier si un attribut est présent, il suffit d'utiliser l'operateur '&' (And):
  [...]

  Attributs = DirectoryEntryAttributes(#Repertoire)
  If Attributs & #PB_FileSystem_Hidden
    Debug "Fichier caché !"
  EndIf

OS Supportés

Tous


DirectoryEntryDate()

Syntaxe

Resultat = DirectoryEntryDate(#Repertoire, TypeDate)
Description
Renvoie la date du fichier courant dans le #Repertoire examiné par les fonctions ExamineDirectory() et NextDirectoryEntry().

La date renvoyée est dans le même format que celui utilisé dans la bibliothèque Date, donc toutes les commandes telle que FormatDate() peuvent être utilisées.

Le paramètre 'TypeDate' peut être une des constantes suivantes:
  #PB_Date_Created : renvoie la date de création du fichier.
  #PB_Date_Accessed: renvoie la date du dernier accès au fichier.
  #PB_Date_Modified: renvoie la date de la dernière modification du fichier.

OS Supportés

Tous


DirectoryEntryName()

Syntaxe

NomFichier$ = DirectoryEntryName(#Repertoire)
Description
Renvoie le nom du fichier courant dans le #Repertoire examiné par les fonctions ExamineDirectory() et NextDirectoryEntry().

OS Supportés

Tous


DirectoryEntrySize()

Syntaxe

Resultat = DirectoryEntrySize(#Repertoire)
Description
Renvoie la taille en octets du fichier courant dans le #Repertoire examiné par les fonctions ExamineDirectory() et NextDirectoryEntry().

Note : DirectoryEntrySize() retourne un quad (8 octets) supportant les tailles de fichier supérieures à 4Go. Il est toutefois possible de stocker le résultat dans un long (4 octets) si vous pouvez affirmer que la taille n'excèdera jamais la limite des 4Go.

OS Supportés

Tous


DirectoryEntryType()

Syntaxe

Resultat = DirectoryEntryType(#Repertoire)
Description
Renvoie le type du fichier courant dans le #Repertoire examiné par les fonctions ExamineDirectory() et NextDirectoryEntry().

Le 'Resultat' peut être une des constantes suivantes:
  #PB_DirectoryEntry_File     : C'est un fichier.
  #PB_DirectoryEntry_Directory: C'est un répertoire.

OS Supportés

Tous


ExamineDirectory()

Syntaxe

Resultat = ExamineDirectory(#Repertoire, NomRepertoire$, Filtre$)
Description
Examine un répertoire et crée une liste qui peut être ensuite affichée avec les fonctions NextDirectoryEntry() et DirectoryEntryName(). #Repertoire est Si #PB_Any est utilisé pour le paramètre '#Repertoire', le numéro du nouveau répertoire sera renvoyé dans 'Resultat'. Si Resultat = 0, le répertoire n'a pu être examiné.

Filtre$ permet de sélectionner quels types de fichiers doivent être retenus. Par exemple, un 'Filtre$' "*.*" ou "" retiendra tous les fichiers (et sous-dossiers) du répertoire , "*.exe" ne retient que les fichiers dont l'extension est .exe (ou les sous-dossiers se terminant par .exe).

Une fois que que l'examen du répertoire est terminée, la commande FinishDirectory() doit être appelée pour libérer toutes les ressources associées à ce listing.

Exemple:

  Directory$ = "C:\"   ; Énumère le contenu du répertoire C (Les sous-répertoires ne sont pas examinés)
  If ExamineDirectory(0, Directory$, "*.*")
    While NextDirectoryEntry(0)
      If DirectoryEntryType(0) = #PB_DirectoryEntry_File
        Type$ = " [Fichier] "
      Else
        Type$ = " [Sous-répertoire] "
      EndIf

      Debug DirectoryEntryName(0) + Type$ + "- Taille en octet : " + Str(DirectoryEntrySize(0))
    Wend
    FinishDirectory(0)
  EndIf

OS Supportés

Tous


FileSize()

Syntaxe

Resultat = FileSize(NomFichier$)
Description
Renvoie la taille en octets du fichier spécifié.

Note : FileSize() retourne un quad (8 octets) supportant les tailles de fichier supérieures à 4Go. Il est toutefois possible de stocker le résultat dans un long (4 octets) si vous pouvez affirmer que la taille n'excèdera jamais la limite des 4Go.

Valeurs spéciales pour 'Resultat':

-1: Fichier inexistant.
-2: Le fichier est en fait un répertoire.

OS Supportés

Tous


FinishDirectory()

Syntaxe

FinishDirectory(#Repertoire)
Description
Termine l'examen du répertoire commencé par ExamineDirectory(). Ceci permet de libérer les ressources associées au listing du #Répertoire.

Note : lorsque le programme se termine, tous les ExamineDirectory() restants sont automatiquement terminés.

OS Supportés

Tous


GetCurrentDirectory()

Syntaxe

Resultat$ = GetCurrentDirectory()
Description
Renvoie le chemin du répertoire courant de l'application. Tous les accès aux fichiers sont relatifs à ce répertoire quand un chemin absolu n'est pas spécifié. SetCurrentDirectory() peut être utilisé pour changer le répertoire courant.

OS Supportés

Tous


GetFileDate()

Syntaxe

Resultat = GetFileDate(NomFichier$, TypeDate)
Description
Renvoie la date du fichier spécifié. La date renvoyée est dans le même format que celui utilisé dans la bibliothèque Date, donc toutes les commandes telle que FormatDate() peuvent être utilisées.

Le paramètre 'TypeDate' peut être une des constantes suivantes:
  #PB_Date_Created : renvoie la date de création du fichier.
  #PB_Date_Accessed: renvoie la date du dernier accès au fichier.
  #PB_Date_Modified: renvoie la date de la dernière modification du fichier.

OS Supportés

Tous


GetHomeDirectory()

Syntaxe

Resultat$ = GetHomeDirectory()
Description
Renvoie le chemin du répertoire racine de l'utilisateur qui est actuellement logué. Ce répertoire a les droits de l'utilisateur, donc il est possible d'y lire et ecrire des fichiers. Il est spécifique à chaque utilisateur et peut donc être utile pour stocker des informations concernant uniquement cet utilisateur (fichiers de préférences, plugins etc.).

OS Supportés

Tous


GetTemporaryDirectory()

Syntaxe

Resultat$ = GetTemporaryDirectory()
Description
Renvoie le chemin de répertoire temporaire. Tous les fichiers temporaires doivent être créés dans ce répertoire, car les droits en lecture et écriture sont garantis.

OS Supportés

Tous


IsDirectory()

Syntaxe

Resultat = IsDirectory(#Repertoire)
Description
Teste si le #Repertoire est correctement initialisé. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Tous


NextDirectoryEntry()

Syntaxe

Resultat = NextDirectoryEntry(#Repertoire)
Description
Cette fonction doit être appelée à la suite de ExamineDirectory(). Elle examine à la suite chaque entrée de la liste du répertoire et renvoit 0 dans 'Resultat' si il n'y a plus d'entrée.

Le type, le nom, la taille, la date et les attributs du fichier ou sous-répertoire correspondant à l'entrée peuvent être obtenus grâce aux fonctions DirectoryEntryType(), DirectoryEntryName(), DirectoryEntrySize(), DirectoryEntryDate() et DirectoryEntryAttributes().

OS Supportés

Tous


RenameFile()

Syntaxe

Resultat = RenameFile(AncienNom$, NouveauNom$)
Description
Renomme un fichier AncienNom$ avec le nouveau nom NouveauNom$. Si Resultat = 0, l'opération a échoué.

Note: Il est aussi possible de renommer un répertoire avec cette fonction.

Exemple:

  RenameFile("C:\Temp\Test.txt", "C:\Temp\TestNew.txt")    ; Renomme le fichier Test.txt du répertoire Temp
  RenameFile("C:\Temp\", "C:\TempNew\")                    ; Renomme le répertoire Temp en TempNew

OS Supportés

Tous


SetCurrentDirectory()

Syntaxe

SetCurrentDirectory(Repertoire$)
Description
Change le répertoire courant de l'application. Tous les accès aux fichiers sont relatifs à ce répertoire quand un chemin absolu n'est pas spécifié. GetCurrentDirectory() peut être utilisé pour récupérer le répertoire courant.

OS Supportés

Tous


SetFileDate()

Syntaxe

SetFileDate(NomFichier$, TypeDate, Date)
Description
Change la date du fichier spécifié. La date est dans le même format que celui utilisé dans la bibliothèque Date, donc toutes les commandes telle que FormatDate() peuvent être utilisées.

Le paramètre 'TypeDate' peut être une des constantes suivantes:
  #PB_Date_Created : change la date de création du fichier.
  #PB_Date_Accessed: change la date du dernier accès au fichier.
  #PB_Date_Modified: change la date de la dernière modification du fichier.

OS Supportés

Tous


Font

PureBasic - Font

General

Les polices de caractères sont largement utilisées sur les systèmes d'exploitation graphiques. Elles permettent d'agrémenter les textes avec différentes tailles et formes de polices.

Note: En PureBasic, les polices de caractères colorées ne sont pas encore supportées. Il est néanmoins possible de contourner cette limitation en utilisant les commandes StartDrawing() et dessiner directement sur la surface souhaitée.

Sommaire des commandes

FontID
FreeFont
IsFont
LoadFont

Exemple

Font.pb

OS Supportés

Tous

Guide de référence - Index


FontID()

Syntaxe

FontID = FontID(#Police)
Description
Renvoie l'identifiant unique de la police dans le système d'exploitation.

Exemple: utilisation de FontID() avec @Link "Gadget/SetGadgetFont" "SetGadgetFont()"

  If OpenWindow(0, 0, 0, 222, 130, "FontID()", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    ButtonGadget(0, 10, 10, 200, 30, "Cliquez pour changer la police...")
    Font1 = LoadFont(#PB_Any, "Arial"  ,  8, #PB_Font_Bold)
    Font2 = LoadFont(#PB_Any, "Verdana", 12, #PB_Font_StrikeOut)
    UsedFont = 1
  EndIf

  Repeat
    Event = WaitWindowEvent()

    If Event = #PB_Event_Gadget
      If EventGadget() = 0
        If UsedFont = 1
          SetGadgetFont(0, FontID(Font2))
          UsedFont = 2
        Else
          SetGadgetFont(0, FontID(Font1))
          UsedFont = 1
        EndIf
      EndIf
    EndIf
  Until Event = #PB_Event_CloseWindow

OS Supportés

Tous


FreeFont()

Syntaxe

FreeFont(#Police)
Description
Libère la #Police spécifiée qui avait été précédemment chargée avec LoadFont().

OS Supportés

Tous


IsFont()

Syntaxe

Resultat = IsFont(#Police)
Description
Teste si la #Police est correctement initialisée. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, Linux, MacOS X


LoadFont()

Syntaxe

Resultat = LoadFont(#Police, NomPolice$, Taille [, Options])
Description
Ouvre la police de caractère spécifiée par 'NomPolice$'. Si #PB_Any est utilisé pour le paramètre '#Police', le numéro de la nouvelle police sera renvoyé dans 'Resultat'. Elle sera créée avec la 'Taille' indiquée. Si 'Resultat' = 0, la création de la police a échoué. #Police est le numéro d'identification de la police.

Le paramètre 'Options' est facultatif et peut être une combinaison des constantes suivantes:
  #PB_Font_Bold       : La police de caractère sera en gras
  #PB_Font_Italic     : La police de caractère sera en italique
  #PB_Font_Underline  : La police de caractère sera soulignée
  #PB_Font_StrikeOut  : La police de caractère sera barrée
  #PB_Font_HighQuality: La police de caractère sera en qualité supérieure (plus lent)
Sous Microsoft Windows, le gestionnaire de police de caractères essaiera toujours de trouver une police équivalente à celle demandée, si cette dernière n'est pas disponible. Par exemple, si vous essayez de charger la police "Tim Now Ronin" et qu'elle n'existe pas, une autre police sera chargée automatiquement, en fonction de sa taille, du style etc. Il est donc peu probable que cette commande échoue.

Exemple:

   If OpenWindow(0, 0, 0, 270, 160, "Chargement police...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    If LoadFont(1, "Arial", 24)
      SetGadgetFont(#PB_Default, FontID(1))
      TextGadget(0, 10, 10, 250, 40, "Arial 24")
    EndIf
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


Gadget

PureBasic - Gadget

General

En PureBasic, un Gadget est un nom générique donné pour tous les composants de l'interface graphique d'un programme : boutons, listes d'éléments, cases à cocher, boîtes à onglets, etc... Cette biliothèque est indépendante du système d'exploitation utilisé (OS). Elle utilise les composants de l'Interface Graphique Utilisateur (GUI) de chaque système.

Sommaire des commandes

AddGadgetColumn
AddGadgetItem
ButtonGadget
ButtonImageGadget
CalendarGadget
ChangeListIconGadgetDisplay
CheckBoxGadget
ClearGadgetItemList
CloseGadgetList
ComboBoxGadget
ContainerGadget
CountGadgetItems
CreateGadgetList
DateGadget
DisableGadget
EditorGadget
ExplorerComboGadget
ExplorerListGadget
ExplorerTreeGadget
Frame3DGadget
FreeGadget
GadgetHeight
GadgetID
GadgetItemID
GadgetToolTip
GadgetType
GadgetWidth
GadgetX
GadgetY
GetActiveGadget
GetGadgetAttribute
GetGadgetColor
GetGadgetData
GetGadgetFont
GetGadgetItemAttribute
GetGadgetItemColor
GetGadgetItemData
GetGadgetItemState
GetGadgetItemText
GetGadgetState
GetGadgetText
HideGadget
HyperLinkGadget
IPAddressGadget
ImageGadget
IsGadget
ListIconGadget
ListViewGadget
MDIGadget
OpenGadgetList
OptionGadget
PanelGadget
ProgressBarGadget
RemoveGadgetColumn
RemoveGadgetItem
ResizeGadget
ScrollAreaGadget
ScrollBarGadget
SetActiveGadget
SetGadgetAttribute
SetGadgetColor
SetGadgetData
SetGadgetFont
SetGadgetItemAttribute
SetGadgetItemColor
SetGadgetItemData
SetGadgetItemState
SetGadgetItemText
SetGadgetState
SetGadgetText
SpinGadget
SplitterGadget
StringGadget
TextGadget
TrackBarGadget
TreeGadget
UseGadgetList
WebGadget

Exemple

Gadget.pb

OS Supportés

Tous

Guide de référence - Index


AddGadgetColumn()

Syntaxe

AddGadgetColumn(#Gadget, Position, Titre$, Largeur)
Description
Ajoute un colonne au gadget spécifié par #Gadget. La 'Position' indique le numéro de colonne où sera insérée la nouvelle colonne. La 'Largeur' indique la largeur initiale de la colonne. Les gadgets supportant cette commande sont:

- ListIconGadget()
- ExplorerListGadget()

Cette commande permet de paramétrer complètement l'affichage d'un ExplorerListGadget(), soit en retirant les colonnes standard à l'aide de RemoveGadgetColumn() et en ajoutant celles de votre choix. A noter que la colonne 'Nom des fichiers' (#PB_Explorer_Name) n'a pas à être obligatoirement en première position.
Note: Pour remettre à jour le contenu du gadget (pour rafraîchir l'affichage), il convient d'utiliser SetGadgetText(). Pour remplir une colonne personnelle (qui n'est pas parmi les colonnes supportées nativement par le gadget), utiliser SetGadgetItemText() pour chaque élément, dès qu'un évènement du type #PB_EventType_Change est détecté.
Les constantes suivantes sont disponibles à la place du titre pour créer une colonne prédéfinie (qui sera rafraîchie automatiquement par le gadget):
  #PB_Explorer_Name      : Affiche le nom du fichier (ou répertoire)
  #PB_Explorer_Size      : Affiche la taille du fichier (en Ko)
  #PB_Explorer_Type      : Affiche le type du fichier
  #PB_Explorer_Attributes: Affiche les attributs du fichier (ou répertoire)
  #PB_Explorer_Created   : Affiche la date de création du fichier (ou répertoire)
  #PB_Explorer_Modified  : Affiche la date de dernière modification du fichier (ou répertoire)
  #PB_Explorer_Accessed  : Affiche la date du dernier accès au fichier (ou répertoire)

Exemple:

  ;Liste avec icônes - Ajoute des colonnes
  If OpenWindow(0, 0, 0, 400, 150, "AddGadgetColumn", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    ListIconGadget(0, 10, 10, 380, 100, "Colonne standard", 150, #PB_ListIcon_GridLines)
    ButtonGadget(1, 10, 120, 150, 20, "Ajouter une nouvelle colonne")
    index = 1     ; La "colonne standard" a déjà l'index 0
    Repeat
      Evenement = WaitWindowEvent()
      If Evenement = #PB_Event_Gadget
        If EventGadget() = 1
          AddGadgetColumn(0, index, "Colonne "+Str(index), 80)
          index + 1
        EndIf
      EndIf
    Until Evenement = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


AddGadgetItem()

Syntaxe

Resultat = AddGadgetItem(#Gadget, Position, Texte$ [, ImageID])
Description
Ajoute un élément au gadget spécifié par #Gadget. Le paramètre 'ImageID' est facultatif et est utilisé pour afficher une image (icône) à côté de l'élément inséré. 'ImageID' peut être récupéré facilement grâce à la commande ImageID(). Les gadgets supportant cette commande sont:

- ComboBoxGadget()
- EditorGadget()
- ListViewGadget()
- ListIconGadget(): support de l'ImageID.
- MDIGadget(): si l'ImageID est une icône, elle sera affichée dans la barre de titre de la fenêtre fille.
- PanelGadget(): support de l'ImageID.
- TreeGadget(): support de l'ImageID. Le paramètre 'Position' est ignoré.

La 'Position' précise le numéro d'emplacement de la liste des éléments où sera inséré le nouvel élément contenu dans Texte$. Pour ajouter l'élément à la fin de la liste, indiquez -1 dans Position.

Pour le MDIGadget() le paramètre 'Position' indique le numéro de la #Fenetre pour la nouvelle fenêtre MDI. #PB_Any peut être utilisé, auquel cas la valeur de retour sera le nouveau numéro défini automatiquement par PureBasic. Le paramètre 'Options' peut servir à spécifier les options de la nouvelle fenêtre MDI (voir OpenWindow()). Les constantes #PB_Window_Borderless, #PB_Window_Screencentered et #PB_Window_WindowCentered ne sont pas supportées par les fenêtre MDI.

Pour le TreeGadget(), le paramètre 'Options' est toujours requis. Il indique le niveau du nouvel élément. Si le niveau est plus grand que celui de l'élément précédent, le nouvel élément deviendra son 'enfant'. Si le niveau est plus petit, il sera ajouté après le 'parent' de l'élément précédent.

OS Supportés

Tous


ButtonGadget()

Syntaxe

Resultat = ButtonGadget(#Gadget, x, y, Largeur, Hauteur, Texte$ [, Options])
Description
Crée un bouton dans la GadgetList en cours. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. #Gadget sera la valeur retournée par la fonction EventGadget(). x et y sont les coordonnées de la position du bouton dans la fenêtre. 'Largeur' et 'Hauteur' sont ses dimensions, 'Texte$' contient le texte qui sera affiché dans le bouton. Pour créer une GadgetList, voir CreateGadgetList().

Le paramètre facultatif 'Options' peut être une combinaison des constantes suivantes:
  #PB_Button_Right    : Aligne le texte du bouton à droite.
  #PB_Button_Left     : Aligne le texte du bouton à gauche.
  #PB_Button_Default  : Définit le bouton comme bouton par défaut (encadré en noir).
  #PB_Button_MultiLine: Affiche le texte sur plusieurs lignes s'il est trop long.
  #PB_Button_Toggle   : Crée un bouton de type 'Toogle'. Ce bouton alterne l'état 'appuyé' et 'normal'.

Exemple:

  ; Démonstration des options possibles pour le gadget bouton
  ;
  If OpenWindow(0, 0, 0, 222, 200, "ButtonGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    ButtonGadget(0, 10,  10, 200, 20, "Bouton standard")
    ButtonGadget(1, 10,  40, 200, 20, "Texte aligné à gauche", #PB_Button_Left)
    ButtonGadget(2, 10,  70, 200, 20, "Texte aligné à droite", #PB_Button_Right)
    ButtonGadget(3, 10, 100, 200, 60, "Texte sur plusieurs lignes (les textes longs retournent automatiquement à la ligne)", #PB_Button_MultiLine)
    ButtonGadget(4, 10, 170, 200, 20, "Bouton à bascule", #PB_Button_Toggle)
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux, MacOS X


ButtonImageGadget()

Syntaxe

Resultat = ButtonImageGadget(#Gadget, x, y, Largeur, Hauteur, ImageID)
Description
Crée un bouton avec image dans la GadgetList en cours. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. #Gadget sera la valeur retournée par la fonction EventGadget(). ImageID représente un fichier BMP et peut être obtenu en utilisant la fonction ImageID() de la bibliothèque Image. Si 'ImageID' est 0, alors aucune image n'est affectée au gadget. x et y sont les coordonnées de la position du bouton dans la fenêtre. Largeur et Hauteur sont ses dimensions. Pour créer une GadgetList, voir CreateGadgetList().

- SetGadgetState() peut être utilisé pour changer ultérieurement l'image affichée par le gadget. Si 'ImageID' est 0, alors l'image est retirée du gadget.
- GetGadgetState() peut être utilisé pour récupérer l'ImageID de l'image actuellement affichée par le gadget.

Exemple:

  If OpenWindow(0, 0, 0, 160, 100, "ButtonImageGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    If LoadImage(0, "map.bmp")    ; changez le 2ème paramètre en indiquant le chemin/fichier contenant votre image
      ButtonImageGadget(0, 10, 10, 100, 83, ImageID(0))
    EndIf
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


CalendarGadget()

Syntaxe

Resultat = CalendarGadget(#Gadget, x, y, Largeur, Hauteur [, Date [, Options]])
Description
Crée un gadget de type calendrier dans la GadgetLits en cours. Ce gadget affiche un calendrier sous forme mensuelle et permet à l'utilisateur de choisir une date. La date utilisée par ce gadget est identique à celle utilisée dans la bibliothèque Date. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. #Gadget sera la valeur retournée par la fonction EventGadget(). Le paramètre 'Date' est facultatif et permet de définir une date lors de la création du gadget. Si aucune date n'est spécifiée, la date courante est utilisée. Il est possible d'utiliser #PB_Calendar_Borderless dans le paramètre 'Options' pour créer un gadget sans bords.

Les commandes suivantes peuvent être utilisées pour agir sur le gadget :

- SetGadgetState(): Change la date actuellement affichée.
- GetGadgetState(): Renvoie la date actuellement affichée.
- SetGadgetItemState(): Fait apparaître une date donnée en gras.
- GetGadgetItemState(): Détermine si une date donnée est en gras.
- SetGadgetAttribute() avec les attributs suivants:
  #PB_Calendar_Minimum: Change la date minimale que l'utilisateur peut choisir
  #PB_Calendar_Maximum: Change la date maximale que l'utilisateur peut choisir avec ce gadget
- GetGadgetAttribute() avec les attributs suivants:
  #PB_Calendar_Minimum: Renvoie la date minimale que l'utilisateur peut choisir
  #PB_Calendar_Maximum: Renvoie la date maximale que l'utilisateur peut choisir avec ce gadget
Ce gadget supporte les commandes SetGadgetColor() et GetGadgetColor() avec les constantes suivantes comme 'TypeCouleur':
  #PB_Gadget_BackColor      : couleur de fond
  #PB_Gadget_FrontColor     : couleur du texte pour les jours affichés
  #PB_Gadget_TitleBackColor : couleur du fond du titre du mois
  #PB_Gadget_TitleFrontColor: couleur du texte du titre du mois
  #PB_Gadget_GrayTextColor  : couleur du texte pour les jours n'appartenant pas au mois courant.

Exemple:

  If OpenWindow(0, 0, 0, 220, 200, "CalendarGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If CreateGadgetList(WindowID(0))
      CalendarGadget(0, 10, 10, 200, 180)
      Repeat: Until WaitWindowEvent() = #PB_Event_CloseWindow
    EndIf
  EndIf

OS Supportés

Tous


ChangeListIconGadgetDisplay()

Syntaxe

ChangeListIconGadgetDisplay(#Gadget, Mode)
Description
Un gadget de type ListIconGadget() propose, sous Microsoft Windows, quatre modes d'affichage différents : Petites icônes, Grandes icônes, Liste et Détails (en colonnes). La variable Mode peut donc prendre les valeurs suivantes :
  #PB_ListIcon_LargeIcon: Mode Grandes icônes
  #PB_ListIcon_SmallIcon: Mode Petites icônes
  #PB_ListIcon_List     : Mode Liste
  #PB_ListIcon_Report   : Mode Détails (colonnes, mode par défaut)

Cette fonction s'applique aussi pour changer l'apparence d'un ExplorerListGadget().

OS Supportés

Windows


CheckBoxGadget()

Syntaxe

Resultat = CheckBoxGadget(#Gadget, x, y, Largeur, Hauteur, Texte$ [, Options])
Description
Crée un gadget checkbox (case à cocher) dans la GadgetList. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. #Gadget sera le numéro retourné par la fonction EventGadget(). x et y représentent la position de la case à cocher sur la fenêtre, Largeur et Hauteur, ses dimensions Texte$ compris. Texte$ décrit l'utilité de la case à cocher, il est placé à sa droite.

- GetGadgetState() est utilisé pour récupérer l'état du gadget (coché ou non).
- SetGadgetState() est utilisé pour changer l'état du gadget (coché ou non).

Le paramètre facultatif 'Options' peut être une combinaison des constantes suivantes:
  #PB_CheckBox_Right : Aligne le texte de la case à cocher à droite.
  #PB_CheckBox_Center: Centre le texte de la case à cocher.

Exemple:

  If OpenWindow(0, 0, 0, 270, 130, "CheckBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    CheckBoxGadget(0, 10,  10, 250, 20, "Case à cocher standard")
    CheckBoxGadget(1, 10,  40, 250, 20, "Case à cocher (cochée)") : SetGadgetState(1,1)
    CheckBoxGadget(2, 10,  70, 250, 20, "Case à cocher (texte aligné à droite)", #PB_CheckBox_Right)
    CheckBoxGadget(3, 10, 100, 250, 20, "Case à cocher (texte centré)", #PB_CheckBox_Center)
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


ClearGadgetItemList()

Syntaxe

ClearGadgetItemList(#Gadget)
Description
Supprime les éléments du gadget spécifié par #Gadget. Le gadget doit être de l'un des types suivants :

- ComboBoxGadget()
- ListViewGadget()
- MDIGadget()
- PanelGadget()
- ListIconGadget()
- TreeGadget()

Exemple:

  If OpenWindow(0, 0, 0, 260, 150, "ClearGadgetItemList", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    ListViewGadget(0,10,10,240,100)
    For a = 1 To 10 : AddGadgetItem (0, -1, "Elément "+Str(a)) : Next    ; ajoute 10 éléments
    ButtonGadget(1, 10, 120, 200, 20, "Supprimer le contenu de la boîte de liste")
    Repeat
      Evenement = WaitWindowEvent()
      If Evenement = #PB_Event_Gadget
        If EventGadget() = 1
          ClearGadgetItemList(0)
        EndIf
      EndIf
    Until Evenement = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


CloseGadgetList()

Syntaxe

CloseGadgetList()
Description
Termine la liste de gadgets courante et revient à la précédente.
C'est particulièrement utile pour les gadgets suivants:

- ContainerGadget()
- PanelGadget()
- ScrollAreaGadget()

OS Supportés

Tous


ComboBoxGadget()

Syntaxe

Resultat = ComboBoxGadget(#Gadget, x, y, Largeur, Hauteur [, Options])
Description
Crée un gadget ComboBox (Liste déroulante) dans la GadgetList en cours. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. #Gadget sera le numéro retourné par la fonction EventGadget(). x et y représentent la position de la ligne de titre de la liste. Attention: contrairement à tous les autres gadgets, la 'Hauteur' spécifie la hauteur de la liste déroulante quand elle est visible. Il faut donc mettre une valeur importante (> 100) sinon la liste ne sera pas visible. Lorsqu'une liste déroulante est créée, elle est vide. Les commandes suivantes peuvent être utilisées pour agir sur le contenu de la liste :

- AddGadgetItem(): Ajoute un élément
- GetGadgetItemText(): Renvoie le texte de l'élément spécifié
- RemoveGadgetItem(): Supprime un élément
- ClearGadgetItemList(): Supprime tous les éléments
- SetGadgetItemText(): Change le texte de l'élément spécifié

- SetGadgetState(): Change l'élément sélectionné.
- GetGadgetText(): Renvoie le contenu texte de la zone visible de la ComboBox.
- GetGadgetState(): Récupère l'index de l'élément sélectionné.
- SetGadgetText(): Change le texte affiché. Si le ComboBoxGadget n'est pas éditable, le texte doit être dans la liste déroulante.

Le paramètre facultatif 'Options' peut être une combinaison des constantes suivantes:
  #PB_ComboBox_Editable : Rend la liste déroulante éditable
  #PB_ComboBox_LowerCase: Tous les textes entrés dans la combobox sont convertis en minuscules
  #PB_ComboBox_UpperCase: Tous les textes entrés dans la combobox sont convertis en majuscules

Exemple:

  If OpenWindow(0, 0, 0, 270, 140, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    ComboBoxGadget(0, 10, 10, 250, 100, #PB_ComboBox_Editable)
    AddGadgetItem(0, -1, "Liste déroulante éditable...")
    ComboBoxGadget(1, 10, 40, 250, 100)
    For a = 1 To 5 : AddGadgetItem(1, -1,"Elément de liste déroulante " + Str(a)) : Next a
    SetGadgetState(1, 2)    ; sélectionne le troisième élément (la numérotation commence à 0)
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


ContainerGadget()

Syntaxe

Resultat = ContainerGadget(#Gadget, x, y, Largeur, Hauteur [, Options])
Description
Crée un nouveau #Gadget destiné à contenir d'autres gadgets. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. La 'GadgetList' courante est automatiquement changée et les nouveaux gadgets qui sont créés après cette commande seront placés dans ce #Gadget. CloseGadgetList() permet de revenir à la 'GadgetList' précédente. OpenGadgetList() pourra être utiliser pour ajouter des gadgets dynamiquement dans ce #Gadget.

Le paramètre 'Options' est facultatif et peut avoir l'une des valeurs suivantes:
  #PB_Container_BorderLess: Sans bordure (Defaut)
  #PB_Container_Flat      : Cadre simple
  #PB_Container_Raised    : Cadre élevé
  #PB_Container_Single    : Cadre enfoncé
  #PB_Container_Double    : Cadre doublement enfoncé
Ce gadget supporte les commandes SetGadgetColor() et GetGadgetColor() avec la constante #PB_Gadget_BackColor comme 'TypeCouleur' pour changer la couleur de fond du gadget.

Exemple:

  If OpenWindow(0, 0, 0, 322, 150, "ContainerGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    ContainerGadget(0, 8, 8, 306, 133, #PB_Container_Raised)
      ButtonGadget(1, 10, 15, 80, 24, "Bouton 1")
      ButtonGadget(2, 95, 15, 80, 24, "Bouton 2")
    CloseGadgetList()
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


CountGadgetItems()

Syntaxe

Resultat = CountGadgetItems(#Gadget)
Description
Renvoie le numbre d'éléments que contient le #Gadget. Si le #Gadget ne contient pas
d'élément, alors le Résultat est 0. Le premier élément commence à 1.
Cette fonction est diponible avec les gadgets suivant:

- ComboBoxGadget()
- EditorGadget()
- ExplorerListGadget()
- ListIconGadget()
- ListViewGadget()
- MDIGadget()
- PanelGadget()
- TreeGadget()

OS Supportés

Tous


CreateGadgetList()

Syntaxe

Resultat = CreateGadgetList(WindowID)
Description
Alloue les ressources nécessaires pour la création d'une nouvelle liste de gadgets (GadgetList) dans la fenêtre référencée par WindowID. Cette fonction doit être appelée avant toute fonction de création de gadget comme ButtonGadget(), ComboBoxGadget(), etc...

Note: Il n'y a pas de gestion séparé des gadgets pour chaque fenêtre, ce qui implique que chaque 'GadgetID' devra être différent pour chaque gadget créé (il ne peut avoir 2 gadgets avec le même ID dans une application).

Exemple:

  ; Déclarez d'abord votre fenêtre...
  If OpenWindow(0, 0, 0, 250, 105, "CreateGadgetList", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ; Maintenant créez la liste de gadgets...
    If CreateGadgetList(WindowID(0))   ; La liste de gadgets a été créée avec succès
      ; Déclarez vos gadgets ici...
      ButtonGadget(0, 10, 15, 230, 30, "Bouton de test")
    Else                               ; La liste de gadgets n'a pu être créée
      ; Affichez un message d'erreur ici, terminez le programme, etc...
    EndIf
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


DateGadget()

Syntaxe

Resultat = DateGadget(#Gadget, x, y, Largeur, Hauteur [, Masque$ [, Date [, Options]]])
Description
Crée un champ de saisie (identique à un StringGadget()) dans la GadgetList en cours, dans lequel il sera possible d'entrer une date et/ou une heure. Ce gadget utilise le même formatage que la bibliothèque Date. Il est par exemple possible d'utiliser FormatDate() pour afficher le résultat renvoyé par GetGadgetState() dans le format approprié. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. #Gadget sera le numéro retourné par la fonction EventGadget().

Le paramètre 'Options' est facultatif et permet de spécifier le format dans lequel la date sera saisie (voir FormatDate() pour la syntaxe du masque). Important: le gadget ne supporte pas l'affichage des secondes, donc si "%ss" est indiqué dans le paramètre Masque$, il sera simplement ignoré. Si aucun masque n'est spécifié (ou que le masque est vide), le masque par défaut sera utilisé. Le masque peut être modifié à l'aide de la commande SetGadgetText().

Le paramètre 'Date' est facultatif et permet d'initialiser le gadget avec la date voulue. Si ce paramètre est omis ou s'il est mis à 0, alors la date actuelle sera utilisée.

Par défaut le gadget a un bouton pour afficher un calendrier à partir duquel l'utilisateur peut choisir une date facilement (voir l'image ci-dessous). Vous pouvez changer cela en spécifiant la constante #PB_Date_UpDown dans le paramètre 'Options'. Dans ce cas, deux boutons (un pour monter, un pour descendre) sera présent pour permettre de modifier la date directement, sans passer par un calendrier.

Si #PB_Date_CheckBox est spécifié dans le paramètre 'Options', le gadget aura une boîte à cocher à partir de laquelle l'utilisateur pourra mette le gadget sur 'Aucune date' (si la boîte à cocher est décochée). Tant que la boîte à cocher est décochée, GetGadgetState() renverra 0. Pour changer l'état de la boîte à cocher, utiliser SetGadgetState() avec soit 0 (aucune date), soit avec une date valide.

Les commandes suivantes peuvent être utilisées pour agir sur ce gadget :

- SetGadgetState(): Change la date du gadget.
- SetGadgetText(): Change le masque du gadget.
- GetGadgetState(): Renvoie la valeur numérique de la date actuellement affichée.
- GetGadgetText(): Renvoie la date actuellement affichée sous forme de texte (exactement comme elle est affichée).
- GetGadgetAttribute() avec les attributs suivants:
  #PB_Date_Minimum: Renvoie la date minimale que l'utilisateur peut choisir
  #PB_Date_Maximum: Renvoie la date maximale que l'utilisateur peut choisir avec ce gadget
- SetGadgetAttribute(): With the following attributes:
  #PB_Date_Minimum: Change la date minimale que l'utilisateur peut choisir
  #PB_Date_Maximum: Change la date maximale que l'utilisateur peut choisir avec ce gadget

Ce gadget supporte les commandes SetGadgetColor() et GetGadgetColor() avec les constantes suivantes comme 'TypeCouleur':
  #PB_Gadget_BackColor      : couleur de fond
  #PB_Gadget_FrontColor     : couleur du texte pour les jours affichés
  #PB_Gadget_TitleBackColor : couleur du fond du titre du mois
  #PB_Gadget_TitleFrontColor: couleur du texte du titre du mois
  #PB_Gadget_GrayTextColor  : couleur du texte pour les jours n'appartenant pas au mois courant.

Exemple:

  If OpenWindow(0, 0, 0, 250, 250,"DateGadget", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    If CreateGadgetList(WindowID(0))
      DateGadget(0, 10, 10, 190, 25, "Date : %dd/%mm/%yyyy Heure : %hh:%ii")
      Repeat: Until WaitWindowEvent() = #PB_Event_CloseWindow
    EndIf
  EndIf

OS Supportés

Windows, Linux, MacOS X


DisableGadget()

Syntaxe

DisableGadget(#Gadget, Etat)
Description
Active ou désactive un gadget référencé par #Gadget. Si Etat = 0, le gadget est activé. Si Etat = 1, le gadget est désactivé

Exemple:

  If OpenWindow(0, 0, 0, 250, 105, "DisableGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    ButtonGadget(0, 10, 15, 230, 30, "Bouton désactivé") : DisableGadget(0, 1)
    ButtonGadget(1, 10, 60, 230, 30, "Bouton activé") : DisableGadget(1, 0)
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


EditorGadget()

Syntaxe

Resultat = EditorGadget(#Gadget, x, y, Largeur, Hauteur [, Options])
Description
Crée un #Gadget de type 'editeur' permettant de saisie une grande quantité de texte dans la 'GadgetList' courante. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. Les paramètres 'x' et 'y' représentent la position du gadget, 'Largeur' et 'Hauteur', ses dimensions. #Gadget sera le numéro retourné par la fonction EventGadget().

Le paramètre facultatif 'Options' peut prendre la valeur suivante:
  #PB_Editor_ReadOnly: L'utilisateur ne peut pas éditer le texte dans ce gadget.
Les commandes suivantes peuvent être utilisées pour agir sur le contenu du gadget:

- AddGadgetItem(): Ajoute une ligne de texte
- CountGadgetItems(): Renvoie le nombre de lignes contenues dans le gadget.
- GetGadgetItemText(): Renvoie la ligne de texte spécifié
- GetGadgetText(): Renvoie tout le texte contenu dans le gadget
- RemoveGadgetItem(): Efface la ligne spécifiée
- ClearGadgetItemList(): Efface tout le texte
- SetGadgetItemText(): Change le contenu de la ligne spécifiée
- SetGadgetText(): Remplace tout le texte contenu par le gadget par un autre
- SetGadgetAttribute() avec l'attribut suivant:
  #PB_Editor_ReadOnly: Change l'état 'lecture seule' du gadget (0 = éditable, 1 = non éditable).
- GetGadgetAttribute() avec l'attribut suivant:
  #PB_Editor_ReadOnly: Renvoie l'état 'lecture seule' du gadget (0 = éditable, 1 = non éditable).

Ce gadget supporte les commandes SetGadgetColor() et GetGadgetColor() avec les valeurs 'TypeCouleur' suivantes:
  #PB_Gadget_BackColor : Couleur de fond
  #PB_Gadget_FrontColor: Couleur du texte

Exemple:

  If OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    EditorGadget(0, 8, 8, 306, 133)
    For a = 0 To 5
      AddGadgetItem(0, a, "Ligne "+Str(a))
    Next
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux, MacOS X


ExplorerComboGadget()

Syntaxe

Resultat = ExplorerComboGadget(#Gadget, x, y, Largeur, Hauteur, Repertoire$, [, Options])
Description
Crée une combobox qui affiche un répertoire ainsi que tous ses répertoires pères permettant à l'utilisateur d'en choisir un. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. Par exemple, une telle ComboBox est utilisée dans la commande OpenFileRequester(). C'est un bon complément de ExplorerListGadget(). C'est un gadget très haut niveau qui fonctionne automatiquement facilitant grandement la programmation et l'utilisation d'un tel gadget.

Le paramètre 'Repertoire$' est le dossier initialement affiché quand le gadget est créé (une chaîne vide spécifiant la racine du disque). Si l'option #PB_Explorer_DrivesOnly est activée, 'Repertoire$' peut seulement être une lettre de lecteur ("A:", "C:" etc.). Tout caractères qui suivront cette lettre seront ignorés.

Le paramètre facultatif 'Options' peut être une combinaison des valeurs suivantes:
  #PB_Explorer_DrivesOnly   : Le Gadget n'affichera que les disques pour en sélectionner un.
  #PB_Explorer_Editable     : Le Gadget sera éditable, avec un mode d'auto-complétion automatique.
  #PB_Explorer_NoMyDocuments: Le répertoire 'MesDocuments' ne sera pas affiché séparément.
Les commandes suivantes peuvent être utilisées pour agir sur le gadget:

- GetGadgetText(): Renvoie le répertoire actuellement affiché.
- SetGadgetText(): Change le répertoire actuellement affiché.

Exemple:

  If OpenWindow(0, 0, 0, 400, 100, "ExplorerComboGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    ExplorerComboGadget(0, 10, 40, 380, 200, "C:\", #PB_Explorer_Editable)
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux, MacOS X


ExplorerListGadget()

Syntaxe

Resultat = ExplorerListGadget(#Gadget, x, y, Largeur, Hauteur, Repertoire$, [, Options])
Description
Créé un nouveau #Gadget de type ListIconGadget() qui gère automatiquement l'affichage d'un répertoire et la navigation sur le disque (à la manière de l'Explorateur Windows). Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. Il permet à l'utilisateur de choisir un fichier ou un dossier situé à n'importe quel endroit sur le disque (ou les disques).

'Repertoire$' est l'emplacement de départ lorsque le gadget sera créé. Il peut être composé de 'patterns', tels que: "C:\*.pb;*.pbi". Si aucun 'pattern' n'est spécifié, le répertoire doit se terminer par un '\'. Si aucun 'Repertoire$' est nul (chaîne vide), alors la liste des disques disponible sera affichée.

Le paramètre facultatif 'Options' peut être une combinaison des valeurs suivantes:
  #PB_Explorer_BorderLess         : Crée un #Gadget sans bordure.
  #PB_Explorer_AlwaysShowSelection: Affiche la sélection même quand le gadget n'est plus actif.
  #PB_Explorer_MultiSelect        : Active le mode 'sélection multiple'.
  #PB_Explorer_GridLines          : Affiche des lignes de séparation.
  #PB_Explorer_HeaderDragDrop     : L'ordre des colonnes peut être changé avec un glisser/déposer (drag'n'drop).
  #PB_Explorer_FullRowSelect      : La sélection s'étend à toute la ligne au lieu de la première colonne.

  #PB_Explorer_NoFiles          : Aucun fichier ne sera affiché.
  #PB_Explorer_NoFolders        : Aucun répertoire ne sera affiché.
  #PB_Explorer_NoParentFolder   : Le 'pseudo' répertoire père [..] ne sera pas affiché.
  #PB_Explorer_NoDirectoryChange: Le répertoire ne pourra pas être changé par l'utilisateur.
  #PB_Explorer_NoDriveRequester : Aucun message du type 'Insérer un disque dans le lecteur A:' ne sera affiché.
  #PB_Explorer_NoSort           : L'utilisateur ne pourra pas trier les colonnes en cliquant sur les titres des colonnes.
  #PB_Explorer_NoMyDocuments    : Le répertoire spécial 'Mes documents' ne sera pas affiché séparément.
  #PB_Explorer_AutoSort         : Le contenu sera automatiquement trié par nom.
Les commandes suivantes sont disponibles pour contrôler le gadget:

- ChangeListIconGadgetDisplay(): Change le mode d'affichage comme pour un ListIconGadget().
- AddGadgetColumn(): Ajoute une colonne (prédéfinie ou additionnelle). Voir AddGadgetColumn() pour plus d'information.
- RemoveGadgetColumn(): Supprime une colonne (ainsi que ses données).
- GetGadgetText(): Renvoie le répertoire affiché.
- SetGadgetText(): Change le répertoire affiché, ou les 'patterns' actuellement utilisés.
- GetGadgetState(): Renvoie l'index du premier élément selectionné (-1: aucune selection).
- GetGadgetItemText(): Renvoie le texte de l'élément, ou du titre de la colonne si 'Position' = -1.
- SetGadgetItemText(): Modifie le texte de l'élément, ou du titre de la colonne si 'Position' = -1.
- GetGadgetItemState(): Vérifie si un élément est un répertoire ou un fichier et si il est sélectionné.
- CountGadgetItems(): Compte le nombre d'éléments dans le répertoire.
- GetGadgetItemAttribute() avec l'attribut suivant:
  #PB_Explorer_ColumnWidth: Renvoie la largeur de la 'Colonne' spécifiée. Le paramètre 'Element' est ignoré.
- SetGadgetItemAttribute() avec l'attribut suivant:
  #PB_Explorer_ColumnWidth: Change la largeur de la 'Colonne' spécifiée. Le paramètre 'Element' est ignoré.

Ce gadget supporte les commandes SetGadgetColor() et GetGadgetColor() avec les valeurs suivantes comme 'TypeCouleur':
  #PB_Gadget_FrontColor: Couleur du texte
  #PB_Gadget_BackColor : Couleur du fond
  #PB_Gadget_LineColor : Couleur de la grille si l'option #PB_Explorer_GridLines est utilisée.

Les évènements suivants sont disponibles par l'intermédiaire d' EventType():
  #PB_EventType_Change          : La sélection de l'élément courant vient de changer.
  #PB_EventType_LeftClick       : L'utilisateur a cliqué sur un élément avec le bouton gauche de la souris.
  #PB_EventType_RightClick      : L'utilisateur a cliqué sur un élément avec le bouton droit de la souris.
  #PB_EventType_LeftDoubleClick : L'utilisateur a double-cliqué sur un élément avec le bouton gauche de la souris.
  #PB_EventType_RightDoubleClick: L'utilisateur a double-cliqué sur un élément avec le bouton droit de la souris.

Exemple:

  If OpenWindow(0, 0, 0, 400, 200, "ExplorerListGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    ExplorerListGadget(0, 10, 10, 380, 180, "*.*", #PB_Explorer_MultiSelect)
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux, MacOS X


ExplorerTreeGadget()

Syntaxe

Resultat = ExplorerTreeGadget(#Gadget, x, y, Width, Height, Directory$, [, Flags])
Description
Créé un nouveau #Gadget de type TreeGadget() qui gère automatiquement l'affichage d'un répertoire et la navigation sur le disque (à la manière de l'Explorateur Windows). Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. Il permet à l'utilisateur de choisir un fichier ou un dossier situé à n'importe quel endroit sur le disque (ou les disques).

'Repertoire$' est l'emplacement de départ lorsque le gadget sera créé. Il peut être composé de 'patterns', tels que: "C:\*.pb;*.pbi". Si aucun 'pattern' n'est spécifié, le répertoire doit se terminer par un '\'. Si aucun 'Repertoire$' est nul (chaîne vide), alors la liste des disques disponible sera affichée.

Le paramètre facultatif 'Options' peut être une combinaison des valeurs suivantes:
  #PB_Explorer_BorderLess         : Crée un #Gadget sans bordure.
  #PB_Explorer_AlwaysShowSelection: Affiche la sélection même quand le gadget n'est plus actif.
  #PB_Explorer_NoLines            : Cache les lignes de liaisons entre les noeuds '+'.
  #PB_Explorer_NoButtons          : Cache les noeuds '+'.

  #PB_Explorer_NoFiles         : Aucun fichier ne sera affiché.
  #PB_Explorer_NoDriveRequester: Aucun message du type 'Insérer un disque dans le lecteur A:' ne sera affiché.
  #PB_Explorer_NoMyDocuments   : Le répertoire spécial 'Mes documents' ne sera pas affiché séparément.
  #PB_Explorer_AutoSort        : Le contenu sera automatiquement trié par nom.
Les commandes suivantes sont disponibles pour contrôler le gadget:

- GetGadgetText(): Renvoie le chemin complet du répertoire ou fichier sélectionné.
- SetGadgetText(): Change l'élément actuellement sélectionné.
- GetGadgetState(): Permet de savoir si l'élément sélectionné est un répertoire ou un fichier.

Ce gadget supporte les commandes SetGadgetColor() et GetGadgetColor() avec les valeurs suivantes comme 'TypeCouleur':
  #PB_Gadget_FrontColor: Couleur du texte
  #PB_Gadget_BackColor : Couleur du fond
  #PB_Gadget_LineColor : Couleur de la grille et des marqueurs si l'option #PB_Explorer_GridLines est utilisée.
ExplorerTreeGadget() génère les évènements suivants, renvoyés par EventType():
  #PB_EventType_Change          : La sélection de l'élément courant vient de changer.
  #PB_EventType_LeftClick       : L'utilisateur a cliqué sur un élément avec le bouton gauche de la souris.
  #PB_EventType_RightClick      : L'utilisateur a cliqué sur un élément avec le bouton droit de la souris.
  #PB_EventType_LeftDoubleClick : L'utilisateur a double-cliqué sur un élément avec le bouton gauche de la souris.
  #PB_EventType_RightDoubleClick: L'utilisateur a double-cliqué sur un élément avec le bouton droit de la souris.

Exemple:

  If OpenWindow(0, 0, 0, 300, 300, "ExplorerTreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    ExplorerTreeGadget(0, 10, 10, 280, 280, "*.pb;*.pbi")
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux, MacOS X


Frame3DGadget()

Syntaxe

Resultat = Frame3DGadget(#Gadget, x, y, Largeur, Hauteur, Texte$ [, Options])
Description
Crée dans la GadgetList un cadre en relief qui permet de regrouper un ensemble de gadgets. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. Ce gadget ne peut être activé, il ne sert qu'à rendre plus compréhensible la présentation d'une fenêtre. x et y représentent la position du bord supérieur gauche du cadre dans la fenêtre, Largeur et Hauteur, ses dimensions. 'Texte$' est un titre qui s'affiche près du bord supérieur gauche du cadre (ce texte est ignoré si le gadget a l'option #PB_Frame3D_Single, #PB_Frame3D_Double ou #PB_Frame3D_Flat).

Le paramètre 'Options' est facultatif et peut prendre la valeur d'une des constantes suivantes:
  #PB_Frame3D_Single: Cadre enfoncé
  #PB_Frame3D_Double: Cadre doublement enfoncé
  #PB_Frame3D_Flat  : Cadre simple
Note: Comme ce gadget est seulement décoratif, GadgetToolTip() ne peut pas être utilisé (ce gadget ne reçoit aucun évènement).

Exemple:

  If OpenWindow(0, 0, 0, 320, 250, "Frame3DGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    CreateGadgetList(WindowID(0))
      Frame3DGadget(0, 10,  10, 300, 50, "Cadre en relief standard")
      Frame3DGadget(1, 10,  70, 300, 50, "", #PB_Frame3D_Single)
      Frame3DGadget(2, 10, 130, 300, 50, "", #PB_Frame3D_Double)
      Frame3DGadget(3, 10, 190, 300, 50, "", #PB_Frame3D_Flat)

    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


FreeGadget()

Syntaxe

FreeGadget(#Gadget)
Description
Enlève le #Gadget de la fenêtre à laquelle il était attaché et le détruit.

OS Supportés

Tous


GadgetHeight()

Syntaxe

Resultat = GadgetHeight(#Gadget)
Description
Renvoie la hauteur (en pixels) du #Gadget.

OS Supportés

Tous


GadgetID()

Syntaxe

GadgetID = GadgetID(#Gadget)
Description
Renvoie l'identifiant propre à l'OS du #Gadget. Utile pour utiliser les commandes de l'OS (API) directement avec le #Gadget.

OS Supportés

Tous


GadgetItemID()

Syntaxe

Resultat = GadgetItemID(#Gadget, Item)
Description
Renvoie l'identifiant propre à l'OS pour l'élément du #Gadget specifié. C'est utile pour pouvoir utiliser l'API avec les éléments des gadgets PureBasic.

Cette fonction est pour l'instant seulement supportée par le TreeGadget().

OS Supportés

Windows


GadgetToolTip()

Syntaxe

GadgetToolTip(#Gadget, Text$)
Description
Associe ou remplace un texte flottant au gadget spécifié. Un 'Tooltip' est un texte flottant qui apparaît au bout d'un certain temps lorsque le curseur de la souris est immobile au dessus d'un gadget.

Les gadgets suivants sont supportés:

- ButtonGadget()
- ButtonImageGadget()
- CalendarGadget()
- CheckBoxGadget()
- ComboBoxGadget()
- ContainerGadget()
- DateGadget()
- EditorGadget()
- ExplorerListGadget()
- ExplorerTreeGadget()
- HyperLinkGadget()
- ImageGadget()
- IPAddressGadget()
- ListIconGadget()
- ListViewGadget()
- MDIGadget()
- OptionGadget()
- PanelGadget()
- ProgressBarGadget()
- ScrollBarGadget()
- SpinGadget()
- SplitterGadget()
- StringGadget()
- TrackBarGadget()
- TreeGadget()

Exemple:

  If OpenWindow(0, 0, 0, 270, 100, "GadgetToolTip", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    ButtonGadget(0, 10, 30, 250, 30, "Bouton avec texte flottant")
    GadgetToolTip(0, "Texte flottant pour bouton")
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


GadgetType()

Syntaxe

Resultat = GadgetType(#Gadget)
Description
Renvoie le type du #Gadget spécifié. Cette commande peut être utile pour écrire des fonctions génériques qui fonctionnent avec plusieurs types de gadgets.

'Resultat' peut prendre une des valeurs suivantes:
  #PB_GadgetType_Button        : ButtonGadget()
  #PB_GadgetType_ButtonImage   : ButtonImageGadget()
  #PB_GadgetType_Calendar      : CalendarGadget()
  #PB_GadgetType_CheckBox      : CheckBoxGadget()
  #PB_GadgetType_ComboBox      : ComboBoxGadget()
  #PB_GadgetType_Container     : ContainerGadget()
  #PB_GadgetType_Date          : DateGadget()
  #PB_GadgetType_Editor        : EditorGadget()
  #PB_GadgetType_ExplorerCombo : ExplorerComboGadget()
  #PB_GadgetType_ExplorerList  : ExplorerListGadget()
  #PB_GadgetType_ExplorerTree  : ExplorerTreeGadget()
  #PB_GadgetType_Frame3D       : Frame3DGadget()
  #PB_GadgetType_HyperLink     : HyperLinkGadget()
  #PB_GadgetType_Image         : ImageGadget()
  #PB_GadgetType_IPAddress     : IPAddressGadget()
  #PB_GadgetType_ListIcon      : ListIconGadget()
  #PB_GadgetType_ListView      : ListViewGadget()
  #PB_GadgetType_MDI           : MDIGadget()
  #PB_GadgetType_Option        : OptionGadget()
  #PB_GadgetType_Panel         : PanelGadget()
  #PB_GadgetType_ProgressBar   : ProgressBarGadget()
  #PB_GadgetType_ScrollArea    : ScrollAreaGadget()
  #PB_GadgetType_ScrollBar     : ScrollBarGadget()
  #PB_GadgetType_Spin          : SpinGadget()
  #PB_GadgetType_Splitter      : SplitterGadget()
  #PB_GadgetType_String        : StringGadget()
  #PB_GadgetType_Text          : TextGadget()
  #PB_GadgetType_TrackBar      : TrackBarGadget()
  #PB_GadgetType_Tree          : TreeGadget()
  #PB_GadgetType_Web           : WebGadget()
  #PB_GadgetType_Unknown       : Type inconnu, problablement pas un gadget PureBasic.

OS Supportés

Tous


GadgetWidth()

Syntaxe

Resultat = GadgetWidth(#Gadget)
Description
Renvoie la largeur (en pixels) du #Gadget.

OS Supportés

Tous


GadgetX()

Syntaxe

Resultat = GadgetX(#Gadget)
Description
Renvoie la position en X (en pixels) du #Gadget.

OS Supportés

Tous


GadgetY()

Syntaxe

Resultat = GadgetY(#Gadget)
Description
Renvoie la position en Y (en pixels) du #Gadget.

OS Supportés

Tous


GetActiveGadget()

Syntaxe

Resultat = GetActiveGadget()
Description
Renvoie le numéro du #Gadget qui a actuellement le 'focus' clavier. Si aucun gadget a le focus, -1 est renvoyé.

Exemple:

  If OpenWindow(0, 0, 0, 270, 70, "GetActiveGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    StringGadget  (0, 10, 10, 250, 20, "Appuyez sur la touche [Echap]...")
    StringGadget  (1, 10, 40, 250, 20, "Appuyez sur la touche [Echap]...")
    AddKeyboardShortcut(0, #PB_Shortcut_Escape, 1)
    SetActiveGadget(0)
    Repeat
      Evenement = WaitWindowEvent()
      If Evenement = #PB_Event_Menu And EventMenu() = 1
        MessageRequester("Test", "La touche [Echap] a été appuyée dans le gadget " + Str(GetActiveGadget()))
      EndIf
    Until Evenement = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


GetGadgetAttribute()

Syntaxe

Valeur = GetGadgetAttribute(#Gadget, Attribut)
Description
Renvoie la valeur de l'attribut du #Gadget spécifié. Cette fonction est disponible avec
les gadgets suivants:

- CalendarGadget()
- DateGadget()
- EditorGadget()
- PanelGadget()
- ProgressBarGadget()
- ScrollAreaGadget()
- ScrollBarGadget()
- SpinGadget()
- SplitterGadget()
- TrackBarGadget()

OS Supportés

Windows, Linux, MacOS X


GetGadgetColor()

Syntaxe

Couleur = GetGadgetColor(#Gadget, TypeCouleur)
Description
Renvoie la couleur du #Gadget de 'TypeCouleur' indiqué. Cette commande renvoie la couleur qui a été préalablement définie par SetGadgetColor(). Si aucune couleur spécifique est disponible pour ce 'TypeCouleur', la valeur -1 est renvoyée.

Le paramètre 'TypeCouleur' peut prendre l'une des valeurs suivantes (tous les gadgets ne supportent pas toutes ces valeurs):
  #PB_Gadget_FrontColor     : Texte du gadget
  #PB_Gadget_BackColor      : Fond du gadget
  #PB_Gadget_LineColor      : Couleur de la grille
  #PB_Gadget_TitleFrontColor: Couleur du texte dans le titre (for CalendarGadget())
  #PB_Gadget_TitleBackColor : Couleur du fond dans le titre (for CalendarGadget())
  #PB_Gadget_GrayTextColor  : Couleur du texte inactif (for CalendarGadget())
Cette commande est supportée par les gadgets suivants (voir chaque description pour plus d'information):

- CalendarGadget()
- ContainerGadget()
- DateGadget()
- EditorGadget()
- ExplorerListGadget()
- ExplorerTreeGadget()
- HyperLinkGadget()
- ListViewGadget()
- ListIconGadget()
- MDIGadget()
- ProgressBarGadget()
- ScrollAreaGadget()
- SpinGadget()
- StringGadget()
- TextGadget()
- TreeGadget()

OS Supportés

Windows, Linux


GetGadgetData()

Syntaxe

Resultat = GetGadgetData(#Gadget)
Description
Renvoie la valeur qui a été stockée dans ce #Gadget avec la commande SetGadgetData(). Cela permet d'associer une valeur personnalisée pour chaque gadget. Si aucune valeur n'est associée à ce #Gadget, 'Resultat' sera égal à 0.

Cette commande fonctionne avec tous les types de gadget du PureBasic. Pour un exemple d'utilisation, consulter la définition de la commande SetGadgetData().

OS Supportés

Tous


GetGadgetFont()

Syntaxe

FontID = GetGadgetFont(#Gadget)
Description
Renvoie le 'FontID' de la police associée au #Gadget. Si la constante #PB_Default est utilisée à la place du numéro de gadget, le 'FontID' de la police utilisée lors de la création de nouveaux gadgets est renvoyé. Le 'FontID' peut être utilisé avec les fonctions du type DrawingFont(). SetGadgetFont() permet de changer la police des gadgets par défaut, ou d'affecter une police à un gadget spécifique.

OS Supportés

Tous


GetGadgetItemAttribute()

Syntaxe

Valeur = GetGadgetItemAttribute(#Gadget, Element, Attribut [, Colonne])
Description
Renvoie la valeur de l'attribut de l'élément du #Gadget spécifié. Cette fonction est disponible avec les gadgets suivants:

- ExplorerListGadget():
  #PB_Explorer_ColumnWidth: Renvoie la largeur de la 'Colonne' spécifiée. Le paramètre 'Element' est ignoré.
- ListIconGadget():
  #PB_ListIcon_ColumnWidth: Renvoie la largeur de la 'Colonne' spécifiée. Le paramètre 'Element' est ignoré.
- TreeGadget():
  #PB_Tree_SubLevel: Renvoie le niveau de l'élément indiqué
Le niveau des éléments du TreeGadget() peut être utilisé pour déterminer la relation entre deux éléments de l'arbre. Par exemple, le premier élément avec un niveau inférieur à l'élément courant (si la liste est examinée en remontant) est l'élément 'parent'.

OS Supportés

Tous


GetGadgetItemColor()

Syntaxe

Couleur = GetGadgetItemColor(#Gadget, Element, TypeCouleur [, Colonne])
Description
Renvoie la couleur de l'élément du #Gadget indiqué. Cette commande renvoie la couleur qui a été préalablement définie par SetGadgetItemColor(). Si aucune couleur spécifique est disponible pour ce 'TypeCouleur', la valeur -1 est renvoyée.

Le paramètre 'TypeCouleur' peut prendre l'une des valeurs suivantes:
  #PB_Gadget_FrontColor: Texte de l'élément.
  #PB_Gadget_BackColor : Fond de l'élément.
Cette commande est supportée par les gadgets suivants:

- ListIconGadget()
- TreeGadget()

OS Supportés

Windows, Linux


GetGadgetItemData()

Syntaxe

Result = GetGadgetItemData(#Gadget, Element)
Description
Renvoie la valeur qui a été stockée dans cet 'Element' du #Gadget avec la commande SetGadgetItemData(). Cela permet d'associer une valeur personnalisée pour chaque élément d'un gadget. Si aucune valeur n'est associée à cet élément, 'Resultat' sera égal à 0.

Cette commande est supportée par les gadgets suivants:
- ComboBoxGadget()
- ListIconGadget()
- ListViewGadget()
- TreeGadget()

Pour un exemple d'utilisation, consulter la définition de la commande SetGadgetItemData().

OS Supportés

Tous


GetGadgetItemState()

Syntaxe

Resultat = GetGadgetItemState(#Gadget, Element)
Description
Renvoie l'état de l'élément du gadget spécifié. Cette fonction est disponible avec les gadgets suivants:

- ExplorerListGadget(): Renvoie une combinaison des valeurs suivantes:
  #PB_Explorer_File     : L'élément est un fichier.
  #PB_Explorer_Directory: L'élément est un répertoire (ou un disque).
  #PB_Explorer_Selected : L'élément est sélectionné.

- CalendarGadget(): Renvoie #PB_Calendar_Bold quand la date spécifiée est affichée en gras, sinon #PB_Calendar_Normal est renvoyé. 'Element' doit être une date au format PureBasic.
- ListViewGadget(): Renvoie 1 si l'élément est sélectionné, 0 sinon.
- ListIconGadget(): Renvoie une combinaison des valeurs suivantes:
  #PB_ListIcon_Selected: L'élément est selectionné
  #PB_ListIcon_Checked : L'élément a sa checkbox associée cochée (crée avec l'option #PB_ListIcon_CheckBoxes)
- TreeGadget(): Renvoie une combinaison des valeurs suivantes:
  #PB_Tree_Selected : L'élément est sélectionné.
  #PB_Tree_Expanded : L'élément est déployé (la branche de l'arbre est ouverte).
  #PB_Tree_Collapsed: L'élément est fermé.
  #PB_Tree_Checked  : La 'case à cocher' de l'élément est cochée. (Si l'option #PB_Tree_CheckBoxes est utilisée)
Pour vérifier si un état est actif, utilisez l'opérateur '&':
  If Result & #PB_Tree_Checked
    ; La 'case à cocher' de l'élément est cochée
  EndIf

OS Supportés

Tous


GetGadgetItemText()

Syntaxe

Result$ = GetGadgetItemText(#Gadget, Element, Colonne)
Description
Renvoie le texte de l'élément du gadget spécifié. Cette fonction est disponible avec les gadgets suivants:

- ComboBoxGadget() - renvoie le texte de l'élément de la liste déroulante ('Colonne' est ignorée).
- EditorGadget() - renvoie le texte de l'élément (la ligne) de l'editor ('Colonne' est ignorée).
- ExplorerListGadget() - renvoie le nom du l'élément, sans son chemin complet. Si 'Element' = -1, alors le titre de la colonne est renvoyé.
- ListIconGadget() - renvoie le texte de l'élément de la liste. 'Colonne' est l'index de la colonne (commence à partir de 0). Si 'Element' = -1, alors le titre de la colonne est renvoyé.
- ListViewGadget() - renvoie le texte de l'élément de la liste ('Colonne' est ignorée).
- MDIGadget() - renvoie le titre de la fenêtre fille (élement) spécifiée ('Colonne' est ignorée).
- PanelGadget() - renvoie le texte de l'élément spécifié ('Colonne' est ignorée).
- TreeGadget() - renvoie le texte de l'élément d'arbre ('Colonne' est ignorée).

Note: La numérotation des éléments commence à partir de 0.

OS Supportés

Tous


GetGadgetState()

Syntaxe

Resultat = GetGadgetState(#Gadget)
Description
Renvoie dans Resultat l'état actuel du gadget référencé par #Gadget. Cette fonction est universelle et fonctionne avec pratiquement tous les gadgets.

- ButtonImageGadget(): renvoie l'ImageID de l'image actuellement affichée.
- CalendarGadget(): renvoie la date actuellement sélectionnée.
- CheckBoxGadget(): renvoie 1 s'il est activé, 0 sinon.
- ComboBoxGadget(): renvoie le numéro de l'élément sélectionné ou -1 si pas de sélection.
- DateGadget(): renvoie la date ou l'heure actuellement sélectionnée. Si #PB_Date_Checkbox est utilisé et que la boîte à cocher est décochée, 0 sera renvoyé.
- ExplorerListGadget(): renvoie le numéro de l'élément sélectionné ou -1 si pas de sélection.
- ExplorerTreeGadget(): renvoie le type de l'élément sélectionné (#PB_Explorer_File ou #PB_Explorer_Directory).
- ImageGadget(): renvoie l'ImageID de l'image actuellement affichée.
- ListIconGadget(): renvoie le numéro de l'élément sélectionné ou -1 si il n'y a pas d'élément sélectionné.
- ListViewGadget(): renvoie le numéro de l'élément sélectionné ou -1 si il n'y a pas d'élément sélectionné.
- MDIGadget(): renvoie le numéro de la fenêtre fille active, ou -1 si aucune n'est active.
- OptionGadget(): renvoie 1 s'il est activé, 0 sinon.
- PanelGadget(): renvoie le numéro d'onglet sélectionné ou -1 si pas de sélection.
- ProgressBarGadget(): renvoie la valeur actuelle de la barre de progression.
- ScrollBarGadget(): renvoie la position actuelle de l'ascenseur.
- SpinGadget(): renvoie la valeur actuelle du SpinGadget.
- SplitterGadget(): renvoie la position actuelle de la barre de séparation, en pixels.
- TrackBarGadget(): renvoie la position actuelle de la TrackBar (valeur comprise entre la valeur minimale et maximale).
- TreeGadget(): renvoie le numéro de l'élément sélectionné ou -1 si pas de sélection.

OS Supportés

Tous


GetGadgetText()

Syntaxe

Texte$ = GetGadgetText(#Gadget)
Description
Renvoie dans Texte$ le texte contenu dans le gadget référencé par #Gadget. Cette commande est supportée par tous les gadgets. Elle est particulièrement utile pour :

- ComboBoxGadget() - renvoie le texte de l'élément sélectionné.
- EditorGadget() - Renvoie le texte contenu dans l'éditeur. Les différentes lignes seront séparées par la combinaison "Chr(13)+Chr(10)".
- ExplorerComboGadget() - renvoie le répertoire affiché et sélectionné.
- ExplorerListGadget() - renvoie le répertoire actuellement affiché.
- ExplorerTreeGadget() - renvoie le chemin complet du fichier ou répertoire sélectionné.
- ListIconGadget() - renvoie le texte de la première colonne de l'élément sélectionné.
- ListViewGadget() - renvoie le texte de l'élément sélectionné.
- StringGadget() - renvoie le contenu du StringGadget.
- TextGadget() - renvoie le contenu du TextGadget.
- TreeGadget() - renvoie le texte de l'élément sélectionné.
- WebGadget() - renvoie l'URL du website affiché.

OS Supportés

Tous


HideGadget()

Syntaxe

HideGadget(#Gadget, Etat)
Description
Cache ou affiche un #Gadget. Si 'Etat' = 1, le gadget sera caché, si 'Etat' = 0 le gadget sera affiché.

Exemple:

  If OpenWindow(0,0,0,180,120,"HideGadget",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    ButtonGadget(0,10,10,160,50,"Bouton 1")       : bouton = #True   ; le bouton est affiché
    ButtonGadget(1,10,80,160,30,"Cacher le bouton 1")
    Repeat
      Evenement = WaitWindowEvent()
      If Evenement = #PB_Event_Gadget
        If EventGadget()=1
          If bouton = #True     ; si le bouton est affiché
            HideGadget(0,1)     ; cache le bouton
            bouton = #False
            SetGadgetText(1,"Afficher le bouton 1")
          Else                  ; si le bouton est caché
            HideGadget(0,0)     ; affiche le bouton
            bouton = #True
            SetGadgetText(1,"Cacher le bouton 1")
          EndIf
        EndIf
      EndIf
    Until Evenement = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


HyperLinkGadget()

Syntaxe

Resultat = HyperLinkGadget(#Gadget, x, y, Largeur, Hauteur, Texte$, Couleur [, Options])
Description
Crée un lien cliquable, similaire à ceux que l'on trouve sur les pages web dans la GadgetList courante. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. La couleur ainsi que le cursor change automatiquement. Pour avoir un lien souligné, il suffit d'utiliser une police soulignée avec SetGadgetFont() une fois que le gadget a été créé.

Le texte peut être manipulé à l'aide des commandes SetGadgetText() et GetGadgetText().

Le paramètre facultatif 'Options' peut prendre l'une des valeurs suivantes:
  #PB_Hyperlink_Underline: Affiche une ligne en dessous du texte sans avoir à utiliser une police soulignée.
Ce gadget supporte les commandes SetGadgetColor() et GetGadgetColor() avec la constante #PB_Gadget_FrontColor pour changer la couleur du texte. La couleur de fond est toujours la couleur de la fenêtre.

Exemple:

  If OpenWindow(0,0,0,270,160,"HyperLinkGadget",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    HyperLinkGadget(0, 10, 10,250,20,"Lien rouge", RGB(255,0,0))
    HyperLinkGadget(1, 10, 30,250,20,"Lien vert souligné", RGB(0,255,0))
    SetGadgetFont(1, LoadFont(0, "Arial", 12, #PB_Font_Underline))
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


IPAddressGadget()

Syntaxe

Resultat = IPAddressGadget(#Gadget, x, y, Largeur, Hauteur)
Description
Crée un gadget de saisie d'adresses IP dans la GadgetList courante. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. #Gadget sera le numéro retourné par la fonction EventGadget(). x et y représentent la position de la ligne de titre de la liste, Largeur et Hauteur, ses dimensions. Les commandes suivantes peuvent être utilisées pour contrôler le gadget:

- GetGadgetState(): Renvoie l'adresse IP courante (IPAddressField() est utile pour récupérer la valeur d'un champ).
- SetGadgetState(): Change l'adresse IP courante (MakeIPAddress() pour construire une IP valide).
- GetGadgetText(): Renvoie l'adresse IP en format texte: par exemple "127.0.0.1".
- SetGadgetText(): Efface complètement le gadget quand une chaîne vide est spécifiée. C'est la seule action valide pour l'instant.

Exemple:

  If OpenWindow(0, 0, 0, 210, 50, "IPAddressGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    IPAddressGadget(0, 10, 15, 160, 20)
    SetGadgetState(0, MakeIPAddress(127, 0, 0, 1))   ; affiche une adresse IP valide
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux, MacOS X


ImageGadget()

Syntaxe

Resultat = ImageGadget(#Gadget, x, y, Largeur, Hauteur, ImageID [, Options])
Description
Crée un gadget Image dans la GadgetList en cours. Un gadget Image permet de positionner une image dans une fenêtre. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'.
ImageID représente l'identifiant d'une image et peut être obtenu en utilisant la fonction ImageID() de la bibliothèque Image. Si ImageID est 0, alors aucune image ne sera affichée. La hauteur et la largeur du gadget s'ajustent automatiquement à la taille de l'image (les paramètres Largeur et Hauteur sont donc actuellement sans effet).

Vous pouvez ajouter une 'mini aide' à ce gadget en utilisant GadgetToolTip().

- SetGadgetState(): Permet de changer dynamiquement l'image contenue dans le gadget. Un ImageID valide peut être obtenu via ImageID(). Si 'ImageID' est 0, alors l'image est retirée du gadget.

Les évènements suivants sont supportés par EventType():
  #PB_EventType_LeftClick
  #PB_EventType_RightClick
  #PB_EventType_LeftDoubleClick
  #PB_EventType_RightDoubleClick

Le paramètre facultatif 'Options' peut être une combinaison des constantes suivantes:
  #PB_Image_Border : Affiche un cadre autour de l'image.

Exemple:

  If OpenWindow(0, 0, 0, 245, 105, "ImageGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    If LoadImage(0, "map.bmp")    ; changez le 2ème paramètre en indiquant le chemin/fichier contenant votre image
      ImageGadget(0,  10, 10, 100, 83, ImageID(0))                      ; imagegadget standard
      ImageGadget(1, 130, 10, 100, 83, ImageID(0), #PB_Image_Border)     ; imagegadget avec cadre
    EndIf
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


IsGadget()

Syntaxe

Resultat = IsGadget(#Gadget)
Description
Teste si le #Gadget est correctement initialisé. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, Linux, MacOS X


ListIconGadget()

Syntaxe

Resultat = ListIconGadget(#Gadget, x, y, Largeur, Hauteur, Titre$, LargeurTitre [, Options])
Description
Crée un gadget de listes avec icônes dans la GadgetList en cours. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. #Gadget est le numéro du gadget renvoyé par la fonction EventGadget(). Titre$ est le titre de la première colonne, et LargeurTitre est sa largeur initiale.
Lorsqu'une ListIcon est créée, sa liste d'éléments est vide.

Vous pouvez ajouter une 'mini aide' à ce gadget en utilisant GadgetToolTip().

Les fonctions suivantes peuvent être utilisées pour agir sur le contenu de cette liste :

- AddGadgetColumn(): Ajoute une colonne au gadget.
- AddGadgetItem(): Ajoute un élément et éventuellement une image.
- RemoveGadgetItem(): Supprime un élément.
- ClearGadgetItemList(): Supprime tous les éléments.
- CountGadgetItems(): Renvoie le nombre d'éléments actuellement contenus dans le gadget.
- GetGadgetItemColor(): Renvoie la couleur du texte ou du fond de l'élément.
- SetGadgetItemColor(): Change la couleur du texte ou du fond de l'élément.
- GetGadgetItemData(): Renvoie la valeur personnalisée associée à cet élément.
- SetGadgetItemData(): Associe une valeur personnalisée à cet élément.
- GetGadgetItemState(): Renvoie l'état de l'élément spécifié. Ce peut être une combinaison de #PB_ListIcon_Selected et #PB_ListIcon_Checked si les 'checkboxes' sont affichées
- SetGadgetItemState(): Change l'état de l'élément spécifié. Ce peut être une combinaison de #PB_ListIcon_Selected et #PB_ListIcon_Checked si les 'checkboxes' sont affichées
- GetGadgetItemText(): Renvoie le texte de l'élément spécifié. Si 'Element' = -1, alors le titre de la colonne est renvoyé.
- SetGadgetItemText(): Change le texte de l'élément spécifié. Si 'Element' = -1, alors le titre de la colonne est modifié.
- GetGadgetState(): Renvoie le premier élément selectionné ou -1 s'il n'y a pas d'élément sélectionné.
- SetGadgetState(): Change l'élément séléctionné (tous les autres éléments sont alors désélectionnés). Si -1 est utilisé, tous les éléments seront désélectionnés.
- GetGadgetItemAttribute() avec l'attribut suivant:
  #PB_ListIcon_ColumnWidth: Renvoie la largeur de la 'Colonne' spécifiée. Le paramètre 'Element' est ignoré.
- SetGadgetItemAttribute() avec l'attribut suivant:
  #PB_ListIcon_ColumnWidth: Change la largeur de la 'Colonne' spécifiée. Le paramètre 'Element' est ignoré.

Si vous voulez ajouter du contenu à un gadget ListIcon contenant plusieurs colonnes en utilisant AddGadgetItem(), utilisez le format "première colonne"+chr(10)+"la deuxième" comme paramètre Texte$.

Pour changer la présentation de la liste, Utiliser ChangeListIconGadgetDisplay(). Quatres types de présentation sont autorisés : Petites icônes, Grandes icônes, Liste et Détails (en colonnes).

Le paramètre facultatif 'Options' peut être une combinaison des constantes suivantes:
  #PB_ListIcon_CheckBoxes         : Affiche une case à cocher dans la première colonne.
  #PB_ListIcon_MultiSelect        : Active le mode 'sélection multiple'.
  #PB_ListIcon_GridLines          : Affiche des lignes de séparation.
  #PB_ListIcon_FullRowSelect      : La sélection s'étend à toute la ligne au lieu de la première colonne.
  #PB_ListIcon_HeaderDragDrop     : L'ordre des colonnes peut être changé avec un glisser/déposer (drag'n'drop).
  #PB_ListIcon_AlwaysShowSelection: Affiche la selection même quand le gadget n'est plus actif.
Ce gadget supporte les commandes SetGadgetColor() et GetGadgetColor() avec les valeurs suivantes comme 'TypeCouleur':
  #PB_Gadget_FrontColor: Couleur du texte
  #PB_Gadget_BackColor : Couleur du fond
  #PB_Gadget_LineColor : Couleur de la grille si l'option #PB_ListIcon_GridLines est utilisée.
Les évènements suivants sont supportés par EventType():
  #PB_EventType_LeftClick        : Clic avec le bouton gauche de la souris, ou une case à cocher a été utilisée.
  #PB_EventType_LeftDoubleClick  : Double-clic avec le bouton gauche de la souris
  #PB_EventType_RightClick       : Clic avec le bouton droit de la souris
  #PB_EventType_RightDoubleClick : Double-clic avec le bouton droit de la souris
  #PB_EventType_Change           : l'élément sélectionné a été changé

Exemple:

 If OpenWindow(0, 100, 100, 300, 100, "ListIconGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   If CreateGadgetList(WindowID(0))
     ListIconGadget(0, 5, 5, 290, 90, "Nom", 100, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
     AddGadgetColumn(0, 1, "Adresse", 250)
     AddGadgetItem(0, -1, "Harry Rannit"+Chr(10)+"12 Parliament Way, Battle Street, By the Bay")
     AddGadgetItem(0, -1, "Ginger Brokeit"+Chr(10)+"130 PureBasic Road, BigTown, CodeCity")

     Repeat
       Evenement = WaitWindowEvent()
     Until Evenement = #PB_Event_CloseWindow
   EndIf
 EndIf

Exemple:

  ; Démonstration des options possibles pour le gadget liste avec icônes...
  If OpenWindow(0, 0, 0, 690, 300, "ListIconGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    ; colonne de gauche
    TextGadget    (6,  10,  10, 300, 20, "Liste avec icônes standard", #PB_Text_Center)
    ListIconGadget(0,  10,  25, 300, 70, "Colonne 1", 100)
    TextGadget    (7,  10, 105, 300, 20, "Liste avec icônes + cases à cocher", #PB_Text_Center)
    ListIconGadget(1,  10, 120, 300, 75, "Colonne 1", 100, #PB_ListIcon_CheckBoxes)  ; Liste avec icônes et cases à cocher
    TextGadget    (8,  10, 205, 300, 20, "Liste avec icônes + sélection multiple", #PB_Text_Center)
    ListIconGadget(2,  10, 220, 300, 70, "Colonne 1", 100, #PB_ListIcon_MultiSelect) ; Liste avec icônes et sélection multiple
    ; colonne de droite
    TextGadget    (9, 330,  10, 350, 20, "Liste avec icônes + lignes de séparation",#PB_Text_Center)
    ListIconGadget(3, 330,  25, 350, 70, "Colonne 1", 100, #PB_ListIcon_GridLines)
    TextGadget   (10, 330, 105, 350, 20, "Liste avec icônes + sélection de ligne entière + sélection toujours affichée",#PB_Text_Center)
    ListIconGadget(4, 330, 120, 350, 75, "Colonne 1", 100, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
    TextGadget   (11, 330, 205, 350, 20, "Liste avec icônes standard + mode grandes icônes",#PB_Text_Center)
    ListIconGadget(5, 330, 225, 350, 65, "", 200,#PB_ListIcon_GridLines)
    For a = 0 To 4            ; pour chacune des 5 premières listes avec icônes
      For b = 2 To 4          ; ajouter 3 colonnes supplémentaires
        AddGadgetColumn(a, b, "Colonne " + Str(b), 65)
      Next
      For b = 0 To 2          ; ajouter 4 éléments à chaque ligne des listes avec icônes
        AddGadgetItem(a, b, "Elément 1"+Chr(10)+"Elément 2"+Chr(10)+"Elément 3"+Chr(10)+"Elément 4")
      Next
    Next
    ; Ici nous changeons l'affichage de la liste avec icônes en mode grandes icônes et nous affichons une image
    If LoadImage(0, "map2.bmp")     ; changez le chemin/fichier contenant votre image 32x32 pixel
      ChangeListIconGadgetDisplay(5, 0)
      AddGadgetItem(5, 1, "Image 1", ImageID(0))
      AddGadgetItem(5, 2, "Image 2", ImageID(0))
    EndIf
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux, MacOS X


ListViewGadget()

Syntaxe

Resultat = ListViewGadget(#Gadget, x, y, Largeur, Hauteur)
Description
Crée une boîte de listes (ListView) dans la GadgetList en cours. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. #Gadget est le numéro du gadget renvoyé par la fonction EventGadget(). Lorsqu'une boîte de listes est créée, sa liste d'éléments est vide.

Le paramètre facultatif 'Options' peut être une combinaison des valeurs suivantes:
  #PB_ListView_Multiselect: Permet la sélection de plusieurs éléments.
  #PB_ListView_ClickSelect: Permet la sélection de plusieurs éléments. Clicker sur un élément le sélectionne ou le désélectionne.
Les fonctions suivantes peuvent être utilisées pour agir sur le contenu de cette liste:

- AddGadgetItem(): Ajoute un élément
- RemoveGadgetItem(): Supprime un élément
- ClearGadgetItemList(): Supprime tous les éléments
- GetGadgetItemData(): Renvoie la valeur personnalisée associée à cet élément.
- SetGadgetItemData(): Associe une valeur personnalisée à cet élément.
- GetGadgetItemText: Renvoie le texte de l'élément spécifié.
- SetGadgetItemText: Change le texte de l'élément spécifié.
- GetGadgetItemState(): Renvoie 0 si l'élément n'est pas séléctionné, sinon une valeur non-nulle.
- SetGadgetItemState(): Sélectionne ou désélectionne l'élément spécifié.
- GetGadgetState(): Renvoie le numéro de l'élément qui est sélectionné, -1 si il n'y a pas de sélection.
- SetGadgetState(): Change l'état de l'élément spécifié.
- GetGadgetText(): Renvoie le texte de l'élément sélectionné.
- SetGadgetText(): Sélectionne l'élément correspondant au texte indiqué. Le texte doit exactement correspondre.

Les évènements suivants sont supportés par EventType():
  #PB_EventType_LeftClick
  #PB_EventType_LeftDoubleClick

Exemple:

  If OpenWindow(0,0,0,270,140,"ListViewGadget",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    ListViewGadget(0,10,10,250,120)
    For a=1 To 12
      AddGadgetItem (0,-1,"Elément "+Str(a)+" de la boîte de liste")   ; défini le contenu de la boîte de liste
    Next
    SetGadgetState(0,9)    ; sélectionne le dixième élément (la numérotation commmence à 0)
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


MDIGadget()

Syntaxe

Resultat = MDIGadget(#Gadget, x, y, Largeur, Hauteur, SousMenu, ElementMenu [, Options])
Description
Crée un espace dans lequel peuvent s'afficher une ou plusieurs fenêtres filles. Ces fenêtres peuvent être librement déplacées et redimensionnées à l'intérieur de cet espace. Ce type de gestion de fenêtres s'appelle MDI (Multiple Document Interface). Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'.

Un MDIGadget() a toujours besoin d'une fenêtre avec menu (voir CreateMenu()). Il n'est pas possible de créer plusieurs controls MDI dans une seule fenêtre, car il n'y a qu'un seul menu disponible par fenêtre. Une fois créé, le gadget mettra automatiquement à jour le menu auquel il est rattaché, avec la liste des fenêtres filles ouvertes. Dans le paramètre 'SousMenu', il faut préciser l'index du sous-menu (créé avec MenuTitle()) qui sera le point d'attache aux éléments gérés par le gadget (l'index du premier sous-menu commence à 0). Le gadget ajoutera alors une barre de séparation à la fin de ce sous-menu et ajoutera la liste des fenêtres filles disponibles.

Le gadget a besoin d'un certain nombre d'identifiants pour ses propres éléments du menu (voir le paramètre 'MenuID' de la commande MenuItem()). Dans le paramètre 'ElementMenu', il faudra indiquer le chiffre à partir duquel le gadget pourra identifier ses propres éléments. Il utilisera autant d'identifiants qu'il y aura de fenêtres filles ouvertes. Il est donc recommandé d'utiliser un nombre plus grand que le plus grand des nombres utilisé par les menus normaux du programme, pour éviter tout risque de collisions.

Notes complémentaires:
Ce gadget ne peut être créé que dans une fenêtre principale (donc pas dans un ContainerGadget(), SplitterGadget() ou PanelGadget()).
Comme l'intérêt premier de ce gadget est de gérer de manière dynamique des fenêtres, il est recommandé d'utiliser #PB_Any (création dynamiques) pour les gadgets qui seront créé dans les fenêtres filles.

Quand la commande AddGadgetItem() est utilisée avec ce gadget, l'élément créé est en fait une nouvelle fenêtre. Ainsi, toutes les commandes de la bibliothèque 'Fenêtre' sont disponibles pour gérer cette nouvelle fenêtre (sauf StickyWindow()). Le numéro choisi pour cet élément ne doit pas entrer en conflit avec un numéro de fenêtre déjà existant sinon l'autre fenêtre sera fermée. Après avoir créé une fenêtre MDI fille, CreateGadgetList() doit être appelé avant d'ajouter des gadgets dessus. Le gadget MDI ne génère pas d'évènements. Les évènements concernant les fenêtres MDI filles seront recus comme des évènements fenêtre normaux (#PB_Event_SizeWindow, #PB_Event_CloseWindow, ...).

Le paramètre facultatif 'Options' peut être une combinaison des constantes suivantes:
  #PB_MDI_AutoSize    : Le gadget sera automatiquement retaillé en fonction de la taille de la fenêtre mère.
                        Si il n'y a pas d'autres gadgets sur la fenêtre mère, cela peut être une option très pratique.
  #PB_MDI_BorderLess  : Il n'y aura pas de bords autour du gadget.
  #PB_MDI_NoScrollBars: Quand une fenêtre est déplacée en dehors de l'espace du gadget, il n'y aura pas de barres de défilement.
Les commandes suivantes sont disponibles pour agir sur le gadget:

- CountGadgetItems(): Renvoie le nombre de fenêtres fille.
- AddGadgetItem(): Crée une nouvelle fenêtre fille.
- ClearGadgetItemList(): Ferme toutes les fenêtres filles.
- GetGadgetState(): Renvoie l'identifiant de la fenêtre fille active.
- SetGadgetState(): Change la fenêtre fille active ou ré-arrange la disposition des fenêtres filles (voir GetGadgetState()).
- SetGadgetAttribute(): Avec une des constantes suivantes:
  #PB_MDI_Image    : Applique une image de fond à la fenêtre MDI.
  #PB_MDI_TileImage: Applique une image de fond à la fenêtre MDI. L'image est répétée le nombre de fois necessaire
                        pour remplir complètement la surface de la fenêtre.
- SetGadgetAttribute(): Avec une des constantes suivantes:
  #PB_ScrollArea_InnerWidth : Modifie la largeur (en pixels) de la zone interne du gadget.
  #PB_ScrollArea_InnerHeight: Modifie la hauteur (en pixels) de la zone interne du gadget.

Ce gadget supporte les commandes SetGadgetColor() et GetGadgetColor() avec la constante PB_Gadget_BackColor comme 'TypeCouleur' pour changer la couleur de fond de la fenêtre MDI.

Exemple:

  #FenetrePrincipale = 0
  #FenetreFille = 1
  If OpenWindow(#FenetrePrincipale, 0, 0, 400, 300, "MDIGadget", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget)
    If CreateGadgetList(WindowID(#FenetrePrincipale)) And CreateMenu(#FenetrePrincipale, WindowID(#FenetrePrincipale))
      MenuTitle("Index de menu 0")
      MenuTitle("Menu des fenêtres filles")
        MenuItem(0, "Elément créé soi-même")
        MenuItem(1, "Elément créé soi-même")

      MDIGadget(0, 0, 0, 0, 0, 1, 2, #PB_MDI_AutoSize)
        AddGadgetItem(0, #FenetreFille, "Fenêtre fille")
        CreateGadgetList(WindowID(#FenetreFille))
          ; ajouter des gadgets ici...
      UseGadgetList(WindowID(#FenetrePrincipale)) ; retourne à la liste de gadgets de la fenêtre principale
    EndIf
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux, MacOS X


OpenGadgetList()

Syntaxe

OpenGadgetList(#Gadget [, Element])
Description
Change la GadgetList courant par la nouvelle spécifiée (en principe un gadget qui fait office de conteneur, comme un PanelGadget(), ScrollAreaGadget() etc..). Cela permet de rajouter des nouveaux gadgets à la volée sans avoir a recréer le gadget. Une fois que les nouvaux gadget ont été ajouté, il convient d'appeler CloseGadgetList() pour revenir à l'état précédent.

- ContainerGadget()
- PanelGadget(): Le paramètre 'Element' doit être spécifié (correspond à l'onglet)
- ScrollAreaGadget()

OS Supportés

Windows, Linux, MacOS X


OptionGadget()

Syntaxe

Resultat = OptionGadget(#Gadget, x, y, Largeur, Hauteur, Texte$)
Description
Crée un gadget de cases à options (connu aussi sous le nom de 'boutons radio') dans la GadgetList. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. Ce gadget permet de regrouper plusieurs cases à options, sachant qu'une seule d'entre elles peut être sélectionnée à la fois. Au premier appel de cette fonction, un groupe de cases à options est créé, et tous les appels suivants à la fonction OptionGadget ajouteront une nouvelle case à options au groupe. Pour terminer le groupe, il suffit d'appeler un autre type de gadget.
x et y représentent la position de la case à cocher sur la fenêtre, Largeur et Hauteur, ses dimensions Texte$ compris. Texte$ décrit l'utilité de la case à cocher, il est placé à sa droite.

Exemple:

  If OpenWindow(0, 0, 0, 170, 110, "OptionGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    OptionGadget(0, 30, 20, 60, 20, "Option 1")
    OptionGadget(1, 30, 45, 60, 20, "Option 2")
    OptionGadget(2, 30, 70, 60, 20, "Option 3")
    SetGadgetState(1, 1)   ; sélectionne la deuxième option
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


PanelGadget()

Syntaxe

Resultat = PanelGadget(#Gadget, x, y, Largeur, Hauteur)
Description
Crée un gadget Boîte à onglets (Panel) dans la GadgetList. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. #Gadget est le numéro du gadget renvoyé par la fonction EventGadget(). x et y représentent la position de la boîte à onglets dans la fenêtre, Largeur et Hauteur, ses dimensions. Lorsqu'une boîte à onglets est créée, sa liste d'élements est vide.

Les fonctions suivantes peuvent être appelées pour agir sur la liste :

- AddGadgetItem(): Ajoute un élément
- RemoveGadgetItem(): Supprime un élément
- ClearGadgetItemList(): Supprime tous les éléments
- GetGadgetItemText(): Renvoie le texte de l'élément spécifié.
- SetGadgetItemText(): Change le texte de l'élément spécifié.

- SetGadgetState(): Change l'onglet affiché.
- GetGadgetState(): Renvoie le numéro de l'onglet actuellement affiché.
- GetGadgetAttribute() avec un des attributs suivants (il doit y avoir au moins un élément dans le PanelGadget()):
  #PB_Panel_ItemWidth : Renvoie la largeur de la zone utilisable d'un onglet.
  #PB_Panel_ItemHeight: Renvoie la hauteur de la zone utilisable d'un onglet.
  #PB_Panel_TabHeight : Renvoie la hauteur d'un bouton de changement d'onglet.

Avant de pouvoir ajouter des gadgets, il est nécessaire d'appeler la commande AddGadgetItem() pour ajouter au moins un onglet. Les prochains gadgets créés le seront automatiquement sur le dernier onglet. Lorsque tous les gadgets de la boîte à onglets ont été placés, CloseGadgetList() doit être appelé pour revenir à la GadgetList précédente. Il est ainsi parfaitement possible de créer une boîte à onglets dans une autre boîte à onglets...

Exemple:

  ; Exemple d'utilisation de plusieurs onglets...
  If OpenWindow(0, 0, 0, 322, 220, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    PanelGadget     (0, 8, 8, 306, 203)
      AddGadgetItem (0, -1, "Onglet 1")
        PanelGadget (1, 5, 5, 290, 166)
          AddGadgetItem(1, -1, "Sous-onglet 1")
          AddGadgetItem(1, -1, "Sous-onglet 2")
          AddGadgetItem(1, -1, "Sous-onglet 3")
        CloseGadgetList()
      AddGadgetItem (0, -1,"Onglet 2")
        ButtonGadget(2, 10, 15, 80, 24,"Bouton 1")
        ButtonGadget(3, 95, 15, 80, 24,"Bouton 2")
    CloseGadgetList()
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux, MacOS X


ProgressBarGadget()

Syntaxe

Resultat = ProgressBarGadget(#Gadget, x, y, Largeur, Hauteur, Minimum, Maximum [, Options])
Description
Crée un gadget 'Barre de progression' (ProgressBar) dans la GadgetList. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. #Gadget est le numéro du gadget renvoyé par la fonction EventGadget(). x et y représentent la position de la barre de progression dans la fenêtre, Largeur et Hauteur, ses dimensions. Les valeurs 'Minimum-Maximum' spécifie l'intervalle qui sera utilisé par la barre de progression.

Les fonctions suivantes peuvent être appelées pour agir sur la barre de progression :

- SetGadgetState(): Change la valeur de la barre de progression.
- GetGadgetState(): Renvoie la valeur courante de la barre de progression.
- SetGadgetAttribute() avec les attributs suivants:
  #PB_ProgressBar_Minimum: Change la valeur minimale.
  #PB_ProgressBar_Maximum: Change la valeur maximale.
- GetGadgetAttribute() avec les attributs suivants:
  #PB_ProgressBar_Minimum: Renvoie la valeur minimale.
  #PB_ProgressBar_Maximum: Renvoie la valeur maximale.
Ce gadget supporte les commandes SetGadgetColor() et GetGadgetColor() avec les valeurs suivantes comme 'TypeCouleur' (Note: sous Windows XP avec le support des skins activé, la couleur n'a aucun effet):
  #PB_Gadget_FrontColor: Couleur de la barre de progression
  #PB_Gadget_BackColor : Couleur du fond
Le paramètre facultatif 'Options' peut être une combinaison des constantes suivantes:
  #PB_ProgressBar_Smooth  : La progression est précise, au lieu d'utiliser des blocs (Note: sous Windows XP avec
                             le support des skins activé, cette option n'a aucun effet).
  #PB_ProgressBar_Vertical: La barre de progression sera verticale.

Exemple:

  If OpenWindow(0, 0, 0, 320, 160, "ProgressBarGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    TextGadget       (3,  10, 10, 250,  20, "Barre de progression standard  (50/100)", #PB_Text_Center)
    ProgressBarGadget(0,  10, 30, 250,  30, 0, 100)
    SetGadgetState   (0, 50)   ;  change la valeur de la 1ère barre de progression (ID = 0) à 50 sur 100
    TextGadget       (4,  10, 70, 250,  20, "Barre de progression précise  (50/200)", #PB_Text_Center)
    ProgressBarGadget(1,  10, 90, 250,  30, 0, 200, #PB_ProgressBar_Smooth)
    SetGadgetState   (1, 50)   ;  change la valeur de la 2ème barre de progression (ID = 1) à 50 sur 200
    TextGadget       (5, 100,135, 200,  20, "Barre de progression verticale  (100/300)", #PB_Text_Right)
    ProgressBarGadget(2, 270, 10,  30, 120, 0, 300, #PB_ProgressBar_Vertical)
    SetGadgetState   (2, 100)   ; change la valeur de la 3ème barre de progression (ID = 2) à 100 sur 300
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


RemoveGadgetColumn()

Syntaxe

RemoveGadgetColumn(#Gadget, Colonne)
Description
Supprime une colonne au #Gadget spécifié. La numérotation de la colonne commence à 0. Le gadget peut être l'un des suivants:

- ListIconGadget()
- ExplorerListGadget()

Exemple:

  If OpenWindow(0, 0, 0, 320, 160, "RemoveGadgetColumn", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))

    ListIconGadget(0, 10, 10, 300, 140, "Salut", 100)
      AddGadgetColumn(0, 1, "Colonne 2", 70)
      AddGadgetColumn(0, 2, "Colonne 3", 70)

    RemoveGadgetColumn(0, 1) ; Supprime la 'colonne 2'

    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux, MacOS X


RemoveGadgetItem()

Syntaxe

RemoveGadgetItem(#Gadget, Position)
Description
Supprime un élément du gadget spécifié par #Gadget. Position représente la
position de l'élément dans la liste dont l'index commence à 0. Cette fonction
s'applique aux gadgets suivants :

- ComboBoxGadget()
- PanelGadget()
- ListViewGadget()
- ListIconGadget()
- MDIGadget()
- TreeGadget()

OS Supportés

Tous


ResizeGadget()

Syntaxe

ResizeGadget(#Gadget, x, y, Largeur, Hauteur)
Description
Change la taille et la position du #Gadget spécifié. Pour faciliter le redimensionnement de l'interface en temps réel, la constante #PB_Ignore peut être spécifiée à chacun des paramètres (x, y, Largeur ou Hauteur) et la valeur précédente de ce paramètre sera conservée.
  [...]

  ResizeGadget(0, #PB_Ignore, #PB_Ignore, 300, #PB_Ignore) ; Change seulement la largeur du gadget.

OS Supportés

Tous


ScrollAreaGadget()

Syntaxe

Resultat = ScrollAreaGadget(#Gadget, x, y, Largeur, Hauteur, LargeurZoneInterne, HauteurZoneInterne, ValeurDeplacement [, Options])
Description
Crée une gadget permettant d'afficher une zone plus grande que celle affichée à l'écran, à l'aide de barre de déplacement. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. Tout le déplacement de la zone interne est gérée automatiquement par le gadget. Par exemple, il est tres utile pour afficher une image trop grande pour être vu en entière (à l'aide d'un ImageGadget(). Cette zone peut contenir n'importe quel type de gadgets. Quand ce gadget est créé la 'GadgetList' courante est automatiquement changée et les nouveaux gadgets qui sont créés après cette commande seront placés dans ce #Gadget. CloseGadgetList() permet de revenir à la 'GadgetList' précédente. OpenGadgetList() pourra être utiliser pour ajouter des gadgets dynamiquement dans ce #Gadget.

'LargeurZoneInterne' et 'HauteurZoneInterne' sont les dimensions de la zone interne, qui devraient être supérieures ou égales aux dimensions 'Largeur' et 'Hauteur' du #Gadget. 'ValeurDeplacement' est le nombre de pixels qui sera affiché quand on presse l'une des fleches de deplacements, pour permettre une vitesse de déplacement variable. #Gadget est le numéro du gadget renvoyé par la fonction EventGadget().

Le paramètre facultatif 'Options' peut être une combinaison des constantes suivantes:
  #PB_ScrollArea_Flat      : Cadre simple
  #PB_ScrollArea_Raised    : Cadre élevé
  #PB_ScrollArea_Single    : Cadre enfoncé
  #PB_ScrollArea_BorderLess: Sans bordure

Les commandes suivantes peuvent être utilisées pour agir sur un ScrollAreaGadget:

GetGadgetAttribute(): Avec une des constantes suivantes:
  #PB_ScrollArea_InnerWidth : Renvoie la largeur (en pixels) de la zone interne du gadget.
  #PB_ScrollArea_InnerHeight: Renvoie la hauteur (en pixels) de la zone interne du gadget.
  #PB_ScrollArea_X          : Renvoie la position horizontale actuelle de l'ascenseur (en pixels).
  #PB_ScrollArea_Y          : Renvoie la position verticale actuelle de l'ascenseur (en pixels).
SetGadgetAttribute(): Avec une des constantes suivantes:
  #PB_ScrollArea_InnerWidth : Modifie la largeur (en pixels) de la zone interne du gadget.
  #PB_ScrollArea_InnerHeight: Modifie la hauteur (en pixels) de la zone interne du gadget.
  #PB_ScrollArea_X          : Modifie la position horizontale actuelle de l'ascenseur (en pixels).
  #PB_ScrollArea_Y          : Modifie la position verticale actuelle de l'ascenseur (en pixels).
Ce gadget supporte les commandes SetGadgetColor() et GetGadgetColor() avec la constante #PB_Gadget_BackColor comme 'TypeCouleur' pour changer la couleur de fond du gadget.

Exemple:

  If OpenWindow(0, 0, 0, 305, 140, "ScrollAreaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    ScrollAreaGadget(0, 10, 10, 290,120, 375, 155, 30)
      ButtonGadget  (1, 10, 10, 230, 30,"Bouton 1")
      ButtonGadget  (2, 50, 50, 230, 30,"Bouton 2")
      ButtonGadget  (3, 90, 90, 230, 30,"Bouton 3")
      TextGadget    (4,130,130, 230, 20,"Ceci est le contenu d'une zone de défilement !",#PB_Text_Right)
      CloseGadgetList()
    Repeat
      Select WaitWindowEvent()
        Case  #PB_Event_CloseWindow
          End
        Case  #PB_Event_Gadget
          Select EventGadget()
            Case 1
              MessageRequester("Info","Le bouton 1 a été appuyé !",#PB_MessageRequester_Ok)
            Case 2
              MessageRequester("Info","Le bouton 2 a été appuyé !",#PB_MessageRequester_Ok)
            Case 3
              MessageRequester("Info","Le bouton 3 a été appuyé !",#PB_MessageRequester_Ok)
          EndSelect
      EndSelect
    ForEver
  EndIf

OS Supportés

Windows, Linux, MacOS X


ScrollBarGadget()

Syntaxe

Resultat = ScrollBarGadget(#Gadget, x, y, Largeur, Hauteur, Minimum, Maximum, LongueurPage [, Options])
Description
Crée une nouvelle barre de défilement (ascenseur vertical ou horizontal) dans la GadgetList courante. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. #Gadget est le numéro du gadget renvoyé par la fonction EventGadget(). x et y représentent la position de la barre de déplacement dans la fenêtre, Largeur et Hauteur, ses dimensions.

Les valeurs 'Minimum-Maximum' spécifie l'intervalle qui sera utilisé par la barre de déplacement (valeurs comprisent entre 0 et 10 000). Un ascenceur permet de se déplacer par page (lorque l'on clique en dehors du curseur de déplacement) et le paramètre 'LongueurPage' permet de définir la valeur de ce déplacement. Exemple concret: La longueur totale du composant (image, document, container etc...) fait 500 pixels. On ne peut en afficher que 100 pixels. Donc on aura une valeur minimale de 0, une valeur Maximale de 500 et une longueur de page de 100. Le curseur sera 5 fois plus petit que la barre de déplacement, car sa dimension est proportionnelle (dimension = Maximum/LongueurPage).

Les fonctions suivantes peuvent être appelées pour agir sur la barre de déplacement :

- GetGadgetState(): Renvoie la position actuelle du curseur (valeur comprise dans l'intervalle Minimum-Maximum)
- SetGadgetState(): Change la position actuelle du curseur.
- GetGadgetAttribute() avec un des attributs suivants:
  #PB_ScrollBar_Minimum   : Renvoie la position minimale de l'ascenseur.
  #PB_ScrollBar_Maximum   : Renvoie la position maximale de l'ascenseur.
  #PB_ScrollBar_PageLength: Renvoie la longueur de la page.
- SetGadgetAttribute(): With one of the following attributes:
  #PB_ScrollBar_Minimum   : Change la position minimale de l'ascenseur.
  #PB_ScrollBar_Maximum   : Change la position maximale de l'ascenseur.
  #PB_ScrollBar_PageLength: Change la longueur de la page.
Le paramètre facultatif 'Options' peut être une combinaison des constantes suivantes:
  #PB_ScrollBar_Vertical: La barre de déplacement sera verticale.

Exemple:

  If OpenWindow(0, 0, 0, 305, 140, "ScrollBarGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    TextGadget       (2,  10, 25, 250,  20, "Ascenseur standard  (début = 50, page = 30/100)",#PB_Text_Center)
    ScrollBarGadget  (0,  10, 42, 250,  20, 0, 100, 30)
    SetGadgetState   (0,  50)   ; change la valeur de la 1ère barre de défilement (ID = 0) à 50 sur 100
    TextGadget       (3,  10,115, 250,  20, "Ascenseur vertical  (début = 100, page = 50/300)",#PB_Text_Right)
    ScrollBarGadget  (1, 270, 10,  25, 120 ,0, 300, 50, #PB_ScrollBar_Vertical)
    SetGadgetState   (1, 100)   ; change la valeur de la 2ème barre de défilement (ID = 1) à 100 sur 300
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf


SetActiveGadget()

Syntaxe

SetActiveGadget(#Gadget)
Description
Active le #Gadget spécifié (donne le focus). Cette fonction est utilisée principalement avec ComboBoxGadget() and StringGadget(). Cela permet a un gadget d'obtenir le focus du clavier.

Exemple:

  If OpenWindow(0, 0, 0, 270, 140, "SetActiveGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    StringGadget  (0, 10, 10, 250, 20, "bla bla...")
    ComboBoxGadget(1, 10, 40, 250, 100)
    For a = 1 To 5 : AddGadgetItem(1, -1, "Elément de liste déroulante " + Str(a)) : Next
    SetGadgetState(1, 2)                ; sélectionne le troisième élément (la numérotation commence à 0)
    ButtonGadget  (2, 10,  90, 250, 20, "Activer le gadget de saisie de texte")
    ButtonGadget  (3, 10, 115, 250, 20, "Activer la liste déroulante")
    Repeat
      Evenement = WaitWindowEvent()
      If Evenement = #PB_Event_Gadget
        Select EventGadget()
          Case 2 : SetActiveGadget(0)   ; Activer le gadget 'saisie de texte'
          Case 3 : SetActiveGadget(1)   ; Activer la liste déroulante
        EndSelect
      EndIf
    Until Evenement = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


SetGadgetAttribute()

Syntaxe

SetGadgetAttribute(#Gadget, Attribut, Valeur)
Description
Change la valeur de l'attribut du #Gadget spécifié. Cette fonction est disponible avec
les gadgets suivants:

- CalendarGadget()
- DateGadget()
- EditorGadget()
- MDIGadget()
- ProgressBarGadget()
- ScrollAreaGadget()
- ScrollBarGadget()
- SpinGadget()
- SplitterGadget()
- TrackBarGadget()

OS Supportés

Windows, Linux, MacOS X


SetGadgetColor()

Syntaxe

SetGadgetColor(#Gadget, ColorType, Color)
Description
Change la couleur du #Gadget de 'TypeCouleur' indiqué. RGB() peut être utilisé pour obtenir une couleur valide. Pour supprimer la couleur personnalisée et revenir à la couleur par défaut, utiliser la valeur -1.

Le paramètre 'TypeCouleur' peut prendre l'une des valeurs suivante (tous les gadgets ne supportent pas toutes ces valeurs):
  #PB_Gadget_FrontColor     : Texte du gadget
  #PB_Gadget_BackColor      : Fond du gadget
  #PB_Gadget_LineColor      : Couleur de la grille
  #PB_Gadget_TitleFrontColor: Couleur du texte dans le titre (for CalendarGadget())
  #PB_Gadget_TitleBackColor : Couleur du fond dans le titre (for CalendarGadget())
  #PB_Gadget_GrayTextColor  : Couleur du texte inactif (for CalendarGadget())
Cette commande supporte les gadgets suivants:

- CalendarGadget()
- ContainerGadget()
- DateGadget()
- EditorGadget()
- ExplorerListGadget()
- ExplorerTreeGadget()
- HyperLinkGadget()
- ListViewGadget()
- ListIconGadget()
- MDIGadget()
- ProgressBarGadget()
- ScrollAreaGadget()
- SpinGadget()
- StringGadget()
- TextGadget()
- TreeGadget()

Note: Avec le support des skins activé sur Windows XP, les couleurs personnalisées ne seront probablement pas pris en compte sur certains gadgets.

Exemple:

  If OpenWindow(0, 0, 0, 210, 170, "SetGadgetColor", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    StringGadget(0, 10, 10, 180, 20, "Chaîne...")
    ListViewGadget(1, 10, 40, 180, 60)
    For i = 0 To 4
      AddGadgetItem(1, -1, "Texte")
    Next i
    ContainerGadget(2, 10, 110, 180, 50, #PB_Container_Raised)

    SetGadgetColor(0, #PB_Gadget_BackColor, $00FFFF)
    SetGadgetColor(1, #PB_Gadget_FrontColor, $FFFFFF)
    SetGadgetColor(1, #PB_Gadget_BackColor, $000000)
    SetGadgetColor(2, #PB_Gadget_BackColor, $0000FF)

    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux


SetGadgetData()

Syntaxe

SetGadgetData(#Gadget, Valeur)
Description
Associe la 'Valeur' specifié avec le #Gadget. Cette valeur peut être récupérée avec GetGadgetData(). Tous les gadgets sont supportés par cette commande.

Exemple:

  ; Ce programme utilise SetGadgetData pour associer un indice du tableau Messages()
  ; à chaque bouton. Cela rend la boucle d'évènements plus simple car les gadgets
  ; n'ont plus besoin d'être traités séparément un par un
  ;
  Dim Messages.s(2)
  Messages(0) = "Bonjour"
  Messages(1) = "Salut le Monde"
  Messages(2) = "Rien à dire"
  If OpenWindow(0, 0, 0, 230, 100, "SetGadgetData", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    ButtonGadget(0,  10, 10, 80, 20, "Bouton 0"): SetGadgetData(0, 1)
    ButtonGadget(1,  10, 40, 80, 20, "Bouton 1"): SetGadgetData(1, 2)
    ButtonGadget(2,  10, 70, 80, 20, "Bouton 2"): SetGadgetData(2, 1)
    ButtonGadget(3, 100, 10, 80, 20, "Bouton 3"): SetGadgetData(3, 2)
    ButtonGadget(4, 100, 40, 80, 20, "Bouton 4") ; aura la valeur 0 car aucune valeur n'a été attribuée
    ButtonGadget(5, 100, 70, 80, 20, "Bouton 5")
    Repeat
      Evenement = WaitWindowEvent()
      If Evenement = #PB_Event_Gadget
        Valeur = GetGadgetData(EventGadget())
        MessageRequester("Message", Messages(Valeur))
      EndIf
    Until Evenement = #PB_Event_CloseWindow
  EndIf


SetGadgetFont()

Syntaxe

SetGadgetFont(#Gadget, FontID)
Description
Change la police du #Gadget spécifié. Si la valeur de #Gadget est #PB_Default, alors la police par défaut utilisée par les nouveaux gadgets est changée par la nouvelle valeur. 'FontID' peut être facilement obtenu par la fonction FontID() de la bibliothèque Font. Si la valeur de 'FontID' est #PB_Default, alors la police utilisée sera la police par défaut du système d'exploitation.

Exemple:

  If OpenWindow(0, 0, 0, 222, 130, "SetGadgetFont", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    If LoadFont(0, "Arial", 16)
      SetGadgetFont(#PB_Default, FontID(0))   ; la police par défaut est remplacée par celle chargée (Arial 16)
    EndIf
    ButtonGadget(0, 10, 10, 200, 30, "Bouton - Arial 16")
    SetGadgetFont(#PB_Default, #PB_Default)  ; remet la police par défaut originale (standard)
    ButtonGadget(1, 10, 50, 200, 30, "Bouton - standard")
    If LoadFont(1,"Courier",10, #PB_Font_Bold|#PB_Font_Underline)
      SetGadgetFont(#PB_Default, FontID(1))   ; la police par défaut est remplacée par celle chargée (Courier 10)
    EndIf
    TextGadget(2, 10, 90, 200, 40, "Texte en Courier 10 Gras + souligné", #PB_Text_Center)
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


SetGadgetItemAttribute()

Syntaxe

SetGadgetItemAttribute(#Gadget, Element, Attribut, Valeur)
Description
Change la valeur de l'attribut de l'élément du #Gadget spécifié. Cette fonction est disponible avec les gadgets suivants:

- ExplorerListGadget():
  #PB_Explorer_ColumnWidth: Change la largeur de la 'Colonne' spécifiée. Le paramètre 'Element' est ignoré.
- ListIconGadget():
  #PB_ListIcon_ColumnWidth: Change la largeur de la 'Colonne' spécifiée. Le paramètre 'Element' est ignoré.

OS Supportés

Windows, Linux, MacOS X


SetGadgetItemColor()

Syntaxe

SetGadgetItemColor(#Gadget, Element, TypeCouleur, Couleur [, Colonne])
Description
Change la couleur de l'élément du #Gadget. RGB() peut être utilisé pour obtenir une couleur valide. Pour supprimer la couleur personnalisée et revenir à la couleur par défaut, utiliser la valeur -1.

Si le paramètre 'Element' est egal à -1, la couleur sera appliquée à tous les éléments de la 'Colonne' spécifiée. Si le paramètre 'Colonne' est egal à -1, la couleur sera appliquée à toute les colonnes de l'Element' spécifié.

Le paramètre 'TypeCouleur' peut prendre l'une des valeurs suivante:
  #PB_Gadget_FrontColor: Texte de l'élément.
  #PB_Gadget_BackColor : Fond de l'élément.
Cette commande est supportée par les gadgets suivants:

- ListIconGadget()
- TreeGadget()

Note: Avec le support des skins activé sur Windows XP, les couleurs personnalisées ne seront probablement pas prises en compte sur certains gadgets.

Exemple:

  If OpenWindow(0, 0, 0, 300, 300, "SetGadgetItemColor", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    ListIconGadget(0, 10, 10, 280, 280, "Colonne 0", 100)
    AddGadgetColumn(0, 1, "Colonne 1", 100)
    For i = 1 To 10
      AddGadgetItem(0, -1, "Texte "+Str(i)+Chr(10)+"Texte "+Str(i))
    Next
                                                                  ; la numérotation commence à 0 pour les éléments/colonnes
    SetGadgetItemColor(0, -1, #PB_Gadget_FrontColor, $0000FF,  1) ; tous les éléments de la 2ème colonne en rouge
    SetGadgetItemColor(0,  3, #PB_Gadget_BackColor,  $00FFFF, -1) ; le 4ème élément de toutes les colonnes sur fond jaune
    SetGadgetItemColor(0,  9, #PB_Gadget_BackColor,  $FFFF00,  1) ; le 10ème élément de la 2ème colonne sur fond bleu
    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux


SetGadgetItemData()

Syntaxe

SetGadgetItemData(#Gadget, Element, Valeur)
Description
Associe la 'Valeur' specifiée avec l'Element du #Gadget. Cette valeur peut être récupérée avec la commande GetGadgetItemData(). Si l'index de l'élément change (par exemple d'autres éléments sont éffacés), la valeur restera toujours associée à son élément.

Cette commande est supportée par les gadgets suivants:

- ComboBoxGadget()
- ListIconGadget()
- ListViewGadget()
- TreeGadget()

Exemple:

  ; Ce programme utilise SetGadgetItemData pour stocker la position d'origine
  ; de chaque élément pour la connaitre plus tard, même si l'index des éléments a changé.
  ;
  If OpenWindow(0, 0, 0, 290, 250, "SetGadgetItemData", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    ButtonGadget(0,  10, 10, 80, 20, "Ajouter")
    ButtonGadget(1, 100, 10, 80, 20, "Supprimer")
    ButtonGadget(2, 190, 10, 80, 20, "Test")
    ListViewGadget(3, 10, 40, 260, 200)
    For i = 0 To 10
      AddGadgetItem(3, i, "Ancien élément "+Str(i))
      SetGadgetItemData(3, i, i)
    Next i

    Repeat
      Evenement = WaitWindowEvent()
      If Evenement = #PB_Event_Gadget
        element = GetGadgetState(3)

        Select EventGadget()
          Case 0 ; Ajouter
            AddGadgetItem(3, element, "Nouvel élément")
            If element <> -1
              SetGadgetItemData(3, element, -1)
            Else
              SetGadgetItemData(3, CountGadgetItems(3)-1, -1)
            EndIf

          Case 1 ; Supprimer
            If element <> -1
              RemoveGadgetItem(3, element)
            EndIf

          Case 2 ; Test
            If element <> -1
              valeur = GetGadgetItemData(3, element)
              If valeur = -1
                MessageRequester("", "C'est un nouvel élément")
              Else
                MessageRequester("", "C'était l'élément numéro "+Str(valeur))
              EndIf
            EndIf

        EndSelect
      EndIf
    Until Evenement = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


SetGadgetItemState()

Syntaxe

SetGadgetItemState(#Gadget, Element, Etat)
Description
Change l'état de l'élément du #Gadget spécifié. Cette commande est disponible pour les gadgets suivant:

- CalendarGadget(): 'Etat' = #PB_Calendar_Bold pour faire apparître la date en gras, #PB_Calendar_Normal sinon. 'Element' est une date au format PureBasic.
- ListViewGadget(): 'Etat' = 1 si l'élément doit être sélectionné, 0 sinon.
- ListIconGadget(): 'Etat' est une combinaison des valeurs suivantes:
  #PB_ListIcon_Selected: L'élément sera selectionné.
  #PB_ListIcon_Checked : L'élément aura sa checkbox associée cochée (crée avec l'option #PB_ListIcon_CheckBoxes).
- TreeGadget(): 'Etat' est une combinaison des valeurs suivantes:
  #PB_Tree_Selected : L'élément sera sélectionné.
  #PB_Tree_Expanded : L'élément sera déployé (noeud ouvert).
  #PB_Tree_Collapsed: L'élément sera fermé.
  #PB_Tree_Checked  : La case à cocher associée à l'élément sera cochée (crée avec l'option #PB_Tree_CheckBoxes).

  SetGadgetItemState(0, 1, #PB_Tree_Expanded | #PB_Tree_Selected) ; l'élément 2 sera déployé et sélectionné.

OS Supportés

Tous


SetGadgetItemText()

Syntaxe

SetGadgetItemText(#Gadget, Element, Texte$, Colonne)
Description
Change le texte de l'élément du #Gadget spécifié. Cette commande est disponible pour les gadgets suivant:

- EditorGadget()
- ListViewGadget()
- ListIconGadget()
- PanelGadget()
- ComboBoxGadget()
- TreeGadget()

OS Supportés

Tous


SetGadgetState()

Syntaxe

SetGadgetState(#Gadget, Etat)
Description
Change l'état en cours du gadget #Gadget. Cette fonction est universelle et s'applique à pratiquement tous les gadgets :

- ButtonImageGadget(): Change l'image affichée par le gadget ('Etat' sera un ImageID()). Si Etat = 0, l'image est retirée du gadget.
- CalendarGadget(): Change la date affichée.
- CheckBoxGadget(): 'Etat' = 1 pour valider la case, sinon 0.
- ComboBoxGadget(): Change l'élément sélectionné en cours.
- DateGadget(): Change la date ou l'heure affichée. Si #PB_Date_Checkbox est utilisé, mettre 'Etat' à 0 pour décocher la boîte à cocher.
- ImageGadget(): Change l'image affichée par le gadget ('Etat' sera un ImageID()). Si Etat = 0, l'image est retirée du gadget.
- ListIconGadget(): Change l'élément sélectionné (tous les autres éléments sont alors désélectionnés). Si 'Etat' = -1, alors aucun élément n'est sélectionné.
- ListViewGadget(): Change l'élément sélectionné. Si 'Etat' = -1, alors aucun élément n'est sélectionné.
- MDIGadget(): Change la fenêtre fille active (En indiquant son numéro de #fenetre), ou exécute une des actions suivantes:
  #PB_MDI_Cascade         : Ré-organise les fenêtres filles sous forme de cascade.
  #PB_MDI_TileVertically  : Ré-organise les fenêtres filles sous forme de mosaïque verticale.
  #PB_MDI_TileHorizontally: Ré-organise les fenêtres filles sous forme de mosaïque horizontale.
  #PB_MDI_Next            : Active la fenêtre fille suivante.
  #PB_MDI_Previous        : Active la fenêtre fille précédente.
  #PB_MDI_Arrange         : Ré-organise les fenêtres filles qui sont réduites.

- OptionGadget(): 'Etat' = 1 pour l'activer, sinon 0.
- PanelGadget(): Change l'onglet en cours.
- ProgressBarGadget(): Change la valeur de la barre de progression.
- ScrollBarGadget(): Change la position du curseur.
- SpinGadget(): Change la valeur actuelle.
- SplitterGadget(): Change la position de la barre de séparation (en pixels).
- TrackBarGadget(): Change la valeur du curseur.
- TreeGadget(): Change l'élément actuellement sélectionné, -1 pour tout déselectionner.
- WebGadget(): Effectue des actions sur le navigateur.

Note: Veuillez consulter les informations du chapitre Gestion des messages Windows à propos de la gestion des fenêtres sur Windows.

OS Supportés

Tous


SetGadgetText()

Syntaxe

SetGadgetText(#Gadget, Texte$)
Description
Modifie le texte contenu dans le gadget #Gadget. Cette fonction est
particulièrement utile pour :

- ComboBoxGadget()
- EditorGadget()
- ExplorerComboGadget()
- ExplorerListGadget()
- ExplorerTreeGadget()
- ListViewGadget()
- StringGadget()
- TextGadget()
- WebGadget()

OS Supportés

Tous


SpinGadget()

Syntaxe

Resultat = SpinGadget(#Gadget, x, y, Width, Height, Minimum, Maximum [, Options])
Description
Crée un gadget 'incrémental' (Spin) dans la GadgetList. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. #Gadget est le numéro du gadget renvoyé par la fonction EventGadget(). x et y représentent la position du gadget dans la fenêtre, Largeur et Hauteur, ses dimensions.

Le paramètre facultatif 'Options' peut être une combinaison des valeurs suivantes:
  #PB_Spin_ReadOnly: Le gadget n'est pas editable, sa valeur ne peut être changé que par les flèches.
  #PB_Spin_Numeric : Le gadget va mettre à jour automatiquement le texte affiché par rapport à sa valeur
                   interne spécifiée par SetGadgetState(), donc SetGadgetText() n'est pas nécessaire.
Les fonctions suivantes peuvent être appelées pour contrôler le gadget:

GetGadgetState(): Renvoie la valeur du curseur interne.
SetGadgetState(): Change la valeur du curseur interne.
GetGadgetText(): Renvoie le texte du gadget.
SetGadgetText(): Change le texte du gadget.
GetGadgetAttribute() avec un des attributs suivants:
  #PB_Spin_Minimum: Renvoie la valeur minimale possible.
  #PB_Spin_Maximum: Renvoie la valeur maximale possible.
SetGadgetAttribute(): avec un des attributs suivants:
  #PB_Spin_Minimum: Change la valeur minimale possible.
  #PB_Spin_Maximum: Change la valeur maximale possible.

Exemple:

  If OpenWindow(0, 0, 0, 160, 70, "SpinGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    SpinGadget     (0, 20, 20, 100, 25, 0, 1000)
    SetGadgetState (0, 5) : SetGadgetText(0, "5")   ; définit la valeur initiale
    Repeat
      Evenement = WaitWindowEvent()
      If Evenement = #PB_Event_Gadget
        If EventGadget() = 0
          SetGadgetText(0,Str(GetGadgetState(0)))
        EndIf
      EndIf
    Until Evenement = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux, MacOS X


SplitterGadget()

Syntaxe

Resultat = SplitterGadget(#Gadget, x, y, Largeur, Hauteur, #Gadget1, #Gadget2 [, Options])
Description
Créé une zone séparée en deux parties (horizontalement ou verticalement), chacune pouvant contenir un gadget. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. La barre de séparation peut être déplacée librement par l'utilisateur et les deux gadgets associés seront redimensionnés automatiquement. #Gadget est le numéro du gadget renvoyé par la fonction EventGadget().

Le paramètre facultatif 'Options' peut être une combinaison des constantes suivantes:
  #PB_Splitter_Vertical   : La zone sera séparée verticalement.
  #PB_Splitter_Separator  : Un motif 3D est affiché dans la barre de séparation.
  #PB_Splitter_FirstFixed : Quand le SplitterGadget sera redimensionné, le premier gadget associé gardera sa taille.
  #PB_Splitter_SecondFixed: Quand le SplitterGadget sera redimensionné, le deuxième gadget associé  gardera sa taille.
Les fonctions suivantes peuvent être utilisées pour agir sur le gadget:

GetGadgetState(): Renvoie la position de la barre de séparation, en pixels.
SetGadgetState(): Change la position de la barre de séparation, en pixels.
GetGadgetAttribute() avec un des attributs suivants:
  #PB_Splitter_FirstMinimumSize : Renvoie la taille minimale (en pixels) que le premier gadget associé peut avoir.
  #PB_Splitter_SecondMinimumSize: Renvoie la taille minimale (en pixels) que le deuxième gadget associé peut avoir.
  #PB_Splitter_FirstGadget      : Renvoie le numéro du premier gadget.
  #PB_Splitter_SecondGadget     : Renvoie le numéro du deuxième gadget.
SetGadgetAttribute() avec un des attributs suivants:
  #PB_Splitter_FirstMinimumSize : Fixe la taille minimale (en pixels) que le premier gadget associé peut avoir.
  #PB_Splitter_SecondMinimumSize: Fixe la taille minimale (en pixels) que le deuxième gadget associé peut avoir.
  #PB_Splitter_FirstGadget      : Remplace le premier gadget avec un nouveau.
  #PB_Splitter_SecondGadget     : Remplace le deuxième gadget avec un nouveau.
Note: quand un gadget est remplacé à l'aide de SetGadgetAttribute(), l'ancien gadget n'est pas automatiquement supprimé. Il sera remis sur la fenêtre qui contient le splitter, pour permettre de permutter les gadgets entre différents splitters sans avoir à les recréer. Si l'ancien gadget doit être supprimé, son numéro peut être recupéré avec GetGadgetAttribute() puis supprimé par FreeGadget() après son remplacement. Un gadget ne peut pas être dans deux splitters à la fois.

Exemple:

  If OpenWindow(0, 0, 0, 230, 210, "SplitterGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If CreateGadgetList(WindowID(0))

      #Bouton1    = 0
      #Bouton2    = 1
      #Separateur = 2

      ButtonGadget(#Bouton1, 0, 0, 0, 0, "Bouton 1") ; Inutile de préciser la taille ou les coordonnées
      ButtonGadget(#Bouton2, 0, 0, 0, 0, "Bouton 2") ; car elles seront déterminées automatiquement
      SplitterGadget(#Separateur, 5, 5, 220, 120, #Bouton1, #Bouton2, #PB_Splitter_Separator)

      TextGadget(3, 10, 135, 210, 70, "Le composant d'interface graphique ci-dessus affiche deux boutons automatiquement redimensionnés à l'intérieur de la zone séparée de taille 220x120.",#PB_Text_Center)

      Repeat
      Until WaitWindowEvent() = #PB_Event_CloseWindow
    EndIf
  EndIf

OS Supportés

Windows, Linux, MacOS X


StringGadget()

Syntaxe

Resultat = StringGadget(#Gadget, x, y, Largeur, Hauteur, Texte$ [, Options])
Description
Crée un gadget de 'saisie de texte' dans la GadgetList. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. #Gadget est le numéro retourné par la fonction EventGadget(). Texte$ contient le texte initial du gadget. Ce texte pourra être ensuite modifié par les fonctions SetGadgetText() et GetGadgetText()

Le paramètre facultatif 'Options' peut être une combinaison des constantes suivantes:
  #PB_String_Password  : Mode 'mot de passe', n'affiche que des '*'.
  #PB_String_ReadOnly  : Mode 'lecture seulement'.
  #PB_String_Numeric   : Mode 'numeric'. Seuls des chiffres peuvent être saisis.
  #PB_String_LowerCase : Tous les caractères saisis sont transformés en minuscules.
  #PB_String_UpperCase : Tous les caractères saisis sont transformés en majuscules.
  #PB_String_BorderLess: Aucune bordure n'est affichée autour du gadget.
Ce gadget supporte les commandes SetGadgetColor() et GetGadgetColor() avec les valeurs 'TypeCouleur' suivantes:
  #PB_Gadget_BackColor : Couleur de fond
  #PB_Gadget_FrontColor: Couleur du texte

Exemple:

  ; Démonstration des options possibles pour le gadget de saisie de texte...
  If OpenWindow(0, 0, 0, 322, 205, "Les options de StringGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    StringGadget(0, 8,  10, 306, 20, "Gadget saisie de texte normal...")
    StringGadget(1, 8,  35, 306, 20, "1234567", #PB_String_Numeric)
    StringGadget(2, 8,  60, 306, 20, "Gadget saisie de texte en lecture seule", #PB_String_ReadOnly)
    StringGadget(3, 8,  85, 306, 20, "minuscules...", #PB_String_LowerCase)
    StringGadget(4, 8, 110, 306, 20, "majuscules...", #PB_String_UpperCase)
    StringGadget(5, 8, 140, 306, 20, "Gadget saisie de texte sans bordure", #PB_String_BorderLess)
    StringGadget(6, 8, 170, 306, 20, "Mot de passe", #PB_String_Password)
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


TextGadget()

Syntaxe

Resultat = TextGadget(#Gadget, x, y, Largeur, Hauteur, Texte$ [, Options])
Description
Crée un gadget 'Texte' dans la GadgetList. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. Un TextGadget est un texte simple placé dans la fenêtre en cours. Son contenu peut être modifié à l'aide des fonctions SetGadgetText() et GetGadgetText().
x et y représentent la position du bord supérieur gauche du cadre dans la fenêtre, Largeur et Hauteur, ses dimensions.

Le paramètre facultatif 'Options' peut être une combinaison des constantes suivantes:
  #PB_Text_Center: Le texte est centré.
  #PB_Text_Right : Le texte est aligné à droite.
  #PB_Text_Border: Un bord est dessiné autour du gadget.
Ce gadget supporte les commandes SetGadgetColor() et GetGadgetColor() avec les valeurs 'TypeCouleur' suivantes:
  #PB_Gadget_BackColor : Couleur de fond
  #PB_Gadget_FrontColor: Couleur du texte

Exemple:

  If OpenWindow(0,0,0,270,160,"TextGadget",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    TextGadget(0, 10, 10,250,20,"Gadget texte standard (texte aligné à gauche)")
    TextGadget(1, 10, 40,250,20,"Gadget texte (texte aligné à droite)",#PB_Text_Right)
    TextGadget(2, 10, 70,250,20,"Gadget texte (texte centré)",#PB_Text_Center)
    TextGadget(3, 10,100,250,20,"Gadget texte avec bordure",#PB_Text_Border)
    TextGadget(4, 10,130,250,20,"Gadget texte (texte centré) + bordure",#PB_Text_Center|#PB_Text_Border)
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


TrackBarGadget()

Syntaxe

Result = TrackBarGadget(#Gadget, x, y, Width, Height, Minimum, Maximum [, Options])
Description
Crée un gadget 'Barre de défilement' dans la GadgetList. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. #Gadget est le numéro retourné par la fonction EventGadget(). La plage 'Minimum-Maximum' doit être comprise entre 0 et 10 000. Les commandes suivantes peuvent être utilisées pour contrôler le gadget:

- GetGadgetState(): Renvoie la position actuelle du curseur (Valeur comprise entre 'Minimum' et 'Maximum')
- SetGadgetState(): Change la position actuelle du curseur.
- GetGadgetAttribute() avec un des attributs suivants:
  #PB_TrackBar_Minimum: Renvoie la valeur minimale.
  #PB_TrackBar_Maximum: Renvoie la valeur maximale.
- SetGadgetAttribute() avec un des attributs suivants:
  #PB_TrackBar_Minimum: Change la valeur minimale.
  #PB_TrackBar_Maximum: Change la valeur maximale.
Le paramètre facultatif 'Options' peut être une combinaison des constantes suivantes:
  #PB_TrackBar_Ticks   : Affiche un trait de marquage à chaque valeur.
  #PB_TrackBar_Vertical: Le gadget est vertical.

Exemple:

If OpenWindow(0, 0, 0, 320, 200, "TrackBarGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    TextGadget    (3, 10,  20, 250, 20,"Barre à curseur standard", #PB_Text_Center)
    TrackBarGadget(0, 10,  40, 250, 20, 0, 10000)
    SetGadgetState(0, 5000)
    TextGadget    (4, 10, 100, 250, 20, "Barre à curseur avec traits de marquage", #PB_Text_Center)
    TrackBarGadget(1, 10, 120, 250, 20, 0, 30, #PB_TrackBar_Ticks)
    SetGadgetState(1, 3000)
    TextGadget    (5,  90, 180, 200, 20, "Barre à curseur verticale", #PB_Text_Right)
    TrackBarGadget(2, 270, 10, 20, 170, 0, 10000, #PB_TrackBar_Vertical)
    SetGadgetState(2, 8000)
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux, MacOS X


TreeGadget()

Syntaxe

Result = TreeGadget(#Gadget, x, y, Largeur, Hauteur [, Options])
Description
Crée une liste arborescente dans la GadgetList en cours. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. #Gadget est le numéro retourné par la fonction EventGadget(). Lorsque cette liste est créée, sa liste d'éléments est vide.

Chaque élément dans l'arbre a un niveau assigné, qui détermine la relation avec l'élément au dessus et en dessous de lui. Les éléments avec le même niveau appartiennent à la même branche, les éléments avec un niveau supérieur sont les fils etc. Le paramètre 'Options' de la commande AddGadgetItem() est toujours requis pour les éléments du TreeGadget() et sert à spécifier le niveau de l'élément qui doit être ajouté. A noter que si un élément est ajouté avec un niveau invalide, alors il sera quand même ajouté, au niveau le plus proche.

Le paramètre facultatif 'Options' peut être une combinaison des constantes suivantes:
  #PB_Tree_AlwaysShowSelection: Montre toujours la sélection, même si le gadget n'est plus actif.
  #PB_Tree_NoLines            : Cache les lignes reliant les noeuds.
  #PB_Tree_NoButtons          : Cache les boutons des noeuds.
  #PB_Tree_CheckBoxes         : Ajoute une boîte à cocher devant chaque élément.
Les fonctions suivantes peuvent alors être utilisées pour agir sur le contenu de cette liste :

- AddGadgetItem(): Ajoute un élément, et éventuellement une icône
- RemoveGadgetItem(): Efface un élément (et ses sous-élements)
- ClearGadgetItemList(): Supprime tous les éléments
- CountGadgetItems(): Renvoie le nombre d'éléments actuellement contenus dans le gadget.
- GetGadgetItemState(): Renvoie l'état de l'élément spécifié.
- SetGadgetItemState(): Change l'état de l'élément spécifié.
- GetGadgetItemText(): Renvoie le texte de l'élément spécifié.
- SetGadgetItemText(): Change le texte de l'élément spécifié.
- GetGadgetState(): Renvoie l'élément selectionné.
- SetGadgetState(): Change l'élément selectionné.
- GetGadgetText(): Renvoie le texte de l'élément sélectionné.
- SetGadgetText(): Change le texte de l'élément sélectionné.
- GetGadgetItemAttribute() avec l'attribut suivant:
  #PB_Tree_SubLevel: Renvoie le niveau actuel de l'élément dans l'arbre.
- GadgetItemID(): Renvoie le 'handle' système de l'élément spécifié (utile pour les fonctions API)

Exemple:

  If OpenWindow(0, 0, 0, 355, 180, "TreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    TreeGadget(0, 10, 10, 160, 160)                                         ; liste arborescente standard
    TreeGadget(1, 180, 10, 160, 160, #PB_Tree_CheckBoxes|#PB_Tree_NoLines)  ; liste arborescente avec cases à cocher + sans lignes reliant les noeuds
    For ID = 0 To 1
      For a = 0 To 10
        AddGadgetItem (ID, -1, "Elément normal "+Str(a), 0, 0) ; si vous souhaitez ajouter une image, utilisez
        AddGadgetItem (ID, -1, "Noeud "+Str(a), 0, 0)          ; ImageID(x) comme 4ème paramètre
        AddGadgetItem (ID, -1, "Sous-élément 1", 0, 1)         ; Ceux-là sont au premier sous-niveau
        AddGadgetItem (ID, -1, "Sous-élément 2", 0, 1)
        AddGadgetItem (ID, -1, "Sous-élément 3", 0, 1)
        AddGadgetItem (ID, -1, "Sous-élément 4", 0, 1)
        AddGadgetItem (ID, -1, "Fichier "+Str(a), 0, 0) ; sous-niveau 0 à nouveau
      Next
    Next
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux, MacOS X


UseGadgetList()

Syntaxe

UseGadgetList(WindowID)
Description
Utilise la fenêtre spécifiée comme GadgetList par défaut. 'WindowID' peut être obtenu facilement avec la commande WindowID().

OS Supportés

Windows, Linux, MacOS X


WebGadget()

Syntaxe

Resultat = WebGadget(#Gadget, x, y, Largeur, Hauteur, URL$ [, Options])
Description
Crée un gadget 'Navigateur Internet' (WebGadget) dans la GadgetList. Si #PB_Any est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'. #Gadget est le numéro du gadget renvoyé par la fonction EventGadget(). x et y représentent la position de la boîte à onglets dans la fenêtre, Largeur et Hauteur, ses dimensions.

- SetGadgetText(): Change l'URL.
- GetGadgetText(): Renvoie l'URL actuelle.
- SetGadgetState(): Effectue une action sur le gadget. 'Etat' peut prendre une des valeurs suivantes:
  #PB_Web_Back   : Retour en arrière dans la navigation.
  #PB_Web_Forward: Avance d'un pas dans la navigation.
  #PB_Web_Stop   : Arrête le chargement de la page.
  #PB_Web_Refresh: Recharge la page actuelle.
Le paramètre facultatif 'Options' peut être une combinaison des constantes suivantes:
  #PB_Web_Mozilla: Utilise l'ActiveX Mozilla à la place de IE (Seulement pour Windows)
Note: Sur Microsoft Windows, ce gadget utilise l'object ActiveX Internet Explorer 4.0+. IE 4.0 ou plus se doit d'être présent sur le système (déjà présent sur Win98/Me et Win2000/XP). Si IE n'est pas présent, WebGadget renvoie 0. Le fichier ATL.dll, présent dans le répertoire PureBasic\Compilers\ est nécessaire (à mettre dans le même répertoire que l'exécutable). Comme alternative, l'ActiveX Mozilla peut être utilisée à la place d'Internet Explorer (http://www.iol.ie/~locka/mozilla/mozilla.htm) si l'option #PB_Web_Mozilla est spécifiée (l'ActiveX Mozilla doit être installée séparément car elle n'est pas fournie avec FireFox ou la suite Mozilla).

Exemple:

  If OpenWindow(0,0,0,600,300,"WebGadget",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    WebGadget(0,10,10,580,280,"http://www.purebasic.com")
    ; Note: si vous désirez utiliser un fichier local, changez le dernier paramètre en "file://" + chemin + nomdufichier
    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux (GTK+2), MacOS X


Help

PureBasic - Help

General

L'aide (help) est un composant clé d'un logiciel. Cela permet à l'utilisateur d'en découvrir facilement et efficacement les fonctions. PureBasic permet d'afficher des fichiers d'aide normalisés traitant un niveau global et un niveau contextuel.

Sous Microsoft Windows, deux types de formats sont supportés: .hlp (ancien format) et .chm (nouveau format compatible HTML).

Sommaire des commandes

CloseHelp
OpenHelp

Exemple

Help.pb

OS Supportés

Windows, MacOS X, AmigaOS

Guide de référence - Index


CloseHelp()

Syntaxe

CloseHelp()
Description
Ferme la fenêtre d'aide préalablement ouverte avec OpenHelp().

OS Supportés

Windows, MacOS X, AmigaOS


OpenHelp()

Syntaxe

OpenHelp(NomFichier$, Theme$)
Description
Ouvre et affiche une fenêtre d'aide. Si Theme$ n'est pas une chaîne nulle, l'aide s'affiche directement à la page spécifiée (très utile pour l'aide en ligne / contextuelle).

Exemple:

   OpenHelp("help.chm",  "index.htm")
   OpenHelp("help.chm",  "print.txt")
Sous Microsoft Windows, deux types de formats sont supportés: .hlp (ancien format) et .chm (nouveau format compatible HTML).

OS Supportés

Windows, MacOS X, AmigaOS


Image

PureBasic - Image

General

Les images sont des objets graphiques qui peuvent être affichés dans une fenêtre ou dans un gadget. Actuellement, PureBasic accepte les images aux formats BMP, Icône (.ico) et tous les autres formats qui sont supportés via la bibliothèque ImagePlugin.

Windows: les icônes doivent être utilisées pour avoir de la transparence dans les gadgets et les toolbars.

Linux: les PNG avec alpha-channel doivent être utilisées pour avoir de la transparence dans les gadgets et les toolbars.

MacOS X: les PNG avec alpha-channel doivent être utilisées pour avoir de la transparence dans les gadgets et les toolbars. L'alpha-channel est complètement préservé, ce qui permet d'afficher des effets d'ombre pour les images.

Sommaire des commandes

CatchImage
CopyImage
CreateImage
FreeImage
GrabImage
ImageDepth
ImageHeight
ImageID
ImageOutput
ImageWidth
IsImage
LoadImage
ResizeImage
SaveImage

Exemple

Image.pb

OS Supportés

Windows, Linux, MacOS X

Guide de référence - Index


CatchImage()

Syntaxe

Resultat = CatchImage(#Image, MemoryAddress [, Options])
Description
Charge l'image à partir de l'emplacement mémoire spécifié. Si #PB_Any est utilisé pour le paramètre '#Image', le numéro de la nouvelle image sera renvoyé dans 'Resultat'. L'image peut être au format BMP (non compressé), icône ou dans un des formats supportés par la bibliothèque ImagePlugin. Si le 'Resultat' est 0, l'image n'a pas pu être chargée.

Cette commande est utile pour inclure directement des images (logo etc..) directement dans l'exécutable avec la commande BASIC IncludeBinary. Néanmoins, n'abusez pas de cette fonctionnalité car une image incluse dans un exécutable consomme automatiquement de la mémoire supplémentaire (car tout l'exécutable, y compris les images, sont chargées en mémoire). Quand une image n'est plus utile, elle peut être détruite avec la commande FreeImage() pour libérer de la mémoire.

Le paramètre facultatif 'Options' peut prendre une des valeurs suivantes:
  #PB_Image_DisplayFormat: Convertit l'image dans le format graphique du bureau (écran), pour avoir
                           des performances optimales lors de l'affichage de l'image. Cela veut aussi dire que l'image
                           peut être dégradée par rapport au fichier original, par exemple si le bureau est
                           en mode 16 bits alors que l'image est en 24 bits.
Les commandes suivantes peuvent être utilisées pour activer automatiquement le support des formats d'images suivants:

UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTIFFImageDecoder()
UseTGAImageDecoder()

Exemple:

  CatchImage(0, ?Logo)
  End

  Logo: IncludeBinary "Logo.bmp"
Note: La taille des images est actuellement limitée à 8192x8192 pixels (si la mémoire disponible le permet).

OS Supportés

Windows, AmigaOS, Linux


CopyImage()

Syntaxe

CopyImage(#Image1, #Image2)
Description
Crée une nouvelle #Image2, copie exacte de l'#Image1. Si #PB_Any est utilisé pour le paramètre '#Image2', le numéro de la nouvelle image sera renvoyé dans 'Resultat'. Si l'#Image2 existait déjà, l'ancienne image est automatiquement supprimée.

OS Supportés

Windows, Linux, MacOS X


CreateImage()

Syntaxe

CreateImage(#Image, Largeur, Hauteur [, Profondeur])
Description
Crée une nouvelle image vide qui peut être utilisée par les fonctions 2DDrawing comme surface de dessin. Si #PB_Any est utilisé pour le paramètre '#Image', le numéro de la nouvelle image sera renvoyé dans 'Resultat'. Le format de l'image est celui de l'écran courant: DrawImage() peut servir à afficher cette image dans une fenêtre par exemple.

Si le paramètre optionel 'Profondeur' est omis ou égal à #PB_Image_DisplayFormat, le format de l'image sera le même que celui du bureau (écran). Dans ce mode, les images sont plus rapide à afficher, mais il peut y avoir des pertes au niveaux des couleurs, par exemple si l'image est en 32 bits alors que le bureau est en 16 bits. Les autres valeurs valides pour 'Profondeur' sont: 1, 2, 4, 8, 16, 24 et 32 bits. Lors de la manipulation des images riches en couleurs, il est conseillé d'utiliser une profondeur de 24 ou 32 bits pour éviter une perte d'information.

OS Supportés

Windows, Linux, MacOS X


FreeImage()

Syntaxe

FreeImage(#Image)
Description
Supprime l'image spécifiée par #Image et libère la mémoire qui lui était associée.

OS Supportés

Windows, Linux, MacOS X


GrabImage()

Syntaxe

GrabImage(#Image1, #Image2, x, y, Largeur, Hauteur)
Description
Crée une nouvelle #Image2 avec la zone sélectionnée de l'#Image1. Si #PB_Any est utilisé pour le paramètre '#Image2', le numéro de la nouvelle image sera renvoyé dans 'Resultat'.

OS Supportés

Windows, Linux, MacOS X


ImageDepth()

Syntaxe

Resultat = ImageDepth(#Image)
Description
Renvoie le niveau de couleurs de l'#Image spécifiée. Ce niveau est mesuré en nombre de plans-couleurs que l'image possède. Par exemple, une image dont les couleurs sont codées sur 24 bits (16 millions de couleurs possibles) renverra la valeur 24. Une image en 256 couleurs renverra 8 (codage sur 8 bits). Une image en noir et blanc renverra 1.

OS Supportés

Windows, Linux, MacOS X


ImageHeight()

Syntaxe

Hauteur = ImageHeight(#Image)
Description
Renvoie la hauteur en pixels de l'#Image spécifiée.

OS Supportés

Windows, Linux, MacOS X


ImageID()

Syntaxe

Resultat = ImageID(#Image)
Description
Renvoie l'identifiant système de l'#Image spécifiée.

OS Supportés

Windows, Linux, MacOS X


ImageOutput()

Syntaxe

OutputID = ImageOutput(#Image)
Description
Renvoie l'identifiant 'OutputID' nécessaire pour la commande StartDrawing(). Toutes le fonctions de dessins de la bibliothèque 2DDrawing sont ainsi disponibles. Cette fonction ne peut pas être utilisée si l'image est une icône.

OS Supportés

Windows, Linux, MacOS X


ImageWidth()

Syntaxe

Largeur = ImageWidth(#Image)
Description
Renvoie la largeur en pixels de l'#Image spécifiée.

OS Supportés

Windows, Linux, MacOS X


IsImage()

Syntaxe

Resultat = IsImage(#Image)
Description
Teste si l'#Image est correctement initialisée. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, Linux, MacOS X


LoadImage()

Syntaxe

Resultat = LoadImage(#Image, FichierImage$ [, Options])
Description
Lit l'image contenue dans FichierImage$. Si #PB_Any est utilisé pour le paramètre '#Image', le numéro de la nouvelle image sera renvoyé dans 'Resultat'. L'image peut être au format BMP (non compressé), icône ou dans un des formats supportés par la bibliothèque ImagePlugin. Si la fonction renvoie 0, le chargement a échoué, sinon, tout va bien.

Par défaut, le format de l'image sera 24 bits (ou 32 bits si le fichier supporte l'alpha-channel, comme le PNG et le TIFF).

Le paramètre facultatif 'Options' peut prendre une des valeurs suivantes:
  #PB_Image_DisplayFormat: Convertit l'image dans le format graphique du bureau (écran), pour avoir
                           des performances optimales lors de l'affichage de l'image. Cela veut aussi dire que l'image
                           peut être dégradée par rapport au fichier original, par exemple si le bureau est
                           en mode 16 bits alors que l'image est en 24 bits.
Les commandes suivantes peuvent être utilisées pour activer automatiquement davantage de formats d'images:

UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTIFFImageDecoder()
UseTGAImageDecoder()

OS Supportés

Windows, Linux, MacOS X


ResizeImage()

Syntaxe

ResizeImage(#Image, Largeur, Hauteur [, Mode])
Description
Redimensionne l'#Image conformément aux largeur et hauteur spécifiées (en pixels).

Le paramètre optionel 'Mode' peut prendre une des valeurs suivantes:
  #PB_Image_Smooth: Redimensionne l'image avec interpolation (mode par défaut).
  #PB_Image_Raw   : Redimensionne l'image sans interpolation (peut donner des résultats peu satisfaisants).

OS Supportés

Windows, Linux, MacOS X


SaveImage()

Syntaxe

Result = SaveImage(#Image, NomFichier$ [, ImagePlugin [, Options]])
Description
Sauvegarge l'#Image sur le disque, à l'endroit indiqué par 'NomFichier$'. Par défaut, le format de l'image sera en BMP 24 bits. Si 'Resultat' = 0, la fonction a échoué. Le paramètre 'ImagePlugin' est facultatif et peut prendre l'une des constantes suivantes:
  #PB_ImagePlugin_BMP  : Enregistre l'image en BMP.
  #PB_ImagePlugin_JPEG : Enregistre l'image en JPEG (la commande UseJPEGImageEncoder() doit être utilisée)
  #PB_ImagePlugin_PNG  : Enregistre l'image en PNG  (la commande UsePNGImageEncoder() doit être utilisée)
Le paramètre 'Options' est facultatif dont l'usage est dépendant du plugin choisi. Il est possible de régler la qualité d'une image à l'aide d'une valeur allant de 0 (plus mauvaise qualité) à 10 (qualité maximale). Seul le plugin JPEG supporte cette option (la qualité par défaut est fixée à 7 si aucune option n'est spécifiée avec l'encodeur JPEG).

OS Supportés

Windows, Linux, MacOS X


ImagePlugin

PureBasic - ImagePlugin

General

PureBasic supporte différents formats d'images grâce à un système de plugins dynamiques. Seul l'encodeur ou le décodeur nécessaire sera intégré au fichier exécutable, réduisant ainsi considérablement sa taille. Par exemple, si vous avez seulement besoin du format JPEG, seule la routine concernant ce format sera utilisée. Une autre caractéristique intéressante est l'auto-détection du format de fichier, si plusieurs décodeurs sont utilisés. Les commandes suivantes supportent les plugins d'images: LoadImage(), CatchImage(), SaveImage(), LoadSprite() CatchSprite(), et SaveSprite().

Sommaire des commandes

UseJPEGImageDecoder
UseJPEGImageEncoder
UsePNGImageDecoder
UsePNGImageEncoder
UseTGAImageDecoder
UseTIFFImageDecoder

Exemple

ImagePlugin.pb

OS Supportés

Windows, Linux, MacOS X

Guide de référence - Index


UseJPEGImageDecoder()

Syntaxe

UseJPEGImageDecoder()
Description
Active le support du format JPEG (Join Picture Expert Group) pour les commandes CatchImage(), LoadImage(), CatchSprite() et LoadSprite(). Toutes les variantes du JPEG sont supportées, y compris la forme progressive. Le format de compression JPEG est dit 'destructif', ce qui veut dire que de l'information (plus ou moins essentielle) est perdue lors du processus de compression, permettant par la même occasion de diminuer considérablement la taille du fichier. C'est actuellement l'un des meilleurs formats de compression de sa catégorie, utilisé principalement sur internet et dans le monde de la photographie.

OS Supportés

Windows, Linux, MacOS X


UseJPEGImageEncoder()

Syntaxe

UseJPEGImageEncoder()
Description
Active le support du format JPEG (Join Picture Expert Group) pour les commandes SaveImage() and SaveSprite(). Le format de compression JPEG est dit 'destructif', ce qui veut dire que de l'information (plus ou moins essentielle) est perdue lors du processus de compression, permettant par la même occasion de diminuer considérablement la taille du fichier. C'est actuellement l'un des meilleurs formats de compression de sa catégorie, utilisé principalement sur internet et dans le monde de la photographie.

OS Supportés

Windows, Linux, MacOS X


UsePNGImageDecoder()

Syntaxe

UsePNGImageDecoder()
Description
Active le support du format PNG (Portable Network Graphic) pour les commandes CatchImage(), LoadImage(), CatchSprite() et LoadSprite(). Toutes les variantes du PNG sont supportés, y compris la forme progressive. Le format PNG utilise un algorithme de compression non-destructif, ce qui veut dire que l'intégralité de l'information est conservée. C'est actuellement le meilleur format pour stocker des images sans perte d'information. Si une couche alpha (alphachannel) est présente dans l'image, elle ne sera pas prise en compte.

OS Supportés

Windows, Linux, MacOS X


UsePNGImageEncoder()

Syntaxe

UsePNGImageEncoder()
Description
Active le support du format PNG (Portable Network Graphic) pour les commandes SaveImage() and SaveSprite(). Le format PNG utilise un algorithme de compression non-destructif, ce qui veut dire que l'intégralité de l'information est conservée. C'est actuellement le meilleur format pour stocker des images sans perte d'information. Si une couche alpha (alphachannel) est présente dans l'image, elle ne sera pas prise en compte.

OS Supportés

Windows, Linux, MacOS X


UseTGAImageDecoder()

Syntaxe

UseTGAImageDecoder()
Description
Active le support du format TGA (Targa) pour les commandes CatchImage(), LoadImage(), CatchSprite() et LoadSprite(). Le format TGA utilise un algorithme de compression non-destructif, ce qui veut dire que l'intégralité de l'information est conservée. La taille des images TGA est souvent très élévée car l'algorithme de compression (quand il est utilisé) est peu performant (RLE). Ce format est principalement utilisé dans le monde de la 3D car c'était l'un des premiers formats à intégrer une couche alpha directement dans l'image. Si une couche alpha (alphachannel) est présente dans l'image, elle ne sera pas prise en compte.

OS Supportés

Windows, Linux, MacOS X


UseTIFFImageDecoder()

Syntaxe

UseTIFFImageDecoder()
Description
Active le support du format TIFF pour les commandes CatchImage(), LoadImage(), CatchSprite() et LoadSprite(). Le format TIFF est très complexe et peut regrouper différents sous-algorithmes de compressions tels que le JPEG, LZW, etc... Toutes les variantes du TIFF sont supportées, rendant l'éxécutable relativement imposant.

OS Supportés

Windows, Linux, MacOS X


Library

PureBasic - Library

General

Les bibliothèques sont des composants partagés du système d'exploitation contenant des fonctions spécifiques à l'intention des programmeurs. Par exemple, une bibliothèque peut contenir des commandes pour traiter et manipuler facilement des images. Chaque système d'exploitation a ses propres bibliothèques partagées pour faciliter la vie du programmeur. Avec PureBasic, il est possible d'utiliser ces bibliothèques tierces facilement et dynamiquement !

La raison pour laquelle les bibliothèques sont si importantes, c'est qu'elles évitent au programmeur d'avoir à reprogrammer sans cesse les mêmes routines. Elle sont conçues pour pouvoir être utilisées par n'importe quel programme, en utilisant un minimum de mémoire (si par exemple 10 programmes utilisent la même bibliothèque, elle ne sera chargée qu'une seule fois en mémoire).

Un autre avantage est la possibilité de faire évoluer un programme sans changer son exécutable (en mettant à jour uniquement la bibliothèque).

Sous Windows, ces bibliothèques sont bien connues sous le nom de 'DLL' (Dynamically Linked Library).

Sommaire des commandes

CallCFunction
CallCFunctionFast
CallFunction
CallFunctionFast
CloseLibrary
CountLibraryFunctions
ExamineLibraryFunctions
GetFunction
GetFunctionEntry
IsLibrary
LibraryFunctionAddress
LibraryFunctionName
LibraryID
NextLibraryFunction
OpenLibrary

Exemple

Library.pb

OS Supportés

Tous

Guide de référence - Index


CallCFunction()

Syntaxe

Result = CallCFunction(#Bibliotheque, FunctionName$ [,Parameter1 [, Parameter2...]])
Description
Appelle une fonction de la #Bibliotheque spécifiée, préalablement ouverte avec OpenLibrary(), en utilisant son nom. Le nombre de paramètres autorisés est quelconque mais doit correspondre exactement aux besoins de la fonction. Par exemple, si une fonction nécessite 2 paramètres, alors 2 paramètres doivent être passés même si les valeurs de ces 2 paramètres sont nulles. 'Resultat' contient le résultat de la fonction appelée.

Attention, cette fonction n'est utile que si la commande appelée a été déclaré avec la convention 'CDECL' ce qui n'est pas le standard sous Windows. La plupart des DLL sous Windows nécessite l'utilisation de CallFunction(). Par contre sous linux, toutes les fonctions des bibliothèques partagées sont en 'CDECL'.

Note: Pour l'instant le nombre maximum de paramètres est 20. De plus cette fonction n'est pas très flexible car elle n'accepte pas les paramètres de type double ou quad, et ne peut pas retourner des valeurs de type double, quad ou float. Il est vivement conseillé d'utiliser les prototypes à la place de cette fonction.

OS Supportés

Tous


CallCFunctionFast()

Syntaxe

Result = CallCFunctionFast(*FunctionPointer [,Parameter1 [, Parameter2...]])
Description
Appelle une fonction en utilisant son pointeur obtenu par GetFunction() ou par LibraryFunctionAddress(). Cette méthode est plus rapide. Le nombre de paramètres autorisés est quelconque mais doit correspondre exactement aux besoins de la fonction. Par exemple, si une fonction nécessite 2 paramètres, alors 2 paramètres doivent être passés même si les valeurs de ces 2 paramètres sont nulles. 'Resultat' contient le résultat de la fonction appelée.

Attention, cette fonction n'est utile que si la commande appelée a été déclaré avec la convention 'CDECL' ce qui n'est pas le standard sous Windows. La plupart des DLL sous Windows nécessite l'utilisation de CallFunction(). Par contre sous linux, toutes les fonctions des bibliothèques partagées sont en 'CDECL'.

Note: Pour l'instant le nombre maximum de paramètres est 20. De plus cette fonction n'est pas très flexible car elle n'accepte pas les paramètres de type double ou quad, et ne peut pas retourner des valeurs de type double, quad ou float. Il est vivement conseillé d'utiliser les prototypes à la place de cette fonction.

OS Supportés

Tous


CallFunction()

Syntaxe

Resultat = CallFunction(#Bibliotheque, NomFonction$ [,Parametre1 [, Parametre2...]])
Description
Appelle une fonction de la #Bibliotheque spécifiée, préalablement ouverte avec OpenLibrary(), en utilisant son nom. Le nombre de paramètres autorisés est quelconque mais doit correspondre exactement aux besoins de la fonction. Par exemple, si une fonction nécessite 2 paramètres, alors 2 paramètres doivent être passés même si les valeurs de ces 2 paramètres sont nulles. 'Resultat' contient le résultat de la fonction appelée.

Note: Pour l'instant le nombre maximum de paramètres est 20. De plus cette fonction n'est pas très flexible car elle n'accepte pas les paramètres de type double ou quad, et ne peut pas retourner des valeurs de type double, quad ou float. Il est vivement conseillé d'utiliser les prototypes à la place de cette fonction.

OS Supportés

Tous


CallFunctionFast()

Syntaxe

Resultat = CallFunctionFast(*PointeurFonction [,Parametre1 [, Parametre2...]])
Description
Appelle une fonction en bibliothèque en utilisant son pointeur obtenu par GetFunction() ou par LibraryFunctionAddress(). Cette méthode est plus rapide. Le nombre de paramètres autorisés est quelconque mais doit correspondre exactement aux besoins de la fonction. Par exemple, si une fonction nécessite 2 paramètres, alors 2 paramètres doivent être passés même si les valeurs de ces 2 paramètres sont nulles. 'Resultat' contient le résultat de la fonction appelée.

Note: Pour l'instant le nombre maximum de paramètres est 20. De plus cette fonction n'est pas très flexible car elle n'accepte pas les paramètres de type double ou quad, et ne peut pas retourner des valeurs de type double, quad ou float. Il est vivement conseillé d'utiliser les prototypes à la place de cette fonction.

OS Supportés

Tous


CloseLibrary()

Syntaxe

CloseLibrary(#Bibliotheque)
Description
Ferme #Bibliotheque spécifiée et libère la mémoire préalablement allouée.

OS Supportés

Tous


CountLibraryFunctions()

Syntaxe

Resultat = CountLibraryFunctions(#Bibliotheque)
Description
Renvoie le nombre de fonctions contenues dans la bibliothèque. La bibliothèque doit être ouverte avec OpenLibrary() avant de pouvoir utiliser cette commande.

OS Supportés

Windows, Linux


ExamineLibraryFunctions()

Syntaxe

'Resultat' = ExamineLibraryFunctions(#Bibliotheque)
Description
Commence l'énumeration des fonctions contenues dans une #Bibliotheque. La bibliothèque doit être ouverte avec OpenLibrary() avant de pouvoir utiliser cette commande. Si le 'Resultat' n'est pas 0, alors l'énumeration avec NextLibraryFunction() peut commencer (Les commandes LibraryFunctionName() et LibraryFunctionAddress() permettant de récuperer les informations propres à chaque fonction).

OS Supportés

Windows, Linux


GetFunction()

Syntaxe

Resultat = GetFunction(#Bibliotheque, NomFonction$)
Description
Vérifie si #Bibliotheque, préalablement ouverte avec OpenLibrary(), contient la fonction spécifiée. Attention, le nom de la fonction est toujours sensible à la casse. Si 'Résultat' est à 0 alors la fonction n'a pas été trouvée, sinon on récupère le pointeur vers la fonction, ce qui est pratique pour l'utiliser avec CallFunctionFast().

OS Supportés

Tous


GetFunctionEntry()

Syntaxe

Resultat = GetFunctionEntry(#Bibliotheque, Index)
Description
Teste si la #Bibliotheque, préalablement ouverte avec OpenLibrary(), contient la fonction à l'index spécifié. Cette commande peut être utile pour accéder aux fonctions API non documentées, qui n'ont pas de nom de fonctions attribués. La valeur de l'index commence à partir de 0. Si une fonction est trouvée, 'Resultat' contiendra une valeur non nulle correspondant à l'adresse de la fonction, qui peut être utilisée avec CallFunctionFast() par exemple.

OS Supportés

Windows


IsLibrary()

Syntaxe

Resultat = IsLibrary(#Bibliotheque)
Description
Teste si la #Bibliotheque est correctement initialisée. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, Linux, MacOS X


LibraryFunctionAddress()

Syntaxe

Resultat = LibraryFunctionAddress()
Description
Renvoie l'adresse de la fonction de la bibliothèque en cours d'examen avec les commandes ExamineLibraryFunctions() et NextLibraryFunction().

Arguments

Aucun.

Valeur de retour

'Resultat' contient l'adresse en mémoire de la fonction de la bibliothèque, qui peut être utilisée avec les commandes CallFunctionFast() ou CallCFunctionFast().

OS Supportés

Windows, Linux


LibraryFunctionName()

Syntaxe

Resultat$ = LibraryFunctionName()
Description
Renvoie le nom de la fonction de la bibliothèque en cours d'examen avec les commandes ExamineLibraryFunctions() et NextLibraryFunction().

Arguments

Aucun.

Valeur de retour

Resultat$ contient le nom de la fonction de la bibliothèque, qui peut être utilisé avec les commandes CallFunction() ou CallCFunction().

OS Supportés

Windows, Linux


LibraryID()

Syntaxe

Resultat = LibraryID(#Bibliotheque)
Description
Renvoie l'identifiant unique du système (souvent appelé 'handle') de la bibliothèque spécifiée.

OS Supportés

Windows, Linux


NextLibraryFunction()

Syntaxe

Resultat = NextLibraryFunction()
Description
Cette fonction ne peut être utilisée qu'après l'appel avec succès de la commande ExamineLibraryFunctions(). Elle permet d'examiner une à une les fonctions contenues dans la bibliothèque. Le nom et l'adresse de chaque fonction peuvent être obtenus avec les commandes LibraryFunctionName() et LibraryFunctionAddress().

Arguments

Aucun.

Valeur de retour

'Resultat' est à zéro s'il n'y a plus de fonctions disponibles (fin de la liste). Il est différent de zéro tant qu'il reste des fonctions à examiner.

OS Supportés

Windows, Linux


OpenLibrary()

Syntaxe

Resultat = OpenLibrary(#Bibliotheque, NomFichier$)
Description
Ouvre la bibliothèque spécifiée. Si #PB_Any est utilisé pour le paramètre '#Bibliotheque', le numéro de la nouvelle bibliothèque sera renvoyé dans 'Resultat'. Si 'Resultat' est à 0, alors la bibliothèque n'a pu être ouverte (absente ou est corrompue).

OS Supportés

Tous


LinkedList

PureBasic - LinkedList

General

Les Listes Chaînées (Linked Lists) regroupent des objets qui sont alloués dynamiquement en fonction de vos besoins. Elles se présentent sous la forme de listes d'éléments totalement indépendants les uns des autres. Vous pouvez y ajouter un nombre infini d'éléments, insérer des éléments à une position choisie, en effacer, etc... Cette méthode de stockage d'information est très pratique et très souple. C'est la meilleure solution pour gérer des données dont vous ne connaissez pas le nombre à l'avance.

Avant de travailler avec les listes chaînées, vous devez les déclarer. Cela se fait avec le mot-clef NewList. Les structures sont également fréquemment utilisées pour enregistrer leur contenu.

Pour analyser le contenu d'une liste chaînée, l'usage des boucles est recommandé : For : Next, ForEach : Next, Repeat : Until ou While : Wend.

Sommaire des commandes

AddElement
ChangeCurrentElement
ClearList
CountList
DeleteElement
FirstElement
InsertElement
LastElement
ListIndex
NextElement
PreviousElement
ResetList
SelectElement
SwapElements

Exemple

LinkedList.pb

OS Supportés

Tous

Guide de référence - Index


AddElement()

Syntaxe

AddElement(ListeChainee())
Description
Ajoute un nouvel élément vide après l'élément courant de la ListeChainee() ou en tant que premier élément si la liste est vide. Ce nouvel élément devient l'élément courant de la liste.

Argument

ListeChainee() - Le nom de votre variable liste chaînée, créée à l'aide de la commande NewList. Les parenthèses sont obligatoires après le nom de la liste.

Valeur de retour

La valeur renvoyée par cette commande peut être utilisée pour déterminer si le nouvel élément a pu être ajouté ou non (si la mémoire est insuffisante par exemple). Si le nouvel élément a été créé, cette commande retournera une valeur différente de zéro. Si le nouvel élément n'a pu être créé, alors elle retournera la valeur zéro.

Pour programmeurs expérimentés:

La valeur renvoyée par cette commande est un pointeur vers le nouvel élément ou zéro si le nouvel élément n'a pu être crée. La structure de chaque élément est définie ci-dessous :
  Structure Element
    *Next.Element        ; Pointeur vers l'élément suivant de la liste ou zéro si c'est le dernier élément
    *Previous.Element    ; Pointeur vers l'élément précédent de la liste ou zéro si c'est le premier élément

    ; La structure utilisée par la liste suit directement ces 2 variables (ce qui implique que les
    ; données utilisateurs se situent à l'adresse du nouvel élément + 8 octets.
  EndStructure
Vous ne devriez pas changer les pointeurs du début de la liste, car ça casserait la structure interne de la liste.

Exemple:

  Structure Element
    *Next.Element        ; Pointeur vers l'élément suivant de la liste ou zéro si c'est le dernier élément
    *Previous.Element    ; Pointeur vers l'élément précédent de la liste ou zéro si c'est le premier élément

    ; La structure utilisée par la liste suit directement ces 2 variables (ce qui implique que les
    ; données utilisateurs se situent à l'adresse du nouvel élément + 8 octets.
  EndStructure
Vous ne devriez pas changer les pointeurs du début de la liste, car ça casserait la structure interne de la liste.

Exemple:

  ; La manière la plus simple d'utiliser AddElement
  NewList simple.w()
  AddElement(simple())    ; Crée le premier nouvel élément de la liste
  simple() = 23

  AddElement(simple())    ; La position courante est le premier élément, alors nous en ajoutons un à la deuxième position
  simple() = 45

  ; Ceci montre comment utiliser la valeur de retour de la fonction AddElement
  NewList experimentes.l()
  If AddElement(experimentes()) <> 0
    experimentes() = 12345
  Else
    MessageRequester("Erreur !", "Impossible d'allouer de la mémoire pour le nouvel élément", #PB_MessageRequester_OK)
  EndIf

  ; Une petite structure pour démontrer la description "programmeurs expérimentés" (ci-dessus)
  Structure Programmeur
    Nom.s
    Talent.b
  EndStructure

  Structure DingueDePureBasic
    *Next.DingueDePureBasic
    *Previous.DingueDePureBasic
    Nom.s      ; Le même champ que la structure 'Programmeur'
    Talent.b
  EndStructure

  NewList LesProgrammeurs.Programmeur()  ; La liste pour stocker les éléments

  *Element.DingueDePureBasic = AddElement(LesProgrammeurs())
  If *Element<>0
    *Element\Nom = "Dave"
    *Element\Talent = 3   ; Celui-là, c'est un féru de PureBasic ! ;)
  Else
    MessageRequester("Erreur !", "Impossible d'allouer de la mémoire pour le nouvel élément", #PB_MessageRequester_OK)
  EndIf

OS Supportés

Tous


ChangeCurrentElement()

Syntaxe

ChangeCurrentElement(ListeChainee(), *NouvelElement)
Description
Change l'élément courant de la liste spécifiée par le nouvel élément fourni. *NouvelElement doit être un pointeur vers un autre élément qui existe déjà dans la liste. Cette fonction est très utile pour mémoriser un élément et le réutiliser après avoir exécuté d'autres traitements. Elle doit être utilisée avec prudence, par des programmeurs expérimentés.

Arguments

ListeChainee() - Le nom de votre variable chaînée, créée à l'aide de la commande NewList. Les parenthèses sont obligatoires après le nom de la liste.

*NouvelElement - Le nouvel élément à placer à la position courante de la liste chaînée. Cette adresse devrait être récupérée seulement avec l'opérateur @ sur le nom de la liste et pas par une autre manière.

Valeur de retour

Aucune.

Exemple:

  *Ancien_Element = @MaListe()   ; On mémorise l'adresse de l'élément courant

  ResetList(MaListe())           ; Effectue une recherche de tous les éléments nommés
  While NextElement(MaListe())   ; "John" et les change en "J"
    If MaListe()\nom = "John"
      MaListe()\nom = "J"
    EndIf
  Wend

  ChangeCurrentElement(MaListe(), *Ancien_Element) ; Restitue l'ancien élément courant (mémorisé avant la recherche)

OS Supportés

Tous


ClearList()

Syntaxe

ClearList(ListeChainee())
Description
Efface tous les éléments de la liste spécifiée et libère la mémoire utilisée. Après l'appel de cette fonction, la liste reste utilisable, mais elle ne contient plus d'éléments.

Argument

ListeChainee() - Le nom de votre variable liste chaînée, créée à l'aide de la commande NewList. Les parenthèses sont obligatoires après le nom de la liste.

Valeur de retour

Aucune.

Exemple:

  NewList nombres.w()

  ; Une petite boucle pour ajouter plusieurs éléments à la liste
  For i=1 To 100
    AddElement(nombres())
    nombres() = i
  Next

  ; Preuve que les éléments ont été ajoutés à la liste
  MessageRequester("Information", "Il y a "+Str(CountList(nombres()))+" éléments dans la liste", #PB_MessageRequester_OK)

  ; Effacer la liste et montrer que la liste est vraiment vide
  ClearList(nombres())
  MessageRequester("Information", "Il y a "+Str(CountList(nombres()))+" élements dans la liste", #PB_MessageRequester_OK)
Note : PureBasic libèrera seulement la mémoire occupée par les éléments. Si la liste a été utilisée pour stocker des objets dynamiques, il n'est pas possible de le détecter (en PureBasic ou dans un autre langage). Dans ce cas, il convient de libérer tous ces objets avant la destruction de la liste.

OS Supportés

Tous


CountList()

Syntaxe

Resultat = CountList(ListeChainee())
Description
Renvoie dans Resultat le nombre d'éléments contenus dans la liste spécifiée. Cette fonction ne modifie pas l'élément courant. Elle est très rapide (elle utilise une valeur précalculée) et peut être utilisée en toute sécurité pour savoir si une liste est vide ou non.

Argument

ListeChainee() - Le nom de votre variable liste chaînée, créée à l'aide de la commande NewList. Les parenthèses sont obligatoires après le nom de la liste.

Valeur de retour

Le nombre total d'éléments dans la liste.

Exemple:

  NewList CompteMoi.w()

  ; Petite boucle pour ajouter quelques éléments à la liste.
  For i=0 To 10
    AddElement(CompteMoi())
    CompteMoi() = i * 23
  Next

  ; Affiche le nombre d'éléments qu'il y a dans la liste. J'espère que vous avez pensé
  ; à la même valeur que celle affichée par l'ordinateur ;)
  MessageRequester("Information", "Il y a "+Str(CountList(CompteMoi()))+" éléments dans la liste", #PB_MessageRequester_OK)

OS Supportés

Tous


DeleteElement()

Syntaxe

DeleteElement(ListeChainee() [, Options])
Description
Supprime l'élément courant de la liste spécifiée. Après l'appel de cette fonction, le nouvel élément courant est celui qui précédait l'élément supprimé. Si l'élément supprimé était le premier, alors il n'y a plus d'élément courant (la position de la liste est avant le premier élément, comme après un ResetList()). Pour conserver quoiqu'il arrive un élément courant valide après un DeleteElement(), il suffit d'utiliser la valeur 1 dans le paramètre 'Options'. Le nouvel élément est alors l'élément qui suivait l'élément supprimé. Si la liste ne contenait plus qu'un seul élément, alors il n'y a plus d'élément courant.

Argument

ListeChainee() - Le nom de votre variable liste chaînée, créée à l'aide de la commande NewList. Les parenthèses sont obligatoires après le nom de la liste.

Valeur de retour

Aucune.

Exemple:

  NewList personnes.s()

  AddElement(personnes()) : personnes() = "Tom"
  AddElement(personnes()) : personnes() = "Dick"
  AddElement(personnes()) : personnes() = "Harry"
  AddElement(personnes()) : personnes() = "Bob"

  FirstElement(personnes())     ; se déplace sur "Tom"
  DeleteElement(personnes(),1)  ; et le supprime. L'élément courant devient (paramètre 1 utilisé) celui qui suivait
  MessageRequester("Information", "La première personne de la liste est "+personnes(), #PB_MessageRequester_OK)

  LastElement(personnes())      ; se déplace vers "Bob"
  PreviousElement(personnes())  ; se déplace vers "Harry"
  DeleteElement(personnes())    ; et le supprime.Il y a un élément avant Harry, alors il devient l'élément courant
  MessageRequester("Information", "La personne actuellement pointée dans la liste est "+personnes(), #PB_MessageRequester_OK)

OS Supportés

Tous


FirstElement()

Syntaxe

FirstElement(ListeChainee())
Description
Le premier élément de la liste spécifiée devient l'élément courant.

Argument

ListeChainee() - Le nom de votre variable liste chaînée, créée à l'aide de la commande NewList. Les parenthèses sont obligatoires après le nom de la liste.

Valeur de retour

Si la liste est vide alors la valeur de retour de cette fonction est 0. Elle peut donc être utilisée pour vérifier si une liste est vide ou non. Pour programmeurs expérimentés:
La valeur renvoyée par cette commande est un pointeur vers le premier élément ou zéro si le premier élément n'existe pas. La structure de chaque élément est définie ci-dessous :
  Structure Element
    *Next.Element        ; Pointeur vers l'élément suivant de la liste ou zéro si c'est le dernier élément
    *Previous.Element    ; Pointeur vers l'élément précédent de la liste ou zéro si c'est le premier élément

    ; La structure utilisée par la liste suit directement ces 2 variables (ce qui implique que les
    ; données utilisateurs se situent à l'adresse du nouvel élément + 8 octets).
  EndStructure
Vous ne devriez pas changer les pointeurs du début de la liste, car ça casserait la structure interne de la liste.

Exemple:

  ; Un exemple d'utilisation simple
  NewList nombres.w()

  AddElement(nombres())
  nombres() = 5
  AddElement(nombres())
  nombres() = 8

  FirstElement(nombres())
  MessageRequester("Information", "La valeur du premier élément est "+Str(nombres()), #PB_MessageRequester_OK)

  ; Un exemple qui utilise la valeur de retour
  NewList nombres.w()

  If FirstElement(nombres()) <> 0
    MessageRequester("Information", "La valeur du premier élément est "+Str(nombres()), #PB_MessageRequester_OK)
  Else
    MessageRequester("Information", "La liste est vide", #PB_MessageRequester_OK)
  EndIf

  AddElement(nombres())
  nombres() = 5
  AddElement(nombres())
  nombres() = 8

  If FirstElement(nombres()) <> 0
    MessageRequester("Information", "La valeur du premier élément est "+Str(nombres()), #PB_MessageRequester_OK)
  Else
    MessageRequester("Information", "La liste est vide", #PB_MessageRequester_OK)
  EndIf

  ; Un exemple réservé aux programmeurs expérimentés
  NewList nombres.w()

  AddElement(nombres())
  nombres() = 5
  AddElement(nombres())
  nombres() = 8

  *element.w = FirstElement(nombres())
  If *element
    MessageRequester("Information", "La valeur du premier élément est "+Str(PeekW(*element+8)), #PB_MessageRequester_OK)
  Else
    MessageRequester("Information", "La liste est vide", #PB_MessageRequester_OK)
  EndIf

OS Supportés

Tous


InsertElement()

Syntaxe

InsertElement(ListeChainee())
Description
Insère un nouvel élément avant l'élément courant, ou au début de la liste si la liste est vide (c-a-d si elle ne contient pas d'élément). Ce nouvel élément devient l'élément courant de la liste.

Argument

ListeChainee() - Le nom de votre variable liste chaînée, créée à l'aide de la commande NewList. Les parenthèses sont obligatoires après le nom de la liste.

Valeur de retour

La valeur renvoyée par cette commande peut être utilisée pour déterminer si le nouvel élément a pu être ajouté ou non (si la mémoire est insuffisante par exemple). Si le nouvel élément a été créé, cette commande retournera une valeur différente de zéro. Si le nouvel élément n'a pu être créé, alors elle retournera la valeur zéro. Pour programmeurs expérimentés:
La valeur renvoyée par cette commande est un pointeur vers le nouvel élément ou zéro si le nouvel élément n'a pu être crée. La structure de chaque élément est définie ci-dessous :
  Structure Element
    *Next.Element        ; Pointeur vers l'élément suivant de la liste ou zéro si c'est le dernier élément
    *Previous.Element    ; Pointeur vers l'élément précédent de la liste ou zéro si c'est le premier élément

    ; La structure utilisée par la liste suit directement ces 2 variables (ce qui implique que les
    ; données utilisateurs se situent à l'adresse du nouvel élément + 8 octets).
  EndStructure
Vous ne devriez pas changer les pointeurs du début de la liste, car ça casserait la structure interne de la liste.

Exemple:

  ; La manière la plus simple d'utiliser InsertElement
  NewList simple.w()
  InsertElement(simple())    ; Crée le premier élément de la liste
  simple() = 23

  InsertElement(simple())    ; La position courant est le premier élément, nous ajoutons cet élément au début de la liste
  simple() = 45              ; L'ancien premier élément est maintenant le second élément de la liste

  ; Ceci montre comment utiliser la valeur de retour de InsertElement
  NewList experimentes.l()
  If InsertElement(experimentes()) <> 0
    experimentes() = 12345
  Else
    MessageRequester("Erreur !", "Impossible d'allouer de la mémoire pour le nouvel élément", #PB_MessageRequester_OK)
  EndIf

  Structure Programmeur
    Nom.s
    Talent.b
  EndStructure

  Structure DingueDePureBasic
    *Next.DingueDePureBasic
    *Previous.DingueDePureBasic
    Nom.s      ; Le même champ que la structure 'Programmeur'
    Talent.b
  EndStructure

  NewList LesProgrammeurs.Programmeur()  ; La liste pour stocker les éléments

  *Element.DingueDePureBasic = InsertElement(LesProgrammeurs())
  If *Element<>0
    *Element\Nom = "Dave"
    *Element\Talent = 3   ; Celui-là, c'est un féru de PureBasic ! ;)
  Else
    MessageRequester("Erreur !", "Impossible d'allouer de la mémoire pour le nouvel élément", #PB_MessageRequester_OK)
  EndIf

OS Supportés

Tous


LastElement()

Syntaxe

LastElement(ListeChainee())
Description
Le dernier élément de la liste spécifiée devient l'élément courant.

Argument

ListeChainee() - Le nom de votre variable liste chaînée, créée à l'aide de la commande NewList. Les parenthèses sont obligatoires après le nom de la liste.

Valeur de retour

Si la liste est vide alors la valeur de retour de cette fonction est 0. Elle peut donc être utilisée pour vérifier si une liste est vide ou non. Pour programmeurs expérimentés:
La valeur renvoyée par cette commande est un pointeur vers le dernier élément ou zéro si le dernier élément n'existe pas. La structure de chaque élément est définie ci-dessous :
  Structure Element
    *Next.Element        ; Pointeur vers l'élément suivant de la liste ou zéro si c'est le dernier élément
    *Previous.Element    ; Pointeur vers l'élément précédent de la liste ou zéro si c'est le premier élément

    ; La structure utilisée par la liste suit directement ces 2 variables (ce qui implique que les
    ; données utilisateurs se situent à l'adresse du nouvel élément + 8 octets).
  EndStructure
Vous ne devriez pas changer les pointeurs du début de la liste, car ça casserait la structure interne de la liste.

Exemple:

  ; Un exemple d'utilisation simple
  NewList nombres.w()

  AddElement(nombres())
  nombres() = 5
  AddElement(nombres())
  nombres() = 8

  LastElement(nombres())
  MessageRequester("Information", "La valeur du dernier élément est "+Str(nombres()), #PB_MessageRequester_OK)

  ; Un exemple qui utilise la valeur de retour
  NewList nombres.w()

  If LastElement(nombres()) <> 0
    MessageRequester("Information", "La valeur du dernier élément est "+Str(nombres()), #PB_MessageRequester_OK)
  Else
    MessageRequester("Information", "La liste est vide", #PB_MessageRequester_OK)
  EndIf

  AddElement(nombres())
  nombres() = 5
  AddElement(nombres())
  nombres() = 8

  If LastElement(nombres()) <> 0
    MessageRequester("Information", "La valeur du dernier élément est "+Str(nombres()), #PB_MessageRequester_OK)
  Else
    MessageRequester("Information", "La liste est vide", #PB_MessageRequester_OK)
  EndIf

  ; Un exemple réservé aux programmeurs expérimentés
  NewList nombres.w()

  AddElement(nombres())
  nombres() = 5
  AddElement(nombres())
  nombres() = 8

  *element.w = LastElement(nombres())
  If *element
    MessageRequester("Information", "La valeur du dernier élément est "+Str(PeekW(*element+8)), #PB_MessageRequester_OK)
  Else
    MessageRequester("Information", "La liste est vide", #PB_MessageRequester_OK)
  EndIf

OS Supportés

Tous


ListIndex()

Syntaxe

Index = ListIndex(ListeChainee())
Description
Retourne dans Index la position de l'élément courant de la liste spécifiée, sachant que le premier élément est en position 0. Cette commande est très rapide car elle utilise une valeur précalculée.

Argument

ListeChainee() - Le nom de votre variable liste chaînée, créée à l'aide de la commande NewList. Les parenthèses sont obligatoires après le nom de la liste.

Valeur de retour

Un nombre indiquant la position actuelle de l'élément courant dans la liste. Le premier élément a la position 0, le deuxième la position 1, etc.. Une valeur de -1 indique qu'il n'y a pas d'élément courant (soit la liste est vide, soit les limites de la liste on été franchies à l'aide des commandes PreviousElement(), NextElement() ou ResetList().

Exemple:

  NewList fruit.s()

  AddElement(fruit()) : fruit() = "oranges"
  AddElement(fruit()) : fruit() = "bananes"
  AddElement(fruit()) : fruit() = "pommes"
  AddElement(fruit()) : fruit() = "poires"

  FirstElement(fruit())
  MessageRequester("Fruit : "+fruit(), "Maintenant à la position "+Str(ListIndex(fruit())),  #PB_MessageRequester_OK)

  NextElement(fruit())
  MessageRequester("Fruit : "+fruit(), "Maintenant à la position "+Str(ListIndex(fruit())),  #PB_MessageRequester_OK)

  NextElement(fruit())
  MessageRequester("Fruit : "+fruit(), "Maintenant à la position "+Str(ListIndex(fruit())),  #PB_MessageRequester_OK)

  NextElement(fruit())
  MessageRequester("Fruit : "+fruit(), "Maintenant à la position "+Str(ListIndex(fruit())),  #PB_MessageRequester_OK)

OS Supportés

Tous


NextElement()

Syntaxe

Resultat = NextElement(ListeChainee())
Description
Passe de l'élément courant à l'élément suivant de la liste, ou au premier élement si vous avez précédement fait appel à ResetList()

Argument

ListeChainee() - Le nom de votre variable liste chaînée, créée à l'aide de la commande NewList. Les parenthèses sont obligatoires après le nom de la liste.

Valeur de retour

La valeur renvoyée par cette commande peut être utilisée pour déterminer si l'élément suivant existe ou pas (il n'existera pas si vous êtes à la fin de la liste). Si l'élément suivant existe, la valeur renvoyée est différente de zéro. Si l'élément suivant n'existe pas alors la valeur renvoyée sera zéro. Pour programmeurs expérimentés: La valeur renvoyée par cette commande est un pointeur vers le nouvel élément ou zéro si l'élément suivant n'existe pas. La structure de chaque élément est définie ci-dessous :
  Structure Element
    *Next.Element        ; Pointeur vers l'élément suivant de la liste ou zéro si c'est le dernier élément
    *Previous.Element    ; Pointeur vers l'élément précédent de la liste ou zéro si c'est le premier élément

    ; La structure utilisée par la liste suit directement ces 2 variables (ce qui implique que les
    ; données utilisateurs se situent à l'adresse du nouvel élément + 8 octets).
  EndStructure
Vous ne devriez pas changer les pointeurs du début de la liste, car ça casserait la structure interne de la liste.

Exemple:

  NewList scores.w()

  For i=1 To 10
    AddElement(scores())
    scores() = 100 - i
  Next

  ResetList(scores())
  While NextElement(scores())
    ; Ceci est correct car le premier appel à NextElement() va déplacer l'élément courant vers le premier élément de la liste
    MessageRequester("Score", Str(scores()), #PB_MessageRequester_OK)
  Wend

OS Supportés

Tous


PreviousElement()

Syntaxe

Resultat = PreviousElement(ListeChainee())
Description
L'élément précédent dans la liste spécifiée devient l'élément courant. Cette fonction renvoie dans Resultat l'adresse du nouvel élément courant ou 0 s'il n'y a pas d'élément précédent ou s'il n'y a pas d'éléments dans la liste.

Argument

ListeChainee() - Le nom de votre variable liste chaînée, créée à l'aide de la commande NewList. Les parenthèses sont obligatoires après le nom de la liste.

Valeur de retour

La valeur renvoyée par cette commande peut être utilisée pour déterminer si l'élément précédent existe ou pas (il n'existera pas si vous êtes au début de la liste). Si l'élément précédent existe, cette commande retournera une valeur différente de zéro. Si l'élément précédent n'existe pas alors la valeur renvoyée sera zéro. Pour programmeurs expérimentés:
La valeur renvoyée par cette commande est un pointeur vers l'élément précédent ou zéro si l'élément précédent n'existe pas. La structure de chaque élément est définie ci-dessous :
  Structure Element
    *Next.Element        ; Pointeur vers l'élément suivant de la liste ou zéro si c'est le dernier élément
    *Previous.Element    ; Pointeur vers l'élément précédent de la liste ou zéro si c'est le premier élément

    ; La structure utilisée par la liste suit directement ces 2 variables (ce qui implique que les
    ; données utilisateurs se situent à l'adresse du nouvel élément + 8 octets).
  EndStructure
Vous ne devriez pas changer les pointeurs du début de la liste, car ça casserait la structure interne de la liste.

Exemple:

  NewList nombres.w()

  For i=1 To 10
    AddElement(nombres())
    nombres() = i
  Next

  Repeat
    MessageRequester("Nombre ", Str(nombres()), #PB_MessageRequester_OK)
  Until PreviousElement(nombres()) = 0

OS Supportés

Tous


ResetList()

Syntaxe

ResetList(ListeChainee())
Description
Change l'index de l'élément courant et le place avant le premier élément de la liste. Donc il n'y a plus d'éléments de valides. C'est particulierement utile en combinaison avec 'While' et NextElement().

Argument

ListeChainee() - Le nom de votre variable liste chaînée, créée à l'aide de la commande NewList. Les parenthèses sont obligatoires après le nom de la liste.

Valeur de retour

Aucune

Exemple:

  NewList Amis.s()

  AddElement(Amis())
  Amis() = "Arnaud"

  AddElement(Amis())
  Amis() = "Seb"

  ResetList(Amis())
  While NextElement(Amis())
    Debug Amis() ; Affiche tous les éléments de la liste
  Wend

OS Supportés

Tous


SelectElement()

Syntaxe

SelectElement(ListeChainee(), Position)
Description
Déplace l'élément courant de la liste à la position spécifiée. Le premier élement de la liste est à la position 0, le suivant à la position 1 et ainsi de suite. Ceci est très utile si vous souhaitez sauter directement à une position précise de la liste au lieu d'y aller en parcourant les éléments un à un jusqu'à la position souhaitée.

Arguments

ListeChainee() - Le nom de votre variable liste chaînée, créée à l'aide de la commande NewList. Les parenthèses sont obligatoires après le nom de la liste.

Position - La position de l'élément à sélectionner dans la liste en sachant que le premier élément se situe à la position 0, le deuxième à la position 1, etc.. Assurez-vous de ne pas spécifier une position située en dehors de la liste (valeur négative ou supérieure à CountList -1) !

Valeur de retour

Aucune

Exemple:

  NewList MaListe.l()

  AddElement(MaListe()) : MaListe() = 23
  AddElement(MaListe()) : MaListe() = 56
  AddElement(MaListe()) : MaListe() = 12
  AddElement(MaListe()) : MaListe() = 73

  SelectElement(MaListe(), 0)
  MessageRequester("Position", "A la position 0, la valeur est "+Str(MaListe()),0)

  SelectElement(MaListe(), 2)
  MessageRequester("Position", "A la position 2, la valeur est "+Str(MaListe()),0)

  SelectElement(MaListe(), 1)
  MessageRequester("Position", "A la position 1, la valeur est "+Str(MaListe()),0)

  SelectElement(MaListe(), 3)
  MessageRequester("Position", "A la position 3, la valeur est "+Str(MaListe()),0)

OS Supportés

Tous


SwapElements()

Syntaxe

SwapElements(linkedlist(), *PremierElement, *DeuxiemeElement)
Description
Echange la place de 2 élements de la liste spécifiée. Les paramètres '*PremierElement' et '*DeuxiemeElement' doivent être des pointeurs vers des éléments valides, appartenant à la liste en question. Cette fonction est particulièrement utile pour réorganiser ou trier rapidement une liste. Elle doit être utilisée avec prudence, par des programmeurs expérimentés.

Arguments

ListeChainee() - Le nom de la liste chainée, créée à l'aide de la commande NewList. Les parenthèses sont obligatoires après le nom de la liste.

*PremierElement - Adresse du premier élément à échanger. Cette adresse devrait être récupérée seulement avec l'opérateur @ sur le nom de la liste et pas par une autre manière.

*DeuxiemeElement - Adresse du deuxième élément à échanger. Cette adresse devrait être récupérée seulement avec l'opérateur @ sur le nom de la liste et pas par une autre manière.

Valeur de retour

Aucune.

Exemple:

  NewList Nombres()

  For k=0 To 10
    AddElement(Nombres())
    Nombres() = k
  Next

  SelectElement(Nombres(), 3) ; Sélectionne le 4ème élément
  *FirstElement = @Nombres()

  SelectElement(Nombres(), 9) ; Sélectionne le 10ème élément
  *SecondElement = @Nombres()

  ; Echange le 4ème et le 10ème
  ;
  SwapElements(Nombres(), *FirstElement, *SecondElement)

  ; Prouve-le
  ;
  ForEach Nombres()
    Debug Nombres()
  Next

OS Supportés

Windows, Linux, MacOS X


Math

PureBasic - Math

General

La bibliothèque Math propose des fonctions arithmétiques telles que Cos(), Sin(), Pow(), Log() etc... La plupart des commandes fonctionnent avec des nombres flottants (.f).

Sommaire des commandes

ACos
ASin
ATan
Abs
Cos
Int
Log
Log10
Pow
Round
Sin
Sqr
Tan

Exemple

Math.pb

OS Supportés

Windows, Linux, MacOS X

Guide de référence - Index


ACos()

Syntaxe

Resultat.f = ACos(Angle.f)
Description
Renvoie l'arc-cosinus (exprimé en radian) de l'angle (compris entre -1 et 1).

OS Supportés

Windows, Linux, MacOS X


ASin()

Syntaxe

Resultat.f = ASin(Angle.f)
Description
Renvoie l'arc-sinus (exprimé en radian) de l'angle (compris entre -1 et 1).

OS Supportés

Windows, Linux, MacOS X


ATan()

Syntaxe

Resultat.f = ATan(Angle.f)
Description
Renvoie l'arc-tangente (exprimé en radian) de l'angle (compris entre -1 et 1).

OS Supportés

Windows, Linux, MacOS X


Abs()

Syntaxe

Resultat.f = Abs(Nombre.f)
Description
Renvoie la valeur absolue (non signée) de la valeur flottante spécifiée. Cette fonction ne peut être utilisée correctement qu'avec des nombres flottants. Si un entier est passé en argument et que sa valeur est grande une perte de précision sera constatée. Une autre fonction sera proposée au seul usage des valeurs entières.

OS Supportés

Windows, Linux, MacOS X


Cos()

Syntaxe

Resultat.f = Cos(Angle.f)
Description
Renvoie le cosinus (exprimé en radian) de l'angle (compris entre -1 et 1).

OS Supportés

Windows, Linux, MacOS X


Int()

Syntaxe

Resultat = Int(Number.f)
Description
Renvoie la partie entière d'un nombre flottant.

Exemple
  Resultat = Int(10.565)  ; Retournera '10'

OS Supportés

Windows, Linux, MacOS X


Log()

Syntaxe

Resultat.f = Log(Nombre.f)
Description
Renvoie le logarithme naturel du nombre.

OS Supportés

Windows, Linux, MacOS X


Log10()

Syntaxe

Resultat.f = Log10(Nombre.f)
Description
Renvoie le logarithme base 10 du nombre.

OS Supportés

Windows, Linux, MacOS X


Pow()

Syntaxe

Resultat.f = Pow(Nombre.f, Puissance.f)
Description
Renvoie Nombre élevé à la puissance Puissance.

OS Supportés

Windows, Linux, MacOS X


Round()

Syntaxe

Resultat.f = Round(Nombre.f, Mode)
Description
Arrondi le nombre flottant spécifié selon le mode choisi. Si Mode = 0 le nombre est arrondi par défaut (partie entière seule). Si Mode = 1 le nombre est arrondi par excès.

Exemple:
  Result.f = Round(11.5, 0) ; donne 11
  Result.f = Round(11.5, 1) ; donne 12

OS Supportés

Windows, Linux, MacOS X


Sin()

Syntaxe

Resultat.f = Sin(Angle.f)
Description
Renvoie le sinus (exprimé en radian) de l'angle (compris entre -1 et 1).

OS Supportés

Windows, Linux, MacOS X


Sqr()

Syntaxe

Resultat.f = Sqr(Nombre.f)
Description
Renvoie la racine carrée du nombre spécifié.

OS Supportés

Windows, Linux, MacOS X


Tan()

Syntaxe

Resultat.f = Tan(Angle.f)
Description
Renvoie la tangente de l'angle spécifié en radian (de 0 à l'infini).

OS Supportés

Windows, Linux, MacOS X


Memory

PureBasic - Memory

General

Il est parfois très utile d'avoir un accès direct à la mémoire vive (RAM) de l'ordinateur pour exécuter et accélérer des routines gourmandes en temps d'exécution. Cette bibliothèque vous permet d'allouer un nombre quelconque de zones mémoire et de les utiliser directement avec PureBasic.

Sommaire des commandes

AllocateMemory
CompareMemory
CompareMemoryString
CopyMemory
CopyMemoryString
FreeMemory
MemorySize
MemoryStringLength
MoveMemory
PeekB
PeekC
PeekD
PeekF
PeekL
PeekQ
PeekS
PeekW
PokeB
PokeC
PokeD
PokeF
PokeL
PokeQ
PokeS
PokeW
ReAllocateMemory

Exemple

MemoryBank.pb

OS Supportés

Tous

Guide de référence - Index


AllocateMemory()

Syntaxe

*MemoryID = AllocateMemory(Taille)
Description
Alloue une zone mémoire contigüe de la taille spécifiée. Si la quantité de mémoire demandée est disponible, *MemoryID contiendra l'adresse de début de la zone mémoire, ou 0 si la zone n'a pu être allouée. La contenu de la nouvelle zone mémoire est toujours initialisé avec des 0.

Note: Toutes les zones mémoire créées sont automatiquement libérées à la fin du programme.

Exemple:
  *MemoryID = AllocateMemory(5000)
  If *MemoryID
    Debug "Starting address of the 5000 Byte memory area:"
    Debug *MemoryID
    PokeS(*MemoryID, "Store this string in the memory area")
    FreeMemory(*MemoryID)  ; will also be done automatically at the end of program
  Else
    Debug "Couldn't allocate the requested memory!"
  EndIf

OS Supportés

Tous


CompareMemory()

Syntaxe

Result = CompareMemory(*MemoryID1, *MemoryID2, Longueur)
Description
Compare deux zones mémoire et renvoie 1 si elles sont identiques ou 0 sinon. *MemoryID1 et *MemoryID2 sont des adresses mémoire, qui peuvent être obtenues par les commandes AllocateMemory() ou ReAllocateMemory().

OS Supportés

Tous


CompareMemoryString()

Syntaxe

Resultat = CompareMemoryString(*Texte1, *Texte2 [, Mode [, Longueur [, Options]]])
Description
Pour les programmeurs expérimentés seulement. Compare deux chaînes de caractères situées aux adresses spécifiées. Les chaînes de caractères doivent être terminées par un caractère nul (0) si la longueur n'est pas indiquée. Cette commande est très utile pour comparer à haute vitesse des chaînes de caractères dans un buffer.

'Mode' peut prendre l'une des valeurs suivantes:
  0: Comparaison tenant compte de la casse (a <> A). Valeur par défaut si 'Mode' est omis.
  1: Comparaison ne tenant pas compte de la casse (a = A)
'Resultat' peut prendre l'une des valeurs suivantes:
   0: Le 'Texte1' est égal au 'Texte2'.
  -1: Le 'Texte1' est inférieur au 'Texte2'.
   1: Le 'Texte1' est supérieur au 'Texte2'.
Le paramètre facultatif 'Options' peut prendre l'une des valeurs suivantes:
  #PB_Ascii  : Compare la chaîne de caractères ASCII, même si le programme est en mode unicode
  #PB_UTF8   : Compare la chaîne de caractères UTF-8 (que le programme soit en mode unicode ou ASCII)
  #PB_Unicode: Compare la chaîne de caractères Unicode, même si le programme est en mode ASCII
Note: quand le paramètre 'Options' est spécifié, la 'Longueur' peut être mise à -1, pour comparer la chaîne de caractères jusqu'à ce qu'un caractère null soit trouvé.

OS Supportés

Tous


CopyMemory()

Syntaxe

CopyMemory(SourceMemoryID, DestinationMemoryID, Longueur)
Description
Copie la zone mémoire située à l'adresse 'SourceMemoryID' dans la zone de mémoire destination.

Si les zones mémoires source et destination se chevauchent, il est préférable d'utiliser MoveMemory(), sinon le résultat peut être erroné.

OS Supportés

Tous


CopyMemoryString()

Syntaxe

Result = CopyMemoryString(*Addresse [, @*DestinationMemoryID])
Description
Pour programmeurs expérimentés. Copie le texte situé à l'adresse spécifiée dans la zone mémoire destination si elle est indiquée ou à la fin du tampon courant si elle est omise. Si '@*destinationmemoryid' est spécifié, la fonction se sert du contenu de la variable indiquée pour copier le 'Texte'. Cette variable est automatiquement mise à jour par la fonction, donc elle contiendra la valeur de fin de buffer. Le programmeur peut ainsi garder le contrôle sur son pointeur, tout en utilisant la fonction de copie de chaîne. Cela permet de manipuler des chaînes de caractères très rapidement.

Exemple:
  *Buffer = AllocateMemory(1000)
  *Pointer = *Buffer
  CopyMemoryString("Hello", @*Pointer)
  CopyMemoryString(" World")  ; This one will be put just after "Hello"
  *Pointer-2                  ; Come back from 2 characters (on the 'l' of 'World')
  CopyMemoryString("LD")      ; Finally the last letter will be uppercase
  Debug PeekS(*Buffer)

OS Supportés

Tous


FreeMemory()

Syntaxe

FreeMemory(*MemoryID)
Description
Libère une zone mémoire précédemment allouée par la fonction AllocateMemory() ou ReAllocateMemory(). Si la valeur de *MemoryID est -1, alors toutes les zones mémoire actuellement allouées seront libérées.

OS Supportés

Tous


MemorySize()

Syntaxe

Resultat = MemorySize(*MemoryID)
Description
Renvoie la longueur totale (en octets) de la zone de mémoire '*MemoryID'. Cette zone mémoire doit avoir été créée à l'aide de la commande AllocateMemory() ou ReAllocateMemory().

OS Supportés

Tous


MemoryStringLength()

Syntaxe

Resultat = MemoryStringLength(*Texte [, Options])
Description
Pour programmeurs expérimentés. Renvoie la longueur (en caractères) du texte situé à l'adresse spécifiée (et terminé par un caractère null). Si le paramètre 'Options' n'est pas spécifié, le texte est considéré comme un texte unicode si le programme est compilé en mode unicode, ou un texte ASCII si le programme est compilé en mode ASCII.

Le paramètre facultatif 'Options' peut prendre l'une des valeurs suivantes:
  #PB_Ascii  : Renvoie la longueur de la chaîne de caractères ASCII, même si le programme est en mode unicode
  #PB_UTF8   : Renvoie la longueur de la chaîne de caractères UTF-8 (que le programme soit en mode unicode ou ASCII)
  #PB_Unicode: Renvoie la longueur de la chaîne de caractères Unicode, même si le programme est en mode ASCII

OS Supportés

Tous


MoveMemory()

Syntaxe

MoveMemory(*SourceMemoryID, *DestinationMemoryID, Longueur)
Description
Copie la zone mémoire située à l'adresse 'SourceMemoryID' dans la zone de mémoire destination 'DestinationMemoryID' de la 'Longueur' indiquée.

Contrairement à CopyMemory(), les zones mémoires source et destination peuvent se chevaucher. Néanmoins, MoveMemory() est plus lent que CopyMemory(), donc il est préférable de l'utiliser que si c'est justifié.

OS Supportés

Tous


PeekB()

Syntaxe

Valeur = PeekB(*ZoneMemoire)
Description
Lit un byte (1 octet) depuis l'adresse mémoire spécifiée par *ZoneMemoire.

Cette fonction est réservée aux programmeurs confirmés.

OS Supportés

Tous


PeekC()

Syntaxe

Valeur = PeekC(*ZoneMemoire)
Description
Lit un caractère (1 octet en mode ascii, 2 octets en mode unicode) depuis l'adresse mémoire spécifiée par *ZoneMemoire.

Cette fonction est réservée aux programmeurs confirmés.

OS Supportés

Tous


PeekD()

Syntaxe

Valeur.d = PeekD(*ZoneMemoire)
Description
Lit un double (8 octets) depuis l'adresse mémoire spécifiée par *ZoneMemoire.

Cette fonction est réservée aux programmeurs confirmés.

OS Supportés

Tous


PeekF()

Syntaxe

Valeur.f = PeekF(*ZoneMemoire)
Description
Lit un float (4 octets) depuis l'adresse mémoire spécifiée par *ZoneMemoire.

Cette fonction est réservée aux programmeurs confirmés.

OS Supportés

Tous


PeekL()

Syntaxe

Valeur = PeekL(*ZoneMemoire)
Description
Lit un long (4 octets) depuis l'adresse mémoire spécifiée par *ZoneMemoire.

Cette fonction est réservée aux programmeurs confirmés.

OS Supportés

Tous


PeekQ()

Syntaxe

Valeur.q = PeekQ(*ZoneMemoire)
Description
Lit un quad (8 octets) depuis l'adresse mémoire spécifiée par *ZoneMemoire.

Cette fonction est réservée aux programmeurs confirmés.

OS Supportés

Tous


PeekS()

Syntaxe

Texte$ = PeekS(*ZoneMemoire [, Longueur [, Options]])
Description
Lit une chaîne de caractères commençant à l'adresse spécifiée par *ZoneMemoire. Cette chaîne doit être terminée par la valeur 0, sinon, la mémoire sera lue jusqu'à ce qu'un 0 soit rencontré. Une 'Longueur' maximale (en octet) peut être spécifiée. Si le paramètre 'Options' n'est pas spécifié, le texte est considéré comme un text unicode si le programme est compilé en mode unicode, ou un texte ASCII si le programme est compilé en mode ASCII.

Le paramètre facultatif 'Options' peut prendre l'une des valeurs suivantes:
  #PB_Ascii  : Lit une chaîne de caractères ASCII, même si le programme est en mode unicode
  #PB_UTF8   : Lit une chaîne de caractères UTF-8 (que le programme soit en mode unicode ou ASCII)
  #PB_Unicode: Lit une chaîne de caractères Unicode, même si le programme est en mode ASCII
Note: quand le paramètre 'Options' est spécifié, la 'Longueur' peut être mise à -1, pour lire la chaîne de caractères jusqu'à ce qu'un caractère null soit trouvé.

Cette fonction est réservée aux programmeurs confirmés.

OS Supportés

Tous


PeekW()

Syntaxe

Valeur = PeekW(*ZoneMemoire)
Description
Lit un word (2 octets) depuis l'adresse mémoire spécifiée par *ZoneMemoire.

Cette fonction est réservée aux programmeurs confirmés.

OS Supportés

Tous


PokeB()

Syntaxe

PokeB(*ZoneMemoire, Nombre)
Description
Ecrit un byte (1 octet) à l'adresse mémoire spécifiée par *ZoneMemoire.

Cette fonction est réservée aux programmeurs confirmés.

OS Supportés

Tous


PokeC()

Syntaxe

PokeC(*ZoneMemoire, Nombre)
Description
Ecrit un caractère (1 octet en mode ASCII, 2 octets en mode unicode) à l'adresse mémoire spécifiée par *ZoneMemoire.

Cette fonction est réservée aux programmeurs confirmés.

OS Supportés

Tous


PokeD()

Syntaxe

PokeD(*ZoneMemoire, Nombre.d)
Description
Ecrit un double (8 octets) à l'adresse mémoire spécifiée par *ZoneMemoire.

Cette fonction est réservée aux programmeurs confirmés.

OS Supportés

Tous


PokeF()

Syntaxe

PokeF(*ZoneMemoire, Nombre.f)
Description
Ecrit un float (4 octets) à l'adresse mémoire spécifiée par *ZoneMemoire.

Cette fonction est réservée aux programmeurs confirmés.

OS Supportés

Tous


PokeL()

Syntaxe

PokeL(*ZoneMemoire, Nombre)
Description
Ecrit un long (4 octets) à l'adresse mémoire spécifiée par *ZoneMemoire.

Cette fonction est réservée aux programmeurs confirmés.

OS Supportés

Tous


PokeQ()

Syntaxe

PokeQ(*ZoneMemoire, Nombre.q)
Description
Ecrit un quad (8 octets) à l'adresse mémoire spécifiée par *ZoneMemoire.

Cette fonction est réservée aux programmeurs confirmés.

OS Supportés

Tous


PokeS()

Syntaxe

PokeS(*ZoneMemoire, Texte$ [, Longueur [, Options]])
Description
Ecrit une chaîne de caractères, y comprit son caractère nul de fin de chaîne (0), à l'adresse *ZoneMémoire. Une 'Longueur' maximale (en octet) peut être spécifiée. Si le paramètre 'Options' n'est pas spécifié, le texte est considéré comme un texte unicode si le programme est compilé en mode unicode, ou un texte ASCII si le programme est compilé en mode ASCII.

Le paramètre facultatif 'Options' peut prendre l'une des valeurs suivantes:
  #PB_Ascii  : Ecrit la chaîne de caractères en ASCII, même si le programme est en mode unicode
  #PB_UTF8   : Ecrit la chaîne de caractères en UTF-8 (que le programme soit en mode unicode ou ASCII)
  #PB_Unicode: Ecrit la chaîne de caractères en Unicode, même si le programme est en mode ASCII
Note: quand le paramètre 'Options' est spécifié, la 'Longueur' peut être mise à -1, pour écrire toute la chaîne de caractère 'Texte$'.

Cette fonction est réservée aux programmeurs confirmés.

OS Supportés

Tous


PokeW()

Syntaxe

PokeW(*ZoneMemoire, Nombre.w)
Description
Ecrit un word (2 octets) à l'adresse mémoire spécifiée par *ZoneMemoire.

Cette fonction est réservée aux programmeurs confirmés.

OS Supportés

Tous


ReAllocateMemory()

Syntaxe

*MemoryID = ReAllocateMemory(*MemoryID, Taille)
Description
Alloue (si le paramètre *MemoryID est 0) ou re-alloue une zone continue de mémoire. Si la zone de mémoire était déjà allouée, alors son ancien contenu est conservé. Si la quantité de mémoire demandée est disponible, *MemoryID contiendra l'adresse de début de la zone mémoire, ou 0 si la zone n'a pu être allouée (dans ce cas, l'ancienne zone mémoire est toujours valide).

Note: Toutes les zones mémoire créées sont automatiquement libérées à la fin du programme.

Exemple:
  *MemoryID = AllocateMemory(1000)
  PokeS(*MemoryID, "Store this string")
  ; do something more with it here...
  ;
  *NewMemoryID = ReAllocateMemory(*MemoryID, 2000) ; need more memory
  If *NewMemoryID
    ; work with *NewMemoryID now with size 2000
    Debug "The old contents are still here:"
    Debug PeekS(*NewMemoryID)
    ;
    FreeMemory(*NewMemoryID)
  Else
    ; resizing failed, keep working with *MemoryID (size 1000)
    ;
    FreeMemory(*MemoryID)
  EndIf

OS Supportés

Tous


Menu

PureBasic - Menu

General

Il est très simple de gérer des menus avec PureBasic, et vous pourrez bien sûr paramétrer tout ce dont vous avez besoin.

Sommaire des commandes

CloseSubMenu
CreateMenu
CreatePopupMenu
DisableMenuItem
DisplayPopupMenu
FreeMenu
GetMenuItemState
GetMenuItemText
GetMenuTitleText
HideMenu
IsMenu
MenuBar
MenuHeight
MenuID
MenuItem
MenuTitle
OpenSubMenu
SetMenuItemState
SetMenuItemText
SetMenuTitleText

Exemple

Menu.pb
PopupMenu.pb

OS Supportés

Tous

Guide de référence - Index


CloseSubMenu()

Syntaxe

CloseSubMenu()
Description
Ferme le sous-menu actuel et revient au menu précédent. La fonction OpenSubMenu() doit avoir été appelée avant !

OS Supportés

Tous


CreateMenu()

Syntaxe

Resultat = CreateMenu(#Menu, WindowID)
Description
Crée un nouveau menu vide sur la fenêtre 'WindowID' qui porte le numéro #Menu et devient le menu en cours de création. Il est alors possible d'utiliser les fonctions MenuItem(), MenuBar(), etc... 'WindowID' peut être obtenu facilement grâce a la commande WindowID() de la librarie Window. Si #PB_Any est utilisé pour le paramètre '#Menu', le numéro du nouveau menu sera renvoyé dans 'Resultat'. Si le menu ne peut pas être créé, 'Resultat' prendra la valeur 0.

Pour gérer les évènements relatifs aux menus, voir la description des commandes suivantes:
WaitWindowEvent() (ou WindowEvent())
EventWindow()
EventMenu()

Exemple:
  If OpenWindow(0, 200, 200, 200, 100, "Menu Example")
    If CreateMenu(0, WindowID(0))
      MenuTitle("Project")
        MenuItem(1, "Open"   +Chr(9)+"Ctrl+O")
        MenuItem(2, "Save"   +Chr(9)+"Ctrl+S")
        MenuItem(3, "Save as"+Chr(9)+"Ctrl+A")
        MenuItem(4, "Close"  +Chr(9)+"Ctrl+C")
    EndIf
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


CreatePopupMenu()

Syntaxe

Resultat = CreatePopupMenu(#Menu)
Description
Crée un nouveau menu contextuel (PopUp) vide qui porte le numéro #Menu et devient le menu en cours de création. Il est alors possible d'utiliser les fonctions MenuItem(), MenuBar(), etc... La fonction DisplayPopupMenu() sera ensuite utilisée pour afficher ce menu contextuel à l'écran. Si #PB_Any est utilisé pour le paramètre '#Menu', le numéro du nouveau menu sera renvoyé dans 'Resultat'. Si le menu ne peut pas être créé, 'Resultat' prendra la valeur 0.

Pour gérer les évènements relatifs aux menus, voir la description des commandes suivantes:
WaitWindowEvent() (ou WindowEvent())
EventWindow()
EventMenu()

Exemple:
  If OpenWindow(0, 200, 200, 200, 120, "Popup-Menu Example")
    If CreatePopupMenu(0)      ; La création du menu contextuel commence...
      MenuTitle("Project")     ; Vous pouvez utiliser toutes les commandes relatives au menu,
        MenuItem(1, "Open")    ; comme si c'était un menu normal...
        MenuItem(2, "Save")
        MenuItem(3, "Save as")
        MenuItem(4, "Quit")
        MenuBar()
        OpenSubMenu("Recent files")
          MenuItem(5, "PureBasic.exe")
          MenuItem(6, "Test.txt")
        CloseSubMenu()
      MenuTitle("Edit")
      MenuTitle("Options")
    EndIf
    Repeat
      Select WaitWindowEvent()     ; Examine quel type d'évènement est survenu sur la fenêtre
        Case #WM_RButtonDown       ; Le bouton droit de la souris a été clické =>
          DisplayPopupMenu(0,WindowID(0))  ; On affiche le menu contextuel
        Case #PB_Event_Menu        ; Un élément du menu a été sélectionné
          Select EventMenu()     ; On recupère le numéro de cet élement...
            Case 1 : Debug "Menu: Open"
            Case 2 : Debug "Menu: Save"
            Case 3 : Debug "Menu: Save as"
            Case 4 : Quit = 1
            Case 5 : Debug "Menu: PureBasic.exe"
            Case 6 : Debug "Menu: Text.txt"
          EndSelect
        Case #PB_Event_CloseWindow
          Quit = 1
      EndSelect
    Until Quit = 1
  EndIf

OS Supportés

Tous


DisableMenuItem()

Syntaxe

DisableMenuItem(#Menu, Element, Etat)
Description
Active ou désactive l'élément du #Menu spécifié. Si Etat est à 1, l'élément est désactivé. Si Etat est à 0 l'élément est activé.

Exemple:
  If OpenWindow(0, 200, 200, 200, 100, "DisableMenuItem Example")
    If CreateMenu(0, WindowID(0))
      MenuTitle("Project")
        MenuItem(1, "Open")
        MenuItem(2, "Save")
        DisableMenuItem(0,2,1)     ; Désactive le second élément du menu ("Save")
    EndIf
    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


DisplayPopupMenu()

Syntaxe

DisplayPopupMenu(#Menu, WindowID [x, y])
Description
Affiche un #Menu contextuel déjà créé avec CreatePopupMenu() dans la fenêtre 'WindowID' sous le curseur de la souris. Les paramètres x,y sont optionnels et exprimés en pixels, à partir du coin supérieur gauche de l'écran.

Pour un exemple d'utilisation et l'image de prévisualisation, voir CreatePopupMenu().

OS Supportés

Tous


FreeMenu()

Syntaxe

FreeMenu(#Menu)
Description
Supprime le #Menu et libère sa mémoire. Si un menu était affiché dans une fenêtre, il est automatiquement enlevé.

OS Supportés

Tous


GetMenuItemState()

Syntaxe

Resultat = GetMenuItemState(#Menu, Element)
Description
Renvoie l'état actuel de l'élément du #Menu spécifié. C'est seulement utile dans le cas d'un élément de type 'CheckBox'. Si l'élément est checké alors 'Resultat' = 1 sinon 'Resultat' = 0. La 'CheckBox' peut être affiché ou enlevée grâce à la commande SetMenuItemState().

Exemple:
  If OpenWindow(0, 200, 200, 200, 100, "GetMenuItemState Example")
    If CreateMenu(0, WindowID(0))
      MenuTitle("Project")
        MenuItem(1, "Changed")
        SetMenuItemState(0,1,1)    ; Affiche l'élément du menu comme étant coché.
    EndIf
    Repeat
      Event = WaitWindowEvent()          ; Attente d'un évenement
      If Event = #PB_Event_Menu          ; Evenement de type 'Menu'
        If EventMenu() = 1             ; Le premier élément du menu a été sélectionné
          If GetMenuItemState(0,1) = 1   ; Etat actuel de l'élément = coché
            SetMenuItemState(0,1,0)      ; On le décoche
          Else                           ; Etat actuel de l'élément = décoché
            SetMenuItemState(0,1,1)      ; On le coche
          EndIf
        EndIf
      EndIf
    Until Event = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, MacOS X, AmigaOS


GetMenuItemText()

Syntaxe

Texte$ = GetMenuItemText(#Menu, Element)
Description
Renvoie le texte de l'élément dans le #Menu spécifié.

OS Supportés

Tous


GetMenuTitleText()

Syntaxe

Texte$ = GetMenuTitleText(#Menu, Titre)
Description
Renvoie le texte du titre dans le #Menu spécifié.

OS Supportés

Tous


HideMenu()

Syntaxe

HideMenu(#Menu, State)
Description
Cache ou affiche le #Menu. Si 'State=1', alors le menu est caché, sinon il est affiché.

OS Supportés

Windows, Linux


IsMenu()

Syntaxe

Resultat = IsMenu(#Menu)
Description
Teste si le #Menu est correctement initialisé. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, Linux, MacOS X


MenuBar()

Syntaxe

MenuBar()
Description
Crée une barre de séparation horizontale dans le menu en cours de construction.

Exemple:
  If OpenWindow(0, 200, 200, 200, 100, "MenuBar Example")
    If CreateMenu(0, WindowID(0))  ; here the menu creating starts....
      MenuTitle("Project")
        MenuItem(1, "Open")
        MenuBar()                 ; here the separator bar will be inserted
        MenuItem(4, "Close")
    EndIf
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


MenuHeight()

Syntaxe

MenuHeight()
Description
Renvoie la hauteur (en pixels) de la barre de menu. Utile pour calculer correctement la hauteur d'une fenêtre quand un menu est utilisé.

OS Supportés

Tous


MenuID()

Syntaxe

MenuID = MenuID(#Menu)
Description
Renvoie l'identifiant système du #Menu.

Note: Cet identifiant est parfois connu sous le nom de 'Handle'.

OS Supportés

Tous


MenuItem()

Syntaxe

MenuItem(Element, Texte$)
Description
Crée une nouvelle entrée dans le menu en cours de construction. 'Element' est un numéro qui sera retourné par la commande EventMenu() si cet élément venait à être sélectionné. Dans la chaîne Texte$, vous pouvez utiliser le caractère & pour souligner une lettre spécifique :

"&Fichier" s'affichera ainsi : Fichier.

Si vous désirez associer un raccourci clavier (qui sera créé avec la commande AddKeyboardShortcut()) aligné sur le côté droit du menu (par exemple, "Save Ctrl+S") alors vous pouvez utiliser le caractère 'tabulation' pour donner l'espacement correct. Le caractère 'Tabulation' a le code ASCII 9, donc il faudra utiliser la commande Chr() avec le nombre 9 comme indiqué ci-dessous:
MenuItem(1, "&Open" + Chr(9) + "Ctrl+O")

Exemple:
  If OpenWindow(0, 200, 200, 200, 100, "MenuItem Example")
    If CreateMenu(0, WindowID(0))
      MenuTitle("Project")
        MenuItem(1, "Open")    ; Element normal
        MenuItem(2, "&Save")   ; Element avec une lettre soulignée. Le trait souligné n'apparaîtra que
                               ; si le menu est appelé avec F10 ou ALT.
        MenuItem(3, "Quit"+Chr(9)+"Esc")   ; Element avec un raccourci clavier affiché sur la droite.
    EndIf
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
  EndIf
MacOS X: the 'Quit', 'Preferences' and 'About' items are considered as specials and need to be placed in the 'Application' menu to have the look'n'feel of OS X applications. PureBasic support the #PB_Menu_Quit, #PB_Menu_Preferences and #PB_Menu_About constants (to be specified as the 'MenuItemID') for these kind of menu items. When one of these constants is detected, the item isn't inserted at the current place, but in the 'Application' menu. If a shortcut was specified, it is simply ignored and replaced by the standard one. These 3 constants aren't defined on others OS, to allow flexible numbering on these OS.

OS Supportés

Tous


MenuTitle()

Syntaxe

MenuTitle(Titre$)
Description
Crée un nouveau titre de menu dans la barre horizontale du menu en cours de construction. Dans la chaîne Titre$, vous pouvez utiliser le caractère & pour souligner une lettre spécifique, ainsi :

"&Fichier" affichera une ligne de menu Fichier avec le F souligné.

Exemple:
  If OpenWindow(0, 200, 200, 200, 100, "MenuTitle Example")
    If CreateMenu(0, WindowID(0))
      MenuTitle("Project")     ; Titre normal
        MenuItem(1, "Open")
        MenuItem(2, "Close")
      MenuTitle("&Edit")       ; Titre avec une lettre soulignée. Le trait souligné n'apparaîtra que
                               ; si le menu est appelé avec F10 ou ALT.
        MenuItem(3, "Undo")
        MenuItem(4, "Redo")
      MenuTitle("About")       ; Titre seul
    EndIf
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


OpenSubMenu()

Syntaxe

OpenSubMenu(Texte$)
Description
Crée une nouvelle ligne de menu donnant accès à un sous-menu (vide, pour l'instant). Dans la chaîne Texte$, vous pouvez utiliser le caractère & pour souligner une lettre spécifique, ainsi :

"&Fichier" affichera une ligne de menu Fichier avec le F souligné.

Exemple:
  If OpenWindow(0, 200, 200, 220, 100, "SubMenu Example")
    If CreateMenu(0, WindowID(0))
      MenuTitle("Project")
        MenuItem(1, "Open")
        MenuItem(2, "Close")
        MenuBar()
        OpenSubMenu("Recent files")       ; Crée un sous-menu
          MenuItem( 3, "C:\Autoexec.bat")
          MenuItem( 4, "D:\Test.txt")
        CloseSubMenu()                    ; Termine la création du sous-menu
    EndIf
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


SetMenuItemState()

Syntaxe

Result = SetMenuItemState(#Menu, Element, Etat)
Description
Change l'état actuel de l'élément du #Menu spécifié. C'est utile pour afficher ou non une 'CheckBox' à la gauche du text. Si 'Etat' = 1 alors la 'CheckBox' est affichée, sinon elle est cachée.

GetMenuItemState() peut être utilisé pour récupérer l'état actuel de l'élément du menu.

Exemple:
  If OpenWindow(0, 200, 200, 200, 100, "SetMenuItemState Example")
    If CreateMenu(0, WindowID(0))
      MenuTitle("Project")
        MenuItem(1, "Changed")
        SetMenuItemState(0,1,1)    ; Coche l'élément 1 du menu.
    EndIf
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, MacOS X, AmigaOS


SetMenuItemText()

Syntaxe

SetMenuItemText(#Menu, Element, Texte$)
Description
Change le texte de l'élément dans le #Menu spécifié.

OS Supportés

Tous


SetMenuTitleText()

Syntaxe

SetMenuTitleText(#Menu, Titre, Texte$)
Description
Change le texte du titre dans le #Menu spécifié.

OS Supportés

Tous


Misc

PureBasic - Misc

General

Cette bibliothèque regroupe diverses fonctions qui ne peuvent être classées ailleurs.

Sommaire des commandes

Blue
Delay
ElapsedMilliseconds
GetExtensionPart
GetFilePart
GetPathPart
Green
OSVersion
RGB
Random
RandomSeed
Red

Exemple

Misc.pb

OS Supportés

Tous

Guide de référence - Index


Blue()

Syntaxe

Result = Blue(Couleur)
Description
Renvoie la valeur de la composante bleue d'une couleur RVB 24 bit. La valeur retournée est comprise entre 0 et 255.

OS Supportés

Tous


Delay()

Syntaxe

Delay(Temps)
Description
Suspend totalement l'exécution du programme pendant la durée 'Temps' spécifiée en millisecondes.

Cette fonction est particulièrement utile dans les boucles d'évènements utilisant WindowEvent() ou ExamineKeyboard(), pour éviter qu'elles ne monopolise tout le temps processeur.

OS Supportés

Tous


ElapsedMilliseconds()

Syntaxe

Resultat = ElapsedMilliseconds()
Description
Renvoie le nombre de millisecondes qui se sont écoulées depuis le démarrage de l'ordinateur. Cette fonction est relativement précise: il peut y avoir de légères différences en fonction de l'OS sur lequel le programme s'exécute.
  StartTime = ElapsedMilliseconds()             ; Get the actual value
  Delay(1000)                                   ; Wait 1000 milliseconds
  ElapsedTime = ElapsedMilliseconds()-StartTime ; 'ElapsedTime' value should be about 1000 milliseconds

OS Supportés

Windows, Linux


GetExtensionPart()

Syntaxe

Extension$ = GetExtensionPart(CheminComplet$)
Description
Extrait l'extension du fichier d'une chaîne de caractères 'CheminComplet$' et le place dans 'Extension$'.
Si, par exemple, la chaîne CheminComplet$ est "C:\PureBasic\PB.exe", la chaîne retournée dans Extension$ sera "exe".

OS Supportés

Tous


GetFilePart()

Syntaxe

Fichier$ = GetFilePart(CheminComplet$)
Description
Extrait le nom du fichier d'une chaîne de caractères CheminComplet$ et le place dans Fichier$.
Si, par exemple, la chaîne CheminComplet$ est "C:\PureBasic\PB.exe", la chaîne retournée dans Fichier$ sera "PB.exe".

OS Supportés

Tous


GetPathPart()

Syntaxe

Chemin$ = GetPathPart(FullPathName$)
Description
Extrait le chemin d'une chaîne de caractères CheminComplet$ et le place dans Chemin$.
Si, par exemple, la chaîne CheminComplet$ est "C:\PureBasic\PB.exe", la chaîne retournée dans Chemin$ sera "C:\PureBasic\".

OS Supportés

Tous


Green()

Syntaxe

Result = Green(Couleur)
Description
Renvoie la valeur de la composante verte d'une couleur RVB 24 bit. La valeur retournée est comprise entre 0 et 255.

OS Supportés

Tous


OSVersion()

Syntaxe

Resultat = OSVersion()
Description
Retourne la version du système d'exploitation sur lequel le programme s'exécute. Cela permet de conditionner l'exécution de certaines fonctions du programme en fonction du système d'exploitation utilisé.

'Resultat' peut prendre l'une des valeurs suivantes:
  #PB_OS_Windows_NT3_51
  #PB_OS_Windows_95
  #PB_OS_Windows_NT_4
  #PB_OS_Windows_98
  #PB_OS_Windows_ME
  #PB_OS_Windows_2000
  #PB_OS_Windows_XP
  #PB_OS_Windows_Server_2003
  #PB_OS_Windows_Future  ; Nouvelle version de Windows (n'existant pas lorsque le programme a été écrit)
Exemple:
  Select OSVersion()
    Case #PB_OS_Windows_98
      MessageRequester("Info", "Windows 98")

    Case #PB_OS_Windows_2000
      MessageRequester("Info", "Windows 2000")

    Case #PB_OS_Windows_XP
      MessageRequester("Info", "Windows XP")

    Default
      MessageRequester("Info", "Unsupported Windows version")
  EndSelect

OS Supportés

Windows


RGB()

Syntaxe

Couleur = RGB(Rouge, Vert, Bleu)
Description
Renvoie la valeur de la couleur 24 bits correspondant aux valeurs Rouge, Vert Bleu. Chaque composante 'Rouge', 'Verte', 'Bleue' est une valeur comprise entre 0 et 255.

Un tableau représentant les couleurs les plus communes est disponible ici.

OS Supportés

Tous


Random()

Syntaxe

Resultat = Random(Maximum)
Description
Renvoie dans Resultat un nombre aléatoire compris entre 0 et la valeur 'Maximum'. Eventuellement, RandomSeed() peut être utilisé pour régénérer la table des nombres aléatoires. Cela peut être utile quand un programmeur veut toujours avoir la même table de nombre aléatoires dans le même ordre.

Note: A chaque fois qu'un programme PureBasic se lance, sa table est régénérée, ce qui assure d'avoir des nombres aléatoires totalement différents à chaque exécution.

OS Supportés

Tous


RandomSeed()

Syntaxe

RandomSeed(Value)
Description
Change la table des nombres aléatoire renvoyée par Random() par celle spécifiée.

Note: A chaque fois qu'un programme PureBasic se lance, sa table est régénérée, ce qui assure d'avoir des nombres aléatoires totalement différents à chaque exécution.

OS Supportés

Tous


Red()

Syntaxe

Resultat = Red(Couleur)
Description
Renvoie la valeur de la composante rouge d'une couleur RVB 24 bit. La valeur retournée est comprise entre 0 et 255.

OS Supportés

Tous


Movie

PureBasic - Movie

General

PureBasic propose des commandes simples mais très efficaces pour intégrer la diffusion d'un film dans une application ou un jeu.

Pour Windows seulement: dans la mesure où la technologie DirectX est utilisée, tous types de film (ou même de média) peut être diffusé à partir de cette bibliothèque: AVI, MPG, DivX, Mp3 etc..

Sommaire des commandes

FreeMovie
InitMovie
IsMovie
LoadMovie
MovieAudio
MovieHeight
MovieInfo
MovieLength
MovieSeek
MovieStatus
MovieWidth
PauseMovie
PlayMovie
RenderMovieFrame
ResizeMovie
ResumeMovie
StopMovie

Exemple

Movie.pb

OS Supportés

Windows, MacOS X

Guide de référence - Index


FreeMovie()

Syntaxe

FreeMovie(#Film)
Description
Libère le #Film spécifié et l'efface de la mémoire. Ce film n'est alors plus accessible.

OS Supportés

Windows, MacOS X


InitMovie()

Syntaxe

Resultat = InitMovie()
Description
Initialise l'environnement Film pour un usage futur. Cette fonction doit être exécutée avant tout autre commande de cette bibliothèque. Cette commande tente d'ouvrir DirectX (v3.0 pour la compatibilité NT4.0 ou v7.0 sinon). Si la commande échoue DirectX est probablement d'une version trop ancienne ou indisponible.

OS Supportés

Windows, MacOS X


IsMovie()

Syntaxe

Resultat = IsMovie(#Film)
Description
Teste si le #Film est correctement initialisé. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, MacOS X


LoadMovie()

Syntaxe

Resultat = LoadMovie(#Film, NomFichier$)
Description
Tente d'ouvrir et prépare un film pour une diffusion ultérieure. Si #PB_Any est utilisé pour le paramètre '#Film', le numéro du nouveau film sera renvoyé dans 'Resultat'. Si le résultat est 0, le film ne peut pas être ouvert (format non supporté ou fichier non trouvé). PlayMovie() peut être utilisé pour démarrer la projection.

OS Supportés

Windows, MacOS X


MovieAudio()

Syntaxe

MovieAudio(#Film, Volume, Balance)
Description
Contrôle le flux audio du #Film. Volume et Balance peuvent être modifiés pendant l'exécution du film. Les changements sont instantanés. L'amplitude de Volume va de 0 à 100 (100 étant le volume le plus élevé). Balance peut avoir une amplitude de -100 à 100 (-100 étant le plus à droite et 100 le plus à gauche).

OS Supportés

Windows, MacOS X


MovieHeight()

Syntaxe

Hauteur = MovieHeight(#Film)
Description
Renvoie la hauteur (en pixels) du #Film. Si le résultat est -1, alors aucun flux vidéo n'a été identifié ou le flux est incompatible. Le flux audio peut continuer à être joué. Cette commande est particulièrement utile pour exécuter des fichiers MP3 en utilisant les commandes de la bibliothèque Movie (!).

OS Supportés

Windows, MacOS X


MovieInfo()

Syntaxe

Resultat = MovieInfo(#Film, Flags)
Description
Renvoie des informations additionnelles concernant le #Film.

Valeurs supportée actuellement:
  0: Renvoie le nombre de trames par seconde (*1000).
Note: Cette commande ne fonctionne qu'avec les vrais films, car le nombre d'images par seconde ne peut pas être récupéré sur un fichier son (MP3, WAV, Ogg Vorbis etc..).

OS Supportés

Windows, MacOS X


MovieLength()

Syntaxe

Longueur = MovieLength(#Film)
Description
Renvoie la longueur (en trames) du #Film.

Note: Cette commande ne fonctionne qu'avec les vrais films, car le nombre de trames ne peut pas être récupéré sur un fichier son (MP3, WAV, Ogg Vorbis etc..).

OS Supportés

Windows, MacOS X


MovieSeek()

Syntaxe

Resultat = MovieSeek(#Film, Trame)
Description
Déplace la position courante du #Film à la trame spécifiée.

OS Supportés

Windows, MacOS X


MovieStatus()

Syntaxe

Resultat = MovieStatus(#Film)
Description
Obtient le status du #Film.

'Resultat' peut être une des valeurs suivantes:
   -1: Le film est en pause.
    0: Le film est stoppé
  > 0: Le film est en cours d'exécution. La valeur retournée est le numéro de trame en cours d'affichage.

OS Supportés

Windows, MacOS X


MovieWidth()

Syntaxe

Largeur = MovieWidth(#Film)
Description
Renvoie la largeur (en pixels) du #Film. Si le résultat est -1 , aucun flux vidéo n'a été trouvé (ou n'est compatible). Le flux audio peut continuer à être joué.

Ceci est particulièrement utile pour jouer des fichiers MP3 en utilisant les commandes de la bibliothèque Movie. (!).

OS Supportés

Windows, MacOS X


PauseMovie()

Syntaxe

PauseMovie(#Film)
Description
Interrompt la projection du #Film. L'exécution peut être reprise en utilisant la commande ResumeMovie().

OS Supportés

Windows, MacOS X


PlayMovie()

Syntaxe

PlayMovie(#Film, FenetreID)
Description
Démarre l'exécution, dans la fenêtre spécifiée, d'un film préalablement chargé avec la commande LoadMovie(). La valeur FenetreID est facilement obtenue en utilisant la commande WindowID() de la bibliothèque Window.

La commande ResizeMovie() peut être utilisée pour dimensionner et déplacer le film dans cette fenêtre (pour ne pas utiliser la fenêtre entière par exemple).

Si le film est destiné à être rendu directement sur un sprite à l'aide de RenderMovieFrame() alors le paramètre 'FenetreID' doit prendre la valeur #PB_Movie_Rendered.

Il est aussi possible de jouer un film en plein écran, il suffit d'utiliser le résultat de la commande ScreenID() comme 'WindowID'.

OS Supportés

Windows, MacOS X


RenderMovieFrame()

Syntaxe

RenderMovieFrame(#Film, SpriteID)
Description
Joue le film directement sur un sprite, au lieu de le jouer sur une zone vidéo dédiée. Cette commande très puissante permet d'effectuer des effets spéciaux en temps réel (tel que jouer un film en plein écran en plusieurs niveaux de transparence grâce aux Sprite3D, rotation, zoom etc...). Malheureusement, tous les formats vidéos ne sont pas compatibles avec ce mode et pour l'instant seuls les MPEG semblent fonctionner parfaitement. Un 'SpriteID' valide peut être facilement obtenu en récupérant le résultat de la commande SpriteID() ou CreateSprite(). Avant d'utiliser cette commande, PlayMovie() doit être lancé avec l'option #PB_Movie_Rendered.

OS Supportés

Windows


ResizeMovie()

Syntaxe

ResizeMovie(#Film, x, y, Largeur, Hauteur)
Description
Redimensionne et déplace la zone d'affichage du #Film dans la fenêtre allouée. Ceci est particulièrement utile avant de démarrer l'exécution avec PlayMovie().

OS Supportés

Windows, MacOS X


ResumeMovie()

Syntaxe

ResumeMovie(#Film)
Description
Reprend l'exécution du #Film après un appel à la commande PauseMovie().

OS Supportés

Windows, MacOS X


StopMovie()

Syntaxe

StopMovie(#Film)
Description
Cesse la projection du #Film spécifié. Si le film est relancé, il sera repris depuis le début.

OS Supportés

Windows, MacOS X


Network

PureBasic - Network

General

Les réseaux sont utilisés dans le monde entier pour faciliter la communication et le transfert d'informations entre ordinateurs. PureBasic supporte le protocole d'échange de données officiel d'Internet appelé TCP/IP. Cela vous permet d'écrire des applications ou des jeux basés sur ce protocole et le modèle 'client-serveur'. Avec les fonctions de cette bibliothèque, il vous est possible de créer toutes sortes d'applications de type Internet (navigateurs, serveur Web, client FTP...) ou des jeux multijoueurs.

Sommaire des commandes

CloseNetworkConnection
CloseNetworkServer
ConnectionID
CreateNetworkServer
EventClient
EventServer
ExamineIPAddresses
GetClientIP
GetClientPort
HostName
IPAddressField
IPString
InitNetwork
MakeIPAddress
NetworkClientEvent
NetworkServerEvent
NextIPAddress
OpenNetworkConnection
ReceiveNetworkData
ReceiveNetworkFile
SendNetworkData
SendNetworkFile
SendNetworkString

Exemple

NetworkClient.pb
NetworkServer.pb

OS Supportés

Tous

Guide de référence - Index


CloseNetworkConnection()

Syntaxe

CloseNetworkConnection(ConnectionID)
Description
Ferme la connexion spécifiée. Si cette commande est utilisée en mode client, le serveur recevra un événement #PB_NetworkEvent_Disconnect (utilisateur déconnecté). Si cette commande est utilisée en mode serveur, la connexion sera fermée sans aucune notification pour le client.

OS Supportés

Tous


CloseNetworkServer()

Syntaxe

CloseNetworkServer(#Serveur)
Description
Ferme le #Serveur spécifié. Tous les clients connectés à ce serveur sont automatiquement déconnectés. Le port est libéré et peut être réutilisé par une autre application ou par un autre serveur.

OS Supportés

Tous


ConnectionID()

Syntaxe

Resultat = ConnectionID(Connection)
Description
Renvoie l'identifiant système unique de la 'Connection'.

OS Supportés

Tous


CreateNetworkServer()

Syntaxe

Resultat = CreateNetworkServer(#Serveur, Port [, Mode])
Description
Crée un nouveau serveur réseau sur l'ordinateur local sur le port spécifié. If #PB_Any is utilisé pour le paramètre '#Serveur', le numéro du nouveau serveur sera renvoyé dans 'Resultat'.

Les valeurs du port peuvent aller de 6000 à 7000 (ce sont les valeurs recommandées, mais elles peuvent aller en réalité de 0 à 65000).

Un nombre quelconque de serveurs peuvent tourner simultanément sur la même machine, mais jamais avec le même numéro de port.

Si Resultat est 0, le serveur ne peut être créé (port déjà utilisé), sinon, le serveur a été normalement créé et est prêt à accepter des connexions.

Port : Numéro de port pour ce serveur.

Le paramètre facultatif 'Mode' peut être l'une des valeurs suivantes:
  #PB_Network_TCP: Le serveur utilisera le protocole TCP (mode par défaut).
  #PB_Network_UDP: Le serveur utilisera le protocole UDP

OS Supportés

Tous


EventClient()

Syntaxe

Client = EventClient()
Description
Cette fonction n'est nécessaire que côté serveur. Elle permet de savoir quel est le client qui a envoyé les données.

Les commandes GetClientIP() et GetClientPort() peuvent servir à collecter plus d'informations à propos du client qui a émis les données.

OS Supportés

Tous


EventServer()

Syntaxe

Server = EventServer()
Description
Cette fonction n'est nécessaire que côté serveur. Elle permet de savoir sur quel serveur les données ont été reçues et ainsi de pouvoir gérer plusieurs serveurs simultanément dans le même programme.

OS Supportés

Tous


ExamineIPAddresses()

Syntaxe

ExamineIPAddresses()
Description
Démarre l'examen des adresses IP valables sur l'ordinateur local. NextIPAddress() sera utilisé pour retrouver chaque adresse.

OS Supportés

Windows


GetClientIP()

Syntaxe

IP = GetClientIP(Client)
Description
Cette commande doit être appelée après EventClient() et renvoie l'adresse IP du client. La commande GetClientPort() est aussi disponible pour connaître le port du client.

OS Supportés

Tous


GetClientPort()

Syntaxe

Port = GetClientPort(Client)
Description
Cette commande doit être appelée après EventClient() et renvoie le port du client. La commande GetClientIP() est aussi disponible pour connaître l'adresse IP du client.

OS Supportés

Tous


HostName()

Syntaxe

Chaine$ = HostName()
Description
Renvoie le nom de l'ordinateur local.

OS Supportés

Windows, Linux


IPAddressField()

Syntaxe

Resultat = IPAddressField(AdresseIP, Champ)
Description
Renvoie la valeur du champs de l'adresse ip spécifiée. 'AdresseIP' est un nombre de type long (.l) pouvant être facilement créé grâce à la commande MakeIPAddress(). 'Champ' est une valeur comprise entre 0 et 3 indiquant un des quatres champs de l'adresse IP, de la gauche vers la droite. Par exemple pour l'adresse IP 127.0.0.1, le champ 0 sera '127' et le champ 3 sera '1'. Cette commande est utile quand elle est utilisée en conjonction avec:

- IPAddressGadget()
- MakeIPAddress()

OS Supportés

Tous


IPString()

Syntaxe

Chaine$ = IPString(AdresseIP)
Description
Renvoie la représentation chaîne (sous la forme "127.0.0.1") d'une adresse IP au format numérique.

OS Supportés

Windows, Linux


InitNetwork()

Syntaxe

Resultat = InitNetwork()
Description
Cette fonction doit être appelée avant toute autre fonction de la bibliothèque Network. Si Resultat = 0, aucune pile TCP/IP n'est disponible sur le système.

OS Supportés

Tous


MakeIPAddress()

Syntaxe

Resultat = MakeIPAddress(Field0, Field1, Field2, Field3)
Description
Renvoie un nombre de type long (.l) contenant la représentation numérique de l'adresse IP. Chaque champ est une valeur comprise entre 0 et 255. Pour reconvertir la valeur numérique en chaîne de caractères (par exemple "127.0.0.1"), il suffit d'utiliser la commande IPString(). Cette commande est utile quand elle est utilisée en conjonction avec:

- IPAddressGadget()

OS Supportés

Tous


NetworkClientEvent()

Syntaxe

Resultat = NetworkClientEvent(ConnectionID)
Description
Renvoie 0 dans 'Resultat' si aucune information (ou donnée) n'a été reçue sur le port client specifié, sinon quelquechose est arrivé qui doit être traité. La valeur renvoyée dans Resultat indique ce qui vient d'arriver:
  0                    : Il ne s'est rien passé
  #PB_NetworkEvent_Data: Des données ont été reçues (à lire avec ReceiveNetworkData())
  #PB_NetworkEvent_File: Un fichier a été reçu (à lire avec ReceiveNetworkFile())

OS Supportés

Tous


NetworkServerEvent()

Syntaxe

Resultat = NetworkServerEvent()
Description
Renvoie 0 dans Resultat si aucune information ou donnée n'a été reçue sur le port serveur, sinon quelquechose est arrivé qui doit être traité. La valeur renvoyée dans Resultat indique ce qui vient d'arriver :
  0                          : Il ne s'est rien passé
  #PB_NetworkEvent_Connect   : Un nouveau client s'est connecté au serveur.
  #PB_NetworkEvent_Data      : Des données ont été reçues (à lire avec ReceiveNetworkData())
  #PB_NetworkEvent_File      : Un fichier a été reçu (à lire avec ReceiveNetworkFile())
  #PB_NetworkEvent_Disconnect: Un client s'est déconnecté du serveur

OS Supportés

Tous


NextIPAddress()

Syntaxe

Resultat = NextIPAddress()
Description
Cette commande doit être appelée après ExamineIPAddresses(). Elle retourne l'adresse IP disponible au format numérique. Les adresses IP au format numérique peuvent être facilement converties au format chaîne en utilisant la commande IPString(). Si le résultat est 0, il n'y a plus d'adresse IP disponible.

OS Supportés

Windows


OpenNetworkConnection()

Syntaxe

ConnectionID = OpenNetworkConnection(NomServeur$, Port [, Mode])
Description
Tente d'ouvrir une connexion avec le serveur spécifié. NomServeur$ peut être une adresse IP ou un nom complet (par exemple: "127.0.0.1" ou "ftp.home.net"). Si la connexion avec le serveur est validée, 'ConnectionID' contient l'identifiant de cette connexion, nécessaire par toutes les commandes d'envoi et de réception de données. Si 'ConnectionID' est 0, alors la connexion a échouée.

Le paramètre facultatif 'Mode' peut être l'une des valeurs suivantes:
  #PB_Network_TCP: La connexion utilisera le protocole TCP (mode par défaut).
  #PB_Network_UDP: La connexion utilisera le protocole UDP
                   Dans ce mode, la connexion ne sera pas explicitement établie, étant donné qu'UDP est un protocole sans connexion
                   permanente. Cependant une nouvelle entrée sera ajoutée dans la table des connexions gérées par
                   PureBasic pour permettre l'envoi de données via UDP en utilisant les commandes
                   standards comme SendNetworkData().

OS Supportés

Tous


ReceiveNetworkData()

Syntaxe

Resultat = ReceiveNetworkData(ConnectionID, *BufferMemoire, Longueur)
Description
Reçoit une donnée brute du client ClientID. Cette fonction peut être utilisée par une application Serveur ou Client:

- côté serveur, 'ConnectionID' identifie le client qui a envoyé les données (ConnectionID peut être obtenu simplement avec la fonction NetworkClientID()).

- côté client, 'ConnectionID' est retourné par la commande OpenNetworkConnection(). Les données sont lus directement dans la zone mémoire '*BufferMemoire'.

le nombre d'octets effectivement lus par la fonction est renvoyé dans 'Resultat'. Si 'Resultat' est égal à 'Longueur', alors il reste des données en attente à lire.

OS Supportés

Tous


ReceiveNetworkFile()

Syntaxe

ReceiveNetworkFile(ConnectionID, NomFichier$)
Description
Reçoit un fichier du client ConnectionID. Cette fonction peut être utilisée par une application Serveur ou Client:

- côté serveur, ConnectionID identifie le client qui a envoyé le fichier (ConnectionID peut être obtenu simplement avec la fonction NetworkClientID()).

- côté client, 'ConnectionID' est retourné par la commande OpenNetworkConnection(). Le fichier doit avoir été envoyé en utilisant la fonction SendNetworkFile()

OS Supportés

Tous


SendNetworkData()

Syntaxe

SendNetworkData(ConnectionID, *BufferMemoire, Longueur)
Description
Envoie des données brutes au client spécifié. Cette fonction peut être utilisée par une application Serveur ou Client:

- côté serveur, 'ConnectionID' identifie le client qui doit recevoir les données.

- côté client, 'ConnectionID' est retourné par la commande OpenNetworkConnection().

OS Supportés

Tous


SendNetworkFile()

Syntaxe

SendNetworkFile(ConnectionID, FileName$)
Description
Envoie un fichier complet au client spécifié. Cette fonction peut être utilisée par une application Serveur ou Client:

Côté serveur, 'ConnectionID' identifie le client qui doit recevoir le fichier

Côté client, 'ConnectionID' est retourné par la commande OpenNetworkConnection().

Le fichier est envoyé par une méthode spécifique et éprouvée. Il doit être réceptionné par la fonction ReceiveNetworkFile(). Lors de l'émission, l'exécution du programme est stoppée jusqu'à ce que le fichier complet ait été envoyé.

OS Supportés

Tous


SendNetworkString()

Syntaxe

SendNetworkString(ConnectionID, String$)
Description
Envoie une chaîne de caractères au client spécifié. Cette fonction peut être utilisée par une application Serveur ou Client:

- côté serveur, 'ConnectionID' identifie le client qui doit recevoir la chaîne de caractères.

- côté client, 'ConnectionID' est retourné par la commande OpenNetworkConnection().

OS Supportés

Tous


OnError

PureBasic - OnError

General

Le but de cette bibliothèque est de rendre la gestion des erreurs dans Purebasic plus facile. Un inconvénient de PureBasic est le contrôle des erreurs dans les exécutables compilés. Il n'y a aucun traitement général des erreurs sans le débogueur, donc cette bibliothèque est là combler ce manque dans la recherche des erreurs dans PureBasic.

Lors du développement il est possible d'utiliser le débogueur pour traquer facilement les erreurs, mais une fois que l'exécutable est finalisé et distribué, le débogueur doit être désactivé rendant impossible la traque précise des erreurs.

Avec ce jeu de commandes avancées, il est parfaitement possible d'intégrer une détection d'erreurs poussée dans votre application tout en disposant de quasiment toute la vitesse de PureBasic (un ralentissement peut se faire ressentir tout de même, plus particulièrement pour les applications gourmandes en temps CPU. Ce désavantage devrait être rapidement disparaître dans les prochaines versions).

Toutes les routines de cette bibliothèque sont codées en assembleur optimisé manuellement et sont divisées de façon à ce que seul le code absolument nécessaire soit inclus dans votre application.

Sommaire des commandes

ClearError
DisASMCommand
GetCurrentEIP
GetDisASMString
GetErrorAddress
GetErrorCounter
GetErrorDLL
GetErrorDescription
GetErrorLineNR
GetErrorModuleName
GetErrorNumber
GetErrorRegister
GoToEIP
OnErrorGosub
OnErrorGoto
OnErrorResume
SetErrorNumber

Exemple

OnError.pb

OS Supportés

Windows

Guide de référence - Index


ClearError()

Syntaxe

ClearError()
Description
Toutes les erreurs sont stockées en mémoire. Avec cette commande, vous effacez le contenu du buffer de la mémoire d'erreur.

OS Supportés

Windows


DisASMCommand()

Syntaxe

Resultat = DisASMCommand(Adresse de début de recherche)
Description
Retourne l'adresse mémoire de la prochaine instruction ASM, la recherche débutant à l'adresse donnée (Recherche à partir de).

Exemple:

  Debug "Mini-Disassembleur!"
  Debug " Tapez votre Code entre les 2 Étiquettes DEBUT_C : et FIN_C : "
  Debug "et laissez la bibliothèque ErrorLibrary désassembler pour vous"

  Pointeur=? DEBUT _C
  If Pointeur<>? FIN _C
    SetClipboardText("")
    Repeat
      CettePosition=Pointeur
      Pointeur=DisASMCommand(Pointeur)
      Debug Hex(CettePosition)+" - " + GetDisASMString()
      SetClipboardText(GetClipboardText()+GetDisASMString()+Chr(13)+Chr(10))
    Until Pointeur>=? FIN _C
  EndIf
  End

  DEBUT_C:
    Null.l=0                  ; 1. Erreur: Division par zéro
    Ergebnis.l = 123 / Null

    !INT 3                    ; 2. Erreur: Point d'arrêt en ASM
    !NOP                      ; Les NOPS sont aussi désassemblés

    PeekL(99)                 ; 3. Erreur: Lecture  d'une valeur à partir d'une adresse mémoire invalide
    SetErrorNumber(9)         ; 4. Erreur: Force un numéro d'erreur  manuellement
  FIN_C:

OS Supportés

Windows


GetCurrentEIP()

Syntaxe

Resultat = GetCurrentEIP(Nombre d'Instructions)
Description
Récupère le pointeur de l'instruction courante en mémoire (ou avec l'offset des instructions)

Exemple:
 CompteurBoucle=0

  ;Où sommes nous ?       ; récupère l'adresse courante en mémoire
 EIP=GetCurrentEIP(1)  ;

  ;un simple Message Debug
 Debug "Boucle "+Str(CompteurBoucle)

  If CompteurBoucle <10  ; nous avons moins de 10 itérations de boucle, donc
   CompteurBoucle +1    ;...ajoute 1
   GoToEIP(EIP) ;...et goto à la dernière adresse
 EndIf
 Debug " Prêt!"

OS Supportés

Windows


GetDisASMString()

Syntaxe

ASMCommand$ = GetDisASMString()
Description
Retourne le nom de la commande ASM précédemment désassemblée par DisASMCommand()

Exemple:
 Debug "Mini-Disassembleur!"
 Debug " Tapez votre Code entre les 2 Étiquettes DEBUT_C : et FIN_C : "
 Debug "et laissez la bibliothèque ErrorLibrary désassembler pour vous"

 Pointeur=?DEBUT_C
 If Pointeur<>?FIN_C
   SetClipboardText("")
   Repeat
     CettePosition=Pointeur
     Pointeur=DisASMCommand(Pointeur)
     Debug Hex(CettePosition)+" - " + GetDisASMString()
     SetClipboardText(GetClipboardText()+GetDisASMString()+Chr(13)+Chr(10))
   Until Pointeur>=?FIN_C
 EndIf
  End

  DEBUT_C:
   Null.l=0                  ;1. Erreur : Division par zéro
   Ergebnis.l = 123 / Null

    !INT 3                    ;2. Erreur : Point d'arrêt en ASM

    !NOP                      ; Les NOPS sont aussi désassemblés

   PeekL(99)                 ;3. Erreur:  Lecture  d'une valeur à partir d'une adresse mémoire invalide
    SetErrorNumber(9)    ;4. Erreur: Force un numéro d'erreur  manuellement
 FIN_C:

OS Supportés

Windows


GetErrorAddress()

Syntaxe

Resultat = GetErrorAddress()
Description
Retourne l'adresse mémoire où l'erreur s'est produite.

OS Supportés

Windows


GetErrorCounter()

Syntaxe

Resultat = GetErrorCounter()
Description
Retourne le nombre total d'erreurs qui se sont produites depuis le début de l'application.

OS Supportés

Windows


GetErrorDLL()

Syntaxe

Resultat$ = GetErrorDLL()
Description
Récupère la description de la dernière erreur survenue lors d'un appel de fonction d'une DLL.

OS Supportés

Windows


GetErrorDescription()

Syntaxe

Resultat$ = GetErrorDescription()
Description
Récupère la description documentée de l'erreur survenue. (Cette routine nécessite beaucoup de place pour stocker les chaînes dans votre exécutable.)

OS Supportés

Windows


GetErrorLineNR()

Syntaxe

Resultat = GetErrorLineNR()
Description
Retourne le numéro de la ligne où se sont produites les erreurs, que cela soit dans le fichier source principal ou dans les fichiers inclus. Utilisez le résultat de la commande GetErrorModuleName() pour déterminer dans quel fichier l'erreur s'est produite.
Cette commande est uniquement disponible avec l'option "Activer le support des lignes OnError" dans la fenêtre d'options de compilation (paramètre /LINENUMBERING en ligne de commande). Si cette option n'est pas activée, cette commande retournera -1.

OS Supportés

Windows


GetErrorModuleName()

Syntaxe

Resultat$ = GetErrorModuleName()
Description
Récupère le nom du fichier où l'erreur s'est produite (fichier inclu). Utilisez le résultat de la commande GetErrorLineNR() pour déterminer à quelle ligne l'erreur s'est produite.

Cette commande est uniquement disponible avec l'option "Activer le support du numéro de ligne pour 'OnError'" dans la fenêtre d'options de compilation (paramètre /LINENUMBERING en ligne de commande). Si cette option n'est pas activée, cette commande retournera la chaîne de caractères "OnError line support disabled" à la place du nom de fichier.

OS Supportés

Windows


GetErrorNumber()

Syntaxe

Resultat = GetErrorNumber()
Description
Retourne le numéro de l'erreur

OS Supportés

Windows


GetErrorRegister()

Syntaxe

Resultat = GetErrorRegister(#Register)
Description
Récupère la valeur du registre indiqué lorsqu'une erreur est survenue.

Les constantes possibles sont :
  #PB_OnError_EAX
  #PB_OnError_EBX
  #PB_OnError_ECX
  #PB_OnError_EDX
  #PB_OnError_EBP
  #PB_OnError_ESI
  #PB_OnError_EDI
  #PB_OnError_SegCS
  #PB_OnError_FFLags
  #PB_OnError_ESP
  #PB_OnError_SegSS

OS Supportés

Windows


GoToEIP ()

Syntaxe

Resultat = GoToEIP (Adresse d'une instructions)
Description
Assigne au pointeur d'instruction courante, l'adresse donnée en mémoire.

Exemple:
  CompteurBoucle=0

  ;Où sommes nous ?       ; récupère l'adresse courante en mémoire
  EIP=GetCurrentEIP(1)  ;
  ; X - EIP pointe cette ligne

  ;a simple Message Debug
  Debug "Boucle "+Str(CompteurBoucle)

  If CompteurBoucle <10  ; nous avons moins de 10 itérations de boucle, donc
    CompteurBoucle +1    ;...ajoute 1
    GoToEIP(EIP) ;...et goto à la dernière adresse
  EndIf

  Debug "Prêt !"

OS Supportés

Windows


OnErrorGosub()

Syntaxe

OnErrorGosub(@Procedure())
Description
Si une erreur survient, votre programme sera redirigé vers la procédure de la liste de paramètre. Si la procédure retourne la valeur 1 alors le programme se poursuivra, sinon il s'arrêtera.

Exemple:
  Procedure ErrorHandler()
    v=MessageRequester("An error happened...","Continue with the program?",20)
    If v=7
      End
    EndIf
  EndProcedure

  OnErrorGosub(@ErrorHandler())

  ; On provoque une division par 0, il faut désactiver le debogueur si on veut
  ; tester notre handler
  a = 0
  b = 1
  c = b / a  ; cette ligne provoque une erreur grave, ErrorHandler() est invoqué

  MessageRequester("Info","Normal end")
  End

OS Supportés

Windows


OnErrorGoto()

Syntaxe

OnErrorGoto(?Etiquette)
Description
Si une erreur survient, votre programme sera redirigé vers l'étiquette de l'argument.

OS Supportés

Windows


OnErrorResume()

Syntaxe

OnErrorResume()
Description
Si une erreur survient, le programme continue avec la prochaine instruction ASM.

OS Supportés

Windows


SetErrorNumber()

Syntaxe

SetErrorNumber(Number)
Description
Force l'appel du contrôleur d'erreurs. Par exemple si vous n'avez pas trouvé de fichier, renvoyez le numéro d'erreur 54 et laissez le contrôleur d'erreurs montrer l'erreur à votre place. Le débogueur doit être désactivé pour pouvoir utiliser cette commande.

Exemple:
  Procedure ErrorHandler()
    MessageRequester("","Error "+Str(GetErrorNumber()))
    End
  EndProcedure

  OnErrorGosub(@ErrorHandler())
  SetErrorNumber(54)

OS Supportés

Windows


Packer

PureBasic - Packer

General

La bibliothèque Packer propose un ensemble de fonctions efficaces pour compresser / décompresser des données. Les routines de compression / décompression sont basées sur l'excellent algorithme JCalG1 et sont intégrées à PureBasic (pas de DLL externe).

Sommaire des commandes

AddPackFile
AddPackMemory
ClosePack
CreatePack
NextPackFile
OpenPack
PackFileSize
PackMemory
PackerCallback
UnpackMemory

Exemple

Packer.pb

OS Supportés

Windows, Linux, MacOS X

Guide de référence - Index


AddPackFile()

Syntaxe

Resultat = AddPackFile(NomFichier$ [, NiveauCompression])
Description
Ajoute et compresse le fichier spécifié au Pack préalablement créé avec CreatePack(). L'ajout d'un grand fichier peut prendre un temps assez long, mais la vitesse de décompression est extrêmement rapide (pratiquement instantannée) et le facteur de compression de très bon niveau. Le paramètre 'NiveauCompression' est facultatif et peut prendre une valeur comprise entre 0 (compression plus rapide mais pas très efficace) et 9 (compression très lente mais très efficace). Le niveau de compression par défaut est 6.

OS Supportés

Windows, Linux, MacOS X


AddPackMemory()

Syntaxe

Resultat = AddPackMemory(AdresseMemoire, Longueur [, NiveauCompression])
Description
Ajoute et compresse la zone mémoire spécifiée dans le Pack préalablement créé avec la commande CreatePack(). L'ajout d'une grande quantité de zone mémoire peut prendre un temps assez long, mais la vitesse de décompression est extrêmement rapide (pratiquement instantanée). Le paramètre 'NiveauCompression' est facultatif et peut prendre une valeur comprise entre 0 (compression plus rapide mais pas très efficace) et 9 (compression très lente mais très efficace). Le niveau de compression par défaut est 6.

OS Supportés

Windows, Linux, MacOS X


ClosePack()

Syntaxe

Resultat = ClosePack()
Description
Ferme un fichier Pack préalablement ouvert avec les commandes OpenPack() ou CreatePack(). Note: PureBasic ferme automatiquement les fichiers Packs ouverts lorsque le programme se termine.

OS Supportés

Windows, Linux, MacOS X


CreatePack()

Syntaxe

Resultat = CreatePack(NomFichier$)
Description
Créé un nouveau fichier Pack vide. Si le résultat est 0, le fichier Pack ne pas être créé. Les commandes suivantes peuvent être utilisées pour ajouter des données au fichier Pack:

AddPackFile(): Ajoute et compresse un fichier entier.
AddPackMemory(): Ajoute et compresse une zone mémoire.

Lorsque les opérations d'écriture sont terminées, on doit appeler ClosePack(). Note: PureBasic ferme automatiquement les fichiers Packs ouverts lorsque le programme se termine.

OS Supportés

Windows, Linux, MacOS X


NextPackFile()

Syntaxe

AdresseMemoire = NextPackFile()
Description
Lit et décompresse le prochain fichier trouvé dans le Pack courant, préalablement ouvert avec OpenPack(). AdresseMemoire est partagée et ne devrait jamais être libérée par le programmeur. Pour connaître la taille mémoire utilisée (ex: la taille du fichier décompressé), utilisez PackFileSize().

OS Supportés

Windows, Linux, MacOS X


OpenPack()

Syntaxe

Resultat = OpenPack(NomFichier$)
Description
Ouvre un fichier Pack préalablement créé avec CreatePack(). Si 'Resultat' est 0 le fichier Pack ne peut être ouvert. NextPackFile() est utilisé pour récupérer et décompresser les informations depuis le fichier Pack.

Une fois les opérations de lecture terminées il faut appeler ClosePack(). Note: PureBasic ferme automatiquement les fichiers ouverts lorsque le programme se termine.

OS Supportés

Windows, Linux, MacOS X


PackFileSize()

Syntaxe

Taille = PackFileSize()
Description
Renvoie la taille du fichier décompressé courant après appel de NextPackFile().

OS Supportés

Windows, Linux, MacOS X


PackMemory()

Syntaxe

Resultat = PackMemory(MemoireSource, MemoireDestination, LongueurSource [, NiveauCompression])
Description
Compresse le contenu de la zone mémoire MemoireSource dans la zone mémoire MemoireDestination. La zone mémoire MemoireDestination doit avoir une longueur au moins égale à la longueur de MemoireSource + 8. Le paramètre 'NiveauCompression' est facultatif et peut prendre une valeur comprise entre 0 (compression plus rapide mais pas très efficace) et 9 (compression très lente mais très efficace). Le niveau de compression par défaut est 6. Si 'Resultat' est à 0, la compression a échoué (ou les données ne sont pas compressibles avec cet algorithme), sinon la taille de la zone compressée est renvoyée. Les données compressées peuvent être décompressées avec UnpackMemory(). Pour les programmeurs avancés, un callback peut être ajouté pour suivre la progression de la compression avec PackerCallback(). La zone mémoire peut être allouée avec la commande AllocateMemory().

Note :

L'algorithme de compression est actuellement assez lent mais donne de très bons résultats en taille (meilleur que ceux obtenus avec le format .zip) et par dessus tout rend une décompression 'éclair' (bien plus rapide que .zip).

OS Supportés

Windows, Linux, MacOS X


PackerCallback()

Syntaxe

PackerCallback(@Procedure())
Description
Ajoute un callback (point de retour) pour la compression de données. Comme la compression peut durer un temps significatif, il est possible d'appeler une procédure à intervalle de temps régulier pour suivre la progression de la compression. Le délai entre deux appels ne peut pas être défini par l'utilisateur, il sera calculé automatiquement. Cette fonction est à l'usage des programmeurs avancés.

Le callback doit avoir la forme suivante:

Procedure CompressCallback(PositionSource, PositionDestination)

EndProcedure

PositionSource: Position actuelle, en octets, dans le buffer source (non compressé)
DestinationPosition: Position actuelle, en octets, dans le buffer cible (compressé)

La procédure doit retourner 1 pour poursuivre la compression. Pour interrompre, il suffit de retourner 0.

OS Supportés

Windows, Linux, MacOS X


UnpackMemory()

Syntaxe

Resultat = UnpackMemory(MemoireSource, MemoireDestination)
Description
Décompresse une zone mémoire préalablement compressée (avec PackMemory()) vers la zone MemoireDestination.

Note :

La décompression est réellement très rapide, contrairement à la compression.

OS Supportés

Windows, Linux, MacOS X


Preference

PureBasic - Preference

General

Un fichier Preference contient des paramètres définis pour le programme par l'utilisateur. Il est stocké sur le disque et est chargé à chaque lancement de ce programme (comme les fichiers '.INI' sous Windows par exemple). PureBasic offre la possibilité de créer un fichier hiérarchisé de préférences facilement utilisable sur différentes plate-formes. Le format du fichier est en ASCII avec une préférence par ligne, utilisant une syntaxe 'Clef=Valeur'. Des groupes peuvent être créés pour une lecture plus simple.

Sommaire des commandes

ClosePreferences
CreatePreferences
ExaminePreferenceGroups
ExaminePreferenceKeys
NextPreferenceGroup
NextPreferenceKey
OpenPreferences
PreferenceComment
PreferenceGroup
PreferenceGroupName
PreferenceKeyName
PreferenceKeyValue
ReadPreferenceDouble
ReadPreferenceFloat
ReadPreferenceLong
ReadPreferenceQuad
ReadPreferenceString
RemovePreferenceGroup
RemovePreferenceKey
WritePreferenceDouble
WritePreferenceFloat
WritePreferenceLong
WritePreferenceQuad
WritePreferenceString

Exemple

Preference.pb

OS Supportés

Windows, Linux, MacOS X

Guide de référence - Index


ClosePreferences()

Syntaxe

ClosePreferences()
Description
Ferme un fichier de préférences préalablement ouvert avec la commande OpenPreferences() ou créé avec CreatePreferences().

OS Supportés

Windows, Linux, MacOS X


CreatePreferences()

Syntaxe

Resultat = CreatePreferences(NomFichier$)
Description
Créé un nouveau fichier vide de préférences. Si le fichier existe déjà, il est écrasé. Si 'Resultat' est à 0 le fichier ne peut pas être créé. Lorsque le fichier est créé , les commandes telles que WritePreferenceString() permettent d'écrire des informations. Une fois les valeurs écrites, il est possible de les relire avec ReadPreferenceString() ou une commande similaire. Pour effacer une clef ou un groupe, RemovePreferenceKey() et RemovePreferenceGroup() sont disponibles. PreferenceGroup() permet de créer ou changer le groupe courant.

Une fois les opérations sur le fichier terminées, il faut utiliser ClosePreferences() pour fermer et écrire définitivement le fichier préférences sur le disque.

OS Supportés

Windows, Linux, MacOS X


ExaminePreferenceGroups()

Syntaxe

Resultat = ExaminePreferenceGroups()
Description
Commence l'énumération de tous les groupes trouvés dans le fichier de préférence courant. La commande NextPreferenceGroup() permet de passer au groupe suivant de la liste. Si l'énumération ne peut pas être initialisée, 'Resultat' sera égal à 0.

OS Supportés

Windows, Linux, MacOS X


ExaminePreferenceKeys()

Syntaxe

Resultat = ExaminePreferenceKeys()
Description
Commence l'énumération de toutes les clefs trouvés dans le fichier de préférence courant. La commande NextPreferenceKey() permet de passer à la clef suivante de la liste. Si l'énumération ne peut pas être initialisée, 'Resultat' sera égal à 0.

OS Supportés

Windows, Linux, MacOS X


NextPreferenceGroup()

Syntaxe

Resultat = NextPreferenceGroup()
Description
Récupère les informations concernant le goupe suivant de lde l'énumération commencée ExaminePreferenceGroups(). Pour savoir le nom du groupe, utiliser PreferenceGroupName(). Si 'Resultat' est égal à 0, alors il n'y a plus de groupes dans l'énumération.

OS Supportés

Windows, Linux, MacOS X


NextPreferenceKey()

Syntaxe

Result = NextPreferenceKey()
Description
Récupère les informations concernant la clef suivante de l'énumération commencée avec ExaminePreferenceKeys(). Pour savoir le nom et la valeur de la clef, utiliser PreferenceKeyName() et PreferenceKeyValue(). Si 'Resultat' est égal à 0, alors il n'y a plus de clefs dans l'énumération.

OS Supportés

Windows, Linux, MacOS X


OpenPreferences()

Syntaxe

Resultat = OpenPreferences(NomFichier$)
Description
Ouvre un fichier préférences existant. Si 'Resultat' est à 0 le fichier n'a pas pu être ouvert. Néanmoins, si le fichier ne peut être ouvert, le programmeur peut malgré tout utiliser la commande de lecture, celle-ci retournant alors la valeur par défaut spécifiée. Ceci est très pratique pour initialiser en une fois les variables du programme.

Les commandes telles que WritePreferenceString() permettent d'écrire des informations. Une fois les valeurs écrites, il est possible de les relire avec ReadPreferenceString() ou une commande similaire. Pour effacer une clef ou un groupe, RemovePreferenceKey() et RemovePreferenceGroup() sont disponibles. PreferenceGroup() permet de créer ou changer le groupe courant.

Une fois les opérations sur le fichier terminées, il faut utiliser ClosePreferences() pour fermer et écrire définitivement le fichier préférences sur le disque.

OS Supportés

Windows, Linux, MacOS X


PreferenceComment()

Syntaxe

PreferenceComment(Texte$)
Description
Ecrit une ligne de commentaire dans le fichier préférences en cours de création.

OS Supportés

Windows, Linux, MacOS X


PreferenceGroup()

Syntaxe

Resultat = PreferenceGroup(Nom$)
Description
Si le fichier de préférences est en mode création (après une commande CreatePreferences()) alors un nouveau groupe est créé sous la forme: [NomGroupe$]. Toutes les opérations qui suivent sont alors situées dans ce groupe. Si des préférences sont stockées en dehors d'un groupe, il est possible de revenir dans cet espace en specifiant un 'Nom$' vide. 'Resultat' sera egal à 1 si le groupe existe déjà, ou 0 sinon.

Si le groupe n'existe pas, il ne sera pas immédiatement créé. Il sera créé uniquement lorsqu'au moins une clef sera écrite dans ce groupe. Ceci permet d'utiliser PreferenceGroup() pour tester si un groupe existe sans créé plein de groupes vides.

OS Supportés

Windows, Linux, MacOS X


PreferenceGroupName()

Syntaxe

Group$ = PreferenceGroupName()
Description
Renvoie le nom du groupe courant de l'énumération commencée avec ExaminePreferenceGroups().

OS Supportés

Windows, Linux, MacOS X


PreferenceKeyName()

Syntaxe

Key$ = PreferenceKeyName()
Description
Renvoie le nom de la clef courante de l'énumération commencée avec ExaminePreferenceKeys(). La commande PreferenceKeyValue() permet de récupérer la valeur de la clef.

OS Supportés

Windows, Linux, MacOS X


PreferenceKeyValue()

Syntaxe

Value$ = PreferenceKeyValue()
Description
Renvoie la valeur de la clef courante de l'énumération commencée avec ExaminePreferenceKeys(). La commande PreferenceKeyName() permet de récupérer le nom de la clef.

OS Supportés

Windows, Linux, MacOS X


ReadPreferenceDouble()

Syntaxe

Resultat.d = ReadPreferenceDouble(Clef$, ValeurParDefaut)
Description
Essaye de lire la paire Clef$, ValeurParDefaut. Si la commande PreferenceGroup() a été utilisée alors la recherche est limitée au groupe courant. Si Clef$ n'a pas été trouvé ou que le fichier préférences n'a pas été ouvert correctement (fichier absent par exemple), la valeur par défaut spécifiée est utilisée comme résultat.

OS Supportés

Windows, Linux, MacOS X


ReadPreferenceFloat()

Syntaxe

Resultat.f = ReadPreferenceFloat(Clef$, ValeurParDefaut)
Description
Essaye de lire la paire Clef$, ValeurParDefaut. Si la commande PreferenceGroup() a été utilisée alors la recherche est limitée au groupe courant. Si Clef$ n'a pas été trouvé ou que le fichier préférences n'a pas été ouvert correctement (fichier absent par exemple), la valeur par défaut spécifiée est utilisée comme résultat.

OS Supportés

Windows, Linux, MacOS X


ReadPreferenceLong()

Syntaxe

Resultat = ReadPreferenceLong(Clef$, ValeurParDefaut)
Description
Essaye de lire la paire Clef$, ValeurParDefaut. Si la commande PreferenceGroup() a été utilisée alors la recherche est limitée au groupe courant. Si Clef$ n'a pas été trouvé ou que le fichier préférences n'a pas été ouvert correctement (fichier absent par exemple), la valeur par défaut spécifiée est utilisée comme résultat.

OS Supportés

Windows, Linux, MacOS X


ReadPreferenceQuad()

Syntaxe

Resultat.q = ReadPreferenceQuad(Clef$, ValeurParDefaut)
Description
Essaye de lire la paire Clef$, ValeurParDefaut. Si la commande PreferenceGroup() a été utilisée alors la recherche est limitée au groupe courant. Si Clef$ n'a pas été trouvé ou que le fichier préférences n'a pas été ouvert correctement (fichier absent par exemple), la valeur par défaut spécifiée est utilisée comme résultat.

OS Supportés

Windows, Linux, MacOS X


ReadPreferenceString()

Syntaxe

Result$ = ReadPreferenceString(Clef$, ValeurParDefaut)
Description
Essaye de lire la paire Clef$, ValeurParDefaut. Si la commande PreferenceGroup() a été utilisée alors la recherche est limitée au groupe courant. Si Clef$ n'a pas été trouvé ou que le fichier préférences n'a pas été ouvert correctement (fichier absent par exemple), la valeur par défaut spécifiée est utilisée comme résultat.

Pour lire une valeur dans un type particulier, les commandes suivantes peuvent être utilisées:

ReadPreferenceDouble()
ReadPreferenceFloat()
ReadPreferenceLong()
ReadPreferenceQuad()

OS Supportés

Windows, Linux, MacOS X


RemovePreferenceGroup()

Syntaxe

RemovePreferenceGroup(Groupe$)
Description
Supprime le 'Groupe$' spécifié et toutes ses clefs.

OS Supportés

Windows, Linux, MacOS X


RemovePreferenceKey()

Syntaxe

RemovePreferenceKey(Clef$)
Description
Supprime la 'Clef$' specifiée et sa valeur associée.

OS Supportés

Windows, Linux, MacOS X


WritePreferenceDouble()

Syntaxe

WritePreferenceDouble(Clef$, Valeur.d)
Description
Ecrit la paire Clef$, Valeur sous la forme : 'Clef$ = Valeur' dans le fichier préférences préalablement créé avec CreatePreferences() ou ouvert avec OpenPreferences(). Si la 'Clef$' existe déjà, alors sa valeur est remplacée.

OS Supportés

Windows, Linux, MacOS X


WritePreferenceFloat()

Syntaxe

WritePreferenceFloat(Clef$, Valeur.f)
Description
Ecrit la paire Clef$, Valeur sous la forme : 'Clef$ = Valeur' dans le fichier préférences préalablement créé avec CreatePreferences() ou ouvert avec OpenPreferences(). Si la 'Clef$' existe déjà, alors sa valeur est remplacée.

OS Supportés

Windows, Linux, MacOS X


WritePreferenceLong()

Syntaxe

WritePreferenceLong(Clef$, Valeur)
Description
Ecrit la paire Clef$, Valeur sous la forme : 'Clef$ = Valeur' dans le fichier préférences préalablement créé avec CreatePreferences() ou ouvert avec OpenPreferences(). Si la 'Clef$' existe déjà, alors sa valeur est remplacée.

OS Supportés

Windows, Linux, MacOS X


WritePreferenceQuad()

Syntaxe

WritePreferenceQuad(Clef$, Valeur.q)
Description
Ecrit la paire Clef$, Valeur sous la forme : 'Clef$ = Valeur' dans le fichier préférences préalablement créé avec CreatePreferences() ou ouvert avec OpenPreferences(). Si la 'Clef$' existe déjà, alors sa valeur est remplacée.

OS Supportés

Windows, Linux, MacOS X


WritePreferenceString()

Syntaxe

WritePreferenceString(Clef$, Valeur$)
Description
Ecrit la paire Clef$, Valeur sous la forme : 'Clef$ = Valeur' dans le fichier préférences préalablement créé
avec CreatePreferences() ou ouvert avec  OpenPreferences().
Si la 'Clef$' existe déjà, alors sa valeur est remplacée.

Pour écrire une valeur dans un type particulier, les commandes suivantes peuvent être utilisées:

ReadPreferenceDouble()
ReadPreferenceFloat()
ReadPreferenceLong()
ReadPreferenceQuad()

OS Supportés

Windows, Linux, MacOS X


Printer

PureBasic - Printer

General

Les imprimantes sont des périphériques essentiels pour transformer les informations numériques virtuelles en informations écrites. La plupart des logiciels nécessitent l'impression des informations sur papier pour être pleinement efficaces. PureBasic permet d'imprimer tous types de données depuis le texte de base jusqu'aux images dans toutes les résolutions.

Sommaire des commandes

DefaultPrinter
NewPrinterPage
PrintRequester
PrinterOutput
PrinterPageHeight
PrinterPageWidth
StartPrinting
StopPrinting

Exemple

Printer.pb

OS Supportés

Windows

Guide de référence - Index


DefaultPrinter()

Syntaxe

Resultat = DefaultPrinter()
Description
Sélectionne l'imprimante par défaut pour les opérations d'impression. Cette fonction doit être utilisée avant toute autre de la bibliothèque Printer. Si 'Resultat' est à 0, aucune imprimante par défaut n'est disponible. Une fois la commande DefaultPrinter() terminée avec succès la commande StartPrinting() est utilisée pour démarrer l'impression.

OS Supportés

Windows


NewPrinterPage()

Syntaxe

NewPrinterPage()
Description
Créé une nouvelle page vide. La page précédente est envoyée à l'imprimante et ne peut plus être modifiée.

OS Supportés

Windows


PrintRequester()

Syntaxe

Resultat = PrintRequester()
Description
Ouvre une boîte de dialogue pour sélectionner l'imprimante et ajuster les paramètres. Cette fonction doit être utilisée avant toute autre de la bibliothèque Printer. Si 'Resultat' est à 0, aucune imprimante n'est disponible ou bien l'utilisateur a interrompu la sélection avec la boîte de dialogue. Une fois la commande PrintRequester() terminée avec succès la commande StartPrinting() est utilisée pour démarrer l'impression.

OS Supportés

Windows


PrinterOutput()

Syntaxe

OutputID = PrinterOutput()
Description
Renvoie l'identifiant OutputID de l'imprimante courante à utiliser avec la commande StartDrawing(). Toutes les commandes de la bibliothèque 2DDrawing sont disponibles et peuvent être utilisées pour l'impression. L'imprimante est vue comme une page vide exactement comme une fenêtre ou une image.

OS Supportés

Windows


PrinterPageHeight()

Syntaxe

Result = PrinterPageHeight()
Description
Renvoie la hauteur de la zone de tracé en pixels. Ce nombre change en fonction de la valeur DPI de l'imprimante. Cela signifie qu'un document imprimé en 75 DPI aura une largeur de zone d'impression 4 fois plus petite qu'un document imprimé en 150 DPI.

Note: La valeur renvoyée représente la largeur disponible pour imprimer, sans compter les marges 'hardware' (qu'on ne peux pas changer) des imprimantes.

OS Supportés

Windows


PrinterPageWidth()

Syntaxe

Resultat = PrinterPageWidth()
Description
Renvoie la largeur de la zone de tracé en pixels. Ce nombre change en fonction de la valeur DPI de l'imprimante. Cela signifie qu'un document imprimé en 75 DPI aura une largeur de zone d'impression 4 fois plus petite qu'un document imprimé en 150 DPI.

Note: La valeur renvoyée représente la largeur disponible pour imprimer, sans compter les marges 'hardware' (qu'on ne peux pas changer) des imprimantes.

OS Supportés

Windows


StartPrinting()

Syntaxe

Resultat = StartPrinting(NomJob$)
Description
Initialise l'imprimante et démarre l'impression. NomJob$ est le nom qui apparaîtra dans la file d'attente et qui identifie la tâche d'impression. Si 'Resultat' est à 0 l'impression n'a pas pu aboutir.

OS Supportés

Windows


StopPrinting()

Syntaxe

StopPrinting()
Description
Arrête toutes les opérations d'impression et envoie les données à l'imprimante.

OS Supportés

Windows


Process

PureBasic - Process

General

Cette bibliothèque permet de récupérer des informations sur le programme, ainsi que d'exécuter d'autres programmes et communiquer avec eux.

Sommaire des commandes

AvailableProgramOutput
CloseProgram
CountProgramParameters
EnvironmentVariableName
EnvironmentVariableValue
ExamineEnvironmentVariables
GetEnvironmentVariable
IsProgram
KillProgram
NextEnvironmentVariable
ProgramExitCode
ProgramFilename
ProgramID
ProgramParameter
ProgramRunning
ReadProgramData
ReadProgramError
ReadProgramString
RemoveEnvironmentVariable
RunProgram
SetEnvironmentVariable
WaitProgram
WriteProgramData
WriteProgramString
WriteProgramStringN

OS Supportés

Tous

Guide de référence - Index


AvailableProgramOutput()

Syntaxe

Resultat = AvailableProgramOutput(Programme)
Description
Renvoie le nombre d'octets qui sont disponibles pour la lecture à partir de la sortie du 'Programme'. Le programme doit avoir été lancé avec RunProgram() en spécifiant l'option #PB_Program_Read.

La sortie peut être effectivement lue soit avec ReadProgramString() ou avec ReadProgramData().

OS Supportés

Tous


CloseProgram()

Syntaxe

CloseProgram(Programme)
Description
Termine toutes les connexions avec le 'Programme' spécifié (lancé avec RunProgram()) et libére toutes ses ressources associées.

Note: cette commande ne force pas le 'Programme' à se terminer, seules les connexions avec lui sont fermées. Pour forcer le 'Programme' à quitter, la commande KillProgram() est disponible. De plus, même si le 'Programme' se termine de façon normale, il est important d'appeler CloseProgram() pour libérer toutes les ressources.

Si le 'Programme' a été lancé avec l'option #PB_Program_Write, CloseProgram() enverra un signal EOF (fin de fichier) sur l'entrée standard du 'Programme'. Ce signal peut aussi être artificiellement provoqué sans fermer les connexions avec le 'Programme' en appelant WriteProgramData() avec la valeur spéciale #PB_Program_Eof.

OS Supportés

Tous


CountProgramParameters()

Syntaxe

Resultat = CountProgramParameters()
Description
Renvoie le nombre de paramètres qui ont été passés au programme PureBasic via la ligne de commande (ou avec RunProgram()).

ProgramParameter() peut être utilisé pour lire chaque paramètre.

OS Supportés

Tous


EnvironmentVariableName()

Syntaxe

Resultat$ = EnvironmentVariableName()
Description
Renvoie le nom de la variable d'environnement en cours d'énumération. Cette commande doit être appelée après ExamineEnvironmentVariables() et NextEnvironmentVariable().

Pour récupérer la valeur de cette variable d'environnement, utiliser EnvironmentVariableValue().

OS Supportés

Tous


EnvironmentVariableValue()

Syntaxe

Resultat$ = EnvironmentVariableValue()
Description
Renvoie la valeur de la variable d'environnement en cours d'énumération. Cette commande doit être appelée après ExamineEnvironmentVariables() et NextEnvironmentVariable().

Pour récupérer le nom de cette variable d'environnement, utiliser EnvironmentVariableName().

OS Supportés

Tous


ExamineEnvironmentVariables()

Syntaxe

Resultat = ExamineEnvironmentVariables()
Description
Initialise l'énumération des variables d'environnement disponibles à partir du programme PureBasic. Si cet examen n'est pas possible, 'Resultat' sera 0.

Les commandes NextEnvironmentVariable(), EnvironmentVariableName() et EnvironmentVariableValue() sont disponibles pour récupérer les informations concernant chaque variable d'environnement.

Exemple:
  ; Will output all environment variables of the program
  ;
  OpenConsole()
  If ExamineEnvironmentVariables()
    While NextEnvironmentVariable()
      PrintN(EnvironmentVariableName() + " = " + EnvironmentVariableValue())
    Wend
  EndIf
  PrintN("")
  PrintN("Press Enter to quit.")
  Input()

OS Supportés

Tous


GetEnvironmentVariable()

Syntaxe

Resultat$ = GetEnvironmentVariable(Variable$)
Description
Renvoie le contenu de la 'Variable$' d'environnement spécifiée. Si la variable d'environnement n'existe pas, une chaîne de caractère vide sera renvoyée.

Exemple:
  ; Prints the content of the "PATH" environment variable
  ;
  OpenConsole()
  PrintN(GetEnvironmentVariable("PATH"))
  PrintN("")
  PrintN("Press Enter to quit.")
  Input()

OS Supportés

Tous


IsProgram()

Syntaxe

Resultat = IsProgram(Programme)
Description
Teste si le 'Programme' préalablement lancé avec RunProgram() est correctement initialisé. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Tous


KillProgram()

Syntaxe

KillProgram(Programme)
Description
Termine immédiatement l'exécution du programme spécifié (préalablement lancé avec RunProgram()).

Note: cette commande termine l'exécution du programme, mais elle ne ferme pas les connexions avec le programme. CloseProgram() doit toujours être appelé pour libérer les resources associées avec le programme.

OS Supportés

Tous


NextEnvironmentVariable()

Syntaxe

Resultat = NextEnvironmentVariable()
Description
Passe à la variable d'environnement suivante dans l'énumération commencée avec ExamineEnvironmentVariables(). Si il n'y a plus de variables d'environnement disponibles (fin de l'énumération), le 'Resultat' sera nul.

Les commandes EnvironmentVariableName() et EnvironmentVariableValue() sont disponibles pour récupérer le nom et la valeur de la variable d'environnement courante.

OS Supportés

Tous


ProgramExitCode()

Syntaxe

Resultat = ProgramExitCode(Programme)
Description
Renvoie le code de retour du 'Programme' quand il s'est terminé. Le 'Programme' doit avoir été lancé avec la commande RunProgram().

Cette commande doit seulement être utilisée après que l'exécution du 'Programme' se soit réellement terminée. Les commandes ProgramRunning() ou WaitProgram() permettent de faire cette vérification.

Le code de retour permet de renvoyer une valeur numérique au programme qui l'a exécuté. C'est souvent utilisé pour signaler si une erreur est survenue dans le programme lancé.

Pour renvoyer un code de retour à partir d'un programme PureBasic, il faut utiliser le paramètre optionnel du mot-clef End:
  End 1   ; returns the exitcode 1

OS Supportés

Tous


ProgramFilename()

Syntaxe

Resultat$ = ProgramFilename()
Description
Renvoie le chemin complet et le nom du programme PureBasic. Il est peut être utile pour savoir où le programme a été installé ou savoir le nom de l'exécutable. GetPathPart() et GetFilePart() permettent d'isoler respectivement le chemin et le nom du fichier à partir du 'Resultat$'.

Si cette commande est utilisée dans une DLL, cette commande renvoie le chemin et le nom de fichier de la DLL, pas celui du programme qui a chargé la DLL.

OS Supportés

Tous


ProgramID()

Syntaxe

Resultat = ProgramID(Programme)
Description
Renvoie l'identifiant système unique du 'Programme' préalablement lancé avec RunProgram().

Note: la valeur renvoyée ici n'est pas un 'handle' (comme la plupart des autres commandes ...ID()). C'est le "Process ID", qui peut être lu dans le 'Gestionnaire des tâches'. Pour obtenir un 'Process handle', utiliser l'API OpenProcess_().

OS Supportés

Tous


ProgramParameter()

Syntaxe

Resultat$ = ProgramParameter([Index])
Description
Renvoie le paramètre suivant qui a été passé à l'exécutable PureBasic quand il a été lancé. Si le paramètre facultatif 'Index' est spécifié, alors le paramètre à cet index est renvoyé. Quand il n'y a plus de paramètres disponibles, 'Resultat$' sera une chaîne de caractères vide.

Cette commande est particulièrement utile avec les programmes en mode console, où l'utilisateur passe un ou plusieurs paramètres au démarrage du programme.

Note: se baser sur le renvoi d'une chaîne vide pour détecter le dernier paramètre n'est pas forcément idéal car la commande renverra aussi une chaîne vide si "" est passé sur la ligne de commande. La manière recommandée est d'utiliser CountProgramParameters() et d'appeler ProgramParameter() autant de fois que nécessaire.

Exemple:
  MyProgram.exe MyText.txt /FAST "Special Mode"
La première fois que ProgramParameter() est appelé, la commande va renvoyer "MyText.txt", la seconde fois "/FAST" et la troisieme fois "Special Mode".

OS Supportés

Tous


ProgramRunning()

Syntaxe

Resultat = ProgramRunning(Programme)
Description
Teste si le 'Programme' préalablement lancé avec RunProgram() est toujours en cours d'exécution. Le Resultat sera non nul si l'exécution du programme n'est pas encore terminé.

OS Supportés

Tous


ReadProgramData()

Syntaxe

Resultat = ReadProgramData(Programme, *Buffer, Taille)
Description
Lit les données binaires provenant de la sortie standard (stdout) du 'Programme' dans le *Buffer spécifié. Le programme doit avoir été lancé avec RunProgram() en spécifiant l'option #PB_Program_Read.

La commande lit un nombre d'octet jusqu'à la valeur 'Taille', ou moins si il n'y a pas assez de données à lire (par contre cette commande attendra toujours qu'il y ait au moins un octet avant de quitter, donc la valeur 0 pour 'Resultat' n'est pas possible). Le nombre d'octet effectivement lus est renvoyé dans 'Resultat'.

Note: cette commande bloque jusqu'à ce qu'il y ait des données à lire. Pour éviter ce blocage, la commande AvailableProgramOutput() peut être utilisée pour vérifier si il y a bien des données en attente.

OS Supportés

Tous


ReadProgramError()

Syntaxe

Resultat$ = ReadProgramError(Programme)
Description
Lit une ligne texte provenant de la sortie erreur (stderr) du 'Programme'. Le programme doit avoir été lancé avec RunProgram() en spécifiant l'option #PB_Program_Read.

Cette commande n'est pas bloquante, si aucune donnée n'est disponible (une chaîne de caractères vide sera renvoyée).

OS Supportés

Tous


ReadProgramString()

Syntaxe

Resultat$ = ReadProgramString(Programme)
Description
Lit une ligne texte provenant de la sortie standard (stdout) du 'Programme'. Le programme doit avoir été lancé avec RunProgram() en spécifiant l'option #PB_Program_Read.

Note: cette commande bloque jusqu'à ce qu'il y ait des données à lire. Pour éviter ce blocage, la commande AvailableProgramOutput() peut être utilisée pour vérifier si il y a bien des données en attente. Cette commande attend également qu'une ligne complète soit reçue. Si une lecture binaire est nécessaire, la commande ReadProgramData() peut être utilisée.

OS Supportés

Tous


RemoveEnvironmentVariable()

Syntaxe

RemoveEnvironmentVariable(Variable$)
Description
Supprime la 'Variable$' d'environnement spécifié du bloc d'environnement du programme PureBasic.

OS Supportés

Tous


RunProgram()

Syntaxe

Resultat = RunProgram(NomFichier$ [, Parametres$, RepertoireCourant$ [, Options [, SenderProgram]]])
Description
Lance un programme externe. Le 'NomFichier$' contient le nom et le chemin de l'exécutable à lancer. 'Parametres$' représente les paramètres à passer au programme lors de son lancement. Le 'RepertoireCourant$' permet de définir le répertoire courant pour le nouveau programme. Si le programme ne peut pas être exécuté, la valeur de 'Resultat' sera 0, sinon 'Resultat' sera différent de zéro.

Le paramètre facultatif 'Options' peut être l'une des combinaisons suivantes:
  #PB_Program_Wait   : Attends jusqu'à ce que le programme lancé se termine.
  #PB_Program_Hide   : Lance le programme en mode invisible.
  #PB_Program_Open   : Ouvre des canaux de communication entre le programme lancé et le programme PureBasic.
  #PB_Program_Read   : Lecture possible sur la sortie standard (stdout).
  #PB_Program_Write  : Ecriture possible sur l'entrée standard (stdin).
  #PB_Program_Error  : Lecture possible sur la sortie d'erreur(stderr).
  #PB_Program_Connect: Connecte la sortie d'un autre programme à l'entrée du programme PureBasic.
Un programme exécuté avec l'option #PB_Program_Open doit toujours être fermé avec la commande CloseProgram(). Les options 'Read', 'Write', 'Error' et 'Connect' nécessitent aussi l'option #PB_Program_Open.

Quand l'option #PB_Program_Connect est utilisée, un autre programme doit avoir été préalablement lancé avec les options #PB_Program_Open et #PB_Program_Read. Le numéro renvoyé par RunProgram() doit être passé dans le paramètre 'ProgrammeEmetteur'. Toute la sortie du programme émetteur sera envoyée directement dans l'entrée du programme exécuté. Il est possible de chaîner plusieurs programmes de cette manière.

Les commandes suivantes peuvent être utilisées lorsque l'option #PB_Program_Open est spécifiée:

- IsProgram(): teste si le numéro réprésente un programme lancé avec RunProgram().
- ProgramID(): renvoie l'identifiant système du programme.
- ProgramRunning(): teste si le programme est toujours en cours d'exécution.
- WaitProgram(): attend la fin du programme.
- KillProgram(): force le programme à quitter.
- ProgramExitCode(): renvoie le code de retour du programme.
- CloseProgram(): ferme les connexions du programme et libère les ressources.

Les commandes suivantes peuvent être utilisées par les programmes lancés avec les options 'Read', 'Write' ou 'Error':

- AvailableProgramOutput(): teste si des données sont disponibles.
- ReadProgramString(): lit une ligne à partir de la sortie standard du programme exécuté.
- ReadProgramData(): lit des données binaires à partir de la sortie standard du programme exécuté.
- ReadProgramError(): lit une ligne à partir de la sortie erreur du programme exécuté.
- WriteProgramString(): écrit une ligne sur l'entrée standard du programme exécuté.
- WriteProgramData(): écrit des données binaires sur l'entrée standard du programme exécuté.

Si l'option #PB_Program_Open est utilisée, 'Resultat' contient le numéro qui identifie le nouveau programme lancé qui peut être utilisé par les commandes mentionnées ci-dessus.

Exemple:
  ; Executes the PB compiler with the /? option and displays the output (windows version)
  ; For Linux/MacOS change the "/?" to "-h" and the "\" to "/" in the compiler path.
  ;
  Compiler = RunProgram(#PB_Compiler_Home+"\Compilers\pbcompiler", "/?", "", #PB_Program_Open|#PB_Program_Read)
  Output$ = ""
  If Compiler
    While ProgramRunning(Compiler)
      Output$ + ReadProgramString(Compiler) + Chr(13)
    Wend
    Output$ + Chr(13) + Chr(13)
    Output$ + "Exitcode: " + Str(ProgramExitCode(Compiler))
  EndIf
  MessageRequester("Output", Output$)

OS Supportés

Tous


SetEnvironmentVariable()

Syntaxe

SetEnvironmentVariable(Nom$, Valeur$)
Description
Crée une nouvelle variable d'environnement avec le 'Nom$' et la 'Valeur$' specifié. Si la variable d'environnement existait déjà, sa valeur est automatiquement remplacée.

Les variables d'environnements sont automatiquement héritées par les programmes lancés avec RunProgram(), donc il est possible de passer un grand nombre d'informations au nouveau programme en utilisant cette méthode (le programme exécuté pourra utiliser GetEnvironmentVariable() pour lire le contenu des variables).

OS Supportés

Tous


WaitProgram()

Syntaxe

Resultat = WaitProgram(Programme [, Minuteur])
Description
Arrête l'exécution du code jusqu'à ce que le 'Programme' spécifié (préalablement lancé avec RunProgram()) se termine, ou que le minuteur (en millisecondes) expire. Si le programme s'est terminé correctement le 'Résultat' sera différent de 0, si le miniteur a expiré le 'Resultat' sera égal à 0.

OS Supportés

Tous


WriteProgramData()

Syntaxe

Resultat = WriteProgramData(Programme, *Buffer, Taille)
Description
Ecrit les données contenues dans le '*Buffer' dans l'entrée standard (stdin) du 'Programme'. Le 'Programme' doit avoir été lancé avec RunProgram() et l'option #PB_Program_Write. Le nombre d'octet effectivement écrit sera renvoyé dans 'Resultat'.

La valeur spéciale #PB_Program_Eof peut être passée dans le paramètre '*Buffer' pour que le programme reçoive un signal EOF (fin de fichier). Le paramètre 'Taille' est ignoré dans ce cas. Après avoir appelé WriteProgramData() avec cette valeur spéciale, plus rien ne peut être écrit dans l'entrée standard du programme.

OS Supportés

Tous


WriteProgramString()

Syntaxe

Resultat = WriteProgramString(Programme, Texte$)
Description
Ecrit le Texte$ dans l'entrée standard (stdin) du 'Programme'. Le 'Programme' doit avoir été lancé avec RunProgram() et l'option #PB_Program_Write. Le nombre d'octet effectivement écrit sera renvoyé dans 'Resultat'.

Il n'y a pas de caractère de retour à la ligne écrit après le string. Pour inclure automatiquement un caractère de retour à la ligne, la commande WriteProgramStringN() est disponible. Pour écrire autre chose que du texte dans l'entrée standard, la commande WriteProgramData() est disponible (elle permet entre autre d'envoyer le signal #PB_Program_Eof).

OS Supportés

Tous


WriteProgramStringN()

Syntaxe

Resultat = WriteProgramStringN(Programme, Texte$)
Description
Ecrit le Texte$ dans l'entrée standard (stdin) du 'Programme' en ajoutant automatiquement un retour à la ligne. Le 'Programme' doit avoir été lancé avec RunProgram() et l'option #PB_Program_Write. Le nombre d'octet effectivement écrit sera renvoyé dans 'Resultat'.

Pour écrire un texte sans retour à la ligne, la commande WriteProgramString() est disponible. Pour écrire autre chose que du texte dans l'entrée standard, la commande WriteProgramData() est disponible (elle permet entre autre d'envoyer le signal #PB_Program_Eof).

OS Supportés

Tous


Requester

PureBasic - Requester

General

Les Requesters sont ces 'boîtes de dialogue' que l'on trouve dans pratiquement toutes les applications avec interface graphique. Elles sont très pratiques pour effectuer simplement des tâches de base parfois complexes (ouvrir un fichier, choisir une couleur ou une police ...) qui ont chacune leur boîte de dialogue spécialisée.

Sommaire des commandes

ColorRequester
FontRequester
InputRequester
MessageRequester
NextSelectedFileName
OpenFileRequester
PathRequester
SaveFileRequester
SelectedFilePattern
SelectedFontColor
SelectedFontName
SelectedFontSize
SelectedFontStyle

Exemple

Requester.pb

OS Supportés

Tous

Guide de référence - Index


ColorRequester()

Syntaxe

Couleur = ColorRequester([CouleurActuelle])
Description
Ouvre une boîte de dialogue standard pour choisir une couleur. La couleur sélectionnée est renvoyée dans Couleur sous la forme d'une valeur 24 bits (3 octets) dont chaque octet contient la valeur de chacune des composantes Rouge, Vert et Bleu. Pour récupérer facilement la valeur de chacune des composantes, les commandes Red(), Green() et Blue() sont diponibles. Si l'utilisateur choisit le bouton <Annuler> de la boîte de dialogue, la valeur retournée est -1. Le paramètre optionnel 'CouleurActuelle' peut être utilisé pour indiquer la couleur par défaut lors de l'ouverture de la boîte.

Exemple:

  Color.l = ColorRequester()
  If Color > -1
    a$ = "Vous avez sélectionné la couleur suivante:" + Chr(10)  ; Chr(10) est seulement nécessaire
    a$ + "Valeur 24 Bits: " + Str(Color)              + Chr(10)  ; pour les retours à la ligne
    a$ + "Composante rouge:    " + Str(Red(Color))    + Chr(10)
    a$ + "Composante verte:  " + Str(Green(Color))    + Chr(10)
    a$ + "Composante bleue:   " + Str(Blue(Color))
  Else
    a$ = "La sélection a été annulée."
  EndIf
  MessageRequester("Information",a$,0)
  End

OS Supportés

Tous


FontRequester()

Syntaxe

Resultat = FontRequester(NomPolice$, TaillePolice, Options [, Couleur])
Description
Ouvre une boîte de dialogue standard pour choisir une police de caractères. Si l'utilisateur annule la sélection, la valeur retournée dans Resultat est 0, sinon, la valeur est 1. 'NomPolice$' et 'TaillePolice' sont utilisés pour initialiser la police de caractères par défaut lors de l'ouverture de la boîte de dialogue. Les fonctions SelectedFontColor(), SelectedFontName() et SelectedFontSize() peuvent être utilisées après un appel réussi à cette fonction pour obtenir les informations sur la police sélectionnée. Le paramètre optionnel 'Couleur' peut être utilisé pour indiquer la couleur par défaut lors de l'ouverture de la boîte.

'Options' peut prendre une des valeurs suivantes:
  #PB_FontRequester_Effects : Active les effets (y compris le sélectionneur de couleur).

Exemple:

  FontName$ = "Arial"   ; Police initiale (peut aussi être nulle)
  FontSize  = 14        ; Taille initiale (peut aussi être nulle)
  Result = FontRequester(FontName$, FontSize, #PB_FontRequester_Effects)
  If Result
    Message$ = "You have selected following font:"  + #LF$
    Message$ + "Name:  " + SelectedFontName()       + #LF$
    Message$ + "Size:  " + Str(SelectedFontSize())  + #LF$
    Message$ + "Color: " + Str(SelectedFontColor()) + #LF$
    If SelectedFontStyle() & #PB_Font_Bold
      Message$ + "Bold" + #LF$
    EndIf
    If SelectedFontStyle() & #PB_Font_StrikeOut
      Message$ + "StrikeOut" + #LF$
    EndIf
    If SelectedFontStyle() & #PB_Font_Underline
      Message$ + "Underline" + #LF$
    EndIf
  Else
    Message$ = "La sélection a été annulée."
  EndIf

  MessageRequester("FontRequester", Message$, #PB_MessageRequester_Ok)

OS Supportés

Tous


InputRequester()

Syntaxe

Texte$ = InputRequester(Titre$, Message$, TextParDefaut$)
Description
Ouvre une boîte de dialogue permettant la saisie de texte.

Exemple:

  Input$ = InputRequester("Titre","Saisissez un texte:","Texte par défaut.")

  If Input$ > ""
    a$ = "Vous avez écrit le texte suivant:" + Chr(10)  ; Chr(10) nécessaire seulement
    a$ + Input$                                                  ; pour faire un saut de ligne
  Else
    a$ = "La saisie a été annulé ou il n'y a pas de texte saisi."
  EndIf
  MessageRequester("Information",a$,0)
  End

OS Supportés

Windows, Linux, MacOS X


MessageRequester()

Syntaxe

Resultat = MessageRequester(Titre$, Message$, Options)
Description
Ouvre une boîte de dialogue permettant d'afficher un message destiné à fournir des informations à l'utilisateur. L'exécution du programme est interrompue tant que l'utilisateur n'a pas refermé la boîte. Les options possibles sont les suivantes :
  #PB_MessageRequester_YesNo       : Pour afficher les boutons 'Oui' et 'Non'
  #PB_MessageRequester_YesNoCancel : Pour afficher les boutons 'Oui', 'Non' et 'Annuler'
  #PB_MessageRequester_Ok          : Pour afficher seulement le bouton 'OK'

Exemple:

  ; Simple MessageRequester  (normally used for information purposes only)
  ; (result will be always the same, so we don't check it here)
  MessageRequester("Information","Just a short information text.",#PB_MessageRequester_Ok)

  ; MessageRequester with Yes / No buttons  (normally used for questions)
  ; (result will be shown in the following information requester)
  Result = MessageRequester("Title","Please make your input:",#PB_MessageRequester_YesNo)
  a$ = "Result of the previously requester was: "
  If Result = 6     ; pressed Yes button (Result = 6)
    a$ + "Yes"
  Else              ; pressed No button (Result = 7)
    a$ + "No"
  EndIf
  MessageRequester("Information",a$,#PB_MessageRequester_Ok)

  ; MessageRequester with Yes / No / Cancel buttons  (normally used for questions)
  ; (result will be shown in the following information requester)
  Result = MessageRequester("Title","Please make your input:",#PB_MessageRequester_YesNoCancel)
  a$ = "Result of the previously requester was: "
  If Result = 6        ; pressed Yes button (Result = 6)
    a$ + "Yes"
  ElseIf Result = 7    ; pressed No button (Result = 7)
    a$ + "No"
  Else                 ; pressed Cancel button or Esc (Result = 2)
    a$ + "Cancel"
  EndIf
  MessageRequester("Information",a$,#PB_MessageRequester_Ok)

OS Supportés

Tous


NextSelectedFileName()

Syntaxe

NomFichier$ = NextSelectedFileName()
Description
Après un OpenFileRequester() utilisant la constante #PB_Requester_MultiSelection, cette instruction renvoie le fichier sélectionné suivant si il existe. Si la valeur NomFichier$ retournée est vide, alors il n'y a plus de fichier sélectionné dans la liste.

Exemple:

  FileName$ = OpenFileRequester("Choisissez quelques fichiers","","",0, #PB_Requester_MultiSelection)

  While FileName$
    Debug FileName$
    FileName$ = NextSelectedFileName()
  Wend

OS Supportés

Tous


OpenFileRequester()

Syntaxe

NomFichier$ = OpenFileRequester(Titre$, FichierParDefaut$, Filtre$, FiltrePosition [, Options])
Description
Ouvre une boîte de dialogue standard pour choisir un fichier. Titre$ remplace le titre de la boîte par défaut. FichierParDefaut$ permet d'initialiser la boîte avec un répertoire et un fichier choisis.

Filtre$ permet de n'afficher que les fichiers dont le nom et/ou l'extension de fin correspond au filtre. Il doit avoir la forme des exemples suivants : '*.txt' pour des fichiers texte, '*.mus;*.mod' pour des fichiers musique ayant l'extension '.mus' ou '.mod'. Chaque filtre est en fait une paire composée du label qui sera visible dans le requester et du filtre proprement dit. Le séparateur est le caractère '|' (Pipe).

Exemple:

  "Fichiers Textes|*.txt"            ; Un seul filtre avec comme label 'Fichiers Textes'
  "Fichiers Textes|*.txt;*.doc"      ; Un seul filtre avec *.txt et *.doc accepté
  "Musiques|*.mp3|Video|*.avi;*.asf" ; 2 filtres (Musique et video)
Enfin, 'FiltrePosition' précise quel filtre est celui par défaut, depuis 0 jusqu'au nombre total de filtres. Une fois la boîte fermée, SelectedFilePattern() permet de récupérer la position du filtre choisi.

Le 'NomFichier$' renvoyé peut être découpé facilement en chemin, nom ou extension à l'aide des commandes suivantes: GetFilePart(), GetPathPart() et GetExtensionPart().

'Options' est un paramètre facultatif et peut être une combinaison des valeurs suivantes:
  #PB_Requester_MultiSelection: Active la multi-sélection. (voir NextSelectedFileName())

Exemple:

  StandardFile$ = "C:\autoexec.bat"   ; Répertoire et fichier par défaut qui seront affichés
  ;  With next string we will set the search patterns ("|" as separator) for file displaying:
  ;  1st: "Text (*.txt)" as name, ".txt" and ".bat" as allowed extension
  ;  2nd: "PureBasic (*.pb)" as name, ".pb" as allowed extension
  ;  3rd: "All files (*.*) as name, "*.*" as allowed extension, valid for all files
  Pattern$ = "Texte (*.txt)|*.txt;*.bat|PureBasic (*.pb)|*.pb|Tous les fichiers (*.*)|*.*"
  Pattern = 0    ; use the first of the three possible patterns as standard
  File$ = OpenFileRequester("Choisissez un fichier à charger", StandardFile$, Pattern$, Pattern)
  If File$
    MessageRequester("Information", "Vous avez choisi le fichier suivant:"+Chr(10)+File$, 0)
  Else
    MessageRequester("Information", "La sélection a été annulée.", 0)
  EndIf

OS Supportés

Tous


PathRequester()

Syntaxe

NomChemin$ = PathRequester(Titre$, CheminInitial$)
Description
Ouvre une boîte de dialogue listant l'arborescence des unités de stockages attachées au système pour choisir un chemin. Titre$ remplace le titre de la boîte par défaut. CheminInitial$ permet d'initialiser la boîte sur le chemin spécifié. Le chemin est renvoyé dans NomChemin$ avec un '\' de fin.

Exemple:

  InitialPath$ = "C:\"   ; Répertoire par défaut qui sera affiché (une chaîne vide est aussi possible)
  Path$ = PathRequester("Choisissez un répertoire", InitialPath$)
  If Path$
    MessageRequester("Information", "Vous avez choisi le répertoire suivant:"+Chr(10)+Path$, 0)
  Else
    MessageRequester("Information", "La sélection a été annulée.", 0)
  EndIf

OS Supportés

Tous


SaveFileRequester()

Syntaxe

NomFichier$ = SaveFileRequester(Titre$, FichierParDefaut$, Filtre$, FiltrePosition)
Description
Ouvre une boîte de dialogue standard pour enregistrer un fichier. Titre$ remplace le titre de la boîte par défaut. FichierParDefaut$ permet d'initialiser la boîte avec un répertoire et un fichier choisis.

Filtre$ permet de n'afficher que les fichiers dont le nom et/ou l'extension de fin correspond au filtre. Il doit avoir la forme des exemples suivants : '*.txt' pour des fichiers texte, '*.mus;*.mod' pour des fichiers musique ayant l'extension '.mus' ou '.mod'. Chaque filtre est en fait une paire composée du label qui sera visible dans le requester et du filtre proprement dit. Le séparateur est le caractère '|' (Pipe).

Exemple:

  "Fichiers Textes|*.txt"            ; Un seul filtre avec comme label 'Fichiers Textes'
  "Fichiers Textes|*.txt;*.doc"      ; Un seul filtre avec *.txt et *.doc accepté
  "Musiques|*.mp3|Video|*.avi;*.asf" ; 2 filtres (Musique et video)
Enfin, FiltrePosition précise quel filtre est celui par défaut, depuis 0 jusqu'au nombre total de filtres. Une fois la fenêtre fermée, SelectedFilePattern() permet de récupérer la position du filtre choisi.

Le 'NomFichier$' renvoyé peut être découpé facilement en chemin, nom ou extension à l'aide des commandes suivantes: GetFilePart(), GetPathPart() et GetExtensionPart().

Exemple:

  StandardFile$ = "C:\autoexec.bat"   ; Répertoire et fichier par défaut
  ; With next string we will set the search patterns ("|" as separator) for file displaying:
  ;  1st: "Texte (*.txt)" as name, ".txt" and ".bat" as allowed extension
  ;  2nd: "PureBasic (*.pb)" as name, ".pb" as allowed extension
  ;  3rd: "All files (*.*) as name, "*.*" as allowed extension, valid for all files
  Pattern$ = "Texte (*.txt)|*.txt;*.bat|PureBasic (*.pb)|*.pb|Tous les fichiers (*.*)|*.*"
  Pattern = 0    ; use the first of the three possible patterns as standard
  File$ = SaveFileRequester("Choisissez un fichier à sauvegarder", StandardFile$, Pattern$, Pattern)
  If File$
    MessageRequester("Information", "Vous avez choisi ce fichier:"+Chr(10)+File$, 0)
  Else
    MessageRequester("Information", "La sélection a été annulée.", 0)
  EndIf

OS Supportés

Tous


SelectedFilePattern()

Syntaxe

Index = SelectedFilePattern()
Description
Renvoie l'index du filtre (*.bmp, *.gif etc...) sélectionné lors de l'utilisation de la commande OpenFileRequester() ou SaveFileRequester(). L'index du premier filtre est 0.

Exemple:

  StandardFile$ = "C:\autoexec.bat"        ; Répertoire et fichier par défaut
  Pattern$ = "Texte (*.txt)|*.txt;*.bat|"  ; Premier filtre   (index = 0)
  Pattern$ + "PureBasic (*.pb)|*.pb|"      ; Deuxième filtre  (index = 1)
  Pattern$ + "Bmp (*.bmp)|*.bmp|"          ; Troisième filtre (index = 2)
  Pattern$ + "Jpeg (*.jpg)|*.jpg|"         ; Quatrième filtre (index = 3)
  Pattern$ + "Tous les fichiers (*.*)|*.*"         ; Cinquième filtre (index = 4)
  Pattern = 1    ; Le deuxième filtre sera utilisé par défaut.

  ; Ouvre une boîte de dialogue pour choisir un fichier, vous pouvez changer de filtre et obtenir son index après validation
  File$ = OpenFileRequester("Choisissez un fichier", StandardFile$, Pattern$, Pattern)
  Index = SelectedFilePattern()
  If Index > -1
    MessageRequester("Information", "L'index du filtre sélectionné est le suivant: "+Str(Index), 0)
  Else
    MessageRequester("Information", "La sélection a été annulée.", 0)
  EndIf

OS Supportés

Windows, Linux, MacOS X


SelectedFontColor()

Syntaxe

Couleur = SelectedFontColor()
Description
Renvoie la couleur sélectionnée par l'utilisateur avec la fonction FontRequester(). Couleur est une valeur 24 bits (3 octets) dont chaque octet contient la valeur de chacune des composantes Rouge, Vert et Bleu. Pour récupérer facilement la valeur de chacune des composantes, les commandes Red(), Green() et Blue() sont diponibles.

OS Supportés

Tous


SelectedFontName()

Syntaxe

NomPolice$ = SelectedFontName()
Description
Renvoie dans NomPolice$ la police sélectionnée par l'utilisateur avec la fonction FontRequester(). Ce nom peut être utilisé directement par la fonction LoadFont().

OS Supportés

Tous


SelectedFontSize()

Syntaxe

Taille = SelectedFontSize()
Description
Renvoie la taille de la police sélectionnée par l'utilisateur avec FontRequester().

OS Supportés

Tous


SelectedFontStyle()

Syntaxe

Style = SelectedFontStyle()
Description
Renvoie le style de la police de caractères sélectionnée par l'utilisateur avec la fonction FontRequester(). 'Style' peut contenir une ou plusieurs des valeurs suivantes:
  #PB_Font_Bold  : La police est en 'Gras'.
  #PB_Font_Italic: La police est en 'Italique'.
Pour tester si une valeur est présente, il suffit d'utiliser l'opérateur '&' (And):
  If SelectedFontStyle() & #PB_Font_Bold
    ; La police est en 'Gras'
  EndIf

OS Supportés

Tous


Sort

PureBasic - Sort

General

Souvent, les données doivent être triées pour être utilisées. PureBasic propose des commandes très optimisées pour trier les tableaux et les listes chainées aussi bien en ordre ascendant que descendant.

Sommaire des commandes

SortArray
SortList
SortStructuredArray
SortStructuredList

Exemple

Sort (Numeric).pb
Sort (String).pb

OS Supportés

Windows, Linux, MacOS X

Guide de référence - Index


SortArray()

Syntaxe

SortArray(ArrayName(), Options [, Debut, Fin])
Description
Trie le tableau spécifié selon les options souhaitées. Le tableau peut être de l'un des types suivants : byte, word, long, string ou float. Une plage Début, Fin optionnelle peut être indiquée.

Les options peuvent prendre l'une des valeurs suivantes:

0: Trie le tableau en ordre ascendant (les plus petites valeurs en tête)
1: Trie le tableau en ordre descendant (les plus grandes valeurs en tête)
2: Trie un tableau de chaînes de caractères en ne tenant pas compte de la casse (a=A, b=B etc..) et dans l'ordre ascendant
3: Trie un tableau de chaînes de caractères en ne tenant pas compte de la casse (a=A, b=B etc..) et dans l'ordre descendant

Note: Si un tableau n'est pas totalement plein les éléments vides seront placés en tête dans l'ordre ascendant et en fin dans l'ordre descendant.

OS Supportés

Windows, Linux, MacOS X


SortList()

Syntaxe

SortList(ListName(), Options [, Debut, Fin])
Description
Trie la liste spécifiée selon les options souhaitées. La liste peut être de l'un des types suivants : byte, word, long, string ou float. Une plage Début, Fin optionnelle peut être indiquée.

Les options peuvent prendre l'une des valeurs suivantes:

0: Trie la liste en ordre ascendant (les plus petites valeurs en tête)
1: Trie la liste en ordre descendant (les plus grandes valeurs en tête)
2: Trie une liste de chaînes de caractères en ne tenant pas compte de la casse (a=A, b=B etc..) et dans l'ordre ascendant
3: Trie une liste de chaînes de caractères en ne tenant pas compte de la casse (a=A, b=B etc..) et dans l'ordre descendant

OS Supportés

Windows, Linux, MacOS X


SortStructuredArray()

Syntaxe

SortStructuredArray(ArrayName(), Options, OffsetDuChamp, Type [, Debut, Fin])
Description
Trie le tableau selon les options souhaitées. Le tableau doit avoir une structure associée. OffsetOf() peut être utilisé pour obtenir l'offset du champ dans la structure associée au tableau. Le paramètre 'Type' défini le type du champ de la structure qui sert pour le tri. Les types disponibles sont:
  #PB_Sort_Byte     : Le champ de la structure utilisé pour le tri est un octet (.b)
  #PB_Sort_Word     : Le champ de la structure utilisé pour le tri est un word (.w)
  #PB_Sort_Long     : Le champ de la structure utilisé pour le tri est un long (.l)
  #PB_Sort_String   : Le champ de la structure utilisé pour le tri est un string (.s or $)
  #PB_Sort_Float    : Le champ de la structure utilisé pour le tri est un flottant (.f)
  #PB_Sort_Double   : Le champ de la structure utilisé pour le tri est un double (.d)
  #PB_Sort_Quad     : Le champ de la structure utilisé pour le tri est un quad (.q)
  #PB_Sort_Character: Le champ de la structure utilisé pour le tri est un caractère (.c)
Une plage Début, Fin optionnelle peut être indiquée.

Les options peuvent prendre l'une des valeurs suivantes:

0: Trie le tableau en ordre ascendant (les plus petites valeurs en tête)
1: Trie le tableau en ordre descendant (les plus grandes valeurs en tête)
2: Trie un tableau de chaînes de caractères en ne tenant pas compte de la casse (a=A, b=B etc..) et dans l'ordre ascendant
3: Trie un tableau de chaînes de caractères en ne tenant pas compte de la casse (a=A, b=B etc..) et dans l'ordre descendant

Note: Si un tableau n'est pas totalement plein les éléments vides seront placés en tête dans l'ordre ascendant et en fin dans l'ordre descendant.

Exemple:

  Structure Animal
    Nom$
    Vitesse.l
  EndStructure

  Dim Animaux.Animal(2)

  Animaux(0)\Nom$ = "Tigre"
  Animaux(0)\Vitesse = 10

  Animaux(1)\Nom$ = "Jaguar"
  Animaux(1)\Vitesse = 40

  Animaux(2)\Nom$ = "Zèbre"
  Animaux(2)\Vitesse = 30

  ; Trie le tableau en fonction du champ 'Nom$'qui est une chaîne de caractères (String)
  ;
  SortStructuredArray(Animaux(), 0, OffsetOf(Animal\Nom$), #PB_Sort_String)

  For k=0 To 2
    Debug Animaux(k)\Nom$+" - Vitesse : "+Str(Animaux(k)\Vitesse)
  Next

  ; Trie le tableau en fonction du champ 'Vitesse' qui est un long
  ;
  SortStructuredArray(Animaux(), 0, OffsetOf(Animal\Vitesse), #PB_Sort_Long)

  For k=0 To 2
    Debug Animaux(k)\Nom$+" - Vitesse : "+Str(Animaux(k)\Vitesse)
  Next

OS Supportés

Windows, Linux, MacOS X


SortStructuredList()

Syntaxe

SortStructuredList(ListName(), Options, OffsetDuChamp, Type [, Debut, Fin])
Description
Trie la liste selon les options souhaitées. La liste doit avoir une structure associée. OffsetOf() peut être utilisé pour obtenir l'offset du champ dans la structure associée à la liste. Le paramètre 'Type' défini le type du champ de la structure qui sert pour le tri. Les types disponibles sont:
  #PB_Sort_Byte     : Le champ de la structure utilisé pour le tri est un octet (.b)
  #PB_Sort_Word     : Le champ de la structure utilisé pour le tri est un word (.w)
  #PB_Sort_Long     : Le champ de la structure utilisé pour le tri est un long (.l)
  #PB_Sort_String   : Le champ de la structure utilisé pour le tri est un string (.s or $)
  #PB_Sort_Float    : Le champ de la structure utilisé pour le tri est un flottant (.f)
  #PB_Sort_Double   : Le champ de la structure utilisé pour le tri est un double (.d)
  #PB_Sort_Quad     : Le champ de la structure utilisé pour le tri est un quad (.q)
  #PB_Sort_Character: Le champ de la structure utilisé pour le tri est un caractère (.c)
Une plage Début, Fin optionnelle peut être indiquée.

Les options peuvent prendre l'une des valeurs suivantes:

0: Trie le tableau en ordre ascendant (les plus petites valeurs en tête)
1: Trie le tableau en ordre descendant (les plus grandes valeurs en tête)
2: Trie un tableau de chaînes de caractères en ne tenant pas compte de la casse (a=A, b=B etc..) et dans l'ordre ascendant
3: Trie un tableau de chaînes de caractères en ne tenant pas compte de la casse (a=A, b=B etc..) et dans l'ordre descendant

Exemple:

  Structure Animal
    Nom$
    Vitesse.l
  EndStructure

  NewList Animaux.Animal()

  AddElement(Animaux())
  Animaux()\Nom$ = "Tigre"
  Animaux()\Vitesse = 10

  AddElement(Animaux())
  Animaux()\Nom$ = "Jaguar"
  Animaux()\Vitesse = 40

  AddElement(Animaux())
  Animaux()\Nom$ = "Zèbre"
  Animaux()\Vitesse = 30

  ; Trie la liste en fonction du champ 'Nom$'qui est une chaîne de caractères (String)
  ;
  SortStructuredList(Animaux(), 0, OffsetOf(Animal\Nom$), #PB_Sort_String)

  ForEach Animaux()
    Debug Animaux()\Nom$+" - Vitesse : "+Str(Animaux()\Vitesse)
  Next

  ; Trie la liste en fonction du champ 'Vitesse' qui est un long
  ;
  SortStructuredList(Animaux(), 0, OffsetOf(Animal\Vitesse), #PB_Sort_Long)

  ForEach Animaux()
    Debug Animaux()\Nom$+" - Vitesse : "+Str(Animaux()\Vitesse)
  Next

OS Supportés

Windows, Linux, MacOS X


StatusBar

PureBasic - StatusBar

General

Une 'StatusBar' est une barre d'informations horizontale (barre d'état) située en bas d'une fenêtre. Cette barre est toujours visible et peut être séparée en plusieurs champs.

Sommaire des commandes

AddStatusBarField
CreateStatusBar
FreeStatusBar
IsStatusBar
StatusBarHeight
StatusBarID
StatusBarIcon
StatusBarText

Exemple

StatusBar.pb

OS Supportés

Windows, Linux, MacOS X

Guide de référence - Index


AddStatusBarField()

Syntaxe

AddStatusBarField(Largeur)
Description
Ajoute un champ à la barre d'état précédemment créée par la fonction CreateStatusBar(). La 'Largeur' du nouveau champ est indiquée en pixels. Chaque nouveau champ est créé à la suite du précédent. Pour placer un texte dans le champ, utilisez StatusBarText().

La fonction CreateStatusBar() contient un exemple montrant l'utilisation de AddStatusBarField().

OS Supportés

Windows, Linux, MacOS X


CreateStatusBar()

Syntaxe

Resultat = CreateStatusBar(#BarreEtat, WindowID)
Description
Ajoute une barre d'état vide à la fenêtre spécifiée par WindowID. Si #PB_Any est utilisé pour le paramètre '#BarreEtat', le numéro de la barre d'état sera renvoyé dans 'Resultat'. Si le 'Resultat' = 0, la création a échoué.
Lorsque la barre est créée, utilisez la fonction AddStatusBarField() pour lui ajouter différents champs.

Exemple:
  If OpenWindow(0, 0, 0, 440, 50, "StatusBar", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
    If CreateStatusBar(0, WindowID(0))
      AddStatusBarField(90)
      AddStatusBarField(100)
      AddStatusBarField(130)
      AddStatusBarField(100)
    EndIf

    StatusBarText(0, 0, "Area normal")
    StatusBarText(0, 1, "Area borderless", #PB_StatusBar_BorderLess)
    StatusBarText(0, 2, "Area right & raised", #PB_StatusBar_Right | #PB_StatusBar_Raised)
    StatusBarText(0, 3, "Area centered", #PB_StatusBar_Center)

    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux, MacOS X


FreeStatusBar()

Syntaxe

FreeStatusBar(#BarreEtat)
Description
Efface et libère la barre d'état #BarreEtat.

OS Supportés

Windows, Linux, MacOS X


IsStatusBar()

Syntaxe

Resultat = IsStatusBar(#BarreEtat)
Description
Teste si la #BarreEtat est correctement initialisée. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, Linux, MacOS X


StatusBarHeight()

Syntaxe

Result = StatusBarHeight(#BarreEtat)
Description
Renvoie la hauteur (en pixels) de la #BarreEtat. C'est utile pour pouvoir calculer avec précision la hauteur d'une fenêtre comportant une barre d'état.

OS Supportés

Windows, Linux, MacOS X


StatusBarID()

Syntaxe

StatusBarID = StatusBarID(#BarreEtat)
Description
Renvoie l'identifiant (Handle) unique de la fenêtre dans le système d'exploitation. Lire la page Numéros et Identifiants (Handles) pour plus d'informations.

OS Supportés

Windows, Linux, MacOS X


StatusBarIcon()

Syntaxe

StatusBarIcon(#BarreEtat, Champ, ImageID)
Description
Ajoute ou remplace une icône au champ spécifié. L'icône sera placée à la gauche du texte. Elle devra être au format 16*16 pixels. 'ImageID' est obtenu par LoadImage() ou ImageID().

Exemple:
  If OpenWindow(0, 0, 0, 340, 50, "StatusBarIcon", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
    If CreateStatusBar(0, WindowID(0))
      AddStatusBarField(120)
      AddStatusBarField(170)
    EndIf
    StatusBarText(0, 0, "Area normal")
    StatusBarText(0, 1, "Area right & raised", #PB_StatusBar_Right | #PB_StatusBar_Raised)

    If LoadImage(0,"cube16.ico")     ; change path/filename to your own 16x16 pixel image
      StatusBarIcon(0,0,ImageID(0))
      StatusBarIcon(0,1,ImageID(0))
    EndIf

    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows


StatusBarText()

Syntaxe

StatusBarText(#BarreEtat, Champ, Texte$ [, Apparence])
Description
Crée ou change le texte du Champ spécifié dans la barre #BarreEtat. Le paramètre 'Apparence' est facultatif et peut prendre les valeurs suivantes :
  #PB_StatusBar_Raised    : Bordure en relief élevé
  #PB_StatusBar_BorderLess: Sans bordure
  #PB_StatusBar_Center    : Texte centré
  #PB_StatusBar_Right     : Texte aligné à droite
Les options peuvent être combinées avec l'operator '|' (OR):
  #PB_StatusBar_BorderLess | #PB_StatusBar_Right : Champ sans bordure aligné à droite

La fonction CreateStatusBar() contient un exemple montrant l'utilisation de StatusBarText().

OS Supportés

Windows, Linux, MacOS X


String

PureBasic - String

General

La bibliothèque String vous permet d'effectuer des opérations courantes sur des chaînes de caractères.

Sommaire des commandes

Asc
Bin
BinQ
Chr
CountString
FindString
Hex
HexQ
LCase
LSet
LTrim
Left
Len
Mid
RSet
RTrim
RemoveString
ReplaceString
Right
Space
Str
StrD
StrF
StrQ
StrU
StringByteLength
StringField
Trim
UCase
Val
ValD
ValF
ValQ

Exemple

String.pb

OS Supportés

Tous

Guide de référence - Index


Asc()

Syntaxe

ValeurASCII = Asc(Chaine$)
Description
Renvoie la valeur ASCII du premier caractère de la chaîne.

Exemple:

  ValeurASCII = Asc("!") ; 'ValeurASCII' recevra la valeur 33

OS Supportés

Tous


Bin()

Syntaxe

Resultat$ = Bin(Valeur)
Description
Convertit une valeur numérique en chaîne en utilisant la représentation binaire. Pour convertir une valeur de type quad, utilisez BinQ().

Exemple:

  Resultat$ = Bin(32) ; Resultat$ est "100000"

OS Supportés

Windows, Linux, MacOS X


BinQ()

Syntaxe

Resultat$ = BinQ(Valeur.q)
Description
Convertit une valeur numérique de type quad en chaîne en utilisant la représentation binaire. la commande BinQ() peut gérer des nombre bien plus grand que Bin(), mais elle est légèrement plus lente.

Exemple:

  Resultat$ = BinQ(1024*1024*1024*1024) ; Resultat$ Sera "10000000000000000000000000000000000000000"

Note: Si des zéros supplémentaires sont nécessaires pour formatter correctement le texte, il est possible d'utiliser RSet().

Exemple:

  Debug RSet(BinQ(32), 16, "0") ; Affichera "0000000000100000"

OS Supportés

Windows, Linux, MacOS X


Chr()

Syntaxe

Texte$ = Chr(ValeurASCII)
Description
Renvoie la caractère correspondant à la valeur de ValeurASCII.

Exemple:

  Debug Chr(33) ; Affichera le caractère "!"

OS Supportés

Tous


CountString()

Syntaxe

Resultat = CountString(Chaine$, ChaineATrouver$)
Description
Renvoie le nombre d'occurences de la 'ChaineATrouver$' comptabilisées dans la 'Chaine$'. Cette fonction ne raisonne pas sur des mots, donc si la 'ChaineATrouver$' se trouve à l'intérieur d'un mot, elle sera comptabilisée quand même, comme le prouve l'exemple suivant.

Exemple:

  Resultat = CountString("Combien de 'ien' contient le mot chien ?", "ien") ; Le résultat sera 4

OS Supportés

Windows, Linux, MacOS X


FindString()

Syntaxe

Position = FindString(Chaine$, ChaineCherchee$, PositionDepart)
Description
Essaie de trouver la 'ChaineCherchee$' dans la chaîne 'Chaine$', à partir de la position 'PositionDepart'. Si 'ChaineCherchee$' est trouvée, sa position (en nombre de caractères commençant à 1) est renvoyée dans 'Position'. Si 'ChaineCherchee$' n'est pas trouvée, la valeur renvoyée est 0.

Exemple:

  Position = FindString("PureBasic", "Bas", 1) ; 'Position' recevra la valeur 5

OS Supportés

Tous


Hex()

Syntaxe

Resultat$ = Hex(Valeur)
Description
Convertit une valeur numérique en une chaîne de caractères au format hexadécimal renvoyée dans Resultat$. Pour convertir une valeur de type quad, utiliser HexQ().

Exemple:

  Debug Hex(12) ; Affichera "C"
Note: Si des zéros supplémentaires sont nécessaires pour formatter correctement le texte, il est possible d'utiliser RSet():
  Debug RSet(Hex(12), 4, "0") ; Affichera "000C"

OS Supportés

Tous


HexQ()

Syntaxe

Resultat$ = HexQ(Valeur.q)
Description
Convertit une valeur numérique de type quad en une chaîne de caractères au format hexadécimal renvoyée dans Resultat$. Pour convertir une valeur numérique normale, utilisez Hex().

Exemple:

  Debug HexQ(1234567890) ; Affichera "0499602D2"
Note: Si des zéros supplémentaires sont nécessaires pour formatter correctement le texte, il est possible d'utiliser RSet():
  Debug RSet(Hex(12), 4, "0") ; Affichera "000C"

OS Supportés

Tous


LCase()

Syntaxe

Resultat$ = LCase(Chaine$)
Description
Renvoie dans Resultat$ la chaîne Chaine$ convertie en lettres minuscules (quand c'est possible). Cette commande accepte les caractères accentués. Si un 'É' majuscule est trouvé, il sera transformé en un 'é' minuscule.

Exemple:

  Debug LCase("PureBasic, LA PUISSANCE À L'ÉTAT PUR") ; Affichera "purebasic, la puissance à l'état pur"

OS Supportés

Tous


LSet()

Syntaxe

Resultat$ = LSet(String$, Length [, Character$])
Description
Ajuste la longueur de la chaîne de caractères en y ajoutant des caractères en fin de chaîne si nécessaire pour atteindre la longueur spécifiée.Le paramètre 'Caractere$' est facultatif et peut être utilisé en lieu et place du caractère d'espacement qui est la valeur par défaut. Si la chaîne est plus longue que la longueur spécifiée, elle sera tronquée à partir du début de la chaîne.

Exemple:

  Resultat$ = LSet("L", 8)          ; Resultat$ sera: "L       "
  Resultat$ = LSet("L", 8, "-")     ; Resultat$ sera: "L-------"
  Resultat$ = LSet("LongString", 4) ; Resultat$ sera: "Long"

OS Supportés

Windows, Linux, MacOS X


LTrim()

Syntaxe

Resultat$ = LTrim(Chaine$)
Description
Supprime tous les espaces situés au début de la chaîne de caractères.

Exemple:

  Debug LTrim("   PureBasic   ") ; Affichera "PureBasic   ".

OS Supportés

Tous


Left()

Syntaxe

Resultat$ = Left(Chaine$, Longueur)
Description
Renvoie les caractères de la partie gauche de la 'Chaine$'. Le nombre de caractères renvoyés est déterminé par 'Longueur'. Cette fonction renverra toute la chaîne si la longueur est supérieure à la taille de la chaîne de caractères.

Exemple:

  Debug Left("PureBasic", 4) ; Affichera "Pure"

OS Supportés

Tous


Len()

Syntaxe

Longueur = Len(Chaine$)
Description
Renvoie la longueur en caractères de la chaîne.

Exemple:

  a = Len("PureBasic") ; a recevra 9

OS Supportés

Tous


Mid()

Syntaxe

Resultat$ = Mid(Chaine$, PositionDepart, Longueur)
Description
Extrait une chaîne de longueur 'Longueur', extraite de la chaîne 'Chaine$', à partir du caractère situé à la position 'PositionDepart' (la position démarre à 1)

Exemple:

  Debug Mid("PureBasic", 5, 3) ; Affichera "Bas".

OS Supportés

Tous


RSet()

Syntaxe

Resultat$ = RSet(Chaine$, Longueur [, Caractere$])
Description
Ajuste la longueur de la chaîne de caractères en y ajoutant des caractères en début de chaîne si nécessaire pour atteindre la longueur spécifiée. Le paramètre 'Caractere$' est facultatif et peut être utilisé en lieu et place du caractère d'espacement qui est la valeur par défaut. Si la chaîne est plus longue que la longueur spécifiée, elle sera tronquée à partir du début de la chaîne.

Exemple:

  Resultat$ = RSet("R", 8)          ; Le résultat est: "       R"
  Resultat$ = RSet("R", 8, "-")     ; Le résultat est: "-------R"
  Resultat$ = RSet("LongString", 4) ; Le résultat est: "Long"

OS Supportés

Windows, Linux, MacOS X


RTrim()

Syntaxe

Resultat$ = RTrim(Chaine$)
Description
Supprime tous les espaces situés à la fin de la chaîne de caractères.

Exemple:

  Debug RTrim("   PureBasic   ") ; Affichera "   PureBasic".

OS Supportés

Tous


RemoveString()

Syntaxe

Chaine$ = RemoveString(Chaine$, ChaineASupprimer$ [, Mode])
Description
Trouve toutes les occurrences de ChaineASupprimer$ dans Chaine$ et les supprime.

Le paramètre 'Mode' est facultatif et peut être une combinaison des valeurs suivantes:
1: Case insensitive remove (A=a). Par défaut la suppression est sensible à la casse.

OS Supportés

Windows, Linux, MacOS X


ReplaceString()

Syntaxe

String$ = ReplaceString(Chaine$, ChaineCherchee$, ChaineRemplacee$ [, Mode [, PositionDepart]])
Description
Substitue toutes les occurrences de 'ChaineCherchee$' trouvées dans 'Chaine$' par 'ChaineRemplacee$'. Le paramètre 'PositionDepart' est facultatif et permet de spécifier à partir de quel caractère le remplacement doit être effectué. Sa valeur minimale est 1.

Le paramètre 'Mode' est facultatif et peut être une combinaison des valeurs suivantes:
  1: Recherche les occurrences sans tenir compte de la casse (A=a).
  2: Remplacement direct dans la Chaîne de caractères initiale 'Chaîne$'. Dans ce cas,
  'ChaineRemplacee$' doit absolument avoir la même taille que 'ChaineCherchee$'.
  C'est une fonctionnalité pour programmeurs expérimentés qui ont besoin d'une fonction
  extrêmement rapide pour ce cas particulier. Quand cette option est utilisée, le résultat renvoyé par ReplaceString() doit être
  ignoré (car c'est la chaîne de caractères passée en paramètre qui est modifiée).

OS Supportés

Tous


Right()

Syntaxe

Resultat$ = Right(Chaine$, Longueur)
Description
Renvoie les caractères de la partie droite de la chaîne Chaine$. Le nombre de caractères renvoyés est déterminé par Longueur. Cette fonction renverra toute la chaîne si la longueur est supérieure à la taille de la chaîne de caractères.

Exemple:

  Debug Right("PureBasic", 5) ; Affichera "Basic".

OS Supportés

Tous


Space()

Syntaxe

Resultat$ = Space(Longueur)
Description
Créé une chaîne de caractères de longueur 'Longueur' et contenant que des espaces.

Exemple:

  Debug Space(10) ; Affichera "           ".

OS Supportés

Tous


Str()

Syntaxe

Resultat$ = Str(Valeur)
Description
Convertit une valeur numérique en une chaîne de caractères.

Note: Les nombres à virgules (floats) doivent être convertis avec StrF() ou StrD() et les nombres entiers non signés avec StrU().

Exemple:

  Debug Str(15) ; Affichera "15".

OS Supportés

Tous


StrD()

Syntaxe

Resultat$ = StrD(Valeur.d [, NombreDeDecimales])
Description
Convertit un nombre à virgule (double) en chaîne de caractères. Un nombre maximum de décimales peut être spécifié. Le nombre sera arrondi si 'NombreDeDecimales 'est plus petit que le nombre de décimales existantes de 'Valeur.d '.

Note: Les nombres entiers signés doivent être convertis avec Str() ou StrQ() et les nombres entiers non signés avec StrU().

Exemple:

  value.d = 10.54
  Debug "Resultat: " + StrD(value)    ; La valeur flottante est conservée car le deuxième paramètre n'est pas utilisé.

  Debug "Resultat: " + StrD(value,2)  ; La valeur n'est pas arrondie car nous voulons deux décimales et elle en a déjà deux.

  Debug "Resultat: " + StrD(value,0)  ; La valeur est arrondie car on ne veut pas de décimal.

OS Supportés

Tous


StrF()

Syntaxe

Resultat$ = StrF(Valeur.f [, NombreDeDecimales])
Description
Convertit un nombre à virgule (float) en chaîne de caractères. Un nombre maximum de décimales peut être spécifié. Le nombre sera arrondi si 'NombreDeDecimales 'est plus petit que le nombre de décimales existantes de 'Valeur.f '.

Note: Les nombres entiers signés doivent être convertis avec Str() ou StrQ() et les nombres entiers non signés avec StrU().

Exemple:

  Debug StrF(15.546) ; Affichera "15.546".

OS Supportés

Tous


StrQ()

Syntaxe

Resultat$ = StrQ(Valeur.q)
Description
Convertit une valeur numérique en une chaîne de caractères.

Note: Les nombres à virgules doivent être convertis avec StrF() ou StrD() et les nombres entiers non signés avec StrU().

Exemple:

  Value.q = 100000000000000001
  Debug "Resultat: " + StrQ(Value)

OS Supportés

Tous


StrU()

Syntaxe

Resultat$ = StrU(Valeur, Type)
Description
Convertit un nombre entier non-signé en chaîne de caractères.

Les 'Type' suivant sont disponibles:
  #Byte: La valeur est un octet (8 bits) allant de 0 à 255
  #Word: La valeur est un word (16 bits) allant de 0 à 65536
  #Long: La valeur est un long (32 bits) allant de 0 à 4294967296
  #Quad: La valeur est un quad (64 bits) allant de 0 à 18446744073709551615
Note: Les nombres entiers signés doivent être convertis avec Str() ou StrQ() et les nombres à virgules (float) avec StrF() ou StrD().

Exemple:

  byte.b = 255
  Debug Str(byte) ; Affichera -1
  Debug StrU(byte, #Byte) ; Affichera 255

OS Supportés

Tous


StringByteLength()

Syntaxe

Resultat = StringByteLength(Chaine$ [, Format])
Description
Renvoie le nombre d'octet nécessaire pour stocker la chaîne de caractères en mémoire en fonction du 'Format' spécifié. Le paramètre 'Format' peut prendre l'une des valeurs suivantes:
  #PB_Ascii  : La chaine est considérée comme une chaine ASCII
  #PB_UTF8   : La chaine est considérée comme une chaine UTF-8
  #PB_Unicode: La chaine est considérée comme une chaine unicode
Si le paramètre 'Format' n'est pas spécifié, le format sera #PB_Unicode si le format de l'exécutable est en mode unicode, sinon il sera #PB_Ascii.

Note: le nombre d'octets renvoyé n'inclus pas le caractère 'nul' de fin de chaîne. La taille du caractère nul est de 1 octet en mode ASCII et UTF-8 et de 2 octets en mode unicode.

Exemple:

  Resultat = StringByteLength("ä", #PB_UTF8) ; Le Resultat sera 2

OS Supportés

Tous


StringField()

Syntaxe

Resultat$ = StringField(Chaine$, Index, Delimiteur$)
Description
Retourne un champ d'une chaîne à l'index spécifié. 'Delimiteur$' est le caractère choisi comme séparateur des champs de la chaîne (un seul caractère de longueur autorisée). La première position de 'Index' est 1.

Exemple:

For k=1 To 7
  Debug StringField("Je suis une chaîne contenant des champs", k, " ")
Next

OS Supportés

Tous


Trim()

Syntaxe

Resultat$ = Trim(Chaine$)
Description
Supprime tous les espaces situés au début et à la fin de la chaîne de caractères.

Exemple:

  Debug Trim("   PureBasic   ") ; Affichera "PureBasic".

OS Supportés

Tous


UCase()

Syntaxe

Resultat$ = UCase(Chaine$)
Description
Renvoie dans Resultat$ la chaîne Chaine$ convertie en lettres majuscules (quand c'est possible). Cette commande accepte les caractères accentués. Si un 'é' minuscule est trouvé, il sera transformé en un 'É' majuscule.

Exemple:

  Debug UCase("PureBasic, La puissance à l'état pur") ; Affichera "PUREBASIC, LA PUISSANCE À L'ÉTAT PUR"

OS Supportés

Tous


Val()

Syntaxe

Resultat = Val(Chaine$)
Description
Convertit une chaîne en une valeur numérique. La chaîne doit être un entier au format décimal.

Exemple:

  Resultat = Val("1024") ; Resultat recevra la valeur 1024.

OS Supportés

Tous


ValD()

Syntaxe

Resultat.d = ValD(String$)
Description
Convertit une chaîne en une valeur numérique. La chaîne doit être un nombre décimal (virgules acceptée). decimal format.

Exemple:

  Resultat.d = ValD("10.000024") ; Le Resultat sera 10.000024.

OS Supportés

Tous


ValF()

Syntaxe

Resultat.f = ValF(Chaine$)
Description
Convertit une chaîne en une valeur numérique. La chaîne doit être un nombre décimal (virgules acceptée).

Exemple:

  Resultat.f = Val("1024.45") ; Resultat recevra la valeur 1024.45.

OS Supportés

Tous


ValQ()

Syntaxe

Resultat.q = ValQ(String$)
Description
Convertit une chaîne en une valeur numérique de type quad. La chaîne doit être un entier au format décimal.

Exemple:

  Resultat.q = ValQ("1024102410241024") ; Le Resultat sera 1024102410241024.

OS Supportés

Tous


SysTray

PureBasic - SysTray

General

SysTray est une zone située à droite de la barre des tâches Windows. Elle contient souvent les icônes des programmes résidents (antivirus...) et l'horloge. PureBasic gère l'accès à cette zone et vous permet d'ajouter un nombre quelconque d'icônes.

Sommaire des commandes

AddSysTrayIcon
ChangeSysTrayIcon
IsSysTrayIcon
RemoveSysTrayIcon
SysTrayIconTooltip

Exemple

SysTray.pb

OS Supportés

Windows

Guide de référence - Index


AddSysTrayIcon()

Syntaxe

AddSysTrayIcon(#SysTrayIcon, WindowID, ImageID)
Description
Ajoute une icône dans la zone Systray. Si #PB_Any est utilisé pour le paramètre '#SysTrayIcon', le numéro de la nouvelle icône sera renvoyé dans 'Resultat'. WindowID est l'identifiant système de la fenêtre obtenu avec WindowID(). ImageID est une icône préalablement chargée par la fonction LoadImage(). Seules les icônes (.ico) sont supportées dans cette fonction. Un ImageID valide peut être obtenu simplement avec la fonction ImageID().

Quand un évènement intervient sur une icône de la zone SysTray, l'évènement #PB_Event_SysTray est renvoyé. EventGadget() peut alors être utilisé pour connaître l'icône cliquée. La fonctions EventType() est également mise à jour par cette fonction.

Note: Toutes vos icônes SysTray sont automatiquement supprimées à la fin du programme.

OS Supportés

Windows


ChangeSysTrayIcon()

Syntaxe

ChangeSysTrayIcon(#SysTrayIcon, ImageID)
Description
Change l'icône #SysTrayIcon par une nouvelle icône spécifiée par 'ImageID'. ImageID est une icône préalablement chargée par la fonction LoadImage(). Seules les icônes (.ico) sont supportées dans cette fonction. Un ImageID valide peut être obtenu simplement avec la fonction ImageID().

OS Supportés

Windows


IsSysTrayIcon()

Syntaxe

Resultat = IsSysTrayIcon(#SysTrayIcon)
Description
Teste si la #SysTrayIcon est correctement initialisée. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows


RemoveSysTrayIcon()

Syntaxe

RemoveSysTrayIcon(#SysTrayIcon)
Description
Supprime l'icône spécifiée de la zone SysTray.

OS Supportés

Windows


SysTrayIconTooltip()

Syntaxe

SysTrayIconTooltip(#SysTrayIcon, Texte$)
Description
Associe un texte flottant à l'icône spécifiée. Un 'Tooltip' est un texte flottant qui apparaît au bout d'un certain temps lorsque le curseur de la souris est immobile au dessus d'une icône.

OS Supportés

Windows


Thread

PureBasic - Thread

General

Un thread est une partie d'un programme qui peut être lancée de manière asynchrone en arrière plan du programme. Cela signifie qu'il est possible d'effectuer certaines opérations longues (compression, manipulation d'images ...) sans interrompre l'ensemble du programme, et de laisser ainsi l'utilisateur effectuer d'autres tâches. Un thread s'exécute à l'intérieur du programme, il ne s'agit pas d'un autre processus. Lorsque le programme se termine, tous les threads sont détruits. Sous PureBasic, les threads sont des procédures appelées de manière asynchrone. Un thread tourne jusqu'à ce que la procédure se termine.

PureBasic a une option spéciale de compilation pour créer des exécutables multi-threadés (Le switch /THREAD pour le compilateur en ligne de commande ou l'option "Créer un exécutable multi-threadé" dans les options de compilation de l'IDE). Sans cette option, certaines fonctions (ainsi que la gestion des strings) sont plus rapides, mais inutilisables dans les threads. Il est toujours possible de créer des threads sans être dans ce mode, mais ce n'est pas recommandé, car même une simple manipulation de chaîne de caractères dans un thread peut être dangereux et doit être protégé. Activer cette option rend tout cela possible, mais au prix d'une diminution de la rapidité d'exécution. La décision de compiler en mode threadé doit donc être prise uniquement si le besoin s'en fait sentir.

Note: Les threads doivent être utilisés avec précaution, car il est possible que des ressources partagées (mémoire, fichiers, variables etc..) soient accédées au même moment ce qui causera des résultats aléatoires. Les commandes relatives aux 'Mutex' peut être utilisées pour synchroniser ces ressources partagées.

Sommaire des commandes

CreateMutex
CreateThread
FreeMutex
KillThread
LockMutex
PauseThread
ResumeThread
ThreadPriority
TryLockMutex
UnlockMutex
WaitThread

Exemple

Thread.pb

OS Supportés

Windows, Linux, MacOS X

Guide de référence - Index


CreateMutex()

Syntaxe

Mutex = CreateMutex()
Description
Crée un nouveau mutex.

L'objectif principal des mutex est de faire de la synchronisation entre les threads. Ils ne consomment pas beaucoup de temps processeur, mais ils ne fonctionnent qu'au sein du programme (il n'est pas possible de synchroniser plusieurs programmes différents). Un mutex est un objet qui ne peut être verrouillé que par un seul thread à la fois, donc il est utilisé pour protéger l'accès aux ressources partagées (pour éviter que plusieurs threads accèdent en même temps aux même données).
Les commandes LockMutex() et UnlockMutex() permettent de verrouiller ou de déverrouiller le mutex. Quand un mutex est verrouillé, les autres threads qui demandent le verrouillage sont stoppés et mis dans une file d'attente. Dès que le mutex est déverrouillé, le thread suivant dans la file d'attente verrouille à son tour le mutex et continue son exécution.

Exemple:

  ; Executez ce programme une fois comme il se présente. Vous verrez que les lignes imprimées seront
  ; mélangées entre les threads. Maintenant supprimez les commentaires devant les commandes de Mutex
  ; et les chaînes seront imprimées dans l'ordre, car un seul thread à la fois
  ; sera autorisé à exécuter les commandes d'impression.
  ;
  Procedure SansMutex(Numero)
    Shared Mutex

    For a = 1 To 5
      ;LockMutex(Mutex)    ; supprimez le commentaire pour voir la différence

      PrintN("Thread "+Str(Numero)+" essaie d'imprimer 5 fois a la suite :")
      For b = 1 To 5
        Delay(50)
        PrintN("Thread "+Str(Numero)+" Ligne "+Str(b))
      Next b

      ;UnlockMutex(Mutex)  ; supprimez le commentaire pour voir la différence
    Next a
  EndProcedure

  OpenConsole()
  Mutex = CreateMutex()

  thread1 = CreateThread(@SansMutex(), 1)
  Delay(25)
  thread2 = CreateThread(@SansMutex(), 2)
  Delay(25)
  thread3 = CreateThread(@SansMutex(), 3)

  WaitThread(thread1)
  WaitThread(thread2)
  WaitThread(thread3)

  Input()
Pour plus d'informations sur les mutex, consulter la MSDN sur les mutex.

OS Supportés

Tous


CreateThread()

Syntaxe

Thread = CreateThread(@NomdeProcedure(), Valeur)
Description
Créé un nouveau thread tournant en arrière plan de l'application. Si le thread est créé correctement, la fonction renvoie le numéro du thread qui pourra être utilisé avec les autres commandes de la bibliothèque, telles que KillThread(), PauseThread(), etc... La procedure doit être créée selon le format suivant:
  Procedure VotreProcedure(Valeur)
  EndProcedure
L'argument 'Valeur' de CreateThread() est passé comme argument de la procédure appelée. Il est très important de ne pas modifier le nombre de paramètre de cette procédure, qui doit toujours rester à 1.

Exemple:

  Procedure VotreProcedure(Valeur)
    ; La variable 'Valeur' contiendra 23
  EndProcedure

  CreateThread(@VotreProcedure(), 23)

OS Supportés

Tous


FreeMutex()

Syntaxe

FreeMutex(Mutex)
Description
Supprime le 'Mutex' et sa mémoire associée.

Un mutex doit être déverrouillé avant d'être supprimé. Pour être sûr de cela, il est préférable que tous les threads utilisant ce mutex soient terminés.

OS Supportés

Tous


KillThread()

Syntaxe

KillThread(Thread)
Description
Termine le thread spécifié, préalablement créé avec CreateThread(). Cette fonction est très, dangereuse, ne l'utilisez que si nécessaire, car quand un thread est tué, il n'a aucune chance de libérer ses propres ressources (comme sa pile par exemple).

Exemple:

  ; Une procedure/thread qui ne se terminera jamais. A ne pas faire, mais cela
  ; montre comment KillThread fonctionne
  Procedure ImprimeUnTruc(intervalle)
    Repeat
      Print(".")
      Delay(intervalle)
    ForEver
  EndProcedure

  If OpenConsole()
    thread = CreateThread(@ImprimeUnTruc(), 500)
    If thread
      For i=0 To 10
        Print("A")
        Delay(999)

        If i=5
          KillThread(thread)
        EndIf
      Next
    EndIf
  EndIf

OS Supportés

Windows, Linux, MacOS X


LockMutex()

Syntaxe

LockMutex(Mutex)
Description
Demande le verrouillage d'un mutex et si il ne l'est pas, le verrouille et continue son exécution. Le prochain thread qui demandera le verrouillage de ce mutex ne pourra continuer son exécution que lorsque ce mutex sera déverrouillé.

Quand cette commande se termine, il est garanti que seulement un thread continue d'exécuter le code protégé par ce mutex et peut ainsi accéder aux ressources partagées en lecture et en écriture sans risque de corruption.

Si un autre thread appel LockMutex() alors que ce mutex est verrouillé, il sera stoppé et mis en attente jusqu'à ce que ce thread appelle UnlockMutex() pour déverrouiller le mutex.

Note: étant donné que LockMutex() attend indéfiniment que le mutex soit déverrouillé, il peut y avoir des situations de blocage si un appel à UnlockMutex() est oublié.

Voir CreateMutex() pour un exemple d'utilisation.

OS Supportés

Tous


PauseThread()

Syntaxe

PauseThread(Thread)
Description
Interrompt le thread spécifié, préalablement créé avec CreateThread(). Le thread peut être relancé avec ResumeThread().

Exemple:

  Procedure ImprimeUnTruc(bidon)
    For i = 0 To 10

      Print(".")
      Delay(200)
    Next
  EndProcedure

  If OpenConsole()
    thread = CreateThread(@ImprimeUnTruc(), 0)
    If thread

      Delay(100)
      PauseThread(thread)
      For i = 0 To 10
        Print("A")
        Delay(50)
      Next

      ; Relance le thread en lui donnant assez de temps pour terminer
      ResumeThread(thread)
      Delay(3000)
    EndIf
  EndIf

OS Supportés

Windows, Linux, MacOS X


ResumeThread()

Syntaxe

ResumeThread(Thread)
Description
Relance le thread spécifié, préalablement interrompu avec PauseThread().

Voir PauseThread() pour un exemple d'utilisation.

OS Supportés

Windows, Linux, MacOS X


ThreadPriority()

Syntaxe

AnciennePriorite = ThreadPriority(Thread, Priorite)
Description
Change la priorité du thread spécifié et renvoie l'ancienne priorité. La priorité peut prendre une valeur de la plage 1 à 32. 1 est la priorité la plus basse, 16 est une priorité normale et 32 correspond à un niveau de priorité en temps-critique (la plus haute, à n'utiliser que si vous êtes sûr de ce que vous faites). Si la priorité est 0, alors aucun changement n'est effectué (utile pour seulement trouver le niveau de priorité du thread sans le modifier).

Exemple:

  ; Une procedure toujours en cours d'exécution (aucune commande Delay n'est employée
  ; car cela obligerait le thread à s'arrêter pendant qu'il serait en attente)
  Procedure ImprimeUnTruc(intervalle)
    For i = 0 To 1000000000
      ; occupé par une méchante attente
    Next
  EndProcedure

  If OpenConsole()
    thread = CreateThread(@ImprimeUnTruc(), 500)
    If thread
      ; Augmente la priorité au-dessus du thread principal
      ; Vous devriez remarquer un délai avant que la commande d'impression
      ; ne soit executée. Maintenant changez le 17 en 15 (plus bas que la priorité normale)
      ; et observez que la commande d'impression s'execute instantanément
      ThreadPriority(thread, 17)
      PrintN("Attend que le thread de plus haute priorite se termine")
    EndIf

    PrintN("Appuyer sur Entree pour quitter")
    Input()
  EndIf

OS Supportés

Windows, Linux, MacOS X


TryLockMutex()

Syntaxe

Resultat = TryLockMutex(Mutex)
Description
Essaie de verrouiller le 'Mutex' spécifié. Contrairement à LockMutex(), cette commande ne stoppe pas l'exécution du thread jusqu'à ce que le mutex soit libre. Ceci peut être pratique dans une situation ou le thread peut continuer à faire autre chose en attendant que le mutex soit libéré. Si le 'Resultat' est 0, alors le verrouillage du mutex a échoué, sinon le mutex est verrouillé.

Note: si le mutex a été verrouillé, la commande UnlockMutex() doit être appelée pour libérer le mutex une fois que les accès aux ressources partagées sont terminées. Ne pas le faire peut engendrer facilement des situations de blocage.

Exemple:

 Procedure ThreadProcedure(Valeur)
    Shared Mutex

    Repeat
      If TryLockMutex(Mutex)
        PrintN("Mutex verrouille avec succes.")

        UnlockMutex(Mutex)
        Break ; quitte la boucle et le thread
      Else
        PrintN("Toujours en train d'attendre d'avoir acces au mutex...")
        Delay(200)
      EndIf
    ForEver
  EndProcedure

  OpenConsole()

  Mutex = CreateMutex()
  LockMutex(Mutex) ; le programme principal verrouille en premier le mutex
  Thread = CreateThread(@ThreadProcedure(), 0)

  Delay(4000)
  UnlockMutex(Mutex) ; maintenant déverouille le mutex, pour que le thread puisse y accéder

  Input()

OS Supportés

Tous


UnlockMutex()

Syntaxe

UnlockMutex(Mutex)
Description
Déverrouille un mutex préalablement verrouillé avec LockMutex(). Le mutex est de nouveau disponible pour les autres threads.

Note: un mutex peut être déverrouillé uniquement par le thread qui l'a verrouillé.

Voir CreateMutex() pour un exemple d'utilisation.

OS Supportés

Tous


WaitThread()

Syntaxe

WaitThread(Thread)
Description
Arrête l'exécution du programme jusqu'à ce que le 'Thread' se termine. Si ce thread est déjà terminé le retour est immédiat.

Exemple:

  Procedure ImprimeUnTruc(intervalle)
    For i = 0 To 10
      Print(".")
      Delay(intervalle)
    Next
  EndProcedure

  If OpenConsole()
    thread = CreateThread(@ImprimeUnTruc(), 500)
    If thread
      ; Attend que le thread se termine avant de continuer
      ; Essayer de mettre en commentaire la commande WaitThread et regardez ce qu'il se produit
      WaitThread(thread)

      For i = 0 To 10
        Print("A")
        Delay(1000)
      Next
    EndIf
  EndIf

OS Supportés

Windows, Linux, MacOS X


ToolBar

PureBasic - ToolBar

General

La barre d'outils (Toolbar) est très utile pour accéder rapidement aux fonctions principales d'une application en cliquant simplement sur une icône. Les barres d'outils représentent souvent des raccourcis de menus. PureBasic vous permet de créer un nombre quelconque de barres d'outils et de les gérer comme si elles étaient des menus.

Sommaire des commandes

CreateToolBar
DisableToolBarButton
FreeToolBar
GetToolBarButtonState
IsToolBar
SetToolBarButtonState
ToolBarHeight
ToolBarID
ToolBarImageButton
ToolBarSeparator
ToolBarStandardButton
ToolBarToolTip

Exemple

ToolBar.pb

OS Supportés

Windows, Linux, MacOS X

Guide de référence - Index


CreateToolBar()

Syntaxe

Resultat = CreateToolBar(#BarreOutils, WindowID)
Description
Crée une barre d'outils vide identifiée par le numéro #BarreOutils sur la fenêtre 'WindowID'. Si #PB_Any est utilisé pour le paramètre '#BarreOutils', le numéro de la nouvelle barre d'outils sera renvoyé dans 'Resultat'. WindowID peut être récupéré facilement grâce à la commande WindowID(). Cette barre d'outils devient celle par défaut pour les créations des éléments qu'elle doit contenir. Vous pouvez maintenant utiliser ToolBarStandardButton() et ToolBarSeparator() pour créer ces éléments. Si Resultat = 0, la barre d'outils n'a pu être créée.

La détection des évènements sur les barres d'outils est similaire à celle des menus, et nécessite donc la commande EventMenu().

Exemple:

  If OpenWindow(0, 0, 0, 150, 25, "Barre d'outils", #PB_Window_SystemMenu |#PB_Window_ScreenCentered)
    If CreateToolBar(0, WindowID(0))
      ToolBarStandardButton(0, #PB_ToolBarIcon_New)
      ToolBarStandardButton(1, #PB_ToolBarIcon_Open)
      ToolBarStandardButton(2, #PB_ToolBarIcon_Save)
    EndIf
    Repeat
      Event = WaitWindowEvent()
      If Event = #PB_Event_Menu
        Debug "ToolBar ID: "+Str(EventMenu())
      EndIf
    Until Event = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux, MacOS X


DisableToolBarButton()

Syntaxe

DisableToolBarButton(#BarreOutils, Bouton, Etat)
Description
Active ou désactive un bouton de la #BarreOutils. Si Etat est égal à 0, le bouton est activé. sinon le bouton est désactivé.

Exemple:

  If OpenWindow(0, 0, 0, 150, 60, "Barre d'outils", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If CreateToolBar(0, WindowID(0))
      ToolBarStandardButton(0, #PB_ToolBarIcon_New)
      ToolBarStandardButton(1, #PB_ToolBarIcon_Open)
      ToolBarStandardButton(2, #PB_ToolBarIcon_Save)
      DisableToolBarButton(0, 1, 1) : Disabled = #True
    EndIf
    If CreateGadgetList(WindowID(0))
      ButtonGadget(0,10,30,130,20,"Active l'icône 'Ouvrir'")
    EndIf
    Repeat
      Event = WaitWindowEvent()
      If Event = #PB_Event_Gadget
        If EventGadget() = 0
          If Disabled = #True
            DisableToolBarButton(0, 1, 0)
            SetGadgetText(0,"Désactive l'icône 'Ouvrir'")
            Disabled = #False
          Else
            DisableToolBarButton(0, 1, 1)
            SetGadgetText(0,"Active l'icône 'Ouvrir'")
            Disabled = #True
          EndIf
        EndIf
      EndIf
    Until Event = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux, MacOS X


FreeToolBar()

Syntaxe

FreeToolBar(#BarreOutils)
Description
Détruit la #BarreOutils. Si elle était associée à une fenêtre, elle est automatiquement dissociée avant d'être détruite.

OS Supportés

Windows, Linux, MacOS X


GetToolBarButtonState()

Syntaxe

Resultat = GetToolBarButtonState(#BarreOutils, Bouton)
Description
Renvoie l'état du 'Bouton' dans la #BarreOutils. Si 'Resulat' est égal à 1, alors le bouton est enfoncé, sinon le bouton est relâché (utile pour les boutons utilisant l'option #PB_ToolBar_Toggle).

OS Supportés

Windows, Linux, MacOS X


IsToolBar()

Syntaxe

Resultat = IsToolBar(#BarreOutils)
Description
Teste si la #BarreOutils est correctement initialisée. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, Linux, MacOS X


SetToolBarButtonState()

Syntaxe

SetToolBarButtonState(#BarreOutils, Bouton, Etat)
Description
Change l'état du 'Bouton' dans la #BarreOutils. Si 'Etat' est égal à 1, alors le bouton est enfoncé, sinon le bouton est relâché (utile pour les boutons utilisant l'option #PB_ToolBar_Toggle).

OS Supportés

Windows, Linux, MacOS X


ToolBarHeight()

Syntaxe

ToolBarHeight = ToolBarHeight(#BarreOutils)
Description
Renvoie la hauteur en pixel de la #BarreOutils. C'est utile pour calculer correctement la hauteur d'une fenêtre lorsqu'une barre d'outils est utilisée.

OS Supportés

Windows, Linux, MacOS X


ToolBarID()

Syntaxe

ToolBarID = ToolBarID(#BarreOutils)
Description
Renvoie l'identifiant système unique de la #BarreOutils.

OS Supportés

Windows, Linux, MacOS X


ToolBarImageButton()

Syntaxe

ToolBarImageButton(Bouton, ImageID [, Mode])
Description
Ajoute un bouton Image à la barre d'outils en cours de création. La fonction CreateToolBar() doit avoir été appelée avant d'utiliser cette fonction. 'ImageID' peut être obtenu simplement en utilisant ImageID() de la bibliothèque Image. Il est préférable d'utiliser des images au format 'icone' (.ico) si un fond réellement transparent est nécessaire.

Le paramètre factultatif 'Mode' peut prendre l'une des valeurs suivantes:
  #PB_ToolBar_Normal: le bouton sera un bouton standard (mode par défaut)
  #PB_ToolBar_Toggle: le bouton sera un bouton de type switch (soit enfoncé, soit relâché)
Les commandes GetToolBarButtonState() et SetToolBarButtonState() permettent de charger l'état d'un bouton de type #PB_ToolBar_Toggle.

La détection des évènements sur les barres d'outils est similaire à celle des menus, et nécessite donc la commande EventMenu().

Exemple:

  If OpenWindow(0, 0, 0, 150, 25, "Barre d'outils", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    CreateImage(0,16,16)
    StartDrawing(ImageOutput(0))
      Box(0,0,16,16,RGB(255,255,255))
      Box(4,4,8,8,RGB(255,0,0))
    StopDrawing()
    CreateImage(1,16,16)
    StartDrawing(ImageOutput(1))
      Box(0,0,16,16,RGB(255,0,0))
      Box(4,4,8,8,RGB(255,255,255))
    StopDrawing()
    If CreateToolBar(0, WindowID(0))
      ToolBarImageButton(0,ImageID(0))
      ToolBarImageButton(1,ImageID(1))
    EndIf
    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux, MacOS X


ToolBarSeparator()

Syntaxe

ToolBarSeparator()
Description
Ajoute un séparateur vertical à la barre d'outils en cours de création. La fonction CreateToolBar() doit avoir été appelée avant d'utiliser cette fonction.

Exemple:

  If OpenWindow(0, 0, 0, 150, 25, "Barre d'outils", #PB_Window_SystemMenu |#PB_Window_ScreenCentered)
    If CreateToolBar(0, WindowID(0))
      ToolBarStandardButton(0, #PB_ToolBarIcon_New)
      ToolBarSeparator()
      ToolBarStandardButton(1, #PB_ToolBarIcon_Open)
      ToolBarSeparator()
      ToolBarStandardButton(2, #PB_ToolBarIcon_Save)
      ToolBarSeparator()
      ToolBarSeparator()
    EndIf
    Repeat
      Event = WaitWindowEvent()
      If Event = #PB_Event_Menu
        Debug "Identifiant de la barre d'outils : "+Str(EventMenu())
      EndIf
    Until Event = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux, MacOS X


ToolBarStandardButton()

Syntaxe

ToolBarStandardButton(Bouton, IconeBouton [, Mode])
Description
Ajoute un bouton standard à la barre d'outils en cours de construction. La fonction CreateToolBar() doit avoir été appelée avant d'utiliser cette fonction. Un bouton standard est une icône disponible dans le système d'exploitation. La constante IconeBouton doit être l'une des constantes suivantes :
  #PB_ToolBarIcon_New      (Nouveau fichier)
  #PB_ToolBarIcon_Open     (Ouvre Fichier)
  #PB_ToolBarIcon_Save     (Enregistre Fichier)
  #PB_ToolBarIcon_Print    (Imprime)
  #PB_ToolBarIcon_Find     (Cherche une occurence)
  #PB_ToolBarIcon_Replace  (Remplace une occurence)

  #PB_ToolBarIcon_Cut      (Couper)
  #PB_ToolBarIcon_Copy     (Copier)
  #PB_ToolBarIcon_Paste    (Coller)
  #PB_ToolBarIcon_Undo     (Annule l'action)
  #PB_ToolBarIcon_Redo     (Repète l'action)

  #PB_ToolBarIcon_Delete     (Efface)
  #PB_ToolBarIcon_Properties (Propriétés)
  #PB_ToolBarIcon_Help       (Aide)
Le paramètre factultatif 'Mode' peut prendre l'une des valeurs suivantes:
  #PB_ToolBar_Normal: le bouton sera un bouton standard (mode par défaut)
  #PB_ToolBar_Toggle: le bouton sera un bouton de type switch (soit enfoncé, soit relâché)
Les commandes GetToolBarButtonState() et SetToolBarButtonState() permettent de charger l'état d'un bouton de type #PB_ToolBar_Toggle.

La détection des évènements sur les barres d'outils est similaire à celle des menus, et nécessite donc la commande EventMenu().

Exemple:

  If OpenWindow(0, 0, 0, 150, 25, "Barre d'outils", #PB_Window_SystemMenu |#PB_Window_ScreenCentered)
    If CreateToolBar(0, WindowID(0))
      ToolBarStandardButton(0, #PB_ToolBarIcon_New)
      ToolBarStandardButton(1, #PB_ToolBarIcon_Open)
      ToolBarStandardButton(2, #PB_ToolBarIcon_Save)
    EndIf
    Repeat
      Event = WaitWindowEvent()
      If Event = #PB_Event_Menu
        Debug "Identifiant de la barre d'outils : "+Str(EventMenu())
      EndIf
    Until Event = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux, MacOS X


ToolBarToolTip()

Syntaxe

ToolBarToolTip(#BarreOutils, Bouton, Texte$)
Description
Associe ou remplace un texte flottant du bouton dans la #BarreOutils spécifée. Un 'Tooltip' est un texte flottant qui apparait au bout d'un certain temps lorsque le curseur de la souris est immobile au dessus d'un bouton d'une barre d'outils.

Exemple:

  If OpenWindow(0, 0, 0, 150, 60, "Barre d'outils", #PB_Window_SystemMenu |#PB_Window_ScreenCentered)
    If CreateToolBar(0, WindowID(0))
      ToolBarStandardButton(0, #PB_ToolBarIcon_New)
      ToolBarStandardButton(1, #PB_ToolBarIcon_Open)
      ToolBarStandardButton(2, #PB_ToolBarIcon_Save)
      ToolBarToolTip(0, 0, "Nouveau")
      ToolBarToolTip(0, 1, "Ouvrir...")
      ToolBarToolTip(0, 2, "Enregistrer")
    EndIf
    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

OS Supportés

Windows, Linux, MacOS X


Window

PureBasic - Window

General

Cette bibliothèque vous permet de gérer et manipuler les composants essentiels et indispensables à une interface graphique moderne: les fenêtres.

Sommaire des commandes

AddKeyboardShortcut
CloseWindow
DisableWindow
EventGadget
EventMenu
EventType
EventWindow
GetActiveWindow
GetWindowColor
GetWindowState
GetWindowTitle
HideWindow
IsWindow
OpenWindow
RemoveKeyboardShortcut
ResizeWindow
SetActiveWindow
SetWindowCallback
SetWindowColor
SetWindowState
SetWindowTitle
SmartWindowRefresh
StickyWindow
WaitWindowEvent
WindowEvent
WindowHeight
WindowID
WindowMouseX
WindowMouseY
WindowOutput
WindowWidth
WindowX
WindowY

Exemple

Window.pb

OS Supportés

Tous

Guide de référence - Index


AddKeyboardShortcut()

Syntaxe

AddKeyboardShortcut(#Fenetre, Raccourci, Event)
Description
Ajoute ou remplace un raccourci clavier pour la fenêtre spécifiée. Un raccourci clavier génère un évènement du type 'Menu' car ils sont souvent associés aux élèments des menus (CTRL+O, CTRL+C etc...). 'Event' est le nombre unique qui permettra d'identifier ce raccourci clavier. via la commande EventMenu(). Par défaut, une fenêtre a déjà 2 raccourcis clavier pour gérer les déplacement entre les Gadgets: #PB_Shorcut_Tab et #PB_Shortcut_Tab|#PB_Shortcut_Shift shortcuts Un raccourci clavier peut être enlevé avec RemoveKeyboardShortcut().

Le paramètre 'Raccourci' peut prendre l'une des valeurs suivantes:
  #PB_Shortcut_Back
  #PB_Shortcut_Tab
  #PB_Shortcut_Clear
  #PB_Shortcut_Return
  #PB_Shortcut_Menu
  #PB_Shortcut_Pause
  #PB_Shortcut_Print
  #PB_Shortcut_Capital
  #PB_Shortcut_Escape
  #PB_Shortcut_Space
  #PB_Shortcut_Prior
  #PB_Shortcut_Next
  #PB_Shortcut_End
  #PB_Shortcut_Home
  #PB_Shortcut_Left
  #PB_Shortcut_Up
  #PB_Shortcut_Right
  #PB_Shortcut_Down
  #PB_Shortcut_Select
  #PB_Shortcut_Execute
  #PB_Shortcut_Snapshot
  #PB_Shortcut_Insert
  #PB_Shortcut_Delete
  #PB_Shortcut_Help
  #PB_Shortcut_0
  #PB_Shortcut_1
  #PB_Shortcut_2
  #PB_Shortcut_3
  #PB_Shortcut_4
  #PB_Shortcut_5
  #PB_Shortcut_6
  #PB_Shortcut_7
  #PB_Shortcut_8
  #PB_Shortcut_9
  #PB_Shortcut_A
  #PB_Shortcut_B
  #PB_Shortcut_C
  #PB_Shortcut_D
  #PB_Shortcut_E
  #PB_Shortcut_F
  #PB_Shortcut_G
  #PB_Shortcut_H
  #PB_Shortcut_I
  #PB_Shortcut_J
  #PB_Shortcut_K
  #PB_Shortcut_L
  #PB_Shortcut_M
  #PB_Shortcut_N
  #PB_Shortcut_O
  #PB_Shortcut_P
  #PB_Shortcut_Q
  #PB_Shortcut_R
  #PB_Shortcut_S
  #PB_Shortcut_T
  #PB_Shortcut_U
  #PB_Shortcut_V
  #PB_Shortcut_W
  #PB_Shortcut_X
  #PB_Shortcut_Y
  #PB_Shortcut_Z
  #PB_Shortcut_LeftWindows
  #PB_Shortcut_RightWindows
  #PB_Shortcut_Apps
  #PB_Shortcut_Pad0
  #PB_Shortcut_Pad1
  #PB_Shortcut_Pad2
  #PB_Shortcut_Pad3
  #PB_Shortcut_Pad4
  #PB_Shortcut_Pad5
  #PB_Shortcut_Pad6
  #PB_Shortcut_Pad7
  #PB_Shortcut_Pad8
  #PB_Shortcut_Pad9
  #PB_Shortcut_Multiply
  #PB_Shortcut_Add
  #PB_Shortcut_Separator
  #PB_Shortcut_Subtract
  #PB_Shortcut_Decimal
  #PB_Shortcut_Divide
  #PB_Shortcut_F1
  #PB_Shortcut_F2
  #PB_Shortcut_F3
  #PB_Shortcut_F4
  #PB_Shortcut_F5
  #PB_Shortcut_F6
  #PB_Shortcut_F7
  #PB_Shortcut_F8
  #PB_Shortcut_F9
  #PB_Shortcut_F10
  #PB_Shortcut_F11
  #PB_Shortcut_F12
  #PB_Shortcut_F13
  #PB_Shortcut_F14
  #PB_Shortcut_F15
  #PB_Shortcut_F16
  #PB_Shortcut_F17
  #PB_Shortcut_F18
  #PB_Shortcut_F19
  #PB_Shortcut_F20
  #PB_Shortcut_F21
  #PB_Shortcut_F22
  #PB_Shortcut_F23
  #PB_Shortcut_F24
  #PB_Shortcut_Numlock
  #PB_Shortcut_Scroll
Les touches de raccourci ci-dessus peuvent être combinées avec les valeurs suivantes si nécessaire:
  #PB_Shortcut_Shift  : 'Shift' doit être enfoncé pour que le raccourci soit validé
  #PB_Shortcut_Control: 'Control' doit être enfoncé pour que le raccourci soit validé
  #PB_Shortcut_Alt    : 'Alt' doit être enfoncé pour que le raccourci soit validé
  #PB_Shortcut_Command: 'Apple' doit être enfoncé pour que le raccourci soit validé (MacOS X)
Note: la constante #PB_Shortcut_Command est seulement utile sous MacOS X et permet d'utiliser la touche 'Apple' (droite ou gauche) pour définir un raccourci. Cette constante est aussi supportée sur les autres OS (pour faciliter la portabilité): elle aura un rôle identique à #PB_Shortcut_Control.

Exemple:

  AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_ShortCut_F, 15) ; Crée un raccourci clavier CTRL+F sur la fenêtre 0
                                                                    ; qui générera un évènement de valeur 15.

OS Supportés

Tous


CloseWindow()

Syntaxe

CloseWindow(#Fenetre)
Description
Ferme la #Fenetre spécifiée.

OS Supportés

Tous


DisableWindow()

Syntaxe

DisableWindow(#Fenetre, Etat)
Description
Active ou désactive les interactions avec l'utilisateur sur la #Fenetre spécifiée.

Le paramètre 'Etat' peut prendre une des valeurs suivantes:
  1: La fenêtre est désactivée.
  0: La fenêtre est activée.

OS Supportés

Tous


EventGadget()

Syntaxe

Gadget = EventGadget()
Description
Utilisez cette fonction après WindowEvent() ou WaitWindowEvent() pour savoir le numéro du gadget qui a été utilisé (renvoyé dans 'Gadget')

OS Supportés

Tous


EventMenu()

Syntaxe

Menu = EventMenu()
Description
Utilisez cette fonction après WindowEvent() ou WaitWindowEvent() pour savoir quel élément du menu a été utilisé (renvoyé dans 'Menu')

Cette commande permet aussi de détecter quel bouton d'une barre d'outil (créé avec CreateToolBar()) a été utilisé.

Un évènement sur une barre d'outils est similaire à un évènement sur un menu (car les barres d'outils sont la plupart du temps des racourcis pour des opérations disponibles dans les menus). Il est donc préférable de prendre les même identifiants pour l'élément du menu et le bouton de la barre d'outils qui représentent la même action, comme ça aucun code supplémentaire n'est nécessaire pour gérer la barre d'outils.

OS Supportés

Tous


EventType()

Syntaxe

Event = EventType()
Description
Utilisez cette fonction après WindowEvent() ou WaitWindowEvent() pour savoir quel est le type du dernier évènement survenu. Les valeurs suivantes sont possibles lorsqu'un évènement du type #PB_Event_Gadget ou #PB_Event_SysTray survient:
  #PB_EventType_LeftClick       : Clic avec le bouton gauche de la souris
  #PB_EventType_RightClick      : Clic avec le bouton droit de la souris
  #PB_EventType_LeftDoubleClick : Double-clic avec le bouton gauche de la souris
  #PB_EventType_RightDoubleClick: Double-clic avec le bouton droit de la souris
  #PB_EventType_Focus           : Obtention du focus.
  #PB_EventType_LostFocus       : Perte du focus.
  #PB_EventType_Change          : Le contenu a changé.
Les gadgets suivants sont supportés par EventType() (Voir la définition du gadget pour voir quel sont les évènements valides):

- ExplorerListGadget()
- ExplorerTreeGadget()
- ImageGadget()
- ListViewGadget()
- ListIconGadget()
- MDIGadget()
- StringGadget()

OS Supportés

Tous


EventWindow()

Syntaxe

Fenetre = EventWindow()
Description
Utilisez cette fonction après WindowEvent() ou WaitWindowEvent() pour savoir sur quelle fenêtre s'est produit le dernier évènement.

OS Supportés

Tous


GetActiveWindow()

Syntaxe

Fenetre = GetActiveWindow()
Description
Renvoie le numéro de la fenêtre qui est actuellement active (qui a le 'focus').

Une fenêtre peut être activée avec la commande SetActiveWindow().

OS Supportés

Tous


GetWindowColor()

Syntaxe

Couleur = GetWindowColor(#Fenetre)
Description
Renvoie la couleur de fond de la #Fenetre préalablement spécifiée à l'aide de la commande SetWindowColor().

Si aucune couleur de fond n'a été spécifiée, la valeur -1 est renvoyée.

OS Supportés

Windows, Linux


GetWindowState()

Syntaxe

Etat = GetWindowState(#Fenetre)
Description
Détermine si la #Fenetre est maximisée, minimisée ou affichée normalement.

La valeur 'Etat' peut prendre l'une des valeurs suivantes:
  #PB_Window_Normal  : La fenêtre est affichée normalement.
  #PB_Window_Maximize: La fenêtre est maximisée.
  #PB_Window_Minimize: La fenêtre est minimisée.
L'état d'affichage d'une fenêtre est modifiable avec la commande SetWindowState().

OS Supportés

Tous


GetWindowTitle()

Syntaxe

Resultat$ = GetWindowTitle(#Fenetre)
Description
Renvoie dans 'Resultat$' le texte actuellement affiché dans la barre de titre de la #Fenetre specifiée. Le titre de la fenêtre est modifiable avec la commande SetWindowTitle().
  If OpenWindow(2, 100, 100, 200, 100, "Un joli titre")
    Titre$ = GetWindowTitle(2)  ; Titre$ contiendra la chaîne "Un joli titre"
  EndIf

OS Supportés

Windows, Linux, MacOS X


HideWindow()

Syntaxe

HideWindow(#Fenetre, Etat)
Description
Cache ou rend visible la #Fenetre spécifiée. 'Etat' peut prendre une des valeurs suivantes:
  1: La #Fenetre est cachée
  0: La #Fenetre est rendue visible

OS Supportés

Tous


IsWindow()

Syntaxe

Resultat = IsWindow(#Fenetre)
Description
Teste si la #Fenetre est correctement initialisée. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, Linux, MacOS X


OpenWindow()

Syntaxe

Resultat = OpenWindow(#Fenetre, x, y, LargeurInterne, HauteurInterne, Titre$ [, Options [, FenetreMereID]])
Description
Ouvre une nouvelle fenêtre avec les paramètres spécifiés. Si #PB_Any est utilisé pour le paramètre '#Fenetre', le numéro de la fenêtre sera renvoyé dans 'Resultat'.
La nouvelle fenêtre devient la fenêtre active sans avoir besoin d'utiliser SetActiveWindow(). Si Resultat = 0, la fenêtre ne peut être ouverte.

'LargeurInterne' et 'HauteurInterne' spécifient les dimensions nécessaires pour la zone interne de la fenêtre (sans les bordures et la barre de titre) afin d'assurer la compatibilité avec les systèmes d'habillage des fenêtres propres à Windows XP, AmigaOS et Linux (la taille des bordures peut en effet varier selon la police et/ou le thème utilisé). 'x' et 'y' indiquent la position initiale de la fenêtre (sauf si l'une des options de centrage est utilisée). Si l'une d'elle est #PB_Ignore, le système choisira une position pour la fenêtre.

Le paramètre 'FenetreMereID' est facultatif et indique de quelle fenêtre la nouvelle fenêtre dépend. 'FenetreMereID' peut être obtenu facilement par la commande WindowID().

Les options possibles sont:
  #PB_Window_SystemMenu     : Autorise le menu système sur la barre de titre.
  #PB_Window_MinimizeGadget : Ajoute l'icône 'Réduire' sur la barre de titre. #PB_Window_SystemMenu est ajouté automatiquement.
  #PB_Window_MaximizeGadget : Ajoute l'icône 'Agrandir' sur la barre de titre. #PB_Window_SystemMenu est ajouté automatiquement.
  #PB_Window_SizeGadget     : Ajoute les possibilités de redimensionnement à la fenêtre.
  #PB_Window_Invisible      : Crée la fenêtre mais ne l'affiche pas. Non supporté sur AmigaOS.
  #PB_Window_TitleBar       : Crée la fenêtre avec une barre de titre.
  #PB_Window_BorderLess     : Crée une fenêtre sans bordure.
  #PB_Window_ScreenCentered : Centre la fenêtre au milieu de l'écran. Les paramètres x,y sont ignorés.
  #PB_Window_WindowCentered : Centre la fenêtre au milieu de la fenêtre mère ('FenetreMereID' doit être spécifié). Les paramètres x,y sont ignorés.
  #PB_Window_Maximize       : Ouvre la fenêtre en mode maximisé. (Note: sous Linux, certains gestionnaires de fenêtres ne supportent pas cela)
  #PB_Window_Minimize       : Ouvre la fenêtre en mode minimisé.
Si le paramètre facultatif 'Options' n'est pas renseigné, #PB_Window_SystemMenu sera utilisé.

Tous les évènements possibles dans une fenêtre sont gérés par les commandes WindowEvent() et WaitWindowEvent(). Pour les situations spéciales les callbacks sont utilisées, voir la description de SetWindowCallback(). Sous Windows, la largeur et la hauteur d'une fenêtre avec une bordure ne peuvent pas être inférieur à environ 100 pixels. Pour ouvrir une fenêtre plus petite, utiliser l'option #PB_Window_BorderLess.

Note: quand une fenêtre est ouverte dans un thread, le thread doit appeler WindowEvent() ou WaitWindowEvent() dans une boucle pour gérer les évènements pour cette fenêtre, car les évènements des fenêtres sont propres à chaque thread.

OS Supportés

Tous


RemoveKeyboardShortcut()

Syntaxe

RemoveKeyboardShortcut(#Fenetre, Raccourci)
Description
Enlève le raccourci clavier précédemment ajouté avec AddKeyboardShortcut(). Pour une liste complète des raccourcis disponibles: AddKeyboardShortcut(). Si 'Raccourci' est égal à #PB_Shortcut_All alors tous les raccourcis claviers sont enlevés d'un coup.

OS Supportés

Windows, Linux, MacOS X


ResizeWindow()

Syntaxe

ResizeWindow(#Fenetre, x, y, Largeur, Hauteur)
Description
Déplace et redimensionne la #Fenetre. Si un ou plusieurs paramètres doivent être ignorés (inchangés), la constante #PB_Ignore peut être utilisée pour ces paramètres.

OS Supportés

Tous


SetActiveWindow()

Syntaxe

SetActiveWindow(#Fenêtre)
Description
Change la fenêtre active du programme. On dit aussi qu'on lui donne le 'Focus'.

OS Supportés

Tous


SetWindowCallback()

Syntaxe

SetWindowCallback(@NomDeLaProcedure())
Description
Pour programmeurs expérimentés. Cette fonction est seulement disponible sous Microsoft Windows. Les évènements classiques devraient toujours être gérés avec les commandes WaitWindowEvent() ou WindowEvent(). Cette commande permet d'accéder directement à la callback utilisée par Windows pour gérer les évènements reçus par l'application. Cela permet d'avoir un contrôle total sur ces derniers. Attention, c'est relativement bas niveau pour du BASIC et peut interférer avec les évènements PureBasic si elle est incorrectement utilisée.

La procédure qui servira de callback doit avoir 4 paramètres et se présente sous la forme suivante:
  Procedure MaProcedureCallback(WindowID, Message, wParam, lParam)
    Resultat = #PB_ProcessPureBasicEvents
    ;
    ; entrez votre code ici
    ;
    ProcedureReturn Resultat
  EndProcedure

OS Supportés

Windows


SetWindowColor()

Syntaxe

SetWindowColor(#Fenetre, Couleur)
Description
Change la couleur de fond de la #Fenetre.

La commande RGB() peut être utilisée pour obtenir une couleur valide. Un tableau avec les couleurs les plus courantes est disponible ici.

La valeur -1 pour le paramètre 'Couleur' est disponible pour réinitialiser la couleur de fond par la couleur par défaut.

La couleur de fond d'une fenêtre peut être récupérée à l'aide de GetWindowColor().

OS Supportés

Windows, Linux


SetWindowState()

Syntaxe

SetWindowState(#Fenetre, Etat)
Description
Change l'état minimisé ou maximisé de la #Fenetre.

La valeur 'Etat' peut prendre l'une des valeurs suivantes:
  #PB_Window_Normal  : La fenêtre sera affichée normalement.
  #PB_Window_Maximize: La fenêtre sera maximisée.
  #PB_Window_Minimize: La fenêtre sera minimisée.
L'état d'affichage d'une fenêtre est récupérable avec la commande GetWindowState().

OS Supportés

Tous


SetWindowTitle()

Syntaxe

SetWindowTitle(#Fenetre, NouveauTitre$)
Description
Change le texte actuellement affiché dans la barre de titre de la #Fenetre spécifiée.
  If OpenWindow(2, 100, 100, 200, 100, "Titre initial")
    SetWindowTitle(2, "Titre après changement !")

    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
Le titre de la fenêtre est récupérable avec la commande GetWindowTitle().

OS Supportés

Windows, Linux, MacOS X


StickyWindow()

Syntaxe

StickyWindow(#Fenetre, Etat)
Description
Affiche la #Fenetre toujours au premier plan (même devant les autres programmes), même si elle n'est pas active.

Le paramètre 'Etat' peut prendre l'une des valeurs suivantes:
  1: la fenêtre sera toujours au premier plan.
  0: le fenêtre ne restera pas au premier plan si elle n'est pas active.

OS Supportés

Tous


WaitWindowEvent()

Syntaxe

Evenement = WaitWindowEvent([Minuteur])
Description
Bloque l'exécution du programme jusqu'à ce qu'un évènement intervienne. Cette fonction est identique à WindowEvent(), mais le blocage de l'exécution est très important dans un environnement multi-tâches.

Une application devrait, si possible, toujours utiliser cette fonction en préférence à WindowEvent(). Pour plus d'informations sur les évènements supportés, voir WindowEvent().

Le paramètre optionnel 'Minuteur' permet de spécifier le temps maximal (en millisecondes) durant lequel la fonction sera bloquante si aucun évènement ne survient.

Notes: Quand une fenêtre est ouverte dans un thread, le thread doit appeler WindowEvent() ou WaitWindowEvent() dans une boucle pour gérer les évènements pour cette fenêtre, car les évènements des fenêtres sont propres à chaque thread.

WaitWindowEvent() ne peut être appelé qu'une seule fois par boucle d'évènements, sinon les évènements seront "perdus" (chaque événement ne peut être traité qu'une seule fois et n'est plus disponible pour un deuxième traitement).

Exemple:

  If OpenWindow(0, 0, 0, 230, 90, "Exemple de gestion des évènements...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

   If CreateGadgetList(WindowID(0))
     ButtonGadget  (1, 10, 10, 200, 20, "Cliquez moi")
     CheckBoxGadget(2, 10, 40, 200, 20, "Cochez  moi")
   EndIf

   If CreateMenu(0, WindowID(0))
     MenuTitle("Menu")
     MenuItem(1, "Item 1")
     MenuItem(2, "Item 2")
     MenuItem(3, "Item 3")
   EndIf

   Repeat
     Event = WaitWindowEvent()

     Select Event

       Case #PB_Event_Gadget
         Select EventGadget()
           Case 1 : Debug "Bouton 1 cliqué!"
           Case 2 : Debug "Bouton 2 cliqué!"
           Case 3 : Debug "Bouton 3 cliqué!"
         EndSelect

       Case #PB_Event_Menu
         Select EventMenu
           Case 1 : Debug "Menu item 1 cliqué!"
           Case 2 : Debug "Menu item 2 cliqué!"
           Case 3 : Debug "Menu item 3 cliqué!"
         EndSelect

     EndSelect
   Until Event = #PB_Event_CloseWindow
 EndIf

OS Supportés

Tous


WindowEvent()

Syntaxe

Event = WindowEvent()
Description
Teste si un évènement s'est produit sur chacune des fenêtres ouvertes. Cette fonction est à retour immédiat. Utilisez-la de préférence dans une boucle temposisée pour ne pas monopoliser les ressources de microprocesseur dans cette tâche.
Si vous souhaitez bloquer l'exécution du programme, utilisez la fonction WaitWindowEvent().
Pour obtenir le numéro de fenêtre où s'est produit l'évènement, utilisez la fonction EventWindow().

Cette commande doit être utilisée avec précaution, car comme elle n'est pas bloquante, elle peut consommer tout le temps processeur quand elle est dans une boucle d'attente. Dans de tels cas, utilisez la commande Delay() quelque part dans la boucle ou la commande @Link WaitWindowEvent" "WaitWindowEvent()" avec un petit minuteur est conseillé.

Quand une fenêtre est ouverte dans un thread, le thread doit appeler WindowEvent() ou WaitWindowEvent() dans une boucle pour gérer les évènements pour cette fenêtre, car les évènements des fenêtres sont propres à chaque thread.

Les évènements possibles sont :
  #PB_Event_Menu           : Un menu a été sélectionné
  #PB_Event_Gadget         : Un gadget a été cliqué
  #PB_Event_CloseWindow    : L'icône de fermeture de fenêtre a été cliquée
  #PB_Event_Repaint        : Tout ou partie du contenu de la fenêtre a été détruit et doit être reconstitué (Utile pour les applications en graphique 2D)
  #PB_Event_MoveWindow     : La fenêtre a été déplacée
  #PB_Event_SizeWindow     : La fenêtre a été redimensionnée
  #PB_Event_ActivateWindow : La fenêtre a été activée (gain du focus)
Pour une utilisation efficace de la boucle WindowEvent() il convient de respecter cette structure:
  Repeat
    Event = WindowEvent()

    If Event    ; Un evenement est dans la file d'attente, il faut le gerer.
      ....
    Else
      Delay(1)  ; Plus d'evenements dans la file d'attente, laissons du temps processeur aux autres applications !
    EndIf
  Until Event = #PB_Event_CloseWindow
Note: Le délai ne doit pas être spécifié après chaque évènement, car quand il y a de nombreux évènements dans la file d'attente (lors d'un rafraîchissement de fenêtre, de gadgets etc..) l'application attendra 1 ms entre chaque évènement ce qui rendra l'affichage très lent. Le delai est utile uniquement quand il n'y a plus d'évènement dans la file d'attente (donc quand WindowEvent() renvoie 0). Une autre façon de procéder est d'utiliser les 'timers' de l'API avec WaitWindowEvent().

OS Supportés

Tous


WindowHeight()

Syntaxe

Hauteur = WindowHeight(#Fenetre)
Description
Renvoie la hauteur en pixels de la #Fenetre spécifiée.

OS Supportés

Tous


WindowID()

Syntaxe

WindowID = WindowID(#Fenetre)
Description
Renvoie l'identifiant unique de la fenêtre dans le système d'exploitation. Cette fonction est très utile car WindowID est souvent demandé par d'autres fonctions.

OS Supportés

Tous


WindowMouseX()

Syntaxe

x = WindowMouseX(#Fenetre)
Description
Renvoie la position horizontale de la souris en points graphique depuis le bord gauche de la #Fenetre. x peut contenir une valeur négative si le pointeur de la souris est à l'extérieur de la #Fenetre.

Pour avoir la position absolue en 'x' de la souris sur le bureau, la commande DesktopMouseX() est disponible.

Exemple:

  If OpenWindow(0, 0, 0, 300, 30, "Position de la souris sur la fenêtre", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    CreateGadgetList(WindowID(0))
      TextGadget(0, 10, 6, 200, 20, "")

    Repeat
      Event = WaitWindowEvent(20) ; Boucle au moins chaque 20ms pour une mise à jour

      SetGadgetText(0, "Coordonnées: " + Str(WindowMouseX(0)) + "," + Str(WindowMouseY(0)))
    Until Event = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


WindowMouseY()

Syntaxe

y = WindowMouseY(#Fenetre)
Description
Renvoie la position verticale de la souris en points graphique depuis le bord supérieur de la #Fenetre. y peut contenir une valeur négative si le pointeur de la souris est à l'extérieur de la #Fenetre.

Pour avoir la position absolue en 'y' de la souris sur le bureau, la commande DesktopMouseY() est disponible.

Exemple:

  If OpenWindow(0, 0, 0, 300, 30, "Position de la souris sur la fenêtre", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    CreateGadgetList(WindowID(0))
      TextGadget(0, 10, 6, 200, 20, "")

    Repeat
      Event = WaitWindowEvent(20) ; Boucle au moins chaque 20ms pour une mise à jour

      SetGadgetText(0, "Coordonnées: " + Str(WindowMouseX(0)) + "," + Str(WindowMouseY(0)))
    Until Event = #PB_Event_CloseWindow
  EndIf

OS Supportés

Tous


WindowOutput()

Syntaxe

OutputID = WindowOutput(#Fenetre)
Description
Renvoie la valeur OutputID de la #Fenetre nécessaire à StartDrawing() pour effectuer les dessins 2D directement sur la #Fenetre.

OS Supportés

Tous


WindowWidth()

Syntaxe

Largeur = WindowWidth(#Fenetre)
Description
Renvoie la largeur en pixels de la #Fenetre spécifiée.

OS Supportés

Tous


WindowX()

Syntaxe

x = WindowX(#Fenetre)
Description
Renvoie la position gauche de la #Fenetre spécifiée, en pixels.

OS Supportés

Tous


WindowY()

Syntaxe

y = WindowY(#Fenetre)
Description
Renvoie la position haute de la #Fenetre spécifiée, en pixels.

OS Supportés

Tous


Joystick

PureBasic - Joystick

General

PureBasic permet la gestion complète des joysticks connectés à l'ordinateur. Tous les joysticks standards, jusqu'à 8 boutons, sont acceptés. L'interface est assurée par la technologie DirectX.

Sommaire des commandes

ExamineJoystick
InitJoystick
JoystickAxisX
JoystickAxisY
JoystickButton

Exemple

Joystick.pb

OS Supportés

Windows, AmigaOS

Guide de référence - Index


ExamineJoystick()

Syntaxe

ExamineJoystick()
Description
Met à jour l'état actuel du joystick qui pourra être interrogé grâce aux commandes JoystickAxisX(), JoystickAxisY() et JoystickButton(). Actuellement, seul le joystick par défaut est supporté.

OS Supportés

Windows, AmigaOS


InitJoystick()

Syntaxe

Resultat = InitJoystick()
Description
Initialise l'environnement propre à la gestion des joysticks. Vous devez appeler cette fonction avant toute autre fonction de cette bibliothèque. Cette fonction tente d'ouvrir DirectX (Version 3.0 pour NT4.0, sinon Version 7.0). Si la fonction échoue (Resultat = 0), cela peut donc provenir de l'absence de DirectX sur votre ordinateur ou d'une version de DirectX trop ancienne.

OS Supportés

Windows, AmigaOS


JoystickAxisX()

Syntaxe

Resultat = JoystickAxisX()
Description
Renvoie une des valeurs suivantes:

-1: Mouvement vers la gauche
0: Aucun mouvement
1: Mouvement vers la droite

La fonction ExamineJoystick() doit être appelée avant cette fonction pour mettre à jour l'état du joystick.

OS Supportés

Windows, AmigaOS


JoystickAxisY()

Syntaxe

Resultat = JoystickAxisY()
Description
Renvoie une des valeurs suivantes:

-1: Mouvement vers le haut
0: Aucun mouvement
1: Mouvement vers le bas

La fonction ExamineJoystick() doit être appelée avant cette fonction pour mettre à jour l'état du joystick.

OS Supportés

Windows, AmigaOS


JoystickButton()

Syntaxe

Resultat = JoystickButton(NumeroBouton)
Description
Renvoie 0 dans Resultat si le bouton 'NumeroBouton' n'est pas pressé, sinon renvoie une valeur non nulle. L'index du premier bouton est 1. Un nombre quelconque de boutons peuvent être pressés simultanément. La fonction ExamineJoystick() doit être appelée avant cette fonction pour mettre à jour l'état des boutons.

OS Supportés

Windows, AmigaOS


Keyboard

PureBasic - Keyboard

General

PureBasic propose un accès simple et rapide au clavier qui ne doit être utilisé que pour des jeux ou applications qui nécessitent une gestion directe, exlusive et très rapide de celui-ci. Pour les applications normales, il convient d'utiliser AddKeyboardShortcut(). L'interface est assurée par la technologie DirectX.

Sommaire des commandes

ExamineKeyboard
InitKeyboard
KeyboardInkey
KeyboardMode
KeyboardPushed
KeyboardReleased

Exemple

Keyboard.pb

OS Supportés

Tous

Guide de référence - Index


ExamineKeyboard()

Syntaxe

ExamineKeyboard()
Description
Met à jour l'état du clavier. Cette fonction doit être appelée avant d'utiliser les commandes KeyboardInkey(), KeyboardPushed() et KeyboardReleased().

OS Supportés

Tous


InitKeyboard()

Syntaxe

Resultat = InitKeyboard()
Description
Initialise l'environnement propre à la gestion du clavier. Si 'Resultat' = 0, l'initialisation a échoué. Vous devez appeler cette fonction avant tout appel de fonctions de cette bibliothèque. Cette fonction tente d'ouvrir DirectX (Version 3.0 pour NT4.0, sinon Version 7.0). Si la fonction échoue (Resultat = 0), cela peut donc provenir de l'absence de DirectX sur votre ordinateur ou d'une version de DirectX trop ancienne.

OS Supportés

Tous


KeyboardInkey()

Syntaxe

Caractère$ = KeyboardInkey()
Description
Renvoie le dernier 'Caractère$' tapé sur le clavier, très utile pour interagir facilement avec l'utilisateur (nom dans les highscores, console dans le jeu, etc.).

Exemple:

  If InitSprite() And InitKeyboard() And OpenScreen(800,600,16,"")
    Repeat
      FlipBuffers()
      ClearScreen(RGB(0, 0, 0))

      ExamineKeyboard()
      FullText$ + KeyboardInkey()  ; Ajoute le nouveau caractère au texte courant

      ; Efface le dernier caractère si la touche 'Back' est appuyée
      ;
      If KeyboardReleased(#PB_Key_Back)
        FullText$ = Left(FullText$, Len(FullText$)-1)
      EndIf

      ; Affiche le résultat
      ;
      If StartDrawing(ScreenOutput())
        DrawingMode(1)
        FrontColor(RGB(128, 255, 0))
        DrawText(20, 20, "Ecrivez un petit texte...:")
        DrawText(20, 40, FullText$)
        StopDrawing()
      EndIf
    Until KeyboardPushed(#PB_Key_Escape)
  EndIf

OS Supportés

Windows, Linux, MacOS X


KeyboardMode()

Syntaxe

KeyboardMode(Mode)
Description
Modifie le comportement du clavier. Cette commande affecte le résultat de KeyboardPushed() et KeyboardReleased().

'Mode' peut être une combinaison (en utilisant l'opérateur '|') des valeurs suivantes:
  #PB_Keyboard_Qwerty         : Le clavier ignore l'agencement des touches propres au langage de l'utilisateur et utilise toujours l'agencement QWERTY (mode par défault).
  #PB_Keyboard_International  : Le clavier utilise l'agencement des touches propres au langage de l'utilisateur (utile pour les claviers non QWERTY).
  #PB_Keyboard_AllowSystemKeys: Les touches systèmes de l'OS ne sont pas bloquées (comme Win+R etc.). Cette option peut être gênante en mode plein écran
                                si l'utilisateur presse l'une de ces touches accidentellement.

OS Supportés

Windows


KeyboardPushed()

Syntaxe

Resultat = KeyboardPushed(IdentifiantTouche)
Description
Renvoie 0 si la touche spécifiée par 'IdentifiantTouche' n'est pas pressée, sinon, renvoie une valeur non nulle. Un nombre quelconque de touches peut être pressé simultanément. La fonction ExamineKeyboard() doit être appelée avant pour mettre à jour l'état du clavier.

Exemple:

  If InitSprite() And InitKeyboard() And OpenScreen(800,600,16,"")
    Repeat
      FlipBuffers()

      If StartDrawing(ScreenOutput())
        DrawText(0, 0, "Appuyez sur la touche [Echap] pour quitter")
        StopDrawing()
      EndIf

      ExamineKeyboard()
      If KeyboardPushed(#PB_Key_Escape)   ; Appuyez sur la touche [Echap] pour quitter
        End
      EndIf
    ForEver
  EndIf
Valeurs possibles pour 'IdentifiantTouche':
    #PB_Key_All   ; Toutes les touches sont testées.

    #PB_Key_1
    #PB_Key_2
    #PB_Key_3
    #PB_Key_4
    #PB_Key_5
    #PB_Key_6
    #PB_Key_7
    #PB_Key_8
    #PB_Key_9
    #PB_Key_0

    #PB_Key_A
    #PB_Key_B
    #PB_Key_C
    #PB_Key_D
    #PB_Key_E
    #PB_Key_F
    #PB_Key_G
    #PB_Key_H
    #PB_Key_I
    #PB_Key_J
    #PB_Key_K
    #PB_Key_L
    #PB_Key_M
    #PB_Key_N
    #PB_Key_O
    #PB_Key_P
    #PB_Key_Q
    #PB_Key_R
    #PB_Key_S
    #PB_Key_T
    #PB_Key_U
    #PB_Key_V
    #PB_Key_W
    #PB_Key_X
    #PB_Key_Y
    #PB_Key_Z

    #PB_Key_Escape
    #PB_Key_Minus
    #PB_Key_Equals
    #PB_Key_Back
    #PB_Key_Tab
    #PB_Key_LeftBracket
    #PB_Key_RightBracket
    #PB_Key_Return
    #PB_Key_LeftControl
    #PB_Key_SemiColon
    #PB_Key_Apostrophe
    #PB_Key_Grave
    #PB_Key_LeftShift
    #PB_Key_BackSlash
    #PB_Key_Comma
    #PB_Key_Period
    #PB_Key_Slash
    #PB_Key_RightShift
    #PB_Key_Multiply
    #PB_Key_LeftAlt
    #PB_Key_Space
    #PB_Key_Capital
    #PB_Key_F1
    #PB_Key_F2
    #PB_Key_F3
    #PB_Key_F4
    #PB_Key_F5
    #PB_Key_F6
    #PB_Key_F7
    #PB_Key_F8
    #PB_Key_F9
    #PB_Key_F10
    #PB_Key_F11
    #PB_Key_F12
    #PB_Key_NumLock
    #PB_Key_Scroll
    #PB_Key_Pad0
    #PB_Key_Pad1
    #PB_Key_Pad2
    #PB_Key_Pad3
    #PB_Key_Pad4
    #PB_Key_Pad5
    #PB_Key_Pad6
    #PB_Key_Pad7
    #PB_Key_Pad8
    #PB_Key_Pad9
    #PB_Key_Add
    #PB_Key_Subtract
    #PB_Key_Decimal
    #PB_Key_PadEnter
    #PB_Key_RightControl
    #PB_Key_PadComma
    #PB_Key_Divide
    #PB_Key_RightAlt
    #PB_Key_Pause
    #PB_Key_Home
    #PB_Key_Up
    #PB_Key_Down
    #PB_Key_Left
    #PB_Key_Right
    #PB_Key_End
    #PB_Key_PageUp
    #PB_Key_PageDown
    #PB_Key_Insert
    #PB_Key_Delete

OS Supportés

Tous


KeyboardReleased()

Syntaxe

Resultat = KeyboardReleased(IdentifiantTouche)
Description
Renvoie 1 si la touche spécifiée par 'IdentifiantTouche' a été appuyée puis relâchée, sinon, renvoie 0. L'utilisation typique de cette commande est la touche 'Pause' (P) dans un jeu qui arrête puis reprend le jeu. La fonction ExamineKeyboard() doit être appelée avant pour mettre à jour l'état du clavier. Pour la liste complète des valeurs possibles pour 'IdentifiantTouche', voir KeyboardPushed().

Exemple:

  If InitSprite() And InitKeyboard() And OpenScreen(800,600,16,"")
    Paused = #False
    Repeat
      FlipBuffers()

      If StartDrawing(ScreenOutput())

        ExamineKeyboard()
        If KeyboardReleased(#PB_Key_P)
          If Paused = #False
            Paused = #True
          Else
            Paused = #False
          EndIf
        EndIf

        DrawingMode(0)

        If Paused = #False
          DrawText(20, 20, "Le programme tourne...        ")
        Else
          DrawText(20, 20, "Le programme est à l'arrêt...")
        EndIf

        StopDrawing()
      EndIf
    Until KeyboardPushed(#PB_Key_Escape)
  EndIf

OS Supportés

Tous


Module

PureBasic - Module

General

PureBasic peut jouer des morceaux de musique sous forme de fichiers Modules (.mod) pour ajouter un fond sonore à vos jeux ou applications. Les modules sont bien connus des demomakers car c'est un moyen simple et efficace de créer un environnement sonore. Les outils utilisés pour créer des modules s'appellent des 'trackers' (ProTracker, FastTracker, Impulse Tracker...). Par rapport aux fichiers .wav et mp3, les fichiers Module (.mod) ont l'avantage d'être très compacts et d'une longueur illimitée tout en consommant très peu de ressource processeur. Il est aussi possible de sélectionner en temps réel differentes parti du morceau pour s'adapter, par exemple, à chaque phase d'un jeu. Il est bien sûr possible de mixer un son classique et un module et de les jouer simultanément.

Sous Windows, la librarie MIDAS Sound System est utilisée et permet une reproduction sonore parfaite en supportant différentes versions de Trackers (XM and S3M). N'oubliez pas d'inclure midas11.dll dans votre version complète de PureBasic car ce n'est pas une dll standard. DirectX est utilisé s'il est présent, sinon MIDAS utilise la sortie sonore standard de Windows.

Sommaire des commandes

FreeModule
GetModulePosition
GetModuleRow
InitModule
IsModule
LoadModule
ModuleVolume
PlayModule
SetModulePosition
StopModule

Exemple

Module.pb

OS Supportés

Windows, AmigaOS

Guide de référence - Index


FreeModule()

Syntaxe

FreeModule(#Module)
Description
Arrête l'exécution et efface le module #Module précédemment chargé par la fonction LoadModule(). Quand le module a été effacé, la mémoire qu'il occupait a été libérée donc il ne peut plus être rejoué.

OS Supportés

Windows, AmigaOS


GetModulePosition()

Syntaxe

Position = GetModulePosition(#Module)
Description
Renvoie la position de la plage dans le #Module en cours de lecture. La première plage commence à 0.

OS Supportés

Windows, AmigaOS


GetModuleRow()

Syntaxe

Ligne = GetModuleRow(#Module)
Description
Renvoie la ligne de la plage dans le #Module en cours de lecture. La première ligne commence à 0.

OS Supportés

Windows, AmigaOS


InitModule()

Syntaxe

Resultat = InitModule()
Description
Initialise l'environnement Module. Si Resultat reçoit la valeur 0, aucun module ne pourra être joué sur votre odinateur. Il est aussi possible que votre équipement sonore soit déjà occupé. Cette fonction doit toujours être appelée avant toute autre fonction de la bibliothèque Module. Elle doit également toujours être testée. Si l'initialisation échoue, il est absolument nécessaire de désactiver toutes les fonctions relatives aux modules.

Les principales causes d'échec sous Windows : Midas11.dll non trouvé ou carte son non détectée. Si le programme doit tourner sous NT4.0, assurez-vous que vous avez coché 'Exécutable compatible NT4.0' dans les options de compilation.

OS Supportés

Windows, AmigaOS


IsModule()

Syntaxe

Resultat = IsModule(#Module)
Description
Teste si le #Module est correctement initialisé. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, Linux


LoadModule()

Syntaxe

Resultat = LoadModule(#Module, NomFichier$)
Description
Charge en mémoire le module spécifié dans NomFichier. Si #PB_Any est utilisé pour le paramètre '#Module', le numéro du nouveau module sera renvoyé dans 'Resultat'. Si Resultat est différent de 0, le module a été correctement chargé et est prêt à être joué avec la fonction PlayModule(), sinon, le chargement du module a échoué. Le format du module peut être l'un des suivants : Protracker (4 et 8 canaux), FastTracker (jusqu'à 32 canaux, qualité 16 bits) et Impulse Tracker.

OS Supportés

Windows, AmigaOS


ModuleVolume()

Syntaxe

Resultat = ModuleVolume(#Module, Volume)
Description
Change le volume général du module spécifié en temps réel. La valeur du volume est comprise entre 0 et 100. Pratique pour des montées / descentes en douceur.

OS Supportés

Windows, AmigaOS


PlayModule()

Syntaxe

PlayModule(#Module)
Description
Joue le #Module précédemment chargé par la fonction LoadModule().

OS Supportés

Windows, AmigaOS


SetModulePosition()

Syntaxe

SetModulePosition(#Module, Position)
Description
Change la plage #Module par la plage specifiée. La première plage commence à 0.

OS Supportés

Windows, AmigaOS


StopModule()

Syntaxe

StopModule(#Module)
Description
Arrête la lecture du #Module spécifié.

OS Supportés

Windows, AmigaOS


Mouse

PureBasic - Mouse

General

PureBasic permet un plein accès aux souris connectées à l'ordinateur. Les souris standards sont supportées jusqu'à trois boutons. Cette bibliothèque est optimisée et utilise des fonctions de très bas niveau spécialement efficaces pour le développement de jeux. N'utilisez pas cette bibliothèque pour des applications classiques. La technologie DirectX est utilisée.

Sommaire des commandes

ExamineMouse
InitMouse
MouseButton
MouseDeltaX
MouseDeltaY
MouseLocate
MouseWheel
MouseX
MouseY
ReleaseMouse

Exemple

Mouse.pb

OS Supportés

Tous

Guide de référence - Index


ExamineMouse()

Syntaxe

Resultat = ExamineMouse()
Description
Met à jour l'état de la souris. Si 0 est retourné, la souris ne peut pas être utilisée. Cette commande doit être utilisée avant MouseDeltaX(), MouseDeltaY(), MouseX(), MouseY() ou MouseButton(). Actuellement, seule la souris par défaut est supportée.

OS Supportés

Tous


InitMouse()

Syntaxe

Resultat = InitMouse()
Description
Initialise l'environnement Mouse pour un usage futur. Vous devez appeler cette fonction avant tout usage des autres commandes de la bibliothèque. Si le résultat est nul, il n'y a pas de souris disponible. Cette commande tente d'ouvrir DirectX (v3.0 pour la compatibilité NT4.0 ou v7.0 sinon), donc si il y a échec cela est probablement dû à une version DirectX trop ancienne ou absente.

OS Supportés

Tous


MouseButton()

Syntaxe

Resultat = MouseButton(Bouton)
Description
Renvoie 0 si le bouton spécifié n'est pas appuyé, sinon le bouton est effectivement appuyé. On peut appuyer n'importe quel nombre de boutons simultanément. ExamineMouse() doit être appelé avant cette fonction pour mettre l'état des boutons à jour.

Le paramètre 'Bouton' peut être une des constantes suivante:
  #PB_MouseButton_Left  : Teste si le bouton gauche de la souris est enfoncé
  #PB_MouseButton_Right : Teste si le bouton droit de la souris est enfoncé
  #PB_MouseButton_Middle: Teste si le bouton du milieu de la souris est enfoncé

OS Supportés

Tous


MouseDeltaX()

Syntaxe

Resultat = MouseDeltaX()
Description
Renvoie le déplacement horizontal (en pixels) de la souris depuis le dernier appel de cette fonction. Cela signifie que le résultat peut être positif ou négatif, si la souris a été déplacée vers la droite ou vers la gauche depuis le dernier appel. ExamineMouse() doit être appelé avant cette fonction pour mettre la position courante de la souris à jour.

OS Supportés

Tous


MouseDeltaY()

Syntaxe

Resultat = MouseDeltaY()
Description
Renvoie le déplacement vertical (en pixels) de la souris depuis le dernier appel de cette fonction. Cela signifie que le résultat peut être positif ou négatif selon que le déplacement s'est effectué vers le haut ou vers le bas depuis le dernier appel. ExamineMouse() doit être appelé avant cette fonction pour mettre la position courante de la souris à jour.

OS Supportés

Tous


MouseLocate()

Syntaxe

Resultat = MouseLocate(x, y)
Description
Change la position absolue (en pixels) de la souris dans l'écran courant. C'est principalement utilisé en conjonction avec les commandes suivantes: MouseX() et MouseY().

OS Supportés

Tous


MouseWheel()

Syntaxe

Resultat = MouseWheel()
Description
Renvoie le nombre de ticks (unité du système pas à pas) réalisés par la roue de la souris depuis le dernier appel. La valeur est positive si la souris a été déplacée vers l'avant et négative si la souris a été déplacée vers l'arrière. ExamineMouse() doit être appelé avant cette fonction pour mettre les informations sur la souris à jour.

OS Supportés

Windows


MouseX()

Syntaxe

Resultat = MouseX()
Description
Renvoie la position horizontale actuelle (en pixels) de la souris sur l'écran actif. ExamineMouse() doit être appelé avant cette fonction pour mettre la position courante de la souris à jour.

OS Supportés

Tous


MouseY()

Syntaxe

Resultat = MouseY()
Description
Renvoie la position verticale actuelle (en pixels) de la souris sur l'écran actif. ExamineMouse() doit être appelé avant cette fonction pour mettre la position courante de la souris à jour.

OS Supportés

Tous


ReleaseMouse()

Syntaxe

Resultat = ReleaseMouse(Etat)
Description
Capture ou libère la souris pour rendre son usage possible dans le système d'exploitation. On utilise typiquement cette fonction après avoir vérifié le résultat de la commande IsScreenActive(). Si 'Etat' = 1, la souris est libérée, sinon la souris est capturée par le programme PureBasic.

OS Supportés

Tous


Palette

PureBasic - Palette

General

Les palettes ne peuvent être utilisées qu'avec des écrans de 256 couleurs (ou moins). Elles permettent de modifier chacune des couleurs affichées. Chaque couleur (numérotée de 0 à 255) peut ainsi se voir attribuer une nouvelle couleur RVB dans une palette de 16 millions de couleurs codées sur 24 bits. C'est un avantage considérable dans les applications ou jeux graphiques, où chaque point affiché peut se voir attribuer une nouvelle couleur en changeant simplement sa couleur associée. Cela permet des changements d'effets très rapides, des fondus et beaucoup d'autres prouesses graphiques.

Sommaire des commandes

CreatePalette
DisplayPalette
FreePalette
GetPaletteColor
InitPalette
IsPalette
LoadPalette
SetPaletteColor

Exemple

Palette.pb

OS Supportés

Windows, AmigaOS, Linux

Guide de référence - Index


CreatePalette()

Syntaxe

Resultat = CreatePalette(#Palette)
Description
Crée une nouvelle palette vide de 256 couleurs. Si #PB_Any est utilisé pour le paramètre '#Palette', le numéro de la nouvelle palette sera renvoyé dans 'Resultat'. La palette est entièrement initialisée avec la couleur noire (0,0,0) Si le 'Resultat' est 0 alors la création de la palette a échouée. Si une palette était déjà créée avec le même numéro, alors elle est détruite automatiquement.

OS Supportés

Windows, AmigaOS, Linux


DisplayPalette()

Syntaxe

DisplayPalette(#Palette)
Description
Affiche la #Palette précédemment créée à l'aide de CreatePalette() ou LoadPalette() sur l'écran actuel. L'écran doit être en mode 256 couleurs.

OS Supportés

Windows, AmigaOS, Linux


FreePalette()

Syntaxe

FreePalette(#Palette)
Description
Libère la mémoire allouée à la #Palette.

OS Supportés

Windows, AmigaOS, Linux


GetPaletteColor()

Syntaxe

Color = GetPaletteColor(#Palette, Index)
Description
Renvoie la valeur RVB de la couleur située à l'index indiqué dans #Palette. Pour récupérer les composantes rouge, vert et bleu de la couleur les commandes suivantes peuvent être utilisées: Red(), Green() et Blue().

OS Supportés

Windows, AmigaOS, Linux


InitPalette()

Syntaxe

Resultat = InitPalette()
Description
Initialise l'environnement nécessaire à la gestion des palettes de couleur. Vous devez placer cette fonction au début de votre code source si vous souhaitez utiliser les fonctions de cette librarie. Si Resultat = 0, l'initialisation a échoué et aucune fonction de la librarie ne pourra être utilisée. Sous Windows, l'échec se produit le plus souvent parce que DirectX 7 (ou DirectX 3 si compatibilité NT4.0) n'a pas été trouvé.

OS Supportés

Windows, AmigaOS, Linux


IsPalette()

Syntaxe

Resultat = IsPalette(#Palette)
Description
Teste si la #Palette est correctement initialisée. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, Linux


LoadPalette()

Syntaxe

Resultat = LoadPalette(#Palette, NomFichier$)
Description
Charge une palette d'après un fichier BMP standard (Images 256 couleurs seulement). Si #PB_Any est utilisé pour le paramètre '#Palette', le numéro de la nouvelle palette sera renvoyé dans 'Resultat'. La palette est initialisée avec les valeurs trouvées dans le fichier. Si la palette a été correctement chargée, Resultat est non nul, sinon, il s'est produit une erreur.

OS Supportés

Windows, AmigaOS, Linux


SetPaletteColor()

Syntaxe

SetPaletteColor(#Palette, Index, Color)
Description
Change la valeur RVB de la couleur située à l'index spécifié dans la #Palette. Pour avoir facilement une couleur RVB à partir des composantes rouge, vert et bleu la commande RGB() peut être utilisée. La formule suivante (plus rapide) peut aussi être utilisée:

Color = Red + Green<<8 + Blue<<16

OS Supportés

Windows, AmigaOS, Linux


Sprite

PureBasic - Sprite

General

Les 'Sprites' sont bien connus des joueurs sur ordinateur, ce sont des petites images qui peuvent être affichées n'importe où sur l'écran. Les Sprites peuvent se déplacer au dessus d'un plan graphique en utilisant un mode transparent. DirectX 7 est utilisé pour gérer les sprites. Cela permet d'utiliser certains composants graphiques spécialisés (Blitter) s'ils sont disponibles.

Sommaire des commandes

AvailableScreenMemory
CatchSprite
ChangeAlphaIntensity
ChangeGamma
ClearScreen
ClipSprite
CloseScreen
CopySprite
CreateSprite
DisplayAlphaSprite
DisplayRGBFilter
DisplayShadowSprite
DisplaySolidSprite
DisplaySprite
DisplayTranslucentSprite
DisplayTransparentSprite
ExamineScreenModes
FlipBuffers
FreeSprite
GrabSprite
InitSprite
IsScreenActive
IsSprite
LoadSprite
NextScreenMode
OpenScreen
OpenWindowedScreen
SaveSprite
ScreenID
ScreenModeDepth
ScreenModeHeight
ScreenModeRefreshRate
ScreenModeWidth
ScreenOutput
SetFrameRate
SetRefreshRate
SpriteCollision
SpriteDepth
SpriteHeight
SpriteID
SpriteOutput
SpritePixelCollision
SpriteWidth
StartSpecialFX
StopSpecialFX
TransparentSpriteColor
UseBuffer

Exemple

Sprite.pb
WindowedScreen.pb

OS Supportés

Tous

Guide de référence - Index


AvailableScreenMemory()

Syntaxe

Resultat = AvailableScreenMemory()
Description
Renvoie la quantité de mémoire vidéo disponible pour les sprites et les autres données graphiques (en octets). Cette commande doit être appelée après la commande OpenScreen() ou OpenWindowedScreen().

OS Supportés

Windows, Linux


CatchSprite()

Syntaxe

Resultat = CatchSprite(#Sprite, AddresseMemoire [, Mode])
Description
Charge le sprite situé à l'adresse mémoire spécifiée. Si #PB_Any est utilisé pour le paramètre '#Sprite', le numéro du nouveau sprite sera renvoyé dans 'Resultat'. Le sprite peut être au format BMP (non compressé) ou dans un des formats supportés par la bibliothèque ImagePlugin. Si Resultat = 0, le chargement a échoué.

Avant de charger un sprite, un écran doit être ouvert à l'aide de la commande OpenScreen() ou OpenWindowedScreen(). Un Sprite chargé peut être par la suite libéré par la fonction FreeSprite(). La commande 'CatchSprite' est utile quand il est nécessaire d'inclure directement les sprites dans l'exécutable (en utilisant 'IncludeBinary'). Cette méthode n'est pas idéale et devrait être évitée au maximum car en faisant ceci, les sprites prennent deux fois plus de mémoire (une fois dans l'exécutable, et la deuxieme quand ils sont chargés). Une autre utilisation plus recommandée est d'utiliser cette commande pour récupérer un sprite dans une banque de données compressée, par exemple avec la librarie Packer (fichiers .pak).

Les commandes suivantes peuvent être utilisées pour activer automatiquement davantage de formats d'images:

UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTIFFImageDecoder()
UseTGAImageDecoder()

Le paramètre 'Mode' est facultatif et peut prendre une des valeurs suivantes:
  0                       : Mode par défaut (le sprite est chargé dans la mémoire video, si possible)
  #PB_Sprite_Memory       : Le sprite est chargé dans la mémoire principale du PC (plus lent sauf en mode SpecialFX())
  #PB_Sprite_Alpha        : Le sprite est au format 8 bits (256 couleurs) en niveau de gris utilisé par DisplayAlphaSprite(), DisplayShadowSprite() ou DisplaySolidSprite()
  #PB_Sprite_Texture      : Le sprite est créé avec le support 3D (texture) nécessaire à la fonction CreateSprite3D() de la librarie Sprite3D.
  #PB_Sprite_AlphaBlending: Le sprite est créé avec le support de l'alpha-channel, le format d'image doit le gérer
                            (seul PNG et TIFF pour l'instant). Le mode #PB_Sprite_Texture doit être aussi spécifié, et le sprite
                            devra être affiché avec .
Note: Pour les écrans en 256 couleurs (8 bits), seules les images BMP en 256 couleurs sont supportées.

OS Supportés

Windows, Linux, MacOS X


ChangeAlphaIntensity()

Syntaxe

ChangeAlphaIntensity(Rouge, Vert, Bleu)
Description
Change l'intensité des canaux alpha RVB. Ces paramètres seront utilisés par la commande DisplayAlphaSprite(). L'avantage de cette commande est de permettre le rendu de n'importe quel filtre alpha en rouge, vert ou n'importe quelle couleur au lieu de l'effet de transparence gris. Utile pour des effets graphiques temps réel.

OS Supportés

Windows, Linux


ChangeGamma()

Syntaxe

ChangeGamma(R, V, B, Options)
Description
Change le gamma de l'écran courant. Cette commande ne fonctionne qu'en mode plein écran (OpenWindowedScreen() n'est pas supporté). Cette commande est utile pour effectuer des fondus d'écran. Si la commande ne fait rien, alors la carte vidéo n'a pas de régulateur gamma. Aucune émulation logicielle n'est prévue car les calculs à faire sont trop gourmand en temps machine.

Le paramètre 'Options' peut prendre l'une des valeurs suivantes:
   0   : Calcule le nouveau gamma en se basant sur le gamma de référence.
   1   : Défini le Gamma actuel comme gamma de référence. Ceci doit être fait au moins une fois avant
         d'appeler cette commande avec le paramètre 'Options' à 0. Les paramètres R,V,B sont ignorés.
Une utilisation standard de ChangeGamma() ressemble à ceci:
  ChangeGamma(0,0,0,1)            ; Défini le gamma actuel de l'écran comme référence
  ChangeGamma(Red,Green,Blue,0)   ; Change le gamma.

OS Supportés

Windows


ClearScreen()

Syntaxe

ClearScreen(Couleur)
Description
Efface l'écran courant avec la 'Couleur' spécifiée.

Note: ne jamais appeler ClearScreen() à l'intérieur d'un block StartDrawing() : StopDrawing().

OS Supportés

Windows, Linux, MacOS X


ClipSprite()

Syntaxe

ClipSprite(#Sprite, x, y, Largeur, Hauteur)
Description
Change la zone affichable du #Sprite par la nouvelle zone. Par exemple, si un sprite fait 100*100 pixels (largeur*Hauteur) et que l'on définit une zone de 'clipping' x=10, y=10, Largeur=20, Hauteur=20, alors seule la zone comprise entre ces coordonnées sera affichée. Le #Sprite se comporte alors exactement comme un nouveau sprite de 20*20. Pour enlever la zone de 'clipping' du #Sprite la constante #PB_Default doit être spécifiée pour 'x', 'y', 'Largeur' et 'Hauteur'.

Note: Sur certaines anciennes cartes graphiques, ClipSprite() ne fonctionne pas correctement si la taille du sprite dépasse la taille de l'écran.

OS Supportés

Tous


CloseScreen()

Syntaxe

CloseScreen()
Description
Ferme l'écran courant. Ceci permet à une application de passer du mode plein écran au mode fenêtré dynamiquement. Après avoir changé d'écran, tous les sprites doivent être rechargés.

OS Supportés

Windows, Linux, MacOS X


CopySprite()

Syntaxe

Resultat = CopySprite(#Sprite1, #Sprite2 [, Mode])
Description
Copie le #Sprite1 sur le #Sprite2. Si le #Sprite2 n'existe pas, il est créé, sinon il est écrasé. Si #PB_Any est utilisé pour le paramètre '#Sprite2', le numéro du nouveau sprite sera renvoyé dans 'Resultat'.

Le paramètre 'Mode' est facultatif et peut prendre une des valeurs suivantes:
  0                       : Mode par défaut (le sprite est chargé dans la mémoire video, si possible)
  #PB_Sprite_Memory       : Le sprite est chargé dans la mémoire principale du PC (plus lent sauf en mode SpecialFX())
  #PB_Sprite_Alpha        : Le sprite est au format 8 bits (256 couleurs) en niveau de gris utilisé par DisplayAlphaSprite(), DisplayShadowSprite() ou DisplaySolidSprite()
  #PB_Sprite_Texture      : Le sprite est créé avec le support 3D (texture) nécessaire à la fonction CreateSprite3D() de la librarie Sprite3D.
  #PB_Sprite_AlphaBlending: Le sprite est créé avec le support de l'apha-channel, le format d'image doit le gérer
                            (seul PNG et TIFF pour l'instant). Le mode #PB_Sprite_Texture doit être aussi spécifié, et le sprite
                            devra être affiché avec .

OS Supportés

Windows, Linux, MacOS X


CreateSprite()

Syntaxe

Resultat = CreateSprite(#Sprite, Largeur, Hauteur [, Mode])
Description
Crée un nouveau #Sprite vide de dimension Largeur x Hauteur. Si #PB_Any est utilisé pour le paramètre '#Sprite', le numéro du nouveau sprite sera renvoyé dans 'Resultat'. Si Resultat = 0, la création a échouée. Avant de créer un sprite, un écran doit être ouvert à l'aide de la commande OpenScreen() ou OpenWindowedScreen(). Un Sprite ainsi créé peut être par la suite libéré par la fonction FreeSprite().

Le paramètre 'Mode' est facultatif et peut prendre une des valeurs suivantes:
  0                 : Mode par défaut (le sprite est chargé dans la mémoire video, si possible)
  #PB_Sprite_Memory : Le sprite est créé dans la mémoire principale du PC (plus lent sauf en mode SpecialFX())
  #PB_Sprite_Alpha  : Le sprite est au format 8 bits (256 couleurs) en niveau de gris utilisé par DisplayAlphaSprite(), DisplayShadowSprite() ou DisplaySolidSprite()
  #PB_Sprite_Texture: Le sprite est créé avec le support 3D (texture) nécessaire à la fonction CreateSprite3D() de la librarie Sprite3D.


DisplayAlphaSprite()

Syntaxe

DisplayAlphaSprite(#Sprite, x, y)
Description
Affiche le #Sprite à la position spécifiée sur l'écran courant. La couleur 128,128,128 (gris) est considéré comme transparente. Le sprite émule un canal alpha (AlphaChannel) ce qui permet beaucoup d'effets de transparence. Le sprite doit être au format 8 bits (256 couleurs) en niveau de gris. Chaque niveau de gris donnera une luminosité plus foncée ou plus claire à l'effet de transparence. ChangeAlphaIntensity() peut être utilisée pour contrôler les valeurs Rouge, Vert et Bleu du canal alpha. Le sprite doit être chargé avec l'option #PB_Sprite_Alpha sinon la commande échoue.

Cette commande est spécialement optimisée (et beacoup plus rapide) pour une utilisation en conjonction avec la commande StartSpecialFX().

OS Supportés

Windows, Linux


DisplayRGBFilter()

Syntaxe

DisplayRGBFilter(x, y, Largeur, Hauteur, Rouge, Vert, Bleu)
Description
Affiche un filtre (rectangle translucide) au dessus de l'écran. Cette commande est très rapide mais le degré de transparence n'est pas modifiable.

Cette commande est spécialement optimisée (et beacoup plus rapide) pour une utilisation en conjonction avec la commande StartSpecialFX().

OS Supportés

Windows, Linux


DisplayShadowSprite()

Syntaxe

DisplayShadowSprite(#Sprite, x, y)
Description
Affiche le #Sprite à la position spécifiée sur l'écran courant. La couleur 0,0,0 (noir) est toujours considérée comme transparente. Le sprite est affiché en mode translucide en utilisant un algorithme plus rapide que celui utilisé dans DisplayAlphaSprite(). L'inconvénient c'est de ne pas pouvoir régler le degré de transparence. Le sprite doit être chargé avec l'option #PB_Sprite_Alpha sinon la commande échoue.

Cette commande est spécialement optimisée (et beacoup plus rapide) pour une utilisation en conjonction avec la commande StartSpecialFX().

OS Supportés

Windows, Linux


DisplaySolidSprite()

Syntaxe

DisplaySolidSprite(#Sprite, x, y, Couleur)
Description
Affiche le #Sprite à la position spécifiée sur l'écran courant. La couleur 0,0,0 (noir) est toujours considérée comme transparente. Le sprite est affiché avec une 'Couleur' unie, RGB() peut être utilisé pour obtenir une couleur valide. Le sprite doit être chargé avec l'option #PB_Sprite_Alpha sinon la commande échoue.

Cette commande est spécialement optimisée (et beacoup plus rapide) pour une utilisation en conjonction avec la commande StartSpecialFX().

OS Supportés

Windows, Linux


DisplaySprite()

Syntaxe

DisplaySprite(#Sprite, x, y)
Description
Affiche le #Sprite à la position spécifiée sur l'écran courant. Il n'y a pas de couleur transparente. Il est parfaitement autorisé d'afficher le sprite partiellement ou complètement hors de l'écran.

OS Supportés

Tous


DisplayTranslucentSprite()

Syntaxe

DisplayTranslucentSprite(#Sprite, x, y, Intensité)
Description
Affiche le #Sprite à la position spécifiée sur l'écran courant. La couleur 0,0,0 (noir) est toujours considérée comme transparente. L'intensité contrôle le niveau de transparence du sprite sur le fond. Les valeurs pour l'intensité peuvent aller de 0 (totalement transparent) à 255 (opaque). Cet effet est aussi connu sous le nom 'AlphaBlending'. Il est parfaitement autorisé d'afficher le sprite partiellement ou complètement hors de l'écran.

Cette commande est spécialement optimisée (et beacoup plus rapide) pour une utilisation en conjonction avec la commande StartSpecialFX().

OS Supportés

Windows, Linux


DisplayTransparentSprite()

Syntaxe

DisplayTransparentSprite(#Sprite, x, y)
Description
Affiche le Sprite #Sprite à la position spécifiée sur l'écran courant. La couleur 0 est considérée comme la couleur transparente (cette couleur ne sera pas affichée). Elle peut être changée avec la commande TransparentSpriteColor(). Il est parfaitement autorisé d'afficher le sprite partiellement ou complètement hors de l'écran.

OS Supportés

Tous


ExamineScreenModes()

Syntaxe

Resultat = ExamineScreenModes()
Description
Démarre l'examen des modes d'écrans disponibles sur l'ordinateur. La liste des modes d'écran peut être énumérée à l'aide de la commande NextScreenMode(). Si le résultat est 0, alors les modes d'écran ne peuvent pas être examinés.

OS Supportés

Windows, Linux, MacOS X


FlipBuffers()

Syntaxe

FlipBuffers([Mode])
Description
Inverse le buffer d'arrière plan avec le buffer visible à l'écran. La partie invisible du buffer remplace alors complètement la partie visible. Cela permet, par exemple des déplacements fluides de sprites sans effets parasites.

L'écran doit avoir été préalablement ouvert avec la fonction OpenScreen() ou OpenWindowedScreen(). Le paramètre 'Mode' est facultatif et permet d'attendre ou non la synchronisation avec l'écran avant d'inverser les buffers (aussi connu sous le nom de 'Vertical blank synchronization').

Les valeurs possibles du paramètre mode sont:
   0 : désactive la synchronisation
   1 : active la synchronisation (mode par défaut)
   2 : active la synchronisation en essayant de préserver le temps processeur, lorsque le jeu est en mode plein écran.
Attendre la synchronisation permet d'avoir des inversions de buffers parfaites (sans 'tearing' (ancienne et nouvelle image à moitié visible) ou autres effets parasites) car l'inversion est effectuée lorsque que le faisceau lumineux est en dehors de la partie visible de l'écran. De plus, l'inversion se fait à un rythme régulier, en relation avec sa fréquence de rafraîchissement: par exemple, pour un écran en 60 Hz, l'inversion pourra se faire au maximum 60 fois par seconde (donc on aura un rythme régulier de 60 images/secondes).

OS Supportés

Tous


FreeSprite()

Syntaxe

FreeSprite(#Sprite)
Description
Supprime le Sprite spécifié de la mémoire. Il ne sera plus possible de l'utiliser.

OS Supportés

Tous


GrabSprite()

Syntaxe

Resultat = GrabSprite(#Sprite, x, y, Largeur, Hauteur)
Description
Capture la zone de l'écran spécifié et crée un nouveau #Sprite avec son contenu. Si #PB_Any est utilisé pour le paramètre '#Sprite', le numéro du nouveau sprite sera renvoyé dans 'Resultat'.

OS Supportés

Tous


InitSprite()

Syntaxe

Resultat = InitSprite()
Description
Initialise l'environnement nécessaire au fonctionnement des sprites. Vous devez placer cette fonction au début de votre code source si vous souhaitez utiliser les fonctions de la bibliothèque Sprite. Si Resultat = 0, l'initialisation a échoué. Vous devez alors quitter le programme ou annuler tous les appels aux fonctions de la bibliothèque Sprite. Cette fonction tente d'initialiser DirectX 7 (ou +). Les causes probables d'un échec sont l'absence de DirectX ou une version trop ancienne. Si le mode de compatibilité NT4.0 est utilisé, DirectX 3 (ou +) est nécessaire.

OS Supportés

Tous


IsScreenActive()

Syntaxe

Resultat = IsScreenActive()
Description
Les jeux et les applications en mode plein écran programmés en PureBasic fonctionnent toujours en mode multitâche, pour éviter de bloquer tout le système (que ce soit sur AmigaOS, Windows ou Linux). En d'autre termes, l'utilisateur peut à tout moment revenir sur son bureau pour faire autre chose. Si c'est le cas cette commande renverra 0, indiquant au programmeur de prendre les mesures nécessaires (libérer le clavier et la souris, arrêter les sons et les musiques, mettre le jeu en pause etc...) Cette commande doit être obligatoirement placée après FlipBuffers().

OS Supportés

Windows, Linux, MacOS X


IsSprite()

Syntaxe

Resultat = IsSprite(#Sprite)
Description
Teste si le #Sprite est correctement initialisé. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, Linux, MacOS X


LoadSprite()

Syntaxe

Resultat = LoadSprite(#Sprite, NomFichier$ [, Mode])
Description
Charge en mémoire le #Sprite contenu dans NomFichier$. Si #PB_Any est utilisé pour le paramètre '#Sprite', le numéro du nouveau sprite sera renvoyé dans 'Resultat'. Le sprite peut être au format BMP (non compressé) ou dans un des formats supportés par la bibliothèque ImagePlugin. Avant de charger un sprite, un écran doit être ouvert à l'aide de la commande OpenScreen() ou OpenWindowedScreen(). Si Resultat = 0, le chargement a échoué. Un Sprite chargé peut être libéré par la fonction FreeSprite(). Les commandes suivantes peuvent être utilisées pour activer automatiquement davantage de formats d'images:

UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTIFFImageDecoder()
UseTGAImageDecoder()

Le paramètre 'Mode' est facultatif et peut prendre une des valeurs suivantes:
  0                       : Mode par défaut (le sprite est chargé dans la mémoire video, si possible)
  #PB_Sprite_Memory       : Le sprite est chargé dans la mémoire principale du PC (plus lent sauf en mode SpecialFX())
  #PB_Sprite_Alpha        : Le sprite est au format 8 bits (256 couleurs) en niveau de gris utilisé par DisplayAlphaSprite(), DisplayShadowSprite() ou DisplaySolidSprite()
  #PB_Sprite_Texture      : Le sprite est créé avec le support 3D (texture) nécessaire à la fonction CreateSprite3D() de la librarie Sprite3D.
  #PB_Sprite_AlphaBlending: Le sprite est créé avec le support de l'alpha-channel, le format d'image doit le gérer
                            (seul PNG et TIFF pour l'instant). Le mode #PB_Sprite_Texture doit être aussi spécifié, et le sprite
                            devra être affiché avec .
Note: Pour les écrans en 256 couleurs (8 bits), seules les images BMP en 256 couleurs sont supportées.

OS Supportés

Tous


NextScreenMode()

Syntaxe

Resultat = NextScreenMode()
Description
Cette commande doit être appelée après ExamineScreenModes(). Elle permet de lister les modes d'écran disponible un par un. Les informations disponibles sur le mode d'écran en cours d'examen peuvent être récupérées à l'aide des commandes suivantes: ScreenModeWidth(), ScreenModeHeight(), ScreenModeDepth() and ScreenModeRefreshRate(). Si le 'Resultat' est 0, alors l'énumération est finie.

Exemple:

  InitSprite()

  If ExamineScreenModes()
    While NextScreenMode()
      Debug Str(ScreenModeWidth())+"x"+Str(ScreenModeHeight())+"x"+Str(ScreenModeDepth())+"@"+Str(ScreenModeRefreshRate())+"Hz"
    Wend
  EndIf

OS Supportés

Windows, Linux, MacOS X


OpenScreen()

Syntaxe

Resultat = OpenScreen(Largeur, Hauteur, Profondeur, Titre$)
Description
Ouvre un nouvel écran avec les caractéristiques Largeur, Hauteur et Profondeur. L'écran est créé avec deux buffers vidéo, ce qui permet l'affichage successif des deux buffers avec la fonction FlipBuffers(), particulièrement utile pour les jeux. Si Resultat = 0, la création de l'écran a échoué.

Largeur et Hauteur doivent être une combinaison standard du type : 640*480, 800*600, 1024*768...

Profondeur peut prendre les valeurs suivantes :
   4:    16 couleurs, palettes indépendantes
   8:   256 couleurs, palettes indépendantes
  16: 65000 couleurs, palette fixe
  24: 16 Mo couleurs, palette fixe
  32: 16 Mo couleurs, plus rapide que le mode 24 bits
Note: Sous Windows, le paramètre 'Titre$' sera affiché dans la barre des tâches, il est conseillé de choisir un nom approprié à l'application.

Pour ouvrir un écran à l'intérieur d'une fenêtre, il convient d'utiliser la commande OpenWindowedScreen().

OS Supportés

Tous


OpenWindowedScreen()

Syntaxe

Resultat = OpenWindowedScreen(FenetreID, x, y, Largeur, Hauteur, RedimensionnementAuto, OffsetDroit, OffsetBas)
Description
Ouvre un écran selon les paramètres spécifiés dans la fenêtre dont l'identifiant est 'FenetreID'. Cette fenêtre doit être ouverte au préalable en utilisant OpenWindow().
L'écran fenêtré emploie l'accélération matérielle de la même manière que le mode plein écran utilisant la commande OpenScreen().

Si 'RedimensionnementAuto' est 1, alors l'écran se redimensionnera automatiquement ainsi que son contenu quand la taille de la fenêtre changera.

'OffsetDroit' et 'OffsetBas' définissent les marges à droite et en bas de la fenêtre qui devront être respectées lors du redimensionnement (pour une barre d'état par exemple).

L'écran est créé avec deux buffers vidéo, ce qui permet l'affichage successif des deux buffers avec la fonction FlipBuffers(), particulièrement utile pour les jeux.
Si Resultat = 0, la création de l'écran a échoué.

Note: Il n'est pas possible de créer plus d'un écran fenêtré.

Exemple:

Ecran fenêtré de taille fixe avec gadgets
  If InitSprite() = 0
    MessageRequester("Erreur", "Impossible d'ouvrir l'écran & l'environnement nécessaire aux sprites !", 0)
    End
  EndIf

  If OpenWindow(0, 0, 0, 220, 160, "Un écran dans une fenêtre...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If CreateGadgetList(WindowID(0))
      ButtonGadget(0, 170, 135, 45, 20, "Quitter")
    EndIf
    If OpenWindowedScreen(WindowID(0), 0, 0, 160, 160, 0, 0, 0)
      CreateSprite(0, 20, 20)
      If StartDrawing(SpriteOutput(0))
        Box(0, 0, 20, 20, RGB(255, 0, 155))
        Box(5, 5, 10, 10, RGB(155, 0, 255))
        StopDrawing()
      EndIf
    Else
      MessageRequester("Erreur", "Impossible d'ouvrir un écran dans la fenêtre!", 0)
      End
    EndIf
  EndIf

  direction = 2
  Repeat
    ; Il est très important de traiter tous les événements restants dans la file d'attente à chaque tour
    ;
    Repeat
      Event = WindowEvent()

      Select Event
        Case #PB_Event_Gadget
          If EventGadget() = 0
            End
          EndIf

        Case #PB_Event_CloseWindow
          End
      EndSelect
    Until Event = 0

    FlipBuffers()
    ClearScreen(RGB(0, 0, 0))
    DisplaySprite(0, x, x)
    x + direction
    If x > 140 : direction = -2 : EndIf
    If x < 0   : direction =  2 : EndIf
    Delay(1)
  ForEver

Exemple:

Avec redimensionnement automatique
  If InitSprite() = 0
    MessageRequester("Erreur", "Impossible d'ouvrir l'écran & l'environnement nécessaire aux sprites !", 0)
    End
  EndIf

  If OpenWindow(0, 0, 0, 320, 140, "Un écran dans une fenêtre...", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
    If OpenWindowedScreen(WindowID(0), 0, 0, 1, 1, 1, 0, 0)  ; nous n'avons pas besoin des dimensions exact de l'écran, car il sera automatiquement étiré.
    Else
      MessageRequester("Erreur", "Impossible d'ouvrir un écran dans la fenêtre!", 0)
      End
    EndIf
  EndIf

  Repeat
    ; Il est très important de traiter tous les événements restants dans la file d'attente à chaque tour
    ;
    Repeat
      Event = WindowEvent()

      If Event = #PB_Event_CloseWindow
        End
      EndIf
    Until Event = 0

    FlipBuffers()
    ClearScreen(RGB(0, 0, 200))
    Delay(1)
  ForEver

OS Supportés

Tous


SaveSprite()

Syntaxe

Resultat = SaveSprite(#Sprite, NomFichier$ [, ImagePlugin [, Options]])
Description
Enregistre le #Sprite dans un fichier sur le disque. Par défaut, le format de sauvegarde est le BMP 24 bit. Très utile avec la fonction GrabSprite() pour faire des copies d'écrans par exemple. Si le 'Resultat' est 0, alors le sprite n'a pas pu être enregistré (disque plein, mauvais nom de fichier, etc.). Le paramètre 'ImagePlugin' est facultatif et peut prendre l'une des constantes suivantes:
  #PB_ImagePlugin_BMP : Enregistre l'image en BMP  (format par défaut)
  #PB_ImagePlugin_JPEG: Enregistre l'image en JPEG (la commande UseJPEGImageEncoder() doit être utilisée)
  #PB_ImagePlugin_PNG : Enregistre l'image en PNG  (la commande UsePNGImageEncoder() doit être utilisée)
Le paramètre 'Options' est facultatif dont l'usage est dépendant du plugin choisi. Il est possible de régler la qualité d'une image à l'aide d'une valeur allant de 0 (plus mauvaise qualité) à 10 (qualité maximale). Seul le plugin JPEG supporte cette option (la qualité par défaut est fixée à 7 si aucune option n'est spécifiée avec l'encodeur JPEG).

OS Supportés

Windows, Linux, MacOS X


ScreenID()

Syntaxe

Resultat = ScreenID()
Description
Renvoie l'identifiant système de l'écran. Sous Windows, l'écran n'est autre qu'une fenêtre, donc n'importe quelle commande nécessitant un 'WindowID' peut être utilisée (comme PlayMovie()). Ce n'est pas compatible avec les autres OS.

OS Supportés

Windows, Linux, MacOS X


ScreenModeDepth()

Syntaxe

Profondeur = ScreenModeDepth()
Description
Renvoie la profondeur (en bits) du mode d'écran actuellement listé par NextScreenMode(). La profondeur peut être une des valeurs suivantes en fonction de la carte graphique: 8, 15, 16, 24 ou 32 bits.

OS Supportés

Windows, Linux, MacOS X


ScreenModeHeight()

Syntaxe

Hauteur = ScreenModeHeight()
Description
Renvoie la hauteur (en pixels) du mode d'écran actuellement listé par NextScreenMode().

OS Supportés

Windows, Linux, MacOS X


ScreenModeRefreshRate()

Syntaxe

TauxRafraichissement = ScreenModeRefreshRate()
Description
Renvoie le taux de rafraîchissement (en hertz) du mode d'écran actuellement listé par NextScreenMode().

OS Supportés

Windows, Linux, MacOS X


ScreenModeWidth()

Syntaxe

Largeur = ScreenModeWidth()
Description
Renvoie la largeur (en pixels) du mode d'écran actuellement listé par NextScreenMode().

OS Supportés

Windows, Linux, MacOS X


ScreenOutput()

Syntaxe

OutputID = ScreenOutput()
Description
Renvoie l'OutputID de l'écran courant nécessaire à StartDrawing() pour effectuer les dessins 2D directement sur l'écran.

OS Supportés

Tous


SetFrameRate()

Syntaxe

SetFrameRate(ImagesParSeconde)
Description
Definit le nombre d'images par seconde du programme. C'est particulièrement utile en mode fenêtré.

OS Supportés

Windows


SetRefreshRate()

Syntaxe

SetRefreshRate(TauxDeRafraichissement)
Description
Definit le taux de rafraîchissement (en Hz) auquel le prochain écran ouvert devra se conformer. Si l'écran ne supporte pas ce taux de rafraîchissement, alors OpenScreen() échouera. Il suffit de remettre le 'TauxDeRafraichissement' à 0 pour ouvrir l'écran avec son taux par défaut.

Note: Sous Windows XP, le taux de rafraîchissement peut être bloqué par le système ou par les drivers vidéo. Le résultat de cette fonction n'est donc pas forcément fiable.

OS Supportés

Windows


SpriteCollision()

Syntaxe

Resultat = SpriteCollision(#Sprite1, x1, y1, #Sprite2, x2, y2)
Description
Teste si les deux Sprites se chevauchent. Si ce n'est pas le cas, Resultat = 0. Cette fonction teste une zone rectangulaire, ce qui la rend rapide mais peu précise, mais cependant très utile dans des jeux d'arcade.

OS Supportés

Tous


SpriteDepth()

Syntaxe

Resultat = SpriteDepth(#Sprite)
Description
Renvoie dans Resultat, la profondeur (en plans couleurs) du Sprite.

OS Supportés

Tous


SpriteHeight()

Syntaxe

Resultat = SpriteHeight(#Sprite)
Description
Renvoie dans Resultat, la hauteur du Sprite.

OS Supportés

Tous


SpriteID()

Syntaxe

SpriteID = SpriteID(#Sprite)
Description
Renvoie l'identifiant système du #Sprite.

OS Supportés

Tous


SpriteOutput()

Syntaxe

OutputID = SpriteOutput(#Sprite)
Description
Renvoie l'OutputID du #Sprite nécessaire à StartDrawing() pour effectuer les dessins 2D directement sur le #Sprite.

Note: Il n'est pas possible d'utiliser SpriteOutput() (et par conséquent les fonctions de dessin 2D) avec un sprite du type '#PB_Sprite_Alpha'.

OS Supportés

Tous


SpritePixelCollision()

Syntaxe

Resultat = SpritePixelCollision(#Sprite1, x1, y1, #Sprite2, x2, y2)
Description
Teste si les deux Sprites se chevauchent. Si ce n'est pas le cas, Resultat = 0. Cette fonction effectue une comparaison pixel par pixel sur les pixels transparents des deux sprites ce qui rend la routine très précise mais également relativement lente. Pour optimiser au maximum la comparaison, il convient d'enlever le plus possible la zone transparente autour du sprite, pour ne garder que sa dimension réelle.

OS Supportés

Tous


SpriteWidth()

Syntaxe

Resultat = SpriteWidth(#Sprite)
Description
Renvoie dans Resultat, la largeur du Sprite.

OS Supportés

Tous


StartSpecialFX()

Syntaxe

StartSpecialFX()
Description
PureBasic permet d'effectuer des effets graphiques tels que les ombres réelles, l'AlphaBlending, filtres de couleurs etc... et ce sans accélération matérielle. C'est particulièrement adaptées aux petites configurations. Néanmoins, si le matériel le permet, il est vivement conseillé d'utiliser la librarie Sprite3D pour les effets d'ombre et de lumière en temps réel.

Etant donné que tout est logiciel, les commandes sont relativement gourmandes en temps CPU et doivent être manipulées intelligemment. Tout d'abord, il faut bien comprendre comment marche le mode SpecialFX. Lorsque StartSpecialFX() est appelé, les rendus se font sur un buffer vide, en mémoire centrale (et non sur la carte video). Une fois que tous les rendus sont effectués StopSpecialFX() est appelé et le contenu du buffer mémoire est transféré dans la mémoire de la carte vidéo pour être affiché. Cela implique deux choses: les rendus doivent être tous fait au même moment, et les opérations d'affichage classiques (DisplaySprite() etc...) doivent être effectués après StopSpecialFX().

Comme toutes les opérations sont faites en mémoire centrale, il est vivement conseillés de charger les sprites qui seront utilisés dans le bloc StartSpecialFX() avec l'option #PB_Sprite_Memory pour accélérer la vitesse d'affichage.

Les commandes qui ont été conçues spécialement pour le mode 'SpecialFX' sont: DisplayAlphaSprite(), DisplaySolidSprite(), DisplayShadowSprite(), DisplayRGBFilter(), DisplayTranslucentSprite(). Les autres commandes sont bien sûr disponibles.

OS Supportés

Windows, Linux


StopSpecialFX()

Syntaxe

StopSpecialFX()
Description
Une fois tous les rendus terminés (voir StartSpecialFX()), cette commande copie le contenu du buffer 'SpecialFX' vers la mémoire vidéo. L'accélération matérielle est à nouveau disponible.

OS Supportés

Windows, Linux


TransparentSpriteColor()

Syntaxe

TransparentSpriteColor(#Sprite, Couleur)
Description
Change la couleur transparente du #Sprite (quand il est affiché avec DisplayTransparentSprite()). RGB() peut être utilisé pour définir la valeur de 'Couleur'. Un tableau représentant les couleurs les plus communes est disponible ici.

La couleur de transparence par défaut est noire (0,0,0), si #PB_Default est utilisé à la place de #Sprite, alors la couleur spécifiée devient la nouvelle couleur transparente par défaut.
Elle sera utilisée par tous les sprites qui seront ultérieurement créés (par LoadSprite(), CreateSprite(), etc...). Note: le changement de la couleur par défaut n'affecte pas la couleur de transparence des sprites dejà chargés ou déjà créés.

OS Supportés

Windows, Linux, MacOS X


UseBuffer()

Syntaxe

UseBuffer(#Sprite)
Description
Change la surface de rendu par défaut (l'ecran) par le #Sprite. Ainsi, toutes les commandes du type DisplaySprite(), DisplayTransparentSprite() etc.. seront appliquées sur le #Sprite. Pour revenir en mode normal (surface écran), il suffit de passer la valeur '-1' comme #Sprite.

OS Supportés

Windows


Sprite3D

PureBasic - Sprite3D

General

La bibliothèque Sprite3D est la base d'un moteur de traitement 3D utilisé pour afficher les sprites 2D en utilisant les nouvelles capacités matérielles 3D comme le zoom en temps-réel, les transformations, les fondus de couleurs (transparence) et plus encore. Pour en savoir plus sur les sprites, lisez la documentation Sprite. Une carte graphique récente est recommandée pour bénéficier de la pleine puissance de ces fonctions (avec accélération des fonctions 3D). Les sprites 3D sont proposés pour réaliser facilement des effets hors du commun, mais il ne faut pas oublier qu'ils sont moins rapides que les sprites classiques et plus restrictifs en termes de taille par exemple. Le support des sprites se fait à partir de DirectX7 ce qui permet d'utiliser le circuit spécialisé accélérateur s'il existe.

Sommaire des commandes

CreateSprite3D
DisplaySprite3D
FreeSprite3D
InitSprite3D
IsSprite3D
RotateSprite3D
Sprite3DBlendingMode
Sprite3DQuality
Start3D
Stop3D
TransformSprite3D
ZoomSprite3D

Exemple

Sprite3D.pb

OS Supportés

Windows, MacOS X

Guide de référence - Index


CreateSprite3D()

Syntaxe

Resultat = CreateSprite3D(#Sprite3D, #Sprite)
Description
Créé un sprite 3D à partir du sprite 2D spécifié. Si #PB_Any est utilisé pour le paramètre '#Sprite3D', le numéro du nouveau sprite3d sera renvoyé dans 'Resultat'. Un sprite 3D est un simple rectangle sur lequel on applique une texture. La texture est en fait un sprite classique chargé avec LoadSprite() en utilisant le mode #PB_Sprite_Texture. La texture doit être un carré de l'une des dimensions suivantes: 16*16, 32*32, 64*64, 128*128 or 256*256. d'autres dimensions peuvent fonctionner selon les cartes graphiques utilisées, mais il y a des limitations. Si 'Resultat' est à 0, alors le sprite 3D ne peut être créé, sinon la création a eu lieu.

Le sprite 2D utilisé pour créer un sprite 3D n'est pas détruit lorsqu'un sprite 3D l'utilise. Un seul sprite 2D peut donc être appelé par un nombre quelconque de sprites 3D.

OS Supportés

Windows, MacOS X


DisplaySprite3D()

Syntaxe

DisplaySprite3D(#Sprite3D, x, y, Transparence)
Description
Affiche le sprite 3D spécifié à la position de coordonnées (x,y). Un paramètre de transparence est utilisé et peut prendre une valeur de la plage 0 à 255. 0 signifie invisible et 255 opaque. Toute valeur de cette plage peut être utilisée. Pour un meilleur rendu, un écran en mode 32 bits est fortement recommandé pour des effets de fondus réguliers.

Pour afficher un sprite avec le support de l'alpha-channel, le sprite qui a servi à la création du sprite 3D doit avoir l'option #PB_Sprite_AlphaBlending.

Start3D() doit être appelé avant cette fonction. Si plusieurs sprites 3D doivent être affichés, il est préférable de les afficher en une fois. Exemple:
  Start3D()
    DisplaySprite3D(1, 100, 100, 128)
    DisplaySprite3D(2, 100, 150, 100)
    ; ...
  Stop3D()

OS Supportés

Windows, MacOS X


FreeSprite3D()

Syntaxe

FreeSprite3D(#Sprite3D)
Description
Libère le sprite 3D spécifié de la mémoire. Le sprite 2D associé n'est pas libéré.

OS Supportés

Windows, MacOS X


InitSprite3D()

Syntaxe

Resultat = InitSprite3D()
Description
Tente d'initialiser l'environnement sprite 3D. Si 'Resultat' est à 0 aucune présence d'un matériel 3D ou d'une émulation n'a pu être trouvée. Il faut appeler InitSprite() avant cette fonction.

OS Supportés

Windows, MacOS X


IsSprite3D()

Syntaxe

Resultat = IsSprite3D(#Sprite3D)
Description
Teste si le #Sprite3D est correctement initialisé. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, MacOS X


RotateSprite3D()

Syntaxe

RotateSprite3D(#Sprite3D, Angle, Mode)
Description
Fait tourner #Sprite3D selon l'angle spécifié. La valeur 'Angle' est dans la plage 0 to 360. La valeur 'Mode' peut prendre l'une des valeurs suivantes:
  0: Toutes les dimensions sont remises aux valeurs d'origine (donc tout zoom ou rotation antérieur n'est pas
     pris en compte). Cela est utile par exemple lorsque l'on affiche plusieurs occurrences d'un même #Sprite3D.
     Chaque, sprite peut avoir son angle propre et s'affiche donc correctement.
  1: Les dimensions/transformations du sprite ne sont pas modifiées. Cela permet d'utiliser la commande
     ZoomSprite3D() avant la commande de rotation mais rend le partage de #Sprite3D plus délicat.

OS Supportés

Windows, MacOS X


Sprite3DBlendingMode()

Syntaxe

Sprite3DBlendingMode(ModeSource, ModeDestination)
Description
Modifie la manière dont un sprite 3D est mixé avec l'arrière plan (lors de l'utilisation de DisplaySprite3D() et du niveau de transparence). Les modes source et destination peuvent prendre une valeur de 1 à 13. Cette commande est à l'usage des programmeurs avancés. Voici la liste des valeurs DirectX correspondantes:
  #D3DBLEND_ZERO            = 1
  #D3DBLEND_ONE             = 2
  #D3DBLEND_SRCCOLOR        = 3
  #D3DBLEND_INVSRCCOLOR     = 4
  #D3DBLEND_SRCALPHA        = 5
  #D3DBLEND_INVSRCALPHA     = 6
  #D3DBLEND_DESTALPHA       = 7
  #D3DBLEND_INVDESTALPHA    = 8
  #D3DBLEND_DESTCOLOR       = 9
  #D3DBLEND_INVDESTCOLOR    = 10
  #D3DBLEND_SRCALPHASAT     = 11
  #D3DBLEND_BOTHSRCALPHA    = 12
  #D3DBLEND_BOTHINVSRCALPHA = 13
Note: la valeur par défaut est Sprite3DBlendingMode(#D3DBLEND_SRCALPHA, #D3DBLEND_INVSRCALPHA).

OS Supportés

Windows


Sprite3DQuality()

Syntaxe

Sprite3DQuality(Qualite)
Description
Modifie le rendu des sprites 3D. 'Qualite' peut avoir l'une des valeurs suivantes:
  0: Aucun filtre (rapide mais médiocre lors des zooms/rotations)
  1: Filtrage bi-linéaire (plus lent mais très net lors des zooms/rotations)

OS Supportés

Windows, MacOS X


Start3D()

Syntaxe

Resultat = Start3D()
Description
Démarre le moteur de traitement 3D et prépare l'affichage des sprites 3D. Cette commande doit être appelée avant d'utiliser DisplaySprite3D() et Stop3D() doit être appelée dès que toutes les opérations de rendu sont terminées. Si 'Resultat' est à 0, l'initialisation a échoué et les commandes sprites 3D ne peuvent être utilisées.

OS Supportés

Windows, MacOS X


Stop3D()

Syntaxe

Stop3D()
Description
Arrête le moteur de traitement 3D. Cette fonction est typiquement appelée dès que le dernier sprite 3D a été traité. Start3D() doit avoir été exécuté avant l'appel de cette commande.

OS Supportés

Windows, MacOS X


TransformSprite3D()

Syntaxe

TransformSprite3D(#Sprite3D, x1, y1, [z1], x2, y2, [z2], x3, y3, [z3], x4, y4, [z4])
Description
Opère une transformation de #Sprite3D avec les nouvelles coordonnées. Cette commande est utilisée pour des transformations en temps réel. Attention, comme un Sprite3D est un double vertex (2 triangles), la transformation peut prendre des formes étranges... Si un des paramètres optionnels 'z' est spécifié, ils doivent être tous spécifiés.

  ;
  ; x1         x2
  ;   ---------
  ;   |      /|
  ;   |    /  |
  ;   |  /    |
  ;   |/      |
  ;   ---------
  ; x4         x3
  ;

OS Supportés

Windows, MacOS X


ZoomSprite3D()

Syntaxe

ZoomSprite3D(#Sprite3D, Largeur, Hauteur)
Description
Effectue un zoom de #Sprite3D aux dimensions indiquées. Si une rotation est requise RotateSprite3D() doit être appelée après ZoomSprite3D().

OS Supportés

Windows, MacOS X


Sound

PureBasic - Sound

General

La bibliothèque sonore du PureBasic permet d'ajouter simplement du son à une application ou à un jeu. Les commandes disponibles sont spécialement optimisées pour tirer le maximum du hardware disponible. Sous Windows 9x/2000/XP, DirectX 7 ou supérieur est nécessaire. Il est néanmoins possible d'utiliser DirectX 3 si l'on utilise le mode de compatibilité Windows NT4.0.

Sommaire des commandes

CatchSound
FreeSound
InitSound
IsSound
LoadSound
PlaySound
SoundFrequency
SoundPan
SoundVolume
StopSound

Exemple

Sound.pb

OS Supportés

Tous

Guide de référence - Index


CatchSound()

Syntaxe

Resultat = CatchSound(#Son, AdresseMemoire [, Longueur])
Description
Charge le son contenu à l'adresse mémoire spécifiée et lui attribue le numéro #Son. Si #PB_Any est utilisé pour le paramètre '#Son', le numéro du nouveau son sera renvoyé dans 'Resultat'. Si Resultat = 0, le chargement a échoué, sinon, le fichier a été correctement chargé et il peut être joué avec la fonction PlaySound(). Avec les fichiers WAV, le paramètre 'Longueur' n'a pas besoin d'être spécifié. La commande suivante permet d'ajouter le support des sons OGG en plus des sons WAV:

UseOGGSoundDecoder(): Le paramètre 'Longueur' est obligatoire pour les sons OGG

Exemple:
  CatchSound(0, ?Music)
  End

  DataSection
    Music: IncludeBinary "Sound.wav"

OS Supportés

Windows, Linux, MacOS X


FreeSound()

Syntaxe

FreeSound(#Son)
Description
Arrête et supprime de la mémoire le fichier #Son précédemment chargé avec la fonction LoadSound() ou CatchSound(). Lorsqu'un fichier son est supprimé, il ne plus être joué.

OS Supportés

Tous


InitSound()

Syntaxe

Resultat = InitSound()
Description
Initialise l'environnement sonore. Si Resultat = 0, aucun son ne peut être joué sur cet ordinateur (carte son occupée, pas de carte son, etc...). Cette fonction doit toujours être appelée avant toute autre fonction de la bibliothèque Sound. Si l'initialisation échoue, il n'est pas nécessaire de désactiver manuellement les fonctions à l'aide d'un test (If ... EndIf), elles seront inactives. Le débogueur quand à lui, suppose que le son est disponible pour le développement et génerera une erreur si InitSound() a echoué et qu'une commande son est utilisée.

Les principales causes d'échec sous Windows sont: DirectX 7 non trouvé ou carte son non détectée. Si le programme doit tourner sous NT4.0, assurez-vous que vous avez coché 'Exécutable compatible NT4.0' dans les options de compilation. Dans ce cas, DirectX 3 est utilisé.

OS Supportés

Tous


IsSound()

Syntaxe

Resultat = IsSound(#Son)
Description
Teste si le #Son est correctement initialisé. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, Linux, MacOS X


LoadSound()

Syntaxe

Resultat = LoadSound(#Son, NomFichier$)
Description
Charge en mémoire le fichier son 'NomFichier$' et lui attribue le numéro #Son. Si #PB_Any est utilisé pour le paramètre '#Son', le numéro du nouveau son sera renvoyé dans 'Resultat'. Si Resultat = 0, le chargement a échoué, sinon, le fichier a été correctement chargé et il peut être joué avec la fonction PlaySound(). La commande suivante permet d'ajouter le support des sons OGG en plus des sons WAVE:

UseOGGSoundDecoder(): Le paramètre 'Longueur' est obligatoire pour les sons OGG

Windows/Linux: Le fichier son peut être au format WAVE (.wav). Les fichiers 8 bits et 16 bits sont supportés, à toutes les fréquences d'échantillonnage.

AmigaOS: Le fichier son doit être au format 8SVX/IFF, un format courant sur Amiga. Seul, les formats 8 bits sont supportés, avec une fréquence de 4000 Hz à 28 000 Hz.

OS Supportés

Tous


PlaySound()

Syntaxe

PlaySound(#Son [, Mode])
Description
Joue le #Son spécifié. Le paramètre 'Mode' est facultatif et peut prendre les valeurs suivantes:

0: Joue le son une seule fois (Valeur par défaut quand 'Mode' est omis)
1: Joue le son en boucle (infini)

OS Supportés

Tous


SoundFrequency()

Syntaxe

SoundFrequency(#Son, Frequence)
Description
Change la fréquence (en Hz), en temps réel, à laquelle est joué le #Son. La nouvelle fréquence devient la nouvelle fréquence par défaut du #Son. Les valeurs valides pour la fréquences vont de 1000 à 100000 Hz.

OS Supportés

Windows, AmigaOS


SoundPan()

Syntaxe

SoundPan(#Son, Stereo)
Description
Change la stéréo du #Son en temps réel. La nouvelle valeur stéréo devient la valeur par défaut pour ce #Son. Les valeurs disponibles vont de -100 (tout le son à gauche) à 100 (tout le son à droite). Si la stéréo est 0, alors le son est joué sur les deux haut-parleurs.

OS Supportés

Windows, MacOS X, AmigaOS


SoundVolume()

Syntaxe

SoundVolume(#Son, Volume)
Description
Change le volume du #Son en temps réel. Le nouveau volume devient la valeur par défaut pour ce #Son. Les valeurs valides vont de 0 (aucun volume) à 100 (volume maximum).

OS Supportés

Tous


StopSound()

Syntaxe

StopSound(#Son)
Description
Arrête l'exécution du #Son (s'il etait en cours de lecture).

OS Supportés

Tous


SoundPlugin

PureBasic - SoundPlugin

General

PureBasic supporte différents formats de fichiers sons grâce à un système de plugins dynamiques. Seul l'encodeur ou le décodeur nécessaire sera intégré au fichier exécutable, réduisant ainsi considérablement sa taille. Par exemple, si vous avez seulement besoin du format OGG, seule la routine concernant ce format sera utilisée. Une autre caractéristique intéressante est l'auto-détection du format de fichier, si plusieurs décodeurs sont utilisés. Les commandes suivantes supportent les plugins sonores: LoadSound(), et CatchSound().

Sommaire des commandes

UseOGGSoundDecoder

Exemple

SoundPlugin.pb

OS Supportés

Windows, Linux, MacOS X

Guide de référence - Index


UseOGGSoundDecoder()

Syntaxe

UseOGGSoundDecoder()
Description
Active le support du format OGG (OGG Vorbis) pour les commandes CatchSound() et LoadSound(). Le format de compression OGG est dit 'destructif', ce qui veut dire que de l'information (non essentielle) est perdue lors du processus de compression, permettant par la même occasion de diminuer considérablement la taille du fichier. C'est actuellement l'un des meilleurs formats de compression de sa catégorie, surpassant de loin le format MP3 classique que ce soit au niveau de la qualité ou de la taille.

OS Supportés

Windows, Linux, MacOS X

SoundPlugin Index


Engine3D

PureBasic - Engine3D

General

PureBasic dispose d'un accès simplifié à OGRE, un moteur 3D OpenSource très performant. Ce choix a été fait car il aurait été dommage de réinventer la roue plutôt que de supporter et de pousser le développement d'un excellent produit déjà disponible.

OGRE est toujours en phase de finition et de nombreuses nouvelles fonctionnalités devraient lui être ajoutées au fur et à mesure. Plus d'informations à propos de ce moteur 3D sont disponible sur: http://www.ogre3d.org. La licence relative à l'usage de OGRE est consultable ici et les sources d'OGRE modifiées pour PureBasic sont téléchargeables ici. N'importe quel type d'applications (commerciales ou non) utilisant OGRE peuvent être créées librement sans aucune redevance (LGPL).

Sommaire des commandes

Add3DArchive
AmbientColor
CheckEntityCollision
CountRenderedTriangles
EnableWorldCollisions
EnableWorldPhysics
Engine3DFrameRate
ExamineWorldCollisions
FirstWorldCollisionEntity
Fog
InitEngine3D
Parse3DScripts
RenderWorld
SecondWorldCollisionEntity
SkyBox
SkyDome
WorldGravity
WorldShadows

OS Supportés

Windows, Linux

Guide de référence - Index


Add3DArchive()

Syntaxe

Add3DArchive(Chemin$, Type)
Description
Ajoute un nouveau chemin relatif dans la liste actuelle des répertoires disponibles pour les fonctions 3D telles que LoadMesh(), LoadTexture() etc... Ce mode spécial de gestion des accès aux données est dû au fait que ces données peuvent se trouver indifféremment sur le disque (répertoire classique) ou dans une archive (fichier .zip). C'est un moyen très flexible d'abstraire cet accès aux données et permet une flexibilité importante. Par exemple il est possible de créer un .zip de tout le répertoire 'Data' où sont stockées les données relatives à l'application 3D et d'y accéder comme si c'était un répertoire classique. Le paramètre 'Type' peut être une des valeurs suivantes:
  #PB_3DArchive_FileSystem  ; Répertoire classique, situé sur une unité disque
  #PB_3DArchive_Zip         ; Fichier .zip (archive compressée)

Exemple:

  Add3DArchive("MyData.zip", #PB_3DArchive_Zip) ; Ajoute le .zip comme un répertoire possible
  LoadTexture(0, "MyTexture.jpg")               ; Charge MyTexture.jpg à partir du zip
  LoadTexture(1, "World\Grass.jpg")             ; Charge Grass.jpg à partir du zip, situé dans le sous répertoire World\

OS Supportés

Windows, Linux


AmbientColor()

Syntaxe

AmbientColor(Couleur)
Description
Change la couleur ambiante du monde 3D. RGB() peut être utilisée pour obtenir facilement la couleur désirée.

OS Supportés

Windows, Linux


CheckEntityCollision()

Syntaxe

Resultat = CheckEntityCollision(#Entity, #Entity2)
Description
Détermine si l'#Entity est entrée en collision avec l'#Entity2. Si le 'Resultat' est 0, les deux entity ne sont pas rentrées en contact. Cette commande doit être appelée après ExamineWorldCollisions().

OS Supportés

Windows, Linux


CountRenderedTriangles()

Syntaxe

Resultat = CountRenderedTriangles()
Description
Renvoie le nombre de triangles utilisés pour créer la derniere image.

OS Supportés

Windows, Linux


EnableWorldCollisions()

Syntaxe

EnableWorldCollisions(Mode)
Description
Si 'Mode' est 0, la gestion des collisions est désactivée (mode par défaut), sinon les collisions sont enregistrées est peuvent être consultées à l'aide de la commande ExamineWorldCollisions(). Les collisions ne fonctionnent uniquement si le moteur physique est activé par EnableWorldPhysics().

OS Supportés

Windows, Linux


EnableWorldPhysics()

Syntaxe

EnableWorldPhysics(Mode)
Description
Active ou désactive le moteur physique dans l'environnement 3D. Si le 'Mode' est 0, le moteur physique est désactivé (mode par défaut), sinon il est activé. Toutes les entity qui ont un body attribué par la commande EntityPhysicBody() seront affectés par le moteur physique. La gestion des collisions entre les différentes entity peuvent être activée avec ExamineWorldCollisions().

OS Supportés

Windows, Linux


Engine3DFrameRate()

Syntaxe

Resultat = Engine3DFrameRate(Type)
Description
Renvoie le nombre d'images par seconde du moteur 3D. 'Type' peut prendre l'une des valeurs suivantes:
  #PB_Engine3D_Current : Nombre d'images par seconde actuel
  #PB_Engine3D_Average : Nombre d'images par seconde moyen depuis que le moteur 3D est lancé
  #PB_Engine3D_Maximum : Nombre d'images par seconde maximum depuis que le moteur 3D est lancé
  #PB_Engine3D_Minimum : Nombre d'images par seconde minimum depuis que le moteur 3D est lancé
  #PB_Engine3D_Reset   : Reinitialise les statistiques (valeurs 'Minimum', 'Maximum' et 'Moyen')

OS Supportés

Windows, Linux


ExamineWorldCollisions()

Syntaxe

ExamineWorldCollisions()
Description
Permet de consulter toutes les collisions entre entity qui sont survenues depuis le dernier appel de cette commande. Pour lister les collisions, utiliser NextWorldCollision(). Les collisions ne fonctionnent uniquement si le moteur physique est démarré à l'aide de EnableWorldPhysics() et que les collisions sont activées avec EnableWorldCollisions(). Pour pouvoir entrer en collision, une entity doit avoir un body associé à l'aide de la commande EntityPhysicBody().

OS Supportés

Windows, Linux


FirstWorldCollisionEntity()

Syntaxe

Entity = FirstWorldCollisionEntity()
Description
Renvoie le numéro de la première #Entity qui est entrée en collision. La commande NextWorldCollision() doit être appelée avant cette commande.

OS Supportés

Windows, Linux


Fog()

Syntaxe

Fog(Couleur, Intensite, DistanceDebut, DistanceFin)
Description
Affiche un effet de brouillard de la couleur spécifiée à une distance 'DistanceDebut' donnée de la caméra. Si 'Intensite' est 0, l'effet de brouillard est supprimé. RGB() peut être utilisée pour obtenir facilement la couleur désirée. 'DistanceDebut' est la distance relative à la caméra à laquelle le brouillard doit apparaître. 'DistanceFin' est la distance relative à la caméra à laquelle le brouillard devient complètement opaque.

OS Supportés

Windows, Linux


InitEngine3D()

Syntaxe

Resultat = InitEngine3D()
Description
Initialise l'environnement nécessaire au fonctionnement du moteur 3D. Vous devez placer cette fonction au début de votre code source si vous souhaitez utiliser les fonctions 3D. Si 'Resultat' = 0, l'initialisation a échoué. Vous devez alors quitter le programme ou annuler tous les appels aux fonctions 3D. Cette fonction tente d'initialiser DirectX 7 (ou +) et de charger la DLL 'Engine3D.dll'. Les causes probables d'un échec sont l'absence de la DLL ou d'une version trop ancienne de DirectX.

OS Supportés

Windows, Linux


Parse3DScripts()

Syntaxe

Parse3DScripts()
Description
Lit tous les fichiers scripts '.materials' d'OGRE trouvés dans les chemins définis avec Add3DArchive(). Cela permet d'utiliser les meshs qui ont des scripts de matières complexes directement en PureBasic. Quand une entity utilisant ce type de mesh sera créée, la constante #PB_Material_None devra être spécifiée pour indiquer que les informations concernant les matières doivent être lues à partir du script (si il a été correctement chargé).

OS Supportés

Windows, Linux


RenderWorld()

Syntaxe

RenderWorld()
Description
Affiche le rendu de la scène 3D sur l'écran courant. Cette commande doit être appelée quand toutes les opérations relatives à la 3D sont terminées. Il est parfaitement possible d'utiliser les fonctions 2D habituelles telles que DisplaySprite() après cette commande, pour afficher des informations en surimpression (note: les Sprites3D ne sont pas supportés pour l'instant).

OS Supportés

Windows, Linux


SecondWorldCollisionEntity()

Syntaxe

Entity = SecondWorldCollisionEntity()
Description
Renvoie le numéro de la seconde #Entity qui est entrée en collision. La commande NextWorldCollision() doit être appelée avant cette commande.

OS Supportés

Windows, Linux


SkyBox()

Syntaxe

Resultat = SkyBox(NomTexture$)
Description
Crée une boîte artificielle à 6 faces située très loin de la caméra pour fermer complètement le monde. Si 'Resultat' est 0, la commande a échouée. Les textures doivent être accessibles dans le chemin géré par Add3DArchive(). Le 'NomTexture$' est la racine des 6 fichiers de texture qui doivent suivre la règle de nommage suivante:
  NomTexture_BK ; Face arrière (BacK)
  NomTexture_FR ; Face avant (FRont)
  NomTexture_DN ; Face du bas (DowN)
  NomTexture_UP ; Face du haut (UP)
  NomTexture_LF ; Face de gauche (LeFt)
  NomTexture_RT ; Face de droite (RighT)

OS Supportés

Windows, Linux


SkyDome()

Syntaxe

Resultat = SkyDome(NomTexture$, Courbure)
Description
Crée un ciel artificiel animé (en forme de dôme) avec la texture spécifiée situé très loin de la caméra. La texture doit être accessible dans le chemin géré par Add3DArchive(). La valeur de courbure indique de quelle manière le ciel doit être courbé (valeur positive ou négative). Si 'Resultat' est 0, la commande a échouée.

OS Supportés

Windows, Linux


WorldGravity()

Syntaxe

Resultat = WorldGravity(Gravity)
Description
Change la gravité du monde 3D, quand le moteur physique est activé avec EnableWorldPhysics(). La valeur par défaut est -9.806, ce qui correspond à la gravité terrestre.

OS Supportés

Windows, Linux


WorldShadows()

Syntaxe

Resultat = WorldShadows(Type)
Description
Change le type d'ombre qui sera appliqué dans le monde 3D. Le paramètre 'Type' peut prendre l'une des valeurs suivantes:
  #PB_Shadow_None      : Aucune ombre ne sera affichée dans le le monde 3D. Cela peut permettre d'économiser beaucoup
                         de temps processeur si les ombres ne sont pas nécessaires (mode par defaut).
  #PB_Shadow_Modulative: Des ombres dites 'modulative' seront affichées pour les entity qui ont le
                         mode 'ombre' activé avec EntityRenderMode() et #PB_Entity_CastShadow.
                         Ce mode est le plus rapide pour afficher des ombres, mais il n'est pas très réaliste car les ombres ainsi projetées
                         ne sont pas translucides.
  #PB_Shadow_Additive  : Des ombres dites 'additives' seront affichées pour les entity qui ont le
                         mode 'ombre' activé avec EntityRenderMode() et #PB_Entity_CastShadow.
                         Ce mode est le plus lent mais aussi le plus réaliste, étant donné que les ombres sont transparentes et s'ajoutent si
                         plusieurs ombres se chevauchent.

OS Supportés

Windows, Linux


Billboard

PureBasic - Billboard

General

Les 'Billboards' sont des surfaces planes rectangulaires (composées de 2 triangles) qui sont toujours orientées face à la caméra. Par exemple, ils sont très utiles pour afficher un grand nombre de petits éléments tels que la pluie, la neige, des arbres, de la végétation etc.. La commande InitEngine3D() doit être appelée avec succès avant de pouvoir utiliser les commandes relatives aux billboards.

Les billboards sont gérés par groupe, et chaque groupe contient ses propres billboards ayant (principalement) une taille commune pour accélérer la gestion d'un grand nombre d'objets.

Sommaire des commandes

AddBillboard
BillboardGroupLocate
BillboardGroupMaterial
BillboardGroupX
BillboardGroupY
BillboardGroupZ
BillboardHeight
BillboardLocate
BillboardWidth
BillboardX
BillboardY
BillboardZ
ClearBillboards
CountBillboards
CreateBillboardGroup
FreeBillboardGroup
HideBillboardGroup
IsBillboardGroup
MoveBillboard
MoveBillboardGroup
RemoveBillboard
ResizeBillboard
RotateBillboardGroup

Exemple

Billboard.pb

OS Supportés

Windows, Linux

Guide de référence - Index


AddBillboard()

Syntaxe

AddBillboard(#Billboard, #BillboardGroup, x, y, z)
Description
Ajoute un billboard à un groupe, à la position spécifiée. Cette position est relative à la position du groupe de billboards dans le monde 3D. Le groupe de billboard aura été préalablement créé à l'aide de la commande CreateBillboardGroup().

Arguments

#Billboard - La valeur unique pour identifier ce billboard.

#BillboardGroup - Numéro du groupe de billboard auquel le nouveau billboard sera attaché.

x - coordonnée en X du nouveau billboard (relative à la position du groupe dans la scène 3D).

y - coordonnée en Y du nouveau billboard (relative à la position du groupe dans la scène 3D).

z - coordonnée en Z du nouveau billboard (relative à la position du groupe dans la scène 3D).

Valeur de retour

Aucune.

OS Supportés

Windows, Linux


BillboardGroupLocate()

Syntaxe

BillboardGroupLocate(#BillboardGroup, x, y, z)
Description
Déplace le groupe de billboard à la nouvelle position spécifiée (position absolue). Pour déplacer de manière relative à la position actuelle un groupe de billboards, utilisez la commande MoveBillboardGroup().

Arguments

#BillboardGroup - Numéro du groupe de billboards à déplacer.

x - Nouvelle coordonnée en X du groupe de billboards.

y - Nouvelle coordonnée en Y du groupe de billboards.

z - Nouvelle coordonnée en Z du groupe de billboards.

Valeur de retour

Aucune.

OS Supportés

Windows, Linux


BillboardGroupMaterial()

Syntaxe

BillboardGroupMaterial(#BillboardGroup, MaterialID)
Description
Affecte une matière à un groupe de billboard. Cette matière sera utilisée par tous les billboards du groupe. Un groupe de billboards ne peut avoir qu'une seule matière affectée à la fois.

Arguments

#BillboardGroup - Numéro du groupe de billboards.

MaterialID - Numéro unique de la matière à assigner au groupe de billboards (et par conséquent aux billboards). La valeur 'MaterialID' peut être facilement récupérée à l'aide de la commnde MaterialID().

Valeur de retour

Aucune.

OS Supportés

Windows, Linux


BillboardGroupX()

Syntaxe

Resultat = BillboardGroupX(#BillboardGroup)
Description
Renvoie la position absolue en X du groupe de billboards dans la scène 3D.

Arguments

#BillboardGroup - Numéro du groupe de billboards.

Valeur de retour

Resultat - La position absolue en X du groupe de billboards dans la scène 3D.

OS Supportés

Windows, Linux


BillboardGroupY()

Syntaxe

Resultat = BillboardGroupY(#BillboardGroup)
Description
Renvoie la position absolue en Y du groupe de billboards dans la scène 3D.

Arguments

#BillboardGroup - Numéro du groupe de billboards.

Valeur de retour

Resultat - La position absolue en Y du groupe de billboards dans la scène 3D.

OS Supportés

Windows, Linux


BillboardGroupZ()

Syntaxe

Resultat = BillboardGroupZ(#BillboardGroup)
Description
Renvoie la position absolue en Z du groupe de billboards dans la scène 3D.

Arguments

#BillboardGroup - Numéro du groupe de billboards.

Valeur de retour

Resultat - La position absolue en Z du groupe de billboards dans la scène 3D.

OS Supportés

Windows, Linux


BillboardHeight()

Syntaxe

Result = BillboardHeight(#Billboard, #BillboardGroup)
Description
Permet de retrouver la hauteur d'un billboard particulier au sein d'un groupe particulier. La hauteur est exprimée dans la même unité que celle utilisée par le monde 3D.

Arguments

#Billboard - Numéro du billboard.

#BillboardGroup - Numéro du groupe de billboards.

Valeur de retour

Result - La hauteur du billboard.

OS Supportés

Windows, Linux


BillboardLocate()

Syntaxe

BillboardLocate(#Billboard, #BillboardGroup, x, y, z)
Description
Déplace un billboard de manière absolue à la nouvelle position définie par les coordonnées (x,y,z). La position réelle du billboard dans le monde 3D est relative à la position du groupe de billboards. Pour déplacer un billboard par rapport à sa position actuelle, utilisez la commande MoveBillboard().

Arguments

#Billboard - Numéro du billboard à déplacer.

#BillboardGroup - Numéro du groupe de billboards qui contient le billboard à déplacer.

x - La nouvelle position en X du billboard.

y - La nouvelle position en Y du billboard.

z - La nouvelle position en Z du billboard.

Valeur de retour

Aucune.

OS Supportés

Windows, Linux


BillboardWidth()

Syntaxe

Resultat = BillboardWidth(#Billboard, #BillboardGroup)
Description
Permet de retrouver la largeur d'un billboard particulier au sein d'un groupe particulier. La largeur est exprimée dans la même unité que celle utilisée par le monde 3D.

Arguments

#Billboard - Numéro du billboard.

#BillboardGroup - Numéro du groupe de billboards.

Valeur de retour

Resultat - La largeur du billboard.

OS Supportés

Windows, Linux


BillboardX()

Syntaxe

Resultat = BillboardX(#Billboard, #BillboardGroup)
Description
Permet de retrouver la position en X du billboard au sein du groupe de billboard spécifié. Cette position est relative au groupe de billboards.

Arguments

#Billboard - Numéro du billboard.

#BillboardGroup - Numéro du groupe de billboards.

Valeur de retour

Resultat - La position en X du billboard.

OS Supportés

Windows, Linux


BillboardY()

Syntaxe

Resultat = BillboardY(#Billboard, #BillboardGroup)
Description
Permet de retrouver la position en Y du billboard au sein du groupe de billboard spécifié. Cette position est relative au groupe de billboards.

Arguments

#Billboard - Numéro du billboard.

#BillboardGroup - Numéro du groupe de billboards.

Valeur de retour

Resultat - La position en Y du billboard.

OS Supportés

Windows, Linux


BillboardZ()

Syntaxe

Resultat = BillboardZ(#Billboard, #BillboardGroup)
Description
Permet de retrouver la position en Z du billboard au sein du groupe de billboard spécifié. Cette position est relative au groupe de billboards.

Arguments

#Billboard - Numéro du billboard.

#BillboardGroup - Numéro du groupe de billboards.

Valeur de retour

Resultat - La position en Z du billboard.

OS Supportés

Windows, Linux


ClearBillboards()

Syntaxe

ClearBillboards(#BillboardGroup)
Description
Détruit tous les billboards contenus dans le groupe spécifié.

Arguments

#BillboardGroup - Numéro du groupe de billboards.

Valeur de retour

Aucune.

OS Supportés

Windows, Linux


CountBillboards()

Syntaxe

Resultat = CountBillboards(#BillboardGroup)
Description
Renvoie le nombre de billboards contenus dans le groupe spécifié.

Arguments

#BillboardGroup - Numéro du groupe de billboards.

Valeur de retour

Resultat - Le nombre de billboards contenus dans le groupe spécifié.

OS Supportés

Windows, Linux


CreateBillboardGroup()

Syntaxe

Resultat = CreateBillboardGroup(#BillboardGroup, MaterialID, LargeurBillboard, HauteurBillboard [, x, y, z])
Description
Créé un nouveau groupe de billboards vide. Si #PB_Any est utilisé pour le paramètre '#BillboardGroup', le numéro du groupe sera renvoyé dans 'Resultat'. La matière specifiée par 'MaterialID' sera affectée au groupe et par conséquent utilisée par tous les billboards que le groupe contiendra. La valeur 'MaterialID' peut être facilement récupérée à l'aide de la commnde MaterialID().

La taille par défaut des futurs billboard est définie par les paramètres 'LargeurBillboard' et 'HauteurBillboard'. Bien que la taille de chaque futur billboard pourra être definie indépendamment à l'aide de la commande ResizeBillboard(), il est important de garder à l'esprit que des problèmes de performances peuvent très rapidement apparaître si tous les billboards d'un même groupe n'ont pas la même taille.

Les paramètres optionnels 'x,y,z' permettent de spécifier la position du groupe de billboard dans le monde 3D.

Si le #BillboardGroup est déjà utilisé, il sera automatiquement détruit (ainsi que tous ses billboards) et remplacé par le nouveau.

Arguments

#BillboardGroup - Numéro du groupe de billboard qui sera utilisé par les autres commandes de cette bibliothèque pour agir sur ce groupe.

MaterialID - L'ID de la matière qui sera utilisée par tous les billboards qui auront été ajouté au groupe à l'aide de la commande AddBillboard(). La valeur 'MaterialID' peut être facilement récupérée à l'aide de la commande MaterialID().

LargeurBillboard - La largeur par défaut d'un billboard lorsqu'il est ajouté au groupe.

HauteurBillboard - La hauteur par défaut d'un billboard lorsqu'il est ajouté au groupe.

Les trois paramètres suivants sont optionnels.

x - La positon absolue en X du nouveau groupe de billboard, dans le monde 3D.

y - La positon absolue en Y du nouveau groupe de billboard, dans le monde 3D.

z - La positon absolue en Z du nouveau groupe de billboard, dans le monde 3D.

Valeur de retour

Resultat - Renvoie zéro si le groupe n'a pas pu être créé, ou une valeur non nulle sinon.

OS Supportés

Windows, Linux


FreeBillboardGroup()

Syntaxe

FreeBillboardGroup(#BillboardGroup)
Description
Détruit le groupe de billboard spécifié, ainsi que tous les billboards qu'il contenait. Un groupe détruit ne doit plus être utilisé par les commandes relatives aux groupes de billboards.

Arguments

#BillboardGroup - Numéro du groupe de billboards à détruire.

Valeur de retour

Aucune.

OS Supportés

Windows, Linux


HideBillboardGroup()

Syntaxe

HideBillboardGroup(#BillboardGroup, Etat)
Description
Cache ou affiche un groupe de billboards (y compris tous les billboards qu'il contient).

Arguments

#BillboardGroup - Numéro du groupe de billboards à afficher ou à cacher.

Etat - Le nouvel état du groupe de billboards. Il peut prendre l'une des valeurs suivantes:
  1: Le groupe de billboards est caché.
  0: Le groupe de billboards est affiché.

Valeur de retour

Aucune.

OS Supportés

Windows, Linux


IsBillboardGroup()

Syntaxe

Resultat = IsBillboardGroup(#BillboardGroup)
Description
Teste si le #BillboardGroup est correctement initialisé. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, Linux


MoveBillboard()

Syntaxe

MoveBillboard(#Billboard, #BillboardGroup, x, y, z)
Description
Déplace un billboard à l'intérieur d'un groupe de manière relative à sa position actuelle. Pour effectuer un déplacement absolu, il convient d'utiliser la commande BillboardLocate().

Arguments

#Billboard - Numéro du billboard.

#BillboardGroup - Numéro du groupe de billboards.

x - Valeur du déplacement en X relatif à la position actuelle du billboard.

y - Valeur du déplacement en Y relatif à la position actuelle du billboard.

z - Valeur du déplacement en Z relatif à la position actuelle du billboard.

Valeur de retour

Aucune.

OS Supportés

Windows, Linux


MoveBillboardGroup()

Syntaxe

MoveBillboardGroup(#BillboardGroup, x, y, z)
Description
Déplace un groupe de billboards de manière relative à sa position actuelle. Pour effectuer un déplacement absolu, il convient d'utiliser la commande BillboardGroupLocate().

Arguments

#BillboardGroup - Numéro du groupe de billboards à déplacer.

x - Valeur du déplacement en X relatif à la position actuelle du groupe de billboards.

y - Valeur du déplacement en Y relatif à la position actuelle du groupe de billboards.

z - Valeur du déplacement en Z relatif à la position actuelle du groupe de billboards.

Valeur de retour

Aucune.

OS Supportés

Windows, Linux


RemoveBillboard()

Syntaxe

RemoveBillboard(#Billboard, #BillboardGroup)
Description
Détruit le billboard spécifié d'un groupe de billboards.

Arguments

#Billboard - Numéro du billboard à détruire.

#BillboardGroup - Numéro du groupe de billboards qui contient le billboard à détruire.

Valeur de retour

Aucune.

OS Supportés

Windows, Linux


ResizeBillboard()

Syntaxe

ResizeBillboard(#Billboard, #BillboardGroup, Largeur, Hauteur)
Description
Redimensionne un billboard en accord avec les paramètres 'Largeur' et 'Hauteur'. A noter que même s'il est possible de redimensionner chaque billboard d'un groupe séparément pour des raisons de flexibilité, il peut y avoir de lourdes conséquences au niveau des perfomances si la taille utilisée n'est pas celle par défaut (spécifié par CreateBillboardGroup()).

Arguments

#Billboard - Numéro du billboard à redimensionner.

#BillboardGroup - Numéro du groupe de billboards qui contient le billboard à redimensionner.

Largeur - La nouvelle largeur du billboard.

Hauteur - La nouvelle hauteur du billboard.

Valeur de retour

Aucune.

OS Supportés

Windows, Linux


RotateBillboardGroup()

Syntaxe

RotateBillboardGroup(#BillboardGroup, x, y, z)
Description
Change l'inclinaison du groupe de billboards en accord avec les paramètres x,y,z. C'est une rotation relative, basée sur l'inclinaison actuelle du billboard. Tous les angles sont spécifiés en degrés.

Arguments

#BillboardGroup - Numéro du groupe de billboards.

x - Valeur à ajouter à l'angle des X.

y - Valeur à ajouter à l'angle des Y.

z - Valeur à ajouter à l'angle des Z.

Valeur de retour

Aucune.

OS Supportés

Windows, Linux


Camera

PureBasic - Camera

General

Les caméras sont utilisées pour se déplacer dans le monde en 3D. Il est possible de les utiliser comme des caméras réelles avec lesquelles on peut se déplacer, effectuer des rotations, changer l'angle de vision etc. Au moins une caméra est nécessaire pour effecter un rendu du monde 3D sur un écran, mais plusieurs caméras peuvent être utilisées en même temps pour afficher le monde sous des angles de vue différents (rétroviseurs , split-screen...). La commande InitEngine3D() doit être appelée avec succès avant de pouvoir utiliser les commandes relatives aux caméras.

Sommaire des commandes

CameraBackColor
CameraFOV
CameraLocate
CameraLookAt
CameraProjection
CameraRange
CameraRenderMode
CameraX
CameraY
CameraZ
CreateCamera
FreeCamera
IsCamera
MoveCamera
RotateCamera

Exemple

Camera.pb

OS Supportés

Windows, Linux

Guide de référence - Index


CameraBackColor()

Syntaxe

CameraBackColor(#Camera, Couleur)
Description
Change la couleur de fond de la #Camera. Quand une nouvelle camera est créée, son fond est transparent pour permettre de mixer facilement un fond 2D avec une scène 3D. RGB() peut être utilisée pour obtenir une couleur valide. Si la couleur spécifié est '-1', alors le fond est considéré comme transparent.

OS Supportés

Windows, Linux


CameraFOV()

Syntaxe

CameraFOV(#Camera, Angle)
Description
Modifie l'angle de vision de la caméra (FOV: Field Of Vision) pour permettre une vue plus ou moins large de la scène. La valeur de l'angle est exprimé en degrés. Un angle supérieur à 90° donnera un effet de type grand-angle (ou fish-eye). Un angle inférieur à 30° donnera un effet rétréci (téléscopique) à la scène. Les valeurs 'normales' sont comprises entre 45° et 60°.

OS Supportés

Windows, Linux


CameraLocate()

Syntaxe

CameraLocate(#Camera, x, y, z)
Description
Change la position absolue de la #Camera dans le monde 3D.

OS Supportés

Windows, Linux


CameraLookAt()

Syntaxe

CameraLookAt(#Camera, x, y, z)
Description
Modifie l'angle de rotation de la #Camera de telle sorte qu'elle se tourne vers le point x,y,z. La position de la #Camera n'est pas modifiée.

OS Supportés

Windows, Linux


CameraProjection()

Syntaxe

CameraProjection(#Camera, Mode)
Description
Change le mode projection utilisé par la #Camera. Le paramètre 'Mode' peut prendre une des valeurs suivantes:
  #PB_Camera_Perspective : Rend la scène en tenant compte de la perspective
  #PB_Camera_Orthographic: Rend la scène sans perspective (plat, pas de profondeur)

OS Supportés

Windows, Linux


CameraRange()

Syntaxe

CameraRange(#Camera, Proche, Limite)
Description
Modifie le champ de perception de la camera. 'Proche' indique la distance la plus proche de la caméra à partir de laquelle la scène sera rendue. 'Limite' indique la distance limite jusqu'à laquelle la scène sera rendue.

OS Supportés

Windows, Linux


CameraRenderMode()

Syntaxe

CameraRenderMode(#Camera, RenderMode)
Description
Change le mode de rendu de la #Camera. Le paramètre 'RenderMode' peut prendre une des valeurs suivantes:
  #PB_Camera_Plot     : Rend la scène en mode points (seuls les sommets des objets sont visibles)
  #PB_Camera_Wireframe: Rend la scène en mode line (seules les triangles des objets sont visibles)
  #PB_Camera_Textured : Rend la scène avec un maximum de détails (textures, transparence etc..)
Quand une caméra est créée avec CreateCamera(), le mode de rendu par défaut est #PB_Camera_Textured.

OS Supportés

Windows, Linux


CameraX()

Syntaxe

Resultat = CameraX(#Camera)
Description
Renvoie la position en 'x' de la #Camera dans le monde 3D.

OS Supportés

Windows, Linux


CameraY()

Syntaxe

Resultat = CameraY(#Camera)
Description
Renvoie la position en 'y' de la #Camera dans le monde 3D.

OS Supportés

Windows, Linux


CameraZ()

Syntaxe

Resultat = CameraZ(#Camera)
Description
Renvoie la position en 'z' de la #Camera dans le monde 3D.

OS Supportés

Windows, Linux


CreateCamera()

Syntaxe

Resultat = CreateCamera(#Camera, x, y, Largeur, Hauteur)
Description
Crée une nouvelle #Camera sur l'écran courant aux coordonnées x,y de dimensions 'Largeur' et 'Hauteur'. Si #PB_Any est utilisé pour le paramètre '#Camera', le numéro de la nouvelle camera sera renvoyé dans 'Resultat'.

Au contraire des autres commandes graphiques, les coordonnées et les dimensions ne sont pas exprimées en pixels mais en pourcentages, de 0 à 100 (les nombres flottants peuvent être utilisés pour des placements plus précis). Cela peut sembler bizarre, mais les applications 3D se doivent de faire abstraction de leur résolution, et il est donc préférable de raisonner en pourcentages plutôt qu'en pixels. Ainsi, la taille d'une caméra en 640*480 prendra la même dimension sur l'écran qu'en 1600*1200. Si la #Camera était déjà créée, elle est automatiquement effacée et remplacée par la nouvelle.

Les caméras peuvent se chevaucher. Il est par exemple possible de créer une caméra principale qui prend tout l'écran et d'afficher une camera plus petite a l'intérieure de la première. Pour arriver à ce résultat, l'ordre de création est très important: les caméras destinées à être affichées en sur-impression doivent être créées après les autres.

Exemple:
  CreateCamera(0, 0, 0, 100, 100) ; Crée une caméra qui prend tout l'écran

  CreateCamera(0, 0,  0, 100, 50) ; Crée une caméra qui ne prend que 50% de la hauteur (effet Split-Screen)
  CreateCamera(1, 0, 50, 100, 50) ; Crée la deuxieme caméra de 50% de hauteur, mais dans la partie basse de l'écran

OS Supportés

Windows, Linux


FreeCamera()

Syntaxe

FreeCamera(#Camera)
Description
Supprime la #Camera précédemment créée avec la commande CreateCamera(). Cette #Camera ne peut plus être utilisée.

OS Supportés

Windows, Linux


IsCamera()

Syntaxe

Resultat = IsCamera(#Camera)
Description
Teste si la #Camera est correctement initialisée. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, Linux


MoveCamera()

Syntaxe

MoveCamera(#Camera, x, y, z)
Description
Déplace la #Camera dans le monde 3D en fonction des valeurs x,y,z spécifiées. Le déplacement est relatif à la position actuelle de la #Camera. Pour effectuer un déplacement absolu, il convient d'utiliser la commande CameraLocate().

OS Supportés

Windows, Linux


RotateCamera()

Syntaxe

RotateCamera(#Camera, x, y, z)
Description
Effectue une rotation de la #Camera en fonction des valeurs x,y,z spécifiées. La rotation est relative à l'angle actuel de la #Camera.

OS Supportés

Windows, Linux


Entity

PureBasic - Entity

General

Les 'Entities' sont des objets composés d'une mesh et d'une matière pouvant être déplacées et transformées en temps réel. Il est possible de partager la même Mesh entre plusieurs Entities tout en utilisant une matière différente pour chaque Entity, réduisant ainsi la consommation mémoire et l'utilisation du processeur. InitEngine3D() doit être appelé avec succès avant de pouvoir utiliser les commandes relatives aux Entitys.

Sommaire des commandes

AnimateEntity
CopyEntity
CreateEntity
EntityAnimationLength
EntityLocate
EntityMaterial
EntityPhysicBody
EntityRenderMode
EntityX
EntityY
EntityZ
FreeEntity
GetEntityAnimationTime
GetEntityFriction
GetEntityMass
HideEntity
IsEntity
MoveEntity
ResizeEntity
RotateEntity
ScaleEntity
SetEntityAnimationTime
SetEntityFriction
SetEntityMass

Exemple

Entity.pb

OS Supportés

Windows, Linux

Guide de référence - Index


AnimateEntity()

Syntaxe

AnimateEntity(#Entity, NomAnimation$)
Description
Change l'animation actuelle de l'#Entity par l'animation spécifiée par 'NomAnimation$'. Les animations sont stockées dans les Meshs et sont basées sur un skeleton (squelette) stoqué dans un fichier séparé (.skeleton). Note: le paramètre "NomAnimation$" est sensible aux miniscules/majuscules, par exemple "Walk" sera différent de "walk".

OS Supportés

Windows, Linux


CopyEntity()

Syntaxe

Resultat = CopyEntity(#Entity, #NouvelleEntity)
Description
Crée une #NouvelleEntity qui est l'exact copie de l'#Entity. Si #PB_Any est utilisé pour le paramètre '#NouvelleEntity', le numéro de la nouvelle entity sera renvoyé dans 'Resultat'. Tous ses attributs sont dupliqués. Si le 'Resultat' est 0, alors la copie a échouée. Si la #NouvelleEntity était déjà créée, elle est automatiquement supprimée et remplacée par la nouvelle.

OS Supportés

Windows, Linux


CreateEntity()

Syntaxe

Resultat = CreateEntity(#Entity, MeshID, MaterialID, [x, y, z])
Description
Crée une nouvelle #Entity utilisant la Mesh et la Matière spécifiée. Si #PB_Any est utilisé pour le paramètre '#Entity', le numéro de la nouvelle entity sera renvoyé dans 'Resultat'. Les valeurs 'MeshID' et 'MaterialID' peuvent être facilement obtenues a l'aide de MeshID() et MaterialID(). Si la commande Parse3DScripts() a été utilisée, la constante #PB_Material_None peut être utilisé comme valeur pour le paramètre 'MaterialID', pour prendre en comptes les matières du script '.material' associé à la mesh. Les paramètres facultatifs 'x', 'y' et 'z' peuvent être spécifiés pour indiquer la position de l'Entity dans le monde lors de sa création.

Si 'Resultat' est 0, l'Entity n'a pas pu être créée. Si l'#Entity était déjà créée, elle est automatiquement supprimée et remplacée par la nouvelle.

OS Supportés

Windows, Linux


EntityAnimationLength()

Syntaxe

Duree.f = EntityAnimationLength(#Entity)
Description
Renvoie la durée de l'animation actuellement utilisée par l'#Entity.

OS Supportés

Windows, Linux


EntityLocate()

Syntaxe

EntityLocate(#Entity, x, y, z)
Description
Change la position absolue de l'#Entity dans le monde 3D.

OS Supportés

Windows, Linux


EntityMaterial()

Syntaxe

EntityMaterial(#Entity, MaterialID)
Description
Assigne une matière à l'#Entity. Si une matière était déjà assignée à l'#Entity, alors elle est remplacée. 'MaterialID' est l'identifiant de la matière et peut être facilement obtenu par la commande MaterialID().

OS Supportés

Windows, Linux


EntityPhysicBody()

Syntaxe

EntityPhysicBody(#Entity, Type)
Description
Crée ou change le type de body associé à l'#Entity. Pour avoir un effet, le moteur physique doit être activé à l'aide de la commande EnableWorldPhysics().

Pour pouvoir avoir ses collisions gérées par le moteur physique, une entity doit avoir un body. En fait, seul le body est connu du moteur physique et toutes les calculs lors des interactions entre entity sont faites à partir de ce body. Le 'Type' de body peut être une des constantes suivantes:
  #PB_Entity_None       : Aucun body associé à l'entity (mode par défaut).
  #PB_Entity_StaticBody : Le body est statique, c'est à dire que la mesh ne peut pas être animée.
                          Ce mode permet des collisions très précises, car elles sont faites par rapport aux triangles
                          qui compose la mesh. Les collisions entre body static et les autres types de body
                          (sphere, box etc.) sont très rapides, mais entre deux body static, cela devient très lent.
                          C'est le type de body parfait pour utiliser une mesh comme un sol.
  #PB_Entity_BoxBody    : Une boîte 'virtuelle' englobant totalement l'entity
                          est utilisée pour gérer les collisions entre les autres entitys.
  #PB_Entity_SphereBody : Une sphère 'virtuelle' englobant totalement l'entity
                          est utilisée pour gérer les collisions entre les autres entitys.

OS Supportés

Windows, Linux


EntityRenderMode()

Syntaxe

EntityRenderMode(#Entity, Mode)
Description
Change le mode de rendu de l'#Entity.

Le paramètre 'Mode' peut être une combinaison (en utilisant l'opérateur '|') des constantes suivantes:
  #PB_Entity_Solid      : L'entity est affichée en mode solide, avec ses textures (mode par défaut).
  #PB_Entity_Wireframe  : L'entity est affichée en mode ligne (des lignes reliant chaque sommet).
  #PB_Entity_Plot       : L'entity est affichée en mode point (un point par sommet).
  #PB_Entity_CastShadow : L'entity projette des ombres si WorldShadows() est activé (mode par défaut).

OS Supportés

Windows, Linux


EntityX()

Syntaxe

Resultat = EntityX(#Entity)
Description
Renvoie la position en 'x' de l'#Entity dans le monde 3D.

OS Supportés

Windows, Linux


EntityY()

Syntaxe

Resultat = EntityY(#Entity)
Description
Renvoie la position en 'y' de l'#Entity dans le monde 3D.

OS Supportés

Windows, Linux


EntityZ()

Syntaxe

Resultat = EntityZ(#Entity)
Description
Renvoie la position en 'z' de l'#Entity dans le monde 3D.

OS Supportés

Windows, Linux


FreeEntity()

Syntaxe

FreeEntity(#Entity)
Description
Supprime l'#Entity précédemment créée à l'aide de la commande LoadEntity(). Cette #Entity ne peut plus être utilisée.

OS Supportés

Windows, Linux


GetEntityAnimationTime()

Syntaxe

Position.f = GetEntityAnimationTime(#Entity)
Description
Retourne la position en unité de temps de l'animation actuelle de l'#Entity. Cette position peut être changée manuellement à l'aide de la commande SetEntityAnimationTime().

OS Supportés

Windows, Linux


GetEntityFriction()

Syntaxe

Friction.f = GetEntityFriction(#Entity)
Description
Renvoie la valeur de la friction appliquée à l'#Entity. Pour avoir un effet, le moteur physique doit être activé à l'aide de la commande EnableWorldPhysics().

La commande SetEntityMass() affecte également la friction de l'entity.

OS Supportés

Windows, Linux


GetEntityMass()

Syntaxe

Mass.f = GetEntityMass(#Entity)
Description
Renvoie la masse de l'#Entity. Pour avoir un effet, le moteur physique doit être activé à l'aide de la commande EnableWorldPhysics(). La commande WorldGravity() peut être utilisée pour affecter le comportement de la masse dans le monde 3D.

OS Supportés

Windows, Linux


HideEntity()

Syntaxe

HideEntity(#Entity, Etat)
Description
Affiche ou cache une #Entity. 'Etat' peut prend une des valeurs suivantes:
  0: l'#Entity est affichée
  1: l'#Entity est cachée

OS Supportés

Windows, Linux


IsEntity()

Syntaxe

Resultat = IsEntity(#Entity)
Description
Teste si l'#Entity est correctement initialisée. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, Linux


MoveEntity()

Syntaxe

MoveEntity(#Entity, x, y, z)
Description
Déplace l'#Entity dans le monde 3D en fonction des valeurs x,y,z spécifiées. Le déplacement est relatif à la position actuelle de l'#Entity. Pour effectuer un déplacement absolu, il convient d'utiliser la commande EntityLocate().

OS Supportés

Windows, Linux


ResizeEntity()

Syntaxe

ResizeEntity(#Entity, x, y, z)
Description
Change la taille absolue de l'#Entity.

OS Supportés

Windows, Linux


RotateEntity()

Syntaxe

RotateEntity(#Entity, x, y, z)
Description
Effectue une rotation absolue de l'#Entity en fonction des valeurs x,y,z spécifiées.

OS Supportés

Windows, Linux


ScaleEntity()

Syntaxe

ScaleEntity(#Entity, x, y, z)
Description
Change les dimensions de l'#Entity de manière relative. Les dimensions de l'#Entity vont être multipliées par les valeurs x,y,z spécifiées pour obtenir la nouvelle taille. Pour effectuer un redimensionnement absolu de l'#Entity, il convient d'utiliser la commande ResizeEntity().

Exemple:

  ScaleEntity(0, 2, 2, 2) ; Double la taille de la Entity
  ScaleEntity(0, 1, 1, 1) ; Ne change pas la taille de la Entity (multiplication par '1')
  ScaleEntity(0, 3, 1, 1) ; Change la taille en 'x': 3 fois plus grande.

OS Supportés

Windows, Linux


SetEntityAnimationTime()

Syntaxe

SetEntityAnimationTime(#Entity, Position)
Description
Change manuellement la position actuelle dans l'animation de l'#Entity. La position actuelle peut être retrouvée en utilisant la commande GetEntityAnimationTime().

OS Supportés

Windows, Linux


SetEntityFriction()

Syntaxe

SetEntityFriction(#Entity, Friction)
Description
Change la valeur de la friction de l'#Entity. Cela affecte la réaction de l'#Entity lorsqu'elle entre en collision avec une autre entity: si la friction est élevée, alors l'entity ne glissera pas beaucoup. Pour avoir un effet, le moteur physique doit être activé à l'aide de la commande EnableWorldPhysics().

La commande SetEntityMass() affecte également la friction de l'entity.

OS Supportés

Windows, Linux


SetEntityMass()

Syntaxe

SetEntityMass(#Entity, Mass)
Description
Change la masse de l'#Entity. Pour avoir un effet, le moteur physique doit être activé à l'aide de la commande EnableWorldPhysics(). La commande WorldGravity() peut être utilisée pour affecter le comportement de la masse dans le monde 3D.

OS Supportés

Windows, Linux


Light

PureBasic - Light

General

Les lumières sont des composantes essentielles d'un monde 3D. Comme dans le monde réel, il est possible de créer des lumières dynamiques et de modifier leurs attributs tels que la couleur, la luminosité, etc. InitEngine3D() doit être appelé avec succès avant de pouvoir utiliser les commandes relatives aux lumières.

Sommaire des commandes

CopyLight
CreateLight
FreeLight
HideLight
IsLight
LightColor
LightLocate
LightSpecularColor
MoveLight

Exemple

Light.pb

OS Supportés

Windows, Linux

Guide de référence - Index


CopyLight()

Syntaxe

Resultat = CopyLight(#Lumiere, #NouvelleLumiere)
Description
Crée une #NouvelleLumiere qui est l'exact copie de la #Lumiere. Si #PB_Any est utilisé pour le paramètre '#NouvelleLumiere', le numéro de la nouvelle lumière sera renvoyé dans 'Resultat'. Tous les attributs de de la #Lumiere (couleur, position, ...) sont dupliqués. Si le 'Resultat' est 0, alors la copie a échouée.

Note: si la #NouvelleLumiere est déjà créée, elle est automatiquement supprimée et remplacée par la nouvelle.

OS Supportés

Windows, Linux


CreateLight()

Syntaxe

CreateLight(#Lumiere, Couleur [, x, y, z])
Description
Crée une nouvelle lumière '#Lumiere' de la couleur spécifiée. Si #PB_Any est utilisé pour le paramètre '#Lumiere', le numéro de la nouvelle lumière sera renvoyé dans 'Resultat'. RGB() peut être utilisée pour obtenir facilement la couleur désirée. La nouvelle #Lumiere est créée par défaut à la position 0,0,0. Si les paramètres x,y,z sont spécifiés, la #lumière sera créée directement à la position indiquée. Si la #Lumiere était déjà créée, elle est automatiquement supprimée et remplacée par la nouvelle.

Exemple:
  CreateLight(0, RGB(255,0,0)) ; Crée une lumière rouge

  CreateLight(1, RGB(0,255,0),  0, 100.7, 50) ; Crée une lumière verte à la position (0, 100.7, 50)

OS Supportés

Windows, Linux


FreeLight()

Syntaxe

FreeLight(#Lumiere)
Description
Supprime la #Lumiere précédemment créée à l'aide des commandes CreateLight() ou CopyLight(). Cette #Lumiere ne peut plus être utilisée.

OS Supportés

Windows, Linux


HideLight()

Syntaxe

HideLight(#Lumiere, Etat)
Description
Affiche ou cache une #Lumière. 'Etat' peut prend une des valeurs suivantes:
  0: la #Lumière est affichée
  1: la #Lumière est cachée

OS Supportés

Windows, Linux


IsLight()

Syntaxe

Resultat = IsLight(#Lumiere)
Description
Teste si la #Lumiere est correctement initialisée. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, Linux


LightColor()

Syntaxe

LightColor(#Lumiere, Couleur)
Description
Change la couleur de la #Lumière. RGB() peut être utilisée pour obtenir facilement la couleur désirée.

OS Supportés

Windows, Linux


LightLocate()

Syntaxe

LightLocate(#Lumiere, x, y, z)
Description
Change la position absolue de la #Lumière dans le monde 3D.

OS Supportés

Windows, Linux


LightSpecularColor()

Syntaxe

LightSpecularColor(#Lumiere, Couleur)
Description
Change la couleur spéculaire de la #Lumière. RGB() peut être utilisée pour obtenir facilement la couleur désirée.

OS Supportés

Windows, Linux


MoveLight()

Syntaxe

MoveLight(#Lumiere, x, y, z)
Description
Déplace la #Lumière dans le monde 3D en fonction des valeurs x,y,z spécifiées. Le déplacement est relatif à la position actuelle de la #Lumière. Pour effectuer un déplacement absolu, il convient d'utiliser la commande LightLocate().

OS Supportés

Windows, Linux


Material

PureBasic - Material

General

Les matières sont composées de une ou plusieurs textures et parfois de couleurs. Elles sont utilisées par les autres objets 3D tels que les 'Entity', 'Billboards' et les 'Particules' pour leur donner une matière (principalement une texture). Chaque matière regroupe un grand nombre de propriétés tel que l'éclairage, la couleur spéculaire et de réfraction, etc. pour permettre à une matière de ressembler à des revêtements complexes comme le verre, l'eau, le bois... InitEngine3D() doit être correctement initialisé avant de pouvoir utiliser ces commandes.

Sommaire des commandes

AddMaterialLayer
CopyMaterial
CountMaterialLayers
CreateMaterial
DisableMaterialLighting
FreeMaterial
IsMaterial
MaterialAmbientColor
MaterialBlendingMode
MaterialDiffuseColor
MaterialFilteringMode
MaterialID
MaterialShadingMode
MaterialSpecularColor
RemoveMaterialLayer
RotateMaterial
ScrollMaterial

Exemple

Material.pb

OS Supportés

Windows, Linux

Guide de référence - Index


AddMaterialLayer()

Syntaxe

Resultat = AddMaterialLayer(#Matiere, TextureID [, Mode])
Description
Ajoute une nouvelle couche à la matière et lui affecte la texture spécifiée. Un 'TextureID' valide est obtenu facilement à l'aide de la commande TextureID().

Le paramètre 'Mode' est facultatif et peut prendre une des valeurs suivantes:
  #PB_Material_Add        : Combine la nouvelle couche en ajoutant (Add) la valeur des pixels (donc le noir est complètement transparent)
  #PB_Material_Replace    : Combine la nouvelle couche en remplaçant (Replace) les pixels
  #PB_Material_AlphaBlend : Utilise le canal alpha de la texture (la texture doit être en TGA ou PNG) et la combine avec la couche précédente
  #PB_Material_Modulate   : Combine la nouvelle couche sur la précédente en modulant la valeur des pixels (Modulate)

OS Supportés

Windows, Linux


CopyMaterial()

Syntaxe

Resultat = CopyMaterial(#Matiere, #NouvelleMatiere)
Description
Crée une #NouvelleMatiere qui est la copie exacte de la #Matiere spécifiée. Si #PB_Any est utilisé pour le paramètre '#NouvelleMatiere', le numéro de la nouvelle matière sera renvoyé dans 'Resultat'. Si le 'Resultat' est 0, alors la copie a échouée. Si la #NouvelleMatière était déjà créée, elle est automatiquement libérée et remplacée par la nouvelle.

OS Supportés

Windows, Linux


CountMaterialLayers()

Syntaxe

Resultat = CountMaterialLayers(#Matiere)
Description
Renvoie le nombre de couches que la matière contient.

OS Supportés

Windows, Linux


CreateMaterial()

Syntaxe

Resultat = CreateMaterial(#Matiere, TextureID)
Description
Crée une nouvelle matière basée sur la Texture spécifiée. Si #PB_Any est utilisé pour le paramètre '#Matiere', le numéro de la nouvelle matière sera renvoyé dans 'Resultat'. Un 'TextureID' valide est obtenu facilement à l'aide de la commande TextureID(). Si le 'Resultat' est 0, alors la copie a échouée. Si la #Matière était déjà créée, elle est automatiquement libérée et remplacée par la nouvelle.

OS Supportés

Windows, Linux


DisableMaterialLighting()

Syntaxe

DisableMaterialLighting(#Matiere, Etat)
Description
Active ou désactive l'éclairage dynamique de la #Matiere. C'est à dire que l'objet qui utilisera cette matière sera ou ne sera pas affecté par les lumières dynamiques créées par CreateLight(). L'éclairage d'une matière est activée par défaut quand une matière est créée. Le paramètre 'Etat' peut prendre une des valeurs suivantes:
  1: L'éclairage dynamique est désactivé
  0: L'éclairage dynamique est activé

OS Supportés

Windows, Linux


FreeMaterial()

Syntaxe

FreeMaterial(#Matiere)
Description
Libère et détruit la #Matiere spécifiée. Ses propriétés ainsi que la mémoire occupée par cette matière sont libérées, donc cette matière ne peut plus être utilisée par un objet. Tous les objets (entity, billboards etc..) qui utilisent cette matière devront être modifiés avant la destruction de la matière). Toutes les matières sont automatiquement libérées quand le programme se termine.

OS Supportés

Windows, Linux


IsMaterial()

Syntaxe

Resultat = IsMaterial(#Matiere)
Description
Teste si la #Matiere est correctement initialisée. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, Linux


MaterialAmbientColor()

Syntaxe

MaterialAmbientColor(#Matiere, Couleur)
Description
Change la couleur ambiante de la #Matiere. La couleur ambiante est la teinte qui sera affichée par la matière quand il n'y a pas d'éclairage spécifique.

Une couleur valide peut être facilement obtenue à l'aide de la commande RGB(). Si le paramètre 'Couleur' est la constante #PB_Material_AmbientColors, alors les informations de couleurs associées à chaque sommet (spécifiées à la création de la mesh) sont utilisées.

OS Supportés

Windows, Linux


MaterialBlendingMode()

Syntaxe

MaterialBlendingMode(#Matiere, Mode)
Description
Change la manière dont la #Matiere sera mixée avec le monde 3D (et donc la manière dont l'objet qui utilise cette matière sera rendu). 'Mode' peut prendre une des valeurs suivantes:
  #PB_Material_Add       : Utilise le mode addition des pixels (Add) pour mixer l'objet avec la scène (donc la couleur noire (0,0,0) est considérée comme transparente).
  #PB_Material_AlphaBlend: Utilise le canal alpha de la texture (TGA ou PNG) pour le mixage avec la scène.
  #PB_Material_Color     : Utilise la couleur transparente de la texture pour le mixage avec la scène.

OS Supportés

Windows, Linux


MaterialDiffuseColor()

Syntaxe

MaterialDiffuseColor(#Matiere, Color)
Description
Change la couleur de diffusion de la #Matiere. La couleur de diffusion est la couleur que la matière reflétera quand une lumière dynamique l'éclairera. Par exemple, si on utilise un blanc pur (RGB(255,255,255)) alors la matière sera éclairée normalement (toutes les couleurs sont réfléchies). Maintenant, si on utilise la couleur rouge comme couleur de diffusion (RGB(255,0,0)) alors seulement les parties de la matière qui contiennent une composante rouge seront affichées. Une couleur valide peut être facilement obtenue par la commande RGB().

OS Supportés

Windows, Linux


MaterialFilteringMode()

Syntaxe

MaterialFilteringMode(#Matiere, Mode)
Description
Change la manière dans la #Matière sera filtrée par la carte graphique lorsqu'elle sera affichée. 'Mode' peut prendre une des valeurs suivantes:
  #PB_Material_None     : Aucun filtrage n'est effectué, ce qui donne un résultat très pixelisé quand la matière est zoomée.
  #PB_Material_Bilinear : Effecture un filtre bi-linéaire quand la texture zoome, ce qui donne une texture plus agréable, mais un peu floue.
  #PB_Material_Trilinear: Effecture un filtre tri-linéaire quand la texture zoome, ce qui donne le meilleur rendu possible.
Quand une #Matiere est créée, le filtre bi-lineaire est activé par défaut. Utiliser un filtrage n'a plus un grand impact sur les performance car toutes les cartes graphiques modernes le font au niveau materiel.

OS Supportés

Windows, Linux


MaterialID()

Syntaxe

MaterialID = MaterialID(#Matiere)
Description
Renvoie le MaterialID de la #Matiere spécifiée. C'est l'identifiant unique de la matière requise par la commande EntityMaterial().

OS Supportés

Windows, Linux


MaterialShadingMode()

Syntaxe

MaterialShadingMode(#Matiere, Mode)
Description
Change le mode d'éclairage de la #Matiere. 'Mode' peut être une valeurs suivante:
  #PB_Material_Flat   : La matière sera rendu en mode solide, l'ombrage est effectué face par face.
  #PB_Material_Gouraud: Effectue un ombrage progressif en utilisant l'algorithme de Gouraud.
  #PB_Material_Phong  : Effectue un ombrage progressif en utilisant l'algorithme de Phong.
Quand une matière est créée, l'ombrage de Gouraud est utilisé par défaut.

OS Supportés

Windows, Linux


MaterialSpecularColor()

Syntaxe

MaterialSpecularColor(#Matiere, Color)
Description
Change la couleur spéculaire de la #Matiere. La couleur spéculaire est la couleur que la matière réfléchira quand elle sera affichée avec une lumière dynamique qui a une couleur spéculaire. Par exemple, si on utilise un blanc pur (RGB(255,255,255)) alors la matière sera éclairée normalement (toutes les couleurs sont réfléchies). Maintenant, si on utilise la couleur rouge comme couleur spéculaire (RGB(255,0,0)) alors seulement les parties de la matière qui contiennent une composante rouge seront affichées. Une couleur valide peut être facilement obtenue par la commande RGB().

OS Supportés

Windows, Linux


RemoveMaterialLayer()

Syntaxe

RemoveMaterialLayer(#Matiere)
Description
Supprime la dernière couche ajoutée sur la #Matiere.

OS Supportés

Windows, Linux


RotateMaterial()

Syntaxe

RotateMaterial(#Matiere, Angle, Mode [, Layer])
Description
Incline la couche de la #Matiere en rapport avec l'Angle' specifié. Par défaut, la couche 0 est inclinée, sauf si le paramètre 'Couche' est utilisé. 'Mode' peut prendre une de valeurs suivantes:
  #PB_Material_Fixed   : La matière est inclinée de manière absolue, sans tenir compte de l'inclinaison précédente.
  #PB_Material_Animated: A chaque rendu, la couche est inclinée des valeurs x,y automatiquement (relatif à l'inclinaison précédent).

OS Supportés

Windows, Linux


ScrollMaterial()

Syntaxe

ScrollMaterial(#Matiere, x, y, Mode [, Couche])
Description
Déplace la couche de la #Matiere des valeurs x et y spécifiés. Par défaut, la couche 0 est déplacée, sauf si le paramètre 'Couche' est utilisé. 'Mode' peut prendre une de valeurs suivantes:
  #PB_Material_Fixed   : La matière est déplacée de manière absolue, sans tenir compte des déplacements précédents.
  #PB_Material_Animated: A chaque rendu, la couche est déplacée des valeurs x,y automatiquement (relatif au déplacement précédent).

OS Supportés

Windows, Linux


Mesh

PureBasic - Mesh

General

Les Meshs sont des objets 3D composés de triangles qui sont reliés entre eux pour donner la forme finale. Une Mesh peut posséder un squelette si elle est animée, permettant des animations réalistes et de qualité. Une Mesh ne peut pas être affichée directement dans le monde 3D, elle doit être encapsulée dans une entity. InitEngine3D() doit être appelé avec succès avant de pouvoir utiliser les commandes relatives aux Meshs.

Sommaire des commandes

CopyMesh
CreateMesh
FreeMesh
IsMesh
LoadMesh
MeshID
SetMeshData

Exemple

Mesh.pb

OS Supportés

Windows, Linux

Guide de référence - Index


CopyMesh()

Syntaxe

Resultat = CopyMesh(#Mesh, #NouvelleMesh)
Description
Crée une #NouvelleMesh qui est l'exact copie de la #Mesh. Si #PB_Any est utilisé pour le paramètre '#NouvelleMesh', le numéro de la nouvelle mesh sera renvoyé dans 'Resultat'. Si le 'Resultat' est 0, alors la copie a échouée.

Si la #NouvelleMesh était déjà créée, elle est automatiquement supprimée et remplacée par la nouvelle.

OS Supportés

Windows, Linux


CreateMesh()

Syntaxe

Resultat = CreateMesh(#Mesh, TailleMaximum)
Description
Créé une nouvelle #Mesh, complètement vide. Si #PB_Any est utilisé pour le paramètre '#NouvelleMesh', le numéro de la nouvelle mesh sera renvoyé dans 'Resultat'. Le paramètre 'TailleMaximum' permet de définir la dimension maximale de la mesh.
C'est important de bien renseigner 'TailleMaximum', faute de quoi il est possible que l'entité qui sera créée avec cette mesh ne soit pas affichée correctement.

SetMeshData() pourra être utilisé pour créer la forme de la Mesh en insérant des 'vertices' (sommets), des 'normales', coordonnées UV etc.. Il est bien sûr plus aisé d'utiliser un modeleur externe et d'importer les meshs à l'aide de la commande LoadMesh().

Si la #Mesh était déjà créée, elle est automatiquement supprimée et remplacée par la nouvelle.

OS Supportés

Windows, Linux


FreeMesh()

Syntaxe

FreeMesh(#Mesh)
Description
Supprime la #Mesh précédemment créée à l'aide de la commande CreateMesh() ou LoadMesh(). Cette #Mesh ne peut plus être utilisée.

OS Supportés

Windows, Linux


IsMesh()

Syntaxe

Resultat = IsMesh(#Mesh)
Description
Teste si la #Mesh est correctement initialisée. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, Linux


LoadMesh()

Syntaxe

Resultat = LoadMesh(#Mesh, NomFichier$)
Description
Charge une #Mesh à partir d'un fichier 'NomFichier$' au format '.mesh'. Si #PB_Any est utilisé pour le paramètre '#Mesh', le numéro de la nouvelle mesh sera renvoyé dans 'Resultat'. Avant de charger une mesh, une archive doit être spécifiée à l'aide de la commande Add3DArchive().

Actuellement differents exporters permettent de créer des fichiers dans ce ce format (Milkshape, 3DS Max, Lightwave - Plus d'informations sur le site d'OGRE). Le 'NomFichier$' doit être accessible dans le chemin géré par Add3DArchive(). Si 'Resultat' est 0, la mesh n'a pas pu être chargée.

Si la #Mesh était déjà créée, elle est automatiquement supprimée et remplacée par la nouvelle.

OS Supportés

Windows, Linux


MeshID()

Syntaxe

Result = MeshID(#Mesh)
Description
Renvoie l'identifiant unique de la #Mesh. Cet identifiant est notamment nécessaire pour la commande CreateEntity().

OS Supportés

Windows, Linux


SetMeshData()

Syntaxe

SetMeshData(#Mesh, Type, Data, LongueurData)
Description
Change les données internes de la #Mesh. 'Data' est l'adresse mémoire à laquelle se trouve les données à insérer dans la #Mesh. 'LongueurData' est la longueur de ces données, en fonction du 'Type' choisi. Cette commande est principalement utilisée en conjonction avec CreateMesh().

'Type' peut être une des valeurs suivantes:
  #PB_Mesh_Vertex       : 'Data' est un tableau de sommets (vertices), 'DataLength' est le nombre de sommets.
  #PB_Mesh_Face         : 'Data' est un tableau de triangles, chaque sommets des triangle etant un index du tableau '#PB_Mesh_Vertices'.
                           Le tableau doit être de type 'word' (.w). 'DataLength' est le nombre d'éléments du tableau.
  #PB_Mesh_UVCoordinate : 'Data' est un tableau Coordonnées UV, 'DataLength' est le nombre d'éléments du tableau.
  #PB_Mesh_Normal       : 'Data' est un tableau Normales, 'DataLength' est le nombre d'éléments du tableau.
  #PB_Mesh_Color        : 'Data' est un tableau Couleurs, 'DataLength' est le nombre d'éléments du tableau.

OS Supportés

Windows, Linux


Particle

PureBasic - Particle

General

Les systèmes de particules sont largement utilisés dans les scènes 3D pour simuler des objets aux comportements non prédictibles tels que la pluie, le feu, des explosions etc. PureBasic permet de créer un nombre quelconque d'émetteurs de particules fonctionnant de manière autonome. Chaque émetteur a sa forme propre et ses propriétés propres comme la vélocité, la vitesse, le taux d'émission et plus encore. InitEngine3D() doit être appelé avec succès avant l'utilisation des commandes Particle.

Sommaire des commandes

CreateParticleEmitter
FreeParticleEmitter
HideParticleEmitter
IsParticleEmitter
MoveParticleEmitter
ParticleColorFader
ParticleColorRange
ParticleEmissionRate
ParticleEmitterDirection
ParticleEmitterLocate
ParticleEmitterX
ParticleEmitterY
ParticleEmitterZ
ParticleMaterial
ParticleSize
ParticleTimeToLive
ParticleVelocity
ResizeParticleEmitter

Exemple

Particle.pb

OS Supportés

Windows, Linux

Guide de référence - Index


CreateParticleEmitter()

Syntaxe

Resultat = CreateParticleEmitter(#EmetteurParticule, Largeur, Hauteur, Profondeur, Type, [, x, y, z])
Description
Crée un nouvel #EmetteurParticule de Largeur, Hauteur et Profondeur données (dimension respectivement x,y et z). Si #PB_Any est utilisé pour le paramètre '#EmetteurParticule', le numéro du nouvel émetteur sera renvoyé dans 'Resultat'. La taille par défaut des futures particules peuvent être spécifiées avec la commande ParticleSize(). Les paramètres optionnels x,y,z peuvent être spécifiés pour positionner l'émetteur nouvellement créé dans son environnement. Si le 'Resultat' est 0, #EmetteurParticule n'a pas pu être créé.

Le paramètre 'Type' peut être une des valeurs suivantes :
  #PB_Particle_Point: L'émetteur est un point unique
  #PB_Particle_Box  : L'émetteur est une boîte, avec une largeur, une hauteur et une profondeur
Note: si #EmetteurParticule a déjà été créé, sa place mémoire est automatiquement libérée et il est remplacé par le nouvel émetteur de particules.

OS Supportés

Windows, Linux


FreeParticleEmitter()

Syntaxe

FreeParticleEmitter(#EmetteurParticule)
Description
Supprime l'#EmetteurParticule spécifié et libère sa mémoire associée. Cet objet ne peut plus désormais être utilisé.

OS Supportés

Windows, Linux


HideParticleEmitter()

Syntaxe

HideParticleEmitter(#EmetteurParticule, Etat)
Description
Cache ou affiche l'#EmetteurParticule spécifié. 'Etat' peut prendre les valeurs suivantes:
  1:  #EmetteurParticule est caché
  0:  #EmetteurParticule est affiché

OS Supportés

Windows, Linux


IsParticleEmitter()

Syntaxe

Resultat = IsParticleEmitter(#EmetteurParticule)
Description
Teste si l'#EmetteurParticule est correctement initialisé. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, Linux


MoveParticleEmitter()

Syntaxe

MoveParticleEmitter(#EmetteurParticule, x, y, z)
Description
Déplace l'#EmetteurParticule dans le monde 3D selon les valeurs x, y et z indiquées. C'est un mouvement relatif basé sur la position précédente de l'#EmetteurParticule. Pour obtenir un mouvement absolu dans le monde 3D, utilisez ParticleEmitterLocate().

OS Supportés

Windows, Linux


ParticleColorFader()

Syntaxe

ParticleColorFader(#EmetteurParticule, RedRate, GreenRate, BlueRate)
Description
Change le niveau d'intensité des couleurs des particules (fader) dans l'unité de temps du monde 3D.

OS Supportés

Windows, Linux


ParticleColorRange()

Syntaxe

ParticleColorRange(#EmetteurParticule, PremiereCouleur, DerniereCouleur)
Description
Change la plage de couleurs des particules de #EmetteurParticule. Chaque particule émise obtiendra une valeur aléatoire dans la plage située entre 'PremiereCouleur' et 'DerniereCouleur'. Les paramètres 'PremiereCouleur' et 'PremiereCouleur' sont des valeurs RGB standards. La commande RGB() peut être utilisée pour obtenir rapidement une couleur.

OS Supportés

Windows, Linux


ParticleEmissionRate()

Syntaxe

ParticleEmissionRate(#EmetteurParticule, Taux)
Description
Change le taux d'émission de l'#EmetteurParticule (en particules par seconde).

OS Supportés

Windows, Linux


ParticleEmitterDirection()

Syntaxe

ParticleEmitterDirection(#EmetteurParticule, x, y, z)
Description
Change la direction de l'#EmetteurParticule. L'émetteur pointera vers le point désigné par les coordonnées x,y et z.

OS Supportés

Windows, Linux


ParticleEmitterLocate()

Syntaxe

ParticleEmitterLocate(#EmetteurParticule, x, y, z)
Description
Change la position absolue de l'#EmetteurParticule dans le monde 3D.

OS Supportés

Windows, Linux


ParticleEmitterX()

Syntaxe

Resultat = ParticleEmitterX(#EmetteurParticule)
Description
Retourne la position absolue en X dans le monde 3D de l'#EmetteurParticule.

OS Supportés

Windows, Linux


ParticleEmitterY()

Syntaxe

Resultat = ParticleEmitterY(#EmetteurParticule)
Description
Retourne la position absolue en Y dans le monde 3D de l'#EmetteurParticule.

OS Supportés

Windows, Linux


ParticleEmitterZ()

Syntaxe

Resultat = ParticleEmitterZ(#EmetteurParticule)
Description
Retourne la position absolue en Z dans le monde 3D de l'#EmetteurParticule.

OS Supportés

Windows, Linux


ParticleMaterial()

Syntaxe

ParticleMaterial(#EmetteurParticule, MaterialID)
Description
Assigne un matériel à l'#EmetteurParticule spécifié. Ce matériel sera utilisé par toutes les Particules de cet émetteur. Un émetteur peut seulement avoir un matériel assigné à la fois. L'identifiant 'MaterialID' peut être facilement obtenu avec la commande MaterialID().

OS Supportés

Windows, Linux


ParticleSize()

Syntaxe

ParticleSize(#EmetteurParticule, Largeur, Hauteur)
Description
Change les dimensions des particules. Les particules sont des plans en 2D (Billboards) qui font toujours face à la Caméra. Toutes les particules d'un même émetteur ont toujours la même taille.

OS Supportés

Windows, Linux


ParticleTimeToLive()

Syntaxe

ParticleTimeToLive(#EmetteurParticule, TempsMininum, TempsMaximum)
Description
Change la durée de vie des particules de l'#EmetteurParticule. Chaque particule vivra au moins le 'TempsMinimum' et au maximum le 'TempsMaximum' dans l'unité de temps du monde 3D. Une valeur aléatoire à l'intérieur de cette plage sera utilisée par chaque particule émise.

OS Supportés

Windows, Linux


ParticleVelocity()

Syntaxe

ParticleVelocity(#EmetteurParticule, Minimum, Maximum)
Description
Change la vélocité des particules. Une valeur aléatoire de vélocité, choisie dans la plage 'Minimum' et 'Maximum', sera utilisée par chaque particule émise.

OS Supportés

Windows, Linux


ResizeParticleEmitter()

Syntaxe

ResizeParticleEmitter(#Particle, #EmetteurParticule, Largeur, Hauteur, Profondeur)
Description
Redimensionne l'#EmetteurParticule avec les nouvelles dimensions 'Largeur', 'Hauteur' et 'Profondeur' spécifiées.

OS Supportés

Windows, Linux


Terrain

PureBasic - Terrain

General

Les terrains sont des scènes 3D extérieures qui simulent un environnement naturel réaliste basé sur des plans en 2D pré-calculés. Ils sont utiles dans de nombreux cas, par exemple pour les représentations en 3D de jeux de simulation. InitEngine3D() doit être appelé avec succès avant l'utilisation des commandes Terrain.

Sommaire des commandes

CreateTerrain
TerrainHeight

Exemple

Terrain.pb

OS Supportés

Windows, Linux

Guide de référence - Index


CreateTerrain()

Syntaxe

Resultat = CreateTerrain(NomFichier$, MaterialID, [EchelleX, EchelleY, EchelleZ, [Precision]])
Description
Crée un nouveau terrain 3D à partir du fichier image 2D donné. L'image peut être au format JPEG, PNG ou TGA et doit être en mode 256 couleurs (niveaux de gris). Chaque pixel de l'image sera interprété comme la hauteur du terrain à ce point. Un pixel entièrement noir (RGB=0,0,0) sera à une hauteur de 0 et un pixel complètement blanc (RGB=255,255,255) sera à une hauteur de 255. Il est donc possible d'avoir jusqu'a 256 niveaux de hauteur. Si nécessaire, le terrain peut être redimensionné lorsqu'il est créé en utilisant les paramètres optionnels EchelleX, EchelleY et EchelleZ. Pour des raisons de performance, il n'est pas possible de redimensionner un terrain en temps réel, mais seulement lorsqu'il est créé.

Le Matériel spécifié sera utilisé par le terrain pour le rendu et peut être facilement obtenu en utilisant la commande MaterialID(). Le matériel devra en principe contenir deux couches de textures: La première est la texture qui est appliquée de manière globale au terrain et la deuxième couche est la texture de détail qui est appliquée plusieurs fois sur le terrain (pour obtenir un rendu plus précis). L'exemple ci-dessous montre le paramétrage habituel d'un matériel pour un terrain.

Exemple:

  CreateMaterial(0, LoadTexture(0, "Global.jpg"))      ; Première couche est Global
  AddMaterialLayer(0, LoadTexture(1, "Detail.jpg"), 1) ; Seconde couche est Detail
Le paramètre 'Précision' est facultatif et permet de contrôler la précision du rendu du terrain. Du fait du nombre élevé de calculs complexes, ce paramètre a été ajouté pour régler l'affichage du terrain selon l'ordinateur cible. Par exemple, vous pouvez régler le rendu pour qu'il soit plus lent mais plus précis sur des ordinateurs plus rapides ou bien plus rapide mais dont le rendu n'est pas aussi joli avec des ordinateurs plus lents.

Arguments

NomFichier$ - La chaîne contenant le nom du fichier image pour créer le terrain.

MaterialID - L'ID du matériel pour le rendu du terrain et qui peut être obtenu en utilisant la commande MaterialID().

EchelleX - Le facteur de dimension du terrain en X. Une valeur de 1 signifie que l'on conserve la même taille. Une valeur de 2 signifie que l'on double la taille, 3 pour tripler la taille etc.. Des valeurs non entières comprises entre 0 et 1 diminueront la taille du terrain.

EchelleY - Le facteur de dimension du terrain en Y. Les valeurs sont les mêmes que celles du paramètre EchelleX.

EchelleZ - Le facteur de dimension du terrain en Z. Les valeurs sont les mêmes que celles du paramètre EchelleX.

Precision - C'est un paramètre facultatif, mais il ne peut seulement être utilisé que si les Paramètres Echelle ont été utilisés. Précision pour le rendu du terrain. La plage de valeurs possibles s'étend de 1 (le meilleur mais le plus lent) à 20 (le plus rapide mais souffre d'un déplacement de polygone lors des gros plans).

Valeur de retour

Resultat - 0 si le terrain n'a pas pu être créé.

OS Supportés

Windows, Linux


TerrainHeight()

Syntaxe

Hauteur = TerrainHeight(x, y)
Description
Retourne la hauteur de la position spécifiée dans le terrain. L'origine des coordonnées du terrain est (0,0) et elle est localisée au sommet/gauche de l'image 2D. Cette commande est principalement utilisée pour détecter facilement les collisions avec le terrain.

Arguments

x - La position horizontale du point dont on va lire la hauteur.

y - La position verticale du point dont on va lire la hauteur

Valeur de retour

Hauteur - La valeur de la hauteur du terrain à la position indiquée.

OS Supportés

Windows, Linux


Texture

PureBasic - Texture

General

Les textures permettent aux objets 3D (Meshs) d'avoir un aspect réaliste. En effet, sans textures les objets 3D seraient d'une seule couleur unie. PureBasic offre la possibilité de créer des textures directement à l'aide des outils 2D de base (bibliothèque 2DDrawing) ou de les charger à partir de fichiers. InitEngine3D() doit être appelé avec succès avant de pouvoir utiliser les commandes relatives aux textures.

Sommaire des commandes

CopyTexture
CreateTexture
FreeTexture
IsTexture
LoadTexture
TextureHeight
TextureID
TextureOutput
TextureWidth

Exemple

Texture.pb

OS Supportés

Windows, Linux

Guide de référence - Index


CopyTexture()

Syntaxe

Result = CopyTexture(#Texture, #NouvelleTexture)
Description
Crée une #NouvelleTexture qui est l'exact copie de la #Texture. Si #PB_Any est utilisé pour le paramètre '#NouvelleTexture', le numéro de la nouvelle texture sera renvoyé dans 'Resultat'. Les commandes de la bibliothèque 2DDrawing peuvent être utilisées sur la #NouvelleTexture à l'aide de la commande TextureOutput().

Note: si la #NouvelleTexture était déjà créée, elle est automatiquement supprimée et remplacée par la nouvelle.

OS Supportés

Windows, Linux


CreateTexture()

Syntaxe

Result = CreateTexture(#Texture, Width, Height)
Description
Crée une nouvelle #Texture de dimensions Largeur*Hauteur (en pixels). Si #PB_Any est utilisé pour le paramètre '#Texture', le numéro de la nouvelle texture sera renvoyé dans 'Resultat'. Il est fortement recommandé de faire des textures carrées aux côtés multiples de 2: 64*64, 128*128, 256*256, etc. Les anciennes cartes graphiques ont des limitations strictes quant à la taille des textures, et il est conseillé de se limiter à des textures maximales de 256*256 pour une compatibilité optimale. Les commandes de la bibliothèque 2DDrawing peuvent être utilisées sur la nouvelle texture à l'aide de la commande TextureOutput(). Si le résultat est 0, la texture n'a pas pu être créée.

Exemple:

  CreateTexture(0, 256, 256) ; Crée une nouvelle texture de dimension 256x256.
Note: si la #Texture était déjà créée, elle est automatiquement supprimée et remplacée par la nouvelle.

OS Supportés

Windows, Linux


FreeTexture()

Syntaxe

FreeTexture(#Texture)
Description
Supprime la #Texture précédemment créée à l'aide des commandes CreateTexture(), CopyTexture() ou LoadTexture(). Cette #Texture ne peut plus être utilisée.

OS Supportés

Windows, Linux


IsTexture()

Syntaxe

Resultat = IsTexture(#Texture)
Description
Teste si la #Texture est correctement initialisée. Cette fonction a été créé pour pouvoir passer n'importe quelle valeur en paramètre sans qu'il ne puisse y avoir de plantage. Si le 'Résultat' est différent de zéro, alors cet objet est valide. C'est la fonction idéale pour vérifier qu'un objet est correctement initialisé.

OS Supportés

Windows, Linux


LoadTexture()

Syntaxe

Resultat = LoadTexture(#Texture, NomFichier$)
Description
Charge une #Texture à partir d'un fichier 'NomFichier$' au format PNG, TGA or JPG. Si #PB_Any est utilisé pour le paramètre '#Texture', le numéro de la nouvelle texture sera renvoyé dans 'Resultat'. Le 'NomFichier$' doit être accessible dans le chemin géré par Add3DArchive().

Il est fortement recommandé de faire des textures carrées aux côtés multiples de 2: 64*64, 128*128, 256*256, etc. Les anciennes cartes graphiques ont des limitations strictes quant à la taille des textures, et il est conseillé de se limiter à des textures maximales de 256*256 pour une compatibilité optimale. Les commandes de la bibliothèque 2DDrawing peuvent être utilisées sur la nouvelle texture à l'aide de la commande TextureOutput(). Si 'Resultat' est 0, la texture n'a pas pu être chargée.

Note: si la #Texture était déjà créée, elle est automatiquement supprimée et remplacée par la nouvelle.

OS Supportés

Windows, Linux


TextureHeight()

Syntaxe

Hauteur = TextureHeight(#Texture)
Description
Renvoie la hauteur (en pixels) de la #Texture.

OS Supportés

Windows, Linux


TextureID()

Syntaxe

TextureID = TextureID(#Texture)
Description
Renvoie l'identifiant unique de la #Texture. Cet identifiant est notamment nécessaire pour la commande suivante: Material/AddMaterialLayer(), CreateMaterial().

OS Supportés

Windows, Linux


TextureOutput()

Syntaxe

OutputID = TextureOutput(#Texture)
Description
Renvoie l'identifiant OutputID de la #Texture nécessaire à StartDrawing() pour dessiner directement sur la texture.

OS Supportés

Windows, Linux


TextureWidth()

Syntaxe

Largeur = TextureWidth(#Texture)
Description
Renvoie la largeur (en pixels) de la #Texture.

OS Supportés

Windows, Linux


PureBasic - Index

A
ACos
ASin
ATan
Abs
Add3DArchive
AddBillboard
AddDate
AddElement
AddGadgetColumn
AddGadgetItem
AddKeyboardShortcut
AddMaterialLayer
AddPackFile
AddPackMemory
AddStatusBarField
AddSysTrayIcon
AllocateMemory
AmbientColor
AnimateEntity
Asc
AudioCDLength
AudioCDName
AudioCDStatus
AudioCDTrackLength
AudioCDTrackSeconds
AudioCDTracks
AvailableProgramOutput
AvailableScreenMemory
B
BackColor
Base64Decoder
Base64Encoder
BillboardGroupLocate
BillboardGroupMaterial
BillboardGroupX
BillboardGroupY
BillboardGroupZ
BillboardHeight
BillboardLocate
BillboardWidth
BillboardX
BillboardY
BillboardZ
Bin
BinQ
Blue
Box
ButtonGadget
ButtonImageGadget
C
CRC32Fingerprint
CalendarGadget
CallCFunction
CallCFunctionFast
CallFunction
CallFunctionFast
CameraBackColor
CameraFOV
CameraLocate
CameraLookAt
CameraProjection
CameraRange
CameraRenderMode
CameraX
CameraY
CameraZ
CatchImage
CatchSound
CatchSprite
ChangeAlphaIntensity
ChangeCurrentElement
ChangeGamma
ChangeListIconGadgetDisplay
ChangeSysTrayIcon
CheckBoxGadget
CheckEntityCollision
CheckFilename
Chr
Circle
ClearBillboards
ClearClipboard
ClearConsole
ClearError
ClearGadgetItemList
ClearList
ClearScreen
ClipSprite
CloseConsole
CloseDatabase
CloseFile
CloseGadgetList
CloseHelp
CloseLibrary
CloseNetworkConnection
CloseNetworkServer
ClosePack
ClosePreferences
CloseProgram
CloseScreen
CloseSubMenu
CloseWindow
ColorRequester
ComboBoxGadget
CompareMemory
CompareMemoryString
ConnectionID
ConsoleColor
ConsoleCursor
ConsoleError
ConsoleLocate
ConsoleTitle
ContainerGadget
CopyDirectory
CopyEntity
CopyFile
CopyImage
CopyLight
CopyMaterial
CopyMemory
CopyMemoryString
CopyMesh
CopySprite
CopyTexture
Cos
CountBillboards
CountGadgetItems
CountLibraryFunctions
CountList
CountMaterialLayers
CountProgramParameters
CountRenderedTriangles
CountString
CreateBillboardGroup
CreateCamera
CreateDirectory
CreateEntity
CreateFile
CreateGadgetList
CreateImage
CreateLight
CreateMaterial
CreateMenu
CreateMesh
CreateMutex
CreateNetworkServer
CreatePack
CreatePalette
CreateParticleEmitter
CreatePopupMenu
CreatePreferences
CreateSprite
CreateSprite3D
CreateStatusBar
CreateTerrain
CreateTexture
CreateThread
CreateToolBar
D
DESFingerprint
DatabaseColumnName
DatabaseColumnType
DatabaseColumns
DatabaseDriverDescription
DatabaseDriverName
DatabaseError
DatabaseQuery
DatabaseUpdate
Date
DateGadget
Day
DayOfWeek
DayOfYear
DefaultPrinter
Delay
DeleteDirectory
DeleteElement
DeleteFile
DesktopDepth
DesktopFrequency
DesktopHeight
DesktopMouseX
DesktopMouseY
DesktopName
DesktopWidth
DirectoryEntryAttributes
DirectoryEntryDate
DirectoryEntryName
DirectoryEntrySize
DirectoryEntryType
DisASMCommand
DisableGadget
DisableMaterialLighting
DisableMenuItem
DisableToolBarButton
DisableWindow
DisplayAlphaSprite
DisplayPalette
DisplayPopupMenu
DisplayRGBFilter
DisplayShadowSprite
DisplaySolidSprite
DisplaySprite
DisplaySprite3D
DisplayTranslucentSprite
DisplayTransparentSprite
DrawAlphaImage
DrawImage
DrawText
DrawingBuffer
DrawingBufferPitch
DrawingBufferPixelFormat
DrawingFont
DrawingMode
E
EditorGadget
EjectAudioCD
ElapsedMilliseconds
Ellipse
EnableGraphicalConsole
EnableWorldCollisions
EnableWorldPhysics
Engine3DFrameRate
EntityAnimationLength
EntityLocate
EntityMaterial
EntityPhysicBody
EntityRenderMode
EntityX
EntityY
EntityZ
EnvironmentVariableName
EnvironmentVariableValue
Eof
EventClient
EventGadget
EventMenu
EventServer
EventType
EventWindow
ExamineDatabaseDrivers
ExamineDesktops
ExamineDirectory
ExamineEnvironmentVariables
ExamineIPAddresses
ExamineJoystick
ExamineKeyboard
ExamineLibraryFunctions
ExamineMouse
ExaminePreferenceGroups
ExaminePreferenceKeys
ExamineScreenModes
ExamineWorldCollisions
ExplorerComboGadget
ExplorerListGadget
ExplorerTreeGadget
F
FileBuffersSize
FileID
FileSeek
FileSize
FillArea
FindString
FinishDirectory
FirstDatabaseRow
FirstElement
FirstWorldCollisionEntity
FlipBuffers
FlushFileBuffers
Fog
FontID
FontRequester
FormatDate
Frame3DGadget
FreeBillboardGroup
FreeCamera
FreeEntity
FreeFont
FreeGadget
FreeImage
FreeLight
FreeMaterial
FreeMemory
FreeMenu
FreeMesh
FreeModule
FreeMovie
FreeMutex
FreePalette
FreeParticleEmitter
FreeSound
FreeSprite
FreeSprite3D
FreeStatusBar
FreeTexture
FreeToolBar
FrontColor
G
GadgetHeight
GadgetID
GadgetItemID
GadgetToolTip
GadgetType
GadgetWidth
GadgetX
GadgetY
GetActiveGadget
GetActiveWindow
GetClientIP
GetClientPort
GetClipboardImage
GetClipboardText
GetCurrentDirectory
GetCurrentEIP
GetDatabaseDouble
GetDatabaseFloat
GetDatabaseLong
GetDatabaseQuad
GetDatabaseString
GetDisASMString
GetEntityAnimationTime
GetEntityFriction
GetEntityMass
GetEnvironmentVariable
GetErrorAddress
GetErrorCounter
GetErrorDLL
GetErrorDescription
GetErrorLineNR
GetErrorModuleName
GetErrorNumber
GetErrorRegister
GetExtensionPart
GetFileDate
GetFilePart
GetFunction
GetFunctionEntry
GetGadgetAttribute
GetGadgetColor
GetGadgetData
GetGadgetFont
GetGadgetItemAttribute
GetGadgetItemColor
GetGadgetItemData
GetGadgetItemState
GetGadgetItemText
GetGadgetState
GetGadgetText
GetHomeDirectory
GetMenuItemState
GetMenuItemText
GetMenuTitleText
GetModulePosition
GetModuleRow
GetPaletteColor
GetPathPart
GetTemporaryDirectory
GetToolBarButtonState
GetWindowColor
GetWindowState
GetWindowTitle
GoToEIP
GrabImage
GrabSprite
Green
H
Hex
HexQ
HideBillboardGroup
HideEntity
HideGadget
HideLight
HideMenu
HideParticleEmitter
HideWindow
HostName
Hour
HyperLinkGadget
I
IPAddressField
IPAddressGadget
IPString
ImageDepth
ImageGadget
ImageHeight
ImageID
ImageOutput
ImageWidth
InitAudioCD
InitDatabase
InitEngine3D
InitJoystick
InitKeyboard
InitModule
InitMouse
InitMovie
InitNetwork
InitPalette
InitSound
InitSprite
InitSprite3D
Inkey
Input
InputRequester
InsertElement
Int
IsBillboardGroup
IsCamera
IsDatabase
IsDirectory
IsEntity
IsFile
IsFont
IsGadget
IsImage
IsLibrary
IsLight
IsMaterial
IsMenu
IsMesh
IsModule
IsMovie
IsPalette
IsParticleEmitter
IsProgram
IsScreenActive
IsSound
IsSprite
IsSprite3D
IsStatusBar
IsSysTrayIcon
IsTexture
IsToolBar
IsWindow
J
JoystickAxisX
JoystickAxisY
JoystickButton
K
KeyboardInkey
KeyboardMode
KeyboardPushed
KeyboardReleased
KillProgram
KillThread
L
LCase
LSet
LTrim
LastElement
Left
Len
LibraryFunctionAddress
LibraryFunctionName
LibraryID
LightColor
LightLocate
LightSpecularColor
Line
LineXY
ListIconGadget
ListIndex
ListViewGadget
LoadFont
LoadImage
LoadMesh
LoadModule
LoadMovie
LoadPalette
LoadSound
LoadSprite
LoadTexture
Loc
LockMutex
Lof
Log
Log10
M
MD5FileFingerprint
MD5Fingerprint
MDIGadget
MakeIPAddress
MaterialAmbientColor
MaterialBlendingMode
MaterialDiffuseColor
MaterialFilteringMode
MaterialID
MaterialShadingMode
MaterialSpecularColor
MemorySize
MemoryStringLength
MenuBar
MenuHeight
MenuID
MenuItem
MenuTitle
MeshID
MessageRequester
Mid
Minute
ModuleVolume
Month
MouseButton
MouseDeltaX
MouseDeltaY
MouseLocate
MouseWheel
MouseX
MouseY
MoveBillboard
MoveBillboardGroup
MoveCamera
MoveEntity
MoveLight
MoveMemory
MoveParticleEmitter
MovieAudio
MovieHeight
MovieInfo
MovieLength
MovieSeek
MovieStatus
MovieWidth
N
NetworkClientEvent
NetworkServerEvent
NewPrinterPage
NextDatabaseDriver
NextDatabaseRow
NextDirectoryEntry
NextElement
NextEnvironmentVariable
NextIPAddress
NextLibraryFunction
NextPackFile
NextPreferenceGroup
NextPreferenceKey
NextScreenMode
NextSelectedFileName
O
OSVersion
OnErrorGosub
OnErrorGoto
OnErrorResume
OpenConsole
OpenDatabase
OpenDatabaseRequester
OpenFile
OpenFileRequester
OpenGadgetList
OpenHelp
OpenLibrary
OpenNetworkConnection
OpenPack
OpenPreferences
OpenScreen
OpenSubMenu
OpenWindow
OpenWindowedScreen
OptionGadget
P
PackFileSize
PackMemory
PackerCallback
PanelGadget
Parse3DScripts
ParseDate
ParticleColorFader
ParticleColorRange
ParticleEmissionRate
ParticleEmitterDirection
ParticleEmitterLocate
ParticleEmitterX
ParticleEmitterY
ParticleEmitterZ
ParticleMaterial
ParticleSize
ParticleTimeToLive
ParticleVelocity
PathRequester
PauseAudioCD
PauseMovie
PauseThread
PeekB
PeekC
PeekD
PeekF
PeekL
PeekQ
PeekS
PeekW
PlayAudioCD
PlayModule
PlayMovie
PlaySound
Plot
Point
PokeB
PokeC
PokeD
PokeF
PokeL
PokeQ
PokeS
PokeW
Pow
PreferenceComment
PreferenceGroup
PreferenceGroupName
PreferenceKeyName
PreferenceKeyValue
PreviousDatabaseRow
PreviousElement
Print
PrintN
PrintRequester
PrinterOutput
PrinterPageHeight
PrinterPageWidth
ProgramExitCode
ProgramFilename
ProgramID
ProgramParameter
ProgramRunning
ProgressBarGadget
R
RGB
RSet
RTrim
Random
RandomSeed
RawKey
ReAllocateMemory
ReadByte
ReadCharacter
ReadConsoleData
ReadData
ReadDouble
ReadFile
ReadFloat
ReadLong
ReadPreferenceDouble
ReadPreferenceFloat
ReadPreferenceLong
ReadPreferenceQuad
ReadPreferenceString
ReadProgramData
ReadProgramError
ReadProgramString
ReadQuad
ReadString
ReadStringFormat
ReadWord
ReceiveNetworkData
ReceiveNetworkFile
Red
ReleaseMouse
RemoveBillboard
RemoveEnvironmentVariable
RemoveGadgetColumn
RemoveGadgetItem
RemoveKeyboardShortcut
RemoveMaterialLayer
RemovePreferenceGroup
RemovePreferenceKey
RemoveString
RemoveSysTrayIcon
RenameFile
RenderMovieFrame
RenderWorld
ReplaceString
ResetList
ResizeBillboard
ResizeEntity
ResizeGadget
ResizeImage
ResizeMovie
ResizeParticleEmitter
ResizeWindow
ResumeAudioCD
ResumeMovie
ResumeThread
Right
RotateBillboardGroup
RotateCamera
RotateEntity
RotateMaterial
RotateSprite3D
Round
RunProgram
S
SaveFileRequester
SaveImage
SaveSprite
ScaleEntity
ScreenID
ScreenModeDepth
ScreenModeHeight
ScreenModeRefreshRate
ScreenModeWidth
ScreenOutput
ScrollAreaGadget
ScrollBarGadget
ScrollMaterial
Second
SecondWorldCollisionEntity
SelectElement
SelectedFilePattern
SelectedFontColor
SelectedFontName
SelectedFontSize
SelectedFontStyle
SendNetworkData
SendNetworkFile
SendNetworkString
SetActiveGadget
SetActiveWindow
SetClipboardImage
SetClipboardText
SetCurrentDirectory
SetEntityAnimationTime
SetEntityFriction
SetEntityMass
SetEnvironmentVariable
SetErrorNumber
SetFileDate
SetFrameRate
SetGadgetAttribute
SetGadgetColor
SetGadgetData
SetGadgetFont
SetGadgetItemAttribute
SetGadgetItemColor
SetGadgetItemData
SetGadgetItemState
SetGadgetItemText
SetGadgetState
SetGadgetText
SetMenuItemState
SetMenuItemText
SetMenuTitleText
SetMeshData
SetModulePosition
SetPaletteColor
SetRefreshRate
SetToolBarButtonState
SetWindowCallback
SetWindowColor
SetWindowState
SetWindowTitle
Sin
SkyBox
SkyDome
SmartWindowRefresh
SortArray
SortList
SortStructuredArray
SortStructuredList
SoundFrequency
SoundPan
SoundVolume
Space
SpinGadget
SplitterGadget
Sprite3DBlendingMode
Sprite3DQuality
SpriteCollision
SpriteDepth
SpriteHeight
SpriteID
SpriteOutput
SpritePixelCollision
SpriteWidth
Sqr
Start3D
StartDrawing
StartPrinting
StartSpecialFX
StatusBarHeight
StatusBarID
StatusBarIcon
StatusBarText
StickyWindow
Stop3D
StopAudioCD
StopDrawing
StopModule
StopMovie
StopPrinting
StopSound
StopSpecialFX
Str
StrD
StrF
StrQ
StrU
StringByteLength
StringField
StringGadget
SwapElements
SysTrayIconTooltip
T
Tan
TerrainHeight
TextGadget
TextHeight
TextWidth
TextureHeight
TextureID
TextureOutput
TextureWidth
ThreadPriority
ToolBarHeight
ToolBarID
ToolBarImageButton
ToolBarSeparator
ToolBarStandardButton
ToolBarToolTip
TrackBarGadget
TransformSprite3D
TransparentSpriteColor
TreeGadget
Trim
TryLockMutex
U
UCase
UnlockMutex
UnpackMemory
UseAudioCD
UseBuffer
UseGadgetList
UseJPEGImageDecoder
UseJPEGImageEncoder
UseOGGSoundDecoder
UsePNGImageDecoder
UsePNGImageEncoder
UseTGAImageDecoder
UseTIFFImageDecoder
V
Val
ValD
ValF
ValQ
W
WaitProgram
WaitThread
WaitWindowEvent
WebGadget
WindowEvent
WindowHeight
WindowID
WindowMouseX
WindowMouseY
WindowOutput
WindowWidth
WindowX
WindowY
WorldGravity
WorldShadows
WriteByte
WriteCharacter
WriteConsoleData
WriteData
WriteDouble
WriteFloat
WriteLong
WritePreferenceDouble
WritePreferenceFloat
WritePreferenceLong
WritePreferenceQuad
WritePreferenceString
WriteProgramData
WriteProgramString
WriteProgramStringN
WriteQuad
WriteString
WriteStringFormat
WriteStringN
WriteWord
Y
Year
Z
ZoomSprite3D


Obtenir PureBasic

PureBasic est un langage de programmation très performant à un prix raisonnable. En achetant PureBasic, vous encouragez son développement et vous participez à son évolution future. Les mises à jour sont gratuites et illimitées, ce qui implique que vous ne paierez PureBasic qu'une seule et unique fois, contrairement à de nombreux autres logiciels. Encore plus fort, vous avez droit à toutes les versions de PureBasic pour toutes les plateformes actuellement et prochainement supportées (AmigaOS, Windows, Linux x86). Merci encore pour votre confiance et votre support !

La version de démonstration est limitée de la manière suivante:

- Impossible de créer une DLL
- Impossible d'utiliser les fonctions externe (API de l'OS)
- Pas de kit de développement pour ajouter des libraries à PureBasic
- Nombre maximum de lignes pour un programme: 800

Prix : 59 Euros

Le paiement par chèque est possible à l'adresse suivante (à l'ordre de 'Fantaisie Software'):

Fantaisie Software 10, rue de Lausanne 67640 Fegersheim

Paiement en ligne sécurisé (http://www.purebasic.com) est disponible.

La version complète sera envoyée de préférence par e-mail (email contenant un lien à télécharger) dès réception de la commande. Pour plus de simplicité, vous pouvez utiliser le formulaire ci contre: bulletin d'enregistrement.


Contacts

Veuillez envoyer vos suggestions, rapports de bugs, ou si vous voulez simplement nous contacter à une des adresses suivantes:

Frédéric 'AlphaSND' Laboureur

Fred 'AlphaSND' est le fondateur de Fantaisie Software et le programmeur principal de PureBasic. Toutes les suggestions, rapports de bugs etc... lui seront adressés à:

Courrier:

Fantaisie Software
10, rue de Lausanne
67640 Fegersheim
France

e-mail: fred@purebasic.com

Richard Andersson

Richard est un programmeur très talentueux qui a beaucoup aidé Fred pour le développement des bibliothèques ASM sur Amiga. Vous pouvez le contacter (en anglais seulement) à l'adresse suivante: e-mail: richard@purebasic.com

André Beer

André se charge de la traduction et du support allemand de PureBasic (manuel et site web).

e-mail: andre@purebasic.com

Benny 'Berikco' Sels

Benny est le coder principal du Visual Designer. Les mises à jour du Visual Designer ainsi que son historique sont disponibles sur son site web: http://www.purebasic.be. Toutes les suggestions, rapports de bugs concernant le Visual Designer peuvent être envoyés à l'adresse suivante:

e-mail: berikco@purebasic.com


Remerciements

Nous voulons remercier les nombreuses personnes qui nous ont aidés dans cet ambitieux projet. Il n'aurait pas pu prendre vie sans eux !

- Tous les utilisateurs enregistrés: Pour supporter activement le développement de ce logciel... Encore merci !

Codeurs

- Roger BEAUSOLEIL: Le premier à croire vraiment en ce projet, et son aide précieuse dans le design initial de PureBasic.

- Andre BEER:Pour prendre le temps de traduire chaque nouvelle version en Allemand...

- Francis G.LOCH: Pour avoir corrigé toutes les fautes d'ortographe dans le manuel anglais. Encore merci !

- Steffen HAEUSER: Pour avoir donné de son temps lors de la creation de la version Amiga PowerPC (PPC) de PureBasic.

- Martin KONRAD: Un 'bug reporter' fantastique qui a mis a nus la plupart des bugs presents dans PureBasic Amiga.

- James L. BOYD: Pour avoir trouvé beaucoup de bugs dans la version Windows x86 et pour nous avoir donné une tonne de boulot supplementaire :).

- LES: Pour avoir corrigé la version anglaise du site web et du guide de référence de PureBasic.

- L'équipe NAsm: Pour avoir créé un assembleur étonnant utilisé pour le developpement des bibliothèques x86

- Tomasz Grysztar: Pour FAsm, un excellent assembleur x86 actuellement utilisé par PureBasic. http://flatassembler.net/

- Pelle Orinius: Pour ses excellent outils (linker et compilateur de ressource de PellesC) qui sont actuellement utilisés par PureBasic.

- Jacob NAVIA:Pour son linker (Lcc32) qui était utilisé dans les versions antérieures de PureBasic

- Frank WILLE: Pour nous avoir permis d'include ses deux assembleurs (PhxASS et pasm) dans les versions 680x0 et PowerPC de PureBasic. Enfin pour son aide en ce qui concerne la programmation assembleur PPC.

- Danilo, Rings, Paul, Franco and MrVain/Secretly: Pour les rapports de bugs et les suggestions interminables qui ont permis de stabiliser et d'améliorer PureBasic x86 d'une manière très rapide.

- Sylvain B.: Pour avoir traduit la première partie de la documentation francaise.

- Francois Weil: Pour avoir traduit le reste (une grande majorité) de la documentation francaise, et ce en moins d'une semaine ! Encore merci...

- David 'Tinman' McMinn et Timo 'Freak' Harter: Pour améliorer considérablement l'aide du PureBasic et ainsi sa découverte au plus grand nombre !

- Danilo : Pour avoir fait un travail énorme sur l'éditeur et même sur le jeu interne des commandes, sans oublier ses excellentes suggestions quant à l'optimisation et la réduction des éxecutables... Encore merci !


Historique

16 Août 2005 : Version 3.94

- Ajouté: Nouvel environnement de développement (IDE) beaucoup plus puissant
- Ajouté: 3 Nouveaux débogueurs (!) évolués
- Ajouté: Support des resources Windows pour le compilateur et l'IDE (option /RESOURCE)
- Ajouté: Support des versions pour les exécutables et les DLL
- Ajouté: Evènement #PB_Event_ActivateWindow
- Ajouté: Option #PB_Web_Mozilla pour utiliser l'ActiveX Mozilla avec WebGadget()
- Ajouté: GetToolBarButtonState() et SetToolBarButtonState()
- Ajouté: Documentation complète sur l'IDE et les débogueurs

- Fixé: Images 32x32 dans un ListIconGadget() en mode 'grandes icones'
- Fixé: Bug avec OpenScreen()/CloseScreen() et les sprite3D
- Fixé: MovieLength() et MovieInfo() ne fonctionnait pas avec le format WMV (merci à Traumatic ;-)
- Fixé: La désactivation des images et icons sur les barres d'outils avec les skins XP
- Fixé: Plantage lors de la fermeture d'une fenêtre avec une barre de status/outils déjà libérée
- Fixé: ImageGadget() et ButtonImageGadget() ne fonctionnaient pas avec AnimateWindow_()
- Fixé: Bug ImageGadget() avec DisableGadget()
- Fixé: LineXY() ne liberait pas la mémoire correctement
- Fixé: Line() et LineXY() affectait la position du texte de DrawText()
- Fixé: SortList() pouvait planter avec des gros tableaux déjà triés
- Fixé: SetMenuItemState() changeait aussi l'état de désactivation
- Fixé: Un ComboboxGadget() créé avec #PB_Any ne gerait pas les TAB correctement
- Fixé: OpenFileRequester() ne fonctionnait pas si le fichier par défaut n'était pas correct
- Fixé: Bug du compilateur avec les concaténations de chaines et les procédures
- Fixé: Problème d'alignement des variables dans les procédures pouvant affecter certaines API

28 Février 2005 : Version 3.93

- Ajouté: SortStructuredArray(), SortList(), SortStructuredList()
- Ajouté: Directives de compilation pour LibraryMaker
- Ajouté: KeyboardMode() (n'était pas dans la documentation)
- Ajouté: Paramètre optionel 'Couleur' pour les fonctions ColorRequester() et FontRequester()
- Ajouté: Support de SetGadgetText() pour les ComboBoxGadget() éditables
- Ajouté: #PB_Default pour ClipSprite() permet d'enlever la zone de clipping
- Ajouté: #PB_FileSystem_Force pour CopyDirectory()
- Ajouté: #PB_OS_Windows_Server_2003 pour OSVersion()
- Ajouté: Base64Decoder(), GetGadgetFont()
- Ajouté: Paramètre optionel 'Mode' pour ResizeImage()
- Ajouté: Evènement lors du déplacement ou du redimensionnement d'un splitter
- Ajouté: Vérifications temps réel pour Plot(x,y,Color) avec ScreenOutput() et SpriteOutput()
- Ajouté: Vérifications supplémentaires pour DirectoryEntrySize/Name/Attributes()

- Amélioré: Editeur PureBasic par Tinman
- Amélioré: Interface Importer et les interfaces DirectX9 dans les residents (merci à Traumatic !)
- Amélioré: Utilisation des icones de Kale pour l'éditeur
- Amélioré: Documentation française en partie revue et corrigée par trasfract

- Optimisé: Le mode 'Debugger' est plus compact et plus rapide
- Optimisé: Bibliothèque Misc (chaque commande est maintenant indépendante)
- Optimisé: Function Base64Encoder() plus rapide
- Optimisé: Génération du code assembleur plus compact pour les concaténations de string

- Modifié: Syntaxe d'OffsetOf(), pour calquer celle de SizeOf()

- Fixé: Un bug dans ImageGadget() avec les skins XP activées et images 32 bits
- Fixé: ExplorerListGadget() n'affichait pas les .ico and .lnk correctement
- Fixé: ButtonImageGadget() pouvait perdre son image dans quelques rare cas
- Fixé: Plus de son 'ding' lors d'un clic de souris en mode plein écran quand ExamineMouse() n'est pas utilisé
- Fixé: L'icone du programme est correctement affichée lors d'un ALT+TAB avec une application plein ecran
- Fixé: Les sprites sont correctement rechargés lorsque que ALT+TAB est utilisé
- Fixé: CopyDirectory() modifiait le string passé en paramètre dans un cas particulier
- Fixé: ListIndex() ne fonctionnait pas correctement
- Fixé: RemoveString() et CRC32FingerPrint() ne pouvaient pas être utilisés dans une expressions
- Fixé: SetGadgetItemText() ne fonctionnait pas avec ListViewGadget()
- Fixé: ExamineDirectory() plantait si un string non initialisé était passé en paramètre
- Fixé: CalendarGadget() ne pouvait pas etre utilisé plusieur fois sur la meme fenêtre
- Fixé: RSet() pouvait renvoyer un resultat érroné
- Fixé: CreateFile() ne fonctionnait pas avec les fichiers cachés
- Fixé: ZeroMemory_(), FillMemory_(), MoveMemory_() et CopyMemory_() n'était pas reconnus
- Fixé: #PB_Event_MoveWindow n'était pas émis correctement
- Fixé: #PB_EventType_LostFocus n'était pas émis si 2 StringGadget() étaient cote à cote
- Fixé: Les tooltips des gadgets ne s'affichaient pas sur NT4 si la fenetre etait 'toujours au dessus'
- Fixé: Le plugin OGG ne fonctionnait plus. Il est plus rapide maintenant.
- Fixé: ResizeImage() ne change plus l'image si les meme dimensions sont utilisées
- Fixé: TAB dans un EditorGadget() ne sort plus du gadget mais insert un TAB
- Fixé: LCase() ne gérait pas le caractère allemand 'ß' correctement
- Fixé: SetGadgetState() ne fonctionnait pas correctement avec OptionGadget()
- Fixé: Les dimensions de la fenetre du Debugger n'étaient pas enregistrées
- Fixé: AddGadgetItem() avec EditorGadget()
- Fixé: SortArray() pouvait planter sur des gros tableaux déjà triés
- Fixé: ReceiveNetworkFile() ne gérait pas les noms de fichier longs
- Fixé: Affichage corrompu avec ButtonImageGadget() et le mode 'Toggle' (avec l'API)
- Fixé: SpriteWidth() et SpriteHeight() returned wrong values when ClipSprite() was used
- Fixé: MessageRequester() sur une fenêtre 'console' la faisait disparaitre
- Fixé: SetGadgetState() avec ListIconGadget() prenait le focus
- Fixé: Base64Encoder() ne produisait pas un encodage correct
- Fixé: Probleme de rafraichissement avec Frame3DGadget() et les options #PB_Frame3D_Single/Double
- Fixé: Fuite de ressource GDI dans ButtonImageGadget() et ImageGadget()
- Fixé: RotateSprite3D() n'utilisait pas le bon angle
- Fixé: DisableMenuItem() ne fonctionnait pas avec #PB_Any
- Fixé: GadgetWidth() ne fonctionnait pas avec SpinGadget()
- Fixé: Date() renvoyait un mauvais resultat avec un date tres petite (1970,1,1,0,0,0)
- Fixé: CallFunctionFast() ne prenait que 17 parametres à la place de 20
- Fixé: OpenWindowedScreen() avec AutoStretch n'affichait pas la totalité des pixels
- Fixé: Quelques problèmes de rafraichissement avec PanelGadget()
- Fixé: La couleur transparente avec les écrans 32 bits et les sprites en mode 'texture'
- Fixé: Quelques bugs mineurs dans l'IDE
- Fixé: Plusieurs bugs dans le compilateur (concatenation de strings, interfaces dans les procedures)

25 Octobre 2004 : Version 3.92

- Ajouté: CalendarGadget() et DateGadget(), merci à Fr34k !
- Ajouté: LibraryID(), SwapElements()
- Ajouté: SaveSprite() a maintenant un paramètre 'Options' et gère les écrans/sprites 8 bits
- Ajouté: Un double-click sur le fond des fenêtres génère un évènement (merci à Rings)

- Optimizé: CountList() et ListIndex() sont dorénavant très rapides.

- Modifié: DeleteElement() revient toujous à l'élément précédent, pour être compatible avec For/Each.
(voir la documentation pour plus d'information)
- Modifié: Le répertoire courant de l'application n'est jamais changé par les commande PureBasic.
Auparavant, le répertoire contenant l'executable était considéré comme le répertoire courant.

- Fixé: Bug dans CloseWindow() et HideWindow() quand le paramètre 'ParentWindow' d'OpenWindow() était utilisé
- Fixé: IsSound() n'était pas disponible dans le mode de compatibilité NT4
- Fixé: AddDate() pouvait renvoyer un mauvais résultat en fonction du fuseau horaire de l'ordinateur
- Fixé: Fuite de mémoire avec les linkedlists, tableau et variable locales quand une structure contenant un string était utilisée
- Fixé: La qualité par défaut de SaveSprite() avec le plugin JPEG est '7'.
- Fixé: DisplayPalette() ne fonctionnait pas totalement sur les systèmes XP
- Fixé: ImageGadget() support les ToolTips et le changement d'icon en image (et vice et versa)
- Fixé: ButtonImageGadget() supporte les skins XP et le changement d'icon en image (et vice et versa)
- Fixé: SetGadgetItemText() pour ListViewGadget() effacait le 'UserData' de l'élément
- Fixé: CopyImage() échouait sur Window NT 4 dans certaines circonstantes
- Fixé: Fuite de mémoire dans la commande SendNetworkFile()
- Fixé: StatusBarText() ne rafraichissait pas correctement la barre de status avec l'option 'Borderless'
- Fixé: CatchImage() avec #PB_Any
- Fixé: Le décodeur PNG gère maintenant sans problème les PNG corrompues
- Fixé: L'encodeur JPEG pouvait crasher si le critère de qualité était de 3 ou moins
- Fixé: Une erreur mineure sur le TreeGadget() quand les 'checkboxes' étaient activées
- Fixé: La compression avec les commandes 'Pack' pouvait se bloquer dans certaines circonstances
- Fixé: La bibliothèque OnError n'etait pas utilisable dans une DLL (merci à Rings)
- Fixé: La concatenation de chaines de caractères statiques était erronée dans certains cas
- Fixé: Le compilateur ne retournait pas un code d'erreur different de 0 si une erreur était survenue
- Fixé: Plusieurs bugs dans le compilateur

4 Juillet 2004 : Version 3.91

- Ajouté: Bibliothèque Desktop - Ajouté: IsDatabase(), IsFile(), IsFont(), IsDirectory(), IsGadget(), IsImage(), IsLibrary(), IsMenu(), IsModule(), IsMovie(), IsPalette()
IsSprite(), IsSprite3D(), IsStatusBar(), IsSysTrayIcon(), IsToolBar(), IsWindow()
- Ajouté: Le fichier 'manifest' (pour les skins XP) est maintenant inclu dans l'executable
- Ajouté: Support d'un fichier principal dans l'IDE pour les projets multi-fichiers
- Ajouté: Détection par le debugger de l'utilisation des éléments vides d'une liste chainée

- Modifié: WindowMouseX() et WindowMouseY() renvoie leurs valeurs a partir de la zone cliente (DesktopMouseX() remplace WindowX()+WindowMouseX()).
- Modifié: Le compilateur de resource et le linker sont ceux du PellesC (executables encore plus petits).

- Fixé: AddDate()
- Fixé: Le MDIGadget ne se retaillait pas correctement quand il était ajouté après une barre de status
- Fixé: InputPathRequester() pouvait crasher sous Win98 sous certaines circontances
- Fixé: La position de OpenWindowedScreen() était incorrecte quand il était attaché à un container
- Fixé: Trim() dans certaines expressions
- Fixé: Un crash qui pouvait arriver à la fin du programme quand OpenHelp() était utilisé.
- Fixé: Le film affiché par PlayMovie() pouvait disparaitre lors de la première lecture
- Fixé: Plusieurs bugs du compilateur, notemment lors de l'accès à certaines structures

12 Avril 2004 : Version 3.90

- Ajouté: Support de #PB_Any (numérotation dynamqieu) pour les bibliothèques DataBase, File, Font, FileSystem, Gadget, Image, Library,
Module, Movie, Palette, Sprite, Sprite3D, SysTray, ToolBar, StatusBar et Window
- Ajouté: CountString(), KeyboardInkey(), GetWindowTitle(), SetWindowTitle(), ElapsedMilliseconds()
- Ajouté: RemoveGadgetColumn(), SetGadgetAttribute(), GetGadgetAttribute(), SetGadgetItemAttribute(), GetGadgetItemAttribute()
- Ajouté: MDIGadget() par Fr34k
- Ajouté: Support de la synchronisation de l'écran pour FlipBuffers() (y compris en mode fenêtré)
- Ajouté: Redimensionnement automatique pour les 'StatusBar' et 'ToolBar' (plus besoin de callback)
- Ajouté: Nouvelle méthode de redimensionnement pour les fenêtres par Fr34k (plus besoin de callback)
- Ajouté: Nouveau paramètre optionnel 'z' pour TransformSprite3D()
- Ajouté: Plusieurs nouvelles options pour SplitterGadget() pour plus de flexibilité
- Ajouté: Support de SetGadgetAttribute() pour ScrollAreaGadget().
- Ajouté: Support NT4 des Joysticks et des Modules
- Ajouté: Affichage hexadecimal, positionnement paramétrable des fenêtres pour le debugger
- Ajouté: Support de toutes les icônes lors de la création d'un executable
- Ajouté: Amélioration de l'IDE: Interface viewer, support du MS SDK, chercher dans les fichiers, numérotation des lignes
- Ajouté: Mot clef 'Static' pour les variables locales qui doivent être persistentes
- Ajouté: Toute dernière version de FAsm (l'assembleur), plus rapide et permet de gérer de plus gros sources
- Ajouté: Support du 'QuickHelp' dans Purebasic IDE pour la plupart des functions API !

- Modifié: Plus de #MemoryID et d'Options' pour AllocateMemory()
- Modifié: CDAudioName() ne nécessite plus d'ID.

- Optimisé: CDAudio, Database, File, Network, StatusBar and Systray (chaque commande est maintenant indépendante)

- Supprimé: UpdateStatusBar(), UseMemory() et MemoryID()

- Fixé: Documentation francaise parfaitement à jour
- Fixé: Support de NT4 (DirectX 3) pour les bibliothèques Sprite, Palette, Sound, Keyboard et Mouse
- Fixé: CreateSprite3D(), la largeur et la hauteur etait trop grande d'1 pixel
- Fixé: SpritePixelCollision(), si le même sprite était utilisé pour les deux collisions
- Fixé: Debugger sous win98 (les fenêtres passaient quelque fois en arrière plan)
- Fixé: OpenWindowedScreen() ne prenait pas en compte la hauteur du menu (quand il y en avait un)
- Fixé: IsFilename() ne prenait pas tous les cas de figure en compte
- Fixé: Plusieurs erreur du compilateur avec des expressions complexes
- Fixé: SizeOf() quand il était utilisé avec des structures étendues (Extends)
- Fixé: NewPrinterPage(), bug sous Win98 quand on imprimait la deuxième page
- Fixé: CloseScreen() quand la bibliothèque Sprite3D était utilisée
- Fixé: Plusieurs problèmes de chemin relatifs lors de l'utilisation du compilateur en mode console
- Fixé: Maintenant, tous les 'Requesters' bloquent les autres fenêtres ouvertes

9 Décembre 2003 : Version 3.81

- Ajouté: DatabaseUpdate(), DatabaseError()
- Ajouté: Support de Play/Stop/Resume/PauseMovie() pour les films rendus sur sprites
- Ajouté: Support du mot clef 'Extends' pour les 'Structure'
- Ajouté: Support des icônes et du redimensionnement en temps réel pour DrawImage()
- Ajouté: Support des formats BMP en 2, 16 et 256 couleurs pour Catch/LoadSprite()
- Ajouté: Support du paramètre '#PB_Default' pour DrawingFont()
- Ajouté: Gestion du Japonais au niveau des Gadget, de l'éditeur et du Visual Designer
- Ajouté: SmartUpdate, un outil permettant la mise à niveau automatique de PureBasic
- Ajouté: Dernière version du Visual Designer

- Optimisé: Les ExplorerGadgets sont maintenant 5x plus rapide pour la lecture des répertoires

- Modifié: Les labels ne sont plus sensibles au minuscules/majuscules
- Modifié: La qualité par défault de SaveImage() avec le plugin JPEG est maintenant fixée à 7
- Modifié: InitModule() et InitPalette() ne nécessitent plus de paramètres maximums
- Modifié: PlayMovie() a changé pour les films rendus sur sprites

- Fixé: Une fuite mémoire aux niveaux des films rendus sur sprites
- Fixé: Les commandes de la bibilothèque 'Requesters' pouvaient bloquer les autres applications
- Fixé: Des définitions d'interfaces était érronnées dans les résidents
- Fixé: La combinaison de plusieurs constantes de type string pouvait engendrer des erreurs
- Fixé: KeyboardReleased(#PB_Key_All) ne fonctionnait pas
- Fixé: Un problème du compilateur avec les Interfaces dans les procedures
- Fixé: Un problème avec ProcedureDLL quand un retour de type String était utilisé
- Fixé: CopySprite() ne fonctionnait pas avec les sprites de type 'Alpha'
- Fixé: Un problème avec l'optimiseur avec des variables de type bytes et word (très rare)
- Fixé: Un problème avec les decodeurs JPEG et TIFF dans des situations extrèmes
- Fixé: Léger problèmes avec EditorGadget() et SpinGadget()

6 Octobre 2003 : Version 3.80

- Ajouté: ExplorerComboBoxGadget()
- Ajouté: CameraProjection(), CameraBackColor() et CameraRange()
- Ajouté: L'operateur modulo: '%'
- Ajouté: 'ForEach' pour énumérer les éléments d'une liste facilement
- Ajouté: Interface/EndInterface pour les appels 'Objets' tels que COM ou DirectX !
- Ajouté: Fichiers résindents complets pour le support des interfaces
- Ajouté: 'Break' et 'Continue' pour modifier les itérations des boucles
- Ajouté: Enumeration/EndEnumeration pour déclarer rapidement des ensembles de constantes
- Ajouté: OffsetOf() pour retrouver l'index d'un champ d'une structure ou d'une interface
- Ajouté: SizeOf() supporte maintenant les interfaces et les variables
- Ajouté: Les constantes Float, String et les interfaces sont intégrées dans les résidents
- Ajouté: Support de la 'Qualité' pour SaveImage() avec le plugin JPEG
- Ajouté: Le parametre 'Options' de MessageRequester() est maintenant optionnel
- Ajouté: La coloration syntaxique ainsi que le navigateur de structures

- Optimisé: Suppression de nombreuses dépendances de OGRE, donc Engine3D.dll a été réduite

- Changé: Les constantes sont de nouveau constantes

- Fixé: Affichage des registres ASM dans le Debugger
- Fixé: Problème avec 'IncludePath' utilisé avec 'IncludeBinary'
- Fixé: TAB peut maintenant être utilisé pour sortir d'un ComboBoxGadget() éditable
- Fixé: DeleteDirectory() ne pouvait pas effacer un repertoire en lecture seule
- Fixé: Le decodeur TGA ne gérait pas les images inversé verticalement et 'RLE'
- Fixé: AddPackFile() et PackMemory() se bloquait de temps en temps
- Fixé: La taille des structures peuvent maintenant être supérieures à 32ko
- Fixé: Int() pouvait générer des résultats faussés avec des valeurs négatives
- Fixé: Les listes chainées pouvait se décaler dans certains cas tres rares
- Fixé: Line() et LineXY() ne dessinaient pas le dernier point
- Fixé: Vérification InitEngine3D() en temps réel (debugger)
- Fixé: TextLength() n'acceptait pas les chaines de caractères vides
- Fixé: ProcedureReturn pouvait crasher quand il était utilisé dans un 'Select'
- Fixé: Les sons étaient limités à 50 quand le debugger était activé
- Fixé: ClipSprite() ne supportait pas DisplayAlphaSprite(), DisplayShowSprite(), DisplaySolidSprite() et DisplayTranslucideSprite()
- Fixé: Un mot clef réservé (comme 'Data') ne pouvait pas être utilisé dans une structure
- Fixé: CreatePack(), SaveImage() et SaveSprite() ne supportait pas les noms de fichiers très long
- Fixé: Inkey() mettait le programme en attente
- Fixé: FileSize() retournait une valeur érronée pour les racines ('C:\') sous Win9x
- Fixé: L'editeur inversait les tabs dans un cas tres rare

13 Juillet 2003 : Version 3.72

- Modifié: Attention! L'index du motif pour SelectedFilePattern() et Open/SaveFileRequester() commence à '0' au lieu de '1'.
- Modifié: Attention! L'index retourné par ListIndex() commence à '0' au lieu de '1'

- Amélioré: IDE: Chercher/Remplacer amélioré; une '*' identifie un fichier modifié
- Amélioré: La bibliothèque 'Toolbar' a été optimisée
- Amélioré: Toutes les commandes ont maintenant une aide rapide (barre d'état de l'éditeur)

- Fixé: ParseDate() renvoyait des valeurs incorrectes quand aucun separateur n'était utilisé
- Fixé: ResizeImage() retaille maintenant les images avec qualité
- Fixé: Plusieurs problemes d'évenements concernant les Gadgets (Splitter et Panel)
- Fixé: Les decodeurs PNG et JPEG ne supportaient pas tous les formats speciaux
- Fixé: Le nom du plusieurs fonctions (bibliotheque OnError)
- Fixé: Plusieurs bugs concernant le compilateur

7 Juin 2003 : Version 3.70

- Ajouté: Bibliothèque Terrain - Ajouté: Bibliothèque Billboard - Ajouté: Bibliothèque Entity - Ajouté: Bibliothèque Material - Ajouté: Bibliothèque Particle - Ajouté: Bibliothèque OnError - Ajouté: CameraLookAt(), CameraRenderMode(), CameraFOV(), Engine3DFrameRate(), CountRenderedTriangles()
- Ajouté: CreateMesh(), SetMeshData()
- Ajouté: ExamineLibraryFunctions(), NextLibraryFunction(), LibraryFunctionName(), LibraryFunctionAddress()
- Ajouté: IsFunctionEntry(), CallCFunction(), CallCFunctionFast()
- Ajouté: RenderMovieFrame(): il est maintenant possible de jouer un film directement sur un sprite ou un écran !
- Ajouté: OpenGadgetList(), ScrollBarGadget(), ScrollAreaGadget(), SplitterGadget()
- Ajouté: HyperLinkGadget(), ContainerGadget(), EditorGadget()
- Ajouté: TreeGadgetItemNumber(), ExplorerListGadget(), ExplorerTreeGadget()
- Ajouté: L'option #PB_FontRequester_Effects pour FontRequester()
- Ajouté: PanelGadget() a été entièrement réécrit pour supporter les thèmes Windows XP
- Ajouté: TreeGadget() a été réécrit pour permettre insertion dynamique d'éléments
- Ajouté: AddGadgetItem() pour le PanelGadget() supporte les images
- Ajouté: Le paramètre 'FenetreMereID' à été ajouté à OpenWindow()
- Ajouté: Support du format 'CDecl' pour les bibliothèques et les procedures (Added 'ProcedureCDLL' and 'DeclareCDLL' keyword)
- Ajouté: End [CodeSortie]
- Ajouté: Messages d'erreurs plus précis pour les erreurs de linker et d'assembleur
- Ajouté: Nouveau switch pour le compilateur en ligne: /LINENUMBERING
- Ajouté: Support complet du debugger pour le moteur 3D
- Ajouté: Support du gadget ComboBox par les commandes GetGadgetItemText() and SetGadgetItemText()
- Ajouté: De nombreuses nouvelles fonctions pour le Visual Designer: Ordre des tabulations, selection de la police, nouveaux gadgets etc..

- Modifié: Bibliothèque Mesh, due à l'introduction de la bibliothèque Entity
- Modifié: ClosePanelGadget() à été renommé en CloseGadgetList()
- Modifié: Les label de l'assembleur en ligne sont maintenant sous la forme 'l_label' au lieu de 'pLabel'

- Optimisation de la bibliothèque Movie

- Fixé: SpriteCollision() et SpritePixelCollision() étaient incorrect (1 pixel de décalage)
- Fixé: Le résultat de CopyDirectory() était faux dans certains cas
- Fixé: StrF(): L'arrondi est maintenant effectué correctement
- Fixé: Plusieurs warning étaient manquant dans le debugger
- Fixé: Les nombres à virgule flottante (floats) et les nombres entiers étaient quelquefois mal évalués

25 Mars 2003 : Version 3.62

- Suprimé: FakeEndSelect

- Corrigé: Plusieurs bugs dans le compilateur
- Corrigé: Bug dans l'encodeur et le decodeur PNG
- Corrigé: ProcedureReturn dans un Select/EndSelect
- Corrigé: Array allocation si aucune mémoire n'est disponible
- Corrigé: Int() ne fonctionnait depuis la v3.60
- Corrigé: Val() accept maintenant tous les formats Basic
- Corrigé: AddPackFile() avait quelques problèmes sur certains types de fichiers
- Corrigé: RunProgram() avec les chemins de fichiers très longs

19 Mars 2003 : Version 3.61

- Corrigé: Bug capital dans la gestion des tableaux
- Corrigé: Bug capital dans la commande MD5FileFingerprint()
- Corrigé: Editeur: coloration syntaxique pout commande/procedures et le raccourci Alt+V
- Corrigé: 2 bugs dans le Visual Designer
- Corrigé: Chargement des sprites avec les plugins (JPEG, PNG) en mode 16 bits
- Corrigé: Le mot clef XOR dans l'assembleur en ligne n'etait plus reconnu
- Corrigé: Decodeur TGA sur certains fichiers

17 Mars 2003 : Version 3.60

- Ajouté: Puissant éditeur visuel, pour créer rapidement des interfaces graphiques
- Ajouté: Nombreuses optimisations du compilateur qui produit un code plus compact et plus rapide (principalement concernant les tableaux et les variables structurées)
- Ajouté: Decodeur JPEG, TIFF, PNG et TGA pour les sprites et les images (plugins)
- Ajouté: Encodeur JPEG et PNG pour les sprites et les images (plugins)
- Ajouté: Decodeur OGG pour les sons (plugins)
- Ajouté: AvailableScreenMemory(), SelectedFilePattern(), DefaultPrinter()
- Ajouté: Paramètre 'Options' pour LoadFont() pour gérer l'italique, le gras etc.
- Ajouté: Support des sources multiples pour le debugger (fichiers inclus)
- Ajouté: Controle de dépassement d'index des tableaux dans le debugger
- Ajouté: Controle de dépassement de lecture des 'Data' dans le debuggercheck
- Ajouté: Support des icons pour CatchImage()
- Ajouté: DLL Importer in the Library SDK
- Ajouté: Support des processeurs MMX, 3DNOW, SSE et SSE2, avec auto-selection (pour choisir automatiquement à l'execution la routine la plus rapide en fonction du processeur).

- Optimizé: Bibliothèques Font, Gadget et Window (Commandes séparées, merci à Danilo)

- Supprimé: CatchJPEGSPrite() et LoadJPEGSprite() (remplacés par les plugins)

- Amélioration: Le format des bibliothèques PureBasic (compressé)
- Amélioration: L'assembleur en ligne accepte les mot clefs du FPU
- Amélioration: L'éditeur: double-clique sur (X)IncludeFile ouvre le fichier, l'aide contextuelle fonctionne pour tous les mots clefs (If/EndIf..) Coloration syntaxique de l'assembleur, aide contextuelle pour l'assembleur

- Modifié: SetGadgetFont() prends maintenant 2 paramètres

- Corrigé: SortArray() lors de tris en de strings mode minuscule=majuscule
- Corrigé: RunProgram() avec 3 paramètres
- Corrigé: ImageOutput() sous Win98
- Corrigé: Sprite 16bits sur des anciennes cartes graphiques qui travaillent en 15bits
- Corrigé: Quelques bugs dans le compilateur

13 Janvier 2003 : Version 3.51

- Actualisé: Documentation francaise

- Fixé: Quelques bugs dans le compilateur
- Fixé: IPString() et IPAddressField() géraient les IP en mode inversé
- Fixé: InputRequester()
- Fixé: ReadPreferenceLong/String/Float() pour permettre les espaces dans les mots clefs
- Fixé: Beep lorsque le bouton de la souris était enfoncé, en mode plein écran
- Fixé: Date() et ParseDate() lorsqu'une date invalide était spécifiée
- Fixé: Problème avec les thèmes XP sur l'éditeur
- Fixé: Problème du 'ProcedureBrowser' sur XP (Merci à Dominique et à Plouf)
- Fixé: Les dimensions de la commande OpenWindow() étaient erronées dans certains cas

- Enlevé: Validation 'Gosub/Return' introduit dans la version 3.50 (pour des raisons de flexibité)

6 Janvier 2003 : Version 3.50 - Bonne Année !

- Ajouté: Bibliothèque Engine3D - Ajouté: Bibliothèque Camera - Ajouté: Bibliothèque Light - Ajouté: Bibliothèque Mesh - Ajouté: Bibliothèque Texture - Ajouté: WriteFloat(), ReadFloat(), MouseLocate(), MD5FileFingerprint()
- Ajouté: Les options STDCALL et ANY pour les PureLibraries. Voir la documentation du SDK doc
- Ajouté: GetGadgetItemState() supporte les boites à cocher du TreeGadget()
- Ajouté: SetGadgetState() supporte le ButtonImageGadget()

- Amélioré: CallFunction() et CallFunctionFast(): Les floats peuvent être passé directement
- Amélioré: Le paramètre 'Apparence' de SetStatusBarText() est maintenant optionel
- Amélioré: Le paramètre 'Options' de Frame3DGadget() est maintenant optionel

- Optimizé: CallFunctionFast() (2x plus rapide)
- Optimizé: La génération du code: Chr(#Constante) et quelques améliorations en vitesse d'execution

- Modifié: L'assembleur (FASM), est maintenant utilisé, résultant en un code plus compact et plus rapide
- Modifié: LSet() par RSet() et RSet() par LSet() (Fonctionnement inversé par rapport au autres BASIC)
- Modifié: OpenTreeGadgetNode() et CloseTreeGadgetNode() nécessitent un paramètre
- Modifié: ReleaseMouse() nécessite un paramètre

- Fixé: Le support de la souris en mode jeux fenetré
- Fixé: SelectElement() lorsque la valeur passée était -1
- Fixé: TreeGadget() quand il était utilisé plusieurs fois sur la même fenêtre
- Fixé: SaveImage() sur le bureaux en mode 16bits et 8bits
- Fixé: RSet() avec 2 arguments
- Fixé: Un peu bug dans ParseDate()
- Fixé: AddPackFile() et AddPackMemory(): dépassement de capacité dans quelques rare cas
- Fixé: OpenFileRequester() en mode multiselection
- Fixé: Un bug etrange quand de nombreuses images étaient utilisées dans les GadgetItems
- Fixé: Bibliothèque Cipher

9 Octobre 2002 : Version 3.40

- Changé: Les noms de 'Structure' ne prennent plus en compte les différences majuscules<>minuscules

- Ajouté: Bibliothèque Date - Ajouté: Hostname(), ExamineIPAddresses(), NextIPAddress(), IPString()
- Ajouté: LSet(), RSet(), Bin(), RemoveString(), StringField()
- Ajouté: ModuleVolume(), OSVersion(), WaitThread()
- Ajouté: CopyDirectory(), DeleteDirectory(), IsFilename()
- Ajouté: NextSelectedFileName(), InputRequester()
- Ajouté: DrawingBuffer(), DrawingBufferPixelFormat(), DrawingBufferPitch(), FillArea()
- Ajouté: Constantes intégrée au compilateur: #PB_Compiler_Date, #PB_Compiler_OS

- Optimizé: FileSystem, StringExtension et Date (chaque commande est maintenant indépendante)

- Amélioré: RunProgram() a un nouveau paramètre optionnel: RepertoireCourant$
- Amélioré: SetGadgetFont(#PB_Font_Default) revient à la font par défaut
- Amélioré: OpenWindow() accepte #PB_Window_WindowCentered et #PB_Window_ScreenCentered
- Amélioré: GetGadgetItemText() et SetGadgetItemText() suppotre le TreeGadget()
- Amélioré: ReplaceString() a un nouveau paramètre optionnel: 'PositionDepart'
- Amélioré: SetGadgetState() supporte ImageGadget() pour changer son image
- Amélioré: Paramètre 'NiveauCompression' pour PackMemory(), AddPackFile() et AddPackMemory()
- Amélioré: Dans une DLL, AttachProcess(), DetachProcess(), etc.. doivent avoir le paramètre 'Instance'
- Amélioré: Lors de la création d'une DLL, les '_' précédent les noms de fonctions on été supprimés

- Fixé: Problème de debugger dans la bibliothèque FileSystem
- Fixé: ReadPreferenceLong() et ReadPreferenceFloat()
- Fixé: Bug de SpriteOutput() lors de l'utilisation de Plot()
- Fixé: CDAudioTrackLength(): La dernière piste renvoyait toujours 0
- Fixé: OpenWindowedScreen(): Mauvaises valeurs pour OffsetBas/Droite
- Fixé: GetPathPart(), GetFilePart() et GetExtensionPart()
- Fixé: SetGadgetText() lors d'une utilisation avec une ComboBox et une chaine vide
- Fixé: SetClipboardText() utilise maintenant le format TEXT au lieu du format OEM
- Fixé: Le compilateur ne permet plus qu'une variable globale soit utilisée en paramètre d'une procedure
- Fixé: En mode 'InlineASM', 'MOV eax, "String"' et 'MOV eax, #CONSTANT' étaient mal compilés
- Fixé: Bug lors de l'utilistaion des constantes négatives de type float
- Fixé: Bug lors de l'utilisation de floats avec les functions API
- Fixé: Bug lors d'une comparaison entre une chaine de caractère et un nombre
- Fixé: Bug lors de l'utilisation d'IncludeBinary dans une 'DataSection'
- Fixé: Bug lorsque DECLARE et PROCEDURE ne correspondait pas
- Fixé: Bug lorsque DEBUG etait utilisé dans les procédures et affichait des chaines de caractères

- Amélioration notable de l'éditeur (Fichiers multiples, Procedure browser, outils personnaliés et bien plus...). Il est maintenant OpenSource ! Merci à Danilo.

16 Aout 2002 : Version 3.30

C'est une version de correction de bugs et de synchronization avec Linux

- Ajouté: HideMenu(), CreateSprite(), UseBuffer()
- Ajouté: Aide en français (entièrement traduite)

- Amélioré: SortArray() fonctionne avec les tableaux de 'float'
- Amélioré: GetFilePart(), GetPathPart() et GetExtensionPart() enlève les trémas (") si besoin est
- Amélioré: SetGadgetItemState() et GetGadgetItemState() peuvent maintenant agir sur ListIconGadget()
- Amélioré: LoadSprite(), GrabSprite(), CopySprite(), CatchSprite(), LoadJPEGSPrite(), CatchJPEGSprite() ont un nouveau paramètre 'Mode' optionnel

- Fixé: SetClipboardText(): ne fonctionnait pas dans certains cas
- Fixé: SpritePixelCollision(): ne fonctionnait pas si les sprites étaient de tailles différentes
- Fixé: LoadJPEGSprite ignorait le paramètre 'Mode' (pas bon pour les Sprites3D)
- Fixé: Bug dans AddGadgetItem() utilisé en conjonction avec ListIconGadget()
- Fixé: PokeF() était manquant
- Fixé: MovieAudio(): mauvaise échelle pour le volume (décibels)
- Fixé: ReleaseMouse() n'était pas reconnue
- Fixé: Bug dans la bibliothèque 2DDrawing (encore...)
- Fixé: LoadSprite() ne fonctionnait pas avec les BMP en 16 bits et 32 bits
- Fixé: GetGadgetText() utilisé avec un ComboBoxGadget() éditable
- Fixé: ReadByte() et ReadWord() (avec des variables de type long/word)
- Fixé: FreeMenu(), GadgetX() et GadgetY()
- Fixé: DisplaySolidSprite() était manquant
- Fixé: Routine de debug manquant pour GadgetID()
- Fixé: Bug quand plusieurs films étaient ouverts (crash lors de la sortie du programme)
- Fixé: ResizeImage()
- Fixé: PreferenceGroup()
- Fixé: ExamineMouse() renvoyait toujours 0
- Fixé: PathRequester() crashait avec un chemin non initialisé
- Fixé: InitSprite3D() crashait quand il était seul
- Fixé: Editeur: ZoomSprite3D() ne s'affichait pas en surbrillance

9 Juin 2002 : Version 3.20

Attention! Le comportement des callbacks a changé et va provoquer des bloquages si vous ne les mettez pas à jour ! Voir la documentation de SetWindowCallback().

- Ajouté: Cipher library: CRC32Fingerprint(), MD5Fingerprint(), DESFingerprint(), Base64Encoder()
- Ajouté: AddKeyboardShortcut(), RemoveKeyboardShortcut(), SpinGadget(), WebGadget()
- Ajouté: GetMenuItemState(), SetMenuItemState(), MenuHeight()
- Ajouté: KeyboardReleased(), Trim(), Space()
- Ajouté: SelectElement(), LineXY(), GetExtensionPart()
- Ajouté: Opérateurs binaires ! (XOR) et ~ (NOT)
- Ajouté: Mot clef BASIC 'Protected'
- Ajouté: Support pour Shift+Tab pour revenir en arrière dans les gadgets
- Ajouté: Le debugger détecte maintenant les pointeurs nuls et les divisions par 0

- Optimizé: Les bibliothèques 2DDrawing, Keyboard, Mouse, Sound et Sprite (commandes séparées) !
- Optimizé: Plot() est 40x plus rapide quand elle est utilisée avec ScreenOutput() (DirectX)

- Amélioré: PokeS() et PeekS() ont maintenant un paramètre 'Longueur' facultatif
- Amélioré: KeyboardPushed() gère #PB_Key_All comme paramètre
- Amélioré: FileSize() renvoie -2 si le fichier est un répertoire
- Amélioré: WindowID() peut avoir un paramètre optionel #Window
- Amélioré: Tous les gadgets ont un paramètre 'Options' facultatif qui permet de controler les looks ! (voir la documentation de chaque gadgets pour plus d'information)
- Amélioré: Plot(), Line(), Box(), Circle(), Ellipse() ont maintenant un paramètre 'couleur' facultatif.
- Amélioré: Quelques bugs corrigé dans le debugger. Quand un programme est arreté par le debugger, tout est correctement libéré.
- Amélioré: Ajout des routines de debug à la bibliothèque Sprite

- Changé: Renommage de StripLead() et StripTrail() en RTrim() et LTrim() pour une compatibilité avec les autres BASIC
- Changé: NetworkClientEvent(), CloseNetworkConnection()
- Changé: CreateToolBar(): ajout du paramètre 'WindowID'
- Changé: CreateMenu(): ajout du paramètre 'WindowID'
- Changé: NetworkClientEvent() et NetworkServerEvent(): plus de 'String' event: pouvait être une faille de sécurité majeure..
- Changé: OpenWindowedScreen() les paramètres x,y prennent en compte les bordures et le titre de la fenêtre.
- Changé: ResizeWindow(), WindowWidth() et WindowHeight() sont relatives à l'intérieur de la fenetre, pour éviter les problème de skin

- Supprimé: AttachToolBar(), DetachToolBar(), AttachMenu(), ReceiveNetworkString()

- Corrigé: Frame3DGadget() avec un cadre en relief et enfoncé
- Corrigé: Evènements du ListViewGadget()
- Corrigé: FileSize()
- Corrigé: StopDrawing(), problèmes d'affichage sous win9x (corruption après de nombreux appels)
- Corrigé: Problèmes relatifs au debugger..
- Corrigé: AddGadgetItem() avec ListIconGadget() (-1 comme position ne fonctionnait pas)
- Corrigé: SpritePixelCollision() avec les sprites clippés
- Corrigé: Bug probable dans Random()
- Corrigé: SpritePixelCollision(), seule la valeur transparente noire (0,0,0) fonctionnait<br visual> - Corrigé: InitSprite(), InitSound(), InitPalette(), InitKeyboard() n'affichent plus de fenetres si DirectX7+ n'est pas présent
- Corrigé: RemoveGadgetItem() et ClearGadgetItemList utilisés PanelGadget()
- Corrigé: PathRequester() chemin par defaut sous Win9x
- Corrigé: @linkedlist()avec le type '.s' renvoie maintenant le pointer correct vers l'élément (au lieu du pointer du string)
- Corrigé: ReadPreferenceString()
- Corrigé: Documentation: SaveImage(), ScreenID(), SelectedFontStyle() et SelectedFontColor() étaient manquants

6 Mai 2002 : Version 3.10

- Ajouté: Bibliothèque Preference: OpenPreferences(), CreatePreferences(), ReadPreferenceLong/Float/String(), WritePreferenceLong/Float/String() PreferenceComment(), PreferenceGroup()
- Ajouté: Support des skins Windows XP (Voir la fenêtre 'Compiler Options')
- Ajouté: GadgetX(), GadgetY(), GadgetWidth(), GadgetHeight(), GetGadgetItemState(), SetGadgetItemState(), GetGadgetItemText(), SetGadgetItemText(), CountGadgetItems(), TrackBarGadget(), IPAddressGadget()
- Ajouté: HideWindow(), RandomSeed(), MakeIPAddress(), IPAddressField()
- Ajouté: MouseWheel(), CatchSprite(), SaveSprite()
- Ajouté: RotateSprite3D(), ZoomSprite3D(), TransformSprite3D(), Sprite3DQuality(), Sprite3DBlendingMode()
- Ajouté: EventType(): Return/Change/Focus peuvent être detectés dans les StringGadget() et les ComboBox()
- Ajouté: CatchImage(), CreatePack(), ClosePack(), NextPackFile(), AddPackFile(), AddPackMemory(), PackFileSize(), OpenPack()
- Ajouté: DirectoryEntrySize(), DirectoryEntryAttributes()
- Ajouté: Compatible avec 'WindowBlinds' sur Windows XP

- Optimizé: Bibliothèques Image, Misc2, GadgetExtension, Requester, Sprite3D, Memory, et Packer (commandes séparées)

- Amélioré: CompareMemoryString(): Ajout d'un paramètre facultatif 'Longueur'
- Amélioré: DisplayPopupMenu(): Les paramètres (x,y) sont maintenant facultatifs
- Amélioré: ResizeGadget(): Utiliser '-1' dans un des paramètres pour garder la valeur précédente
- Amélioré: GetGadgetText() et SetGadgetText() fonctionnent maintenant avec TreeGadget() et ListIconGadget()
- Amélioré: AddGadgetItem() a maintenant un paramètre facultatif 'Image'
- Amélioré: OpenWindow() ajoute maintenant automatiquement la taille des bords pour éviter les problèmes de skin
- Amélioré: FileSize() renvoie la taille du fichier même si celui-ci est en cours d'utilisation

- Supprimé: InitGadget() etait inutile
- Supprimé: DoubleClick() et EventMouseButtons(), utiliser EventType() à la place
- Supprimé: OpenDefaultConsole(). Maintenant OpenConsole() detecte automatiquement si le programme est compilé en mode 'console' ou 'windows'
- Supprimé: AddListIconGadgetItem() et AddTreeGadgetItem(): utiliser AddGadgetItem() à la place
- Supprimé: ExpandTreeGadgetItem() et TreeGadgetItemState(): utiliser Set/GetGadgetItemState() à la place

- Corrigé: Evenements pour les ComboBox, ListIcon et Systray.
- Corrigé: Fuite de mémoire avec les strings dans certains cas
- Corrigé: Bug dans les procedures utilisées en tant que callbacks
- Corrigé: Create3DSprite(): la taille était un pixel trop petite
- Corrigé: Chaque fenêtre a sa propre classe
- Corrigé: PlaySound(): la routine du debugger était manquante et une erreur à la fin du son joué
- Corrigé: ResizeGadget() avec PanelGadget() et quelques problèmes de rafraîchissement
- Corrigé: FindString() sous Win9x
- Corrigé: ExamineDirectory() sous Win9x
- Corrigé: Bibliothèque Module, le playback devrait fonctionner partout
- Corrigé: SetGadgetText() avec ListViewGadget()
- Corrigé: SelectedFontColor()
- Corrigé: Bug dans DeleteElement()
- Corrigé: NewList xxxx() seul produisait une erreur
- Corrigé: Bug lors de l'impression d'images
- Corrigé: Command Random() (encore !)
- Corrigé: ResizeImage() sous Win9x
- Corrigé: Bug avec IncludeBinary (seul un chemin absolu fonctionnait)
- Corrigé: Editeur: 'Tab' n'etait pas correctement géré, bug dans la coloration syntaxique

4 Avril 2002 : Version 3.00

- Ajouté: Bibliothèque Library - Ajouté: Bibliothèque Help - Ajouté: Bibliothèque Clipboard - Ajouté: Bibliothèque Printer - Ajouté: Bibliothèque Timer (Merci à Danilo)
- Ajouté: Bibliothèque ComDX (Merci à Danilo)
- Ajouté: ElseIf
- Ajouté: Si une condition (If/While...) n'est pas fermée avant 'EndProcedure', le compilateur s'arrete.
- Ajouté: ToolBarToolTip(), SpritePixelCollision()
- Ajouté: CopyMemoryString(), MemoryStringLength(), CompareMemory(), ReAllocateMemory()
- Ajouté: CompareMemoryString(), CopyImage(), ResizeImage(), GrabImage(), SetPaletteColor()
- Ajouté: MovieStatus(), MovieLength(), SoundVolume(), SoundPan(), SoundFrequency(), CatchSound()
- Ajouté: FirstDatabaseRow(), PreviousDatabaseRow(), CreatePalette(), GetPaletteColor()
- Ajouté: UsePalette(), RGB(), ReplaceString(), StrU(), StrF(), ValF(), HideGadget(), GadgetID()
- Ajouté: Possibilité d'avoir un nombre de parametres variables pour chaque commande
- Ajouté: 'Declare' et 'DeclareDLL' pour pouvoir utiliser les procedures avant de les declarer
- Ajouté: Catalogue Hollandais pour l'editeur

- Modifié: Nouvelle architecture pour les bibliothèques PureBasic pour permettre d'integrer seulement les commandes réellement utilisées à la place de toute la bibliothèque. Pour l'instant, peu de bibliothèque ont été modifiées, mais c'est en cours :). De plus, les bibliothèques utilisent maintenant la norme STDCALL pour le passage des arguments, ce qui resout le probleme des arguments inversés pour les DLL et les Callbacks. Les anciennes bibliothèques sont biensur toujours compatibles.
- Modifié: StopSound(): Utiliser '-1' arrete tous les sons d'un coup.
- Modifié: PlaySound(): Le parametre 'Flags' est maintenant optionnel
- Modifié: Sort(): Une limite peut etre specifiée (ex: trier les elements de 20 à 50 du tableau)
- Modifié: Fichiers residents: Constantx '#VK_xx' ajoutées et quelques structures corrigées.
- Modifié: InitSound() n'a plus besoin de parametre
- Modifié: Renommage de BackColour(), FrontColour() et TransparentSpriteColour() en BackColor(), FrontColor() et TransparentSpriteColor()

- Corrigé: Crash du compilateur pendant l'utilisation des constantes 'string'
- Corrigé: StartDrawing() bugs
- Corrigé: Random(), nombres plus aléatoires..
- Corrigé: GetDatabaseString(): lors du retour de valeurs nulles
- Corrigé: ExamineDirectory(): Plantages sur les sytèmes Windows 9x
- Corrigé: Les résidents utilisateurs sont maintenant correctement chargés.
- Corrigé: Bug dans l'editeur qui empechait la saisie de charactères speciaux
- Corrigé: Bug FPU qui empechait OpenGL de s'initialiser
- Corrigé: 'Debug' command: accepte maintenant les parametres de type 'float'.

- Supprimé: Bibliothèques de Mr Skunk, car nous n'avons pas les sources pour corriger les bugs

24 Fevrier 2002 : Version 2.95

Note: Cette version permet de corriger des bugs importants avant la version majeure 3.0

- Ajouté: Support du format HtmlHelp pour l'aide. Les anciens fichiers HTML peuvent être supprimés.

- Corrigé: Bugs dans le compilateur bugs (Float dans les tableaux de structure, XIncludeFile, constantes 'xx', bug dans des expressions, fuites de memoire dans les procedures contenant des strings)
- Corrigé: Integration de la bibliothèque Image avec les Sprites
- Corrigé: Bug dans LoadJPGSprite()
- Corrigé: L'éditeur ne mettait pas en couleur correctement

27 Janvier 2002 : Version 2.90

- Ajouté: Création des DLL !
- Ajouté: Les constantes peuvent maintenant être un string ou un float
- Ajouté: Les commandes Debug et DebugLevel
- Ajouté: Editeur traduit en Italien par Yuri.

- Modifié: Les noms de variables, constantes et tableaux ne sont plus sensibles aux minuscules/majuscules.

- Corrigé: PathRequester(), OpenFileRequester(), SaveFileRequester()
- Corrigé: Petit bug sur ExamineDirectory()
- Corrigé: GetDatabaseFloat()
- Corrigé: Le compilateur ne fonctionnait pas sur Windows NT4 Sp6a.

13 Janvier 2002 : Version 2.82

- Ajouté: PeekF(), PokeF()
- Ajouté: Bibliothèque Math: ACos(), ASin(), ATan(), Pow(), Log(), Log10(), Round(), Cos(), Sin(), Tan(), Abs(), Sqr(), Int()
- Ajouté: SpriteOutput(): possibilité d'utiliser les commandes 2DDrawing sur n'importe quel sprite !
- Ajouté: #PB_WindowInvisible

- Corrigé: Bugs dans le compilateur (a.l = Pow(), a = -16/variable)
- Corrigé: OpenDatabaseRequester() qui ignorait certains drivers ODBC
- Corrigé: FrontColour() qui plantait DirectX
- Corrigé: SaveImage() enregistrait toujours en 24 bits au lieu de 32 bits
- Corrigé: ListViewGadget() a maintenant une hauteur exacte (pas arrondie)<br easy> - Corrigé: SysTrayIconToolTip() ne plante plus si le texte spécifié dépasse 64 caractères
- Corrigé: ListIconGadget() ne libérait pas les icônes après FreeGadget()
- Corrigé ChangeListIconGadgetDiplay() se redessine automatiquement
- Corrigé Couleur de fond des fenêtres sous Windows XP

- Modifié: StrF(Nombre) pour StrF(Nombre, Precision)

1er Janvier 2002 : Version 2.80 (Bonne année !)

Compilateur:<br compiler> - Amélioré: réécriture complète du parseur pour gérer les expressions complexes
- Amélioré: Optimisation du code généré - Ajouté: l'option /REASM (ligne de commande) pour réassembler un code source après modification
- Ajouté: possibilité d'utiliser les floats dans les appels API
- Corrigé: Support des nombres flottants (comparaison, procedure, Abs(), Sin() etc..)
- Corrigé: Tous les bugs connus

Bibliothèques:
- Ajouté: Bibliothèque Sprite3D: Create3DSprite(), Display3DSprite(), Transform3DSprite(), Free3DSprite(), Start3D(), Stop3D()
- Ajouté: SaveImage()
- Ajouté: Routine de debug temps réél pour toutes les commandes
- Corrigé: ExamineDirectory()
- Corrigé: OpenFile() (Read wasn't working)

Editeur:<br id=compiler> - Ajouté: Aide rapide (dans la barre d'état) pour toutes les commandes
- Ajouté: Accès rapide aux procedures
- Ajouté: Compatibilité Windows XP et support des thèmes
- Corrigé: Bug lors du remplacement de mots

28 Novembre 2001 : Version 2.70

- Ajouté: ChangeSysTrayIcon(), SysTrayIconToolIip(), ExpandTreeGadgetItem(), TreeGadgetItemState()
- Ajouté: DisableMenuItem(), GadgetToolTip(), StatusBarIcon()
- Ajouté: UseGadgetList(), TransparentSpriteColor(), ClipSprite(), CopySprite(), GrabSprite()
- Ajouté: ProgramParameter()
- Ajouté: Bibliothèque Thread
- Ajouté: Support du '!' pour inclure des commandes directement gérées par l'assembleur
- Ajouté: Undo/Redo à plusieur niveau dans l'éditeur
- Ajouté: Coloration syntaxique lors d'un copier/coller

- Amélioré: StatusBarText(): 2 nouvelles options pour l'alignement (Centré et Droite)
- Amélioré: ReadData() renvoie maintenant le nombre d'octets lus
- Amélioré: Le debugger est maintenant un thread de haute priorité

- Modifié: PlaySound() ajout d'une option pour jouer en boucle.
- Modifié: SetStatusBarText() -> StatusBarText()
- Modifié: InitSprite() suppression du paramètre maximum pour les sprites

- Corrigé: DatabaseQuery(), GetPathPart(), LoadSprite()
- Corrigé: CloseScreen() peut maintenant switcher du mode plein écran au mode fenetré
- Corrigé: Bugs dans le compilateur ('Tableaux multidimensionnels' et 'Read data' dans les procedures)
- Corrigé: Scintillement de l'éditeur

6 Novembre 2001 : Version 2.60

- Ajouté: Bibliothèque Database - Ajouté: Bibliothèque Compressor - Ajouté: Bibliothèque Console (Thanks to Sylvain)
- Ajouté: CopyMemory(), CatchJPEGSprite(), LoadJPEGSprite(), WindowMouseX(), WindowMouseY()
- Ajouté: MovieSeek(), MovieInfo(), DrawImage(), ScreenOutput(), WindowOutput()
- Ajouté: ImageOutput(), CreateImage()
- Ajouté: Possibilité d'utiliser les commandes 2DDrawing directement sur les écrans de jeux
- Ajouté: Mode XOR et rempli/détouré pour les commandes 2DDrawing
- Ajouté: Possibilité d'utiliser -1 avec FreeMemory() pour libérer toutes la mémoire d'un coup.
- Ajouté: Nouvelles options pour RunProgram(): lancement en tache de fond et/ou caché
- Ajouté: Puissant moniteur assembleur dans le debugger
- Ajouté: Afficheur de variables dans le debugger

- Modifié: Toutes les vielles fonctions MemoryBank ont été renommées.<br compiler> - Modifié: ReadMemory() et WriteMemory -> ReadData(), WriteData()
- Modifié: Le format des bibliothèques PureBasic (voir le SDK)
- Modifié: DrawingOutput() a été renommé en StartDrawing() et ne prends plus WindowID() en argument
- Modifié: Eof() prend un paramètre maintenant

- Corrigé: StopModule() n'a plus de paramètre #Module
- Corrigé: Un petit bug dans le compilateur
- Corrigé: PlayMovie()
- Corrigé: Le debugger était inexact quand des commandes ASM étaient utilisées
- Corrigé: Un coller dans l'éditeur ne change plus la police de caractères
- Corrigé: Un gros bug dans le débugger introduit dans la version 2.60. Désolé !

23 Septembre 2001 : Version 2.50

- Ajouté : Bibliothèque Mouse - Ajouté : Bibliothèque Movie - Ajouté : Bibliothèque Sort - Ajouté : Adresse d'un procédure (@procedurename())
- Ajouté : Support du format 'Console' dans le fichier .exe compilé
- Ajouté : DisplayTranslucideSprite(), DisplayAlphaSprite(), DisplayShadowSprite(), DisplayRGBFilter(), ChangeAlphaIntensity(), ClearScreen() OpenWindowedScreen(), DisplaySolidSprite(), CloseScreen(), SetFrameRate(), IsScreenActive(), StartSpecialFX(), StopSpecialFX(), ResizeGadget() JoystickAxisX(), JoystickAxisY(), ChangeGamma(), SetWindowCallback(), Red(), Green(), Blue()

- Modifié : LoadSprite()
- Modifié : DisplayPalette (Supprimé l'argument écran)
- Modifié : ExamineJoystick()
- Modifié : OpenScreen (ajouté paramètre Text$)
- Modifié : FontRequester (Ajouté un nom et taille de police initiale)
- Modifié : Frame3DGadget (Ajouté un flag de style de bordure)

- Corrigé : Un bug dans les routines DirectX en mode multitache (Sprite, Keyboard, Mouse).
- Corrigé : Le support d'icone pour les librairies ToolBar et Image
- Corrigé : SelectedFontName()
- Corrigé : ClearGadgetItemList() quant elle est utilisée avec TreeGadget()
- Corrigé : LoadFont() (YSize incorrecte)

Editeur :
- Ajouté : Sauvegarde automatique optionnelle avant la compilation
- Ajouté : Support de toutes les polices de caractères
- Ajouté : Autorise/Supprime la syntaxe colorée
- Ajouté : 2 nouveaux modes de coloration : 'Texte normal' et 'Procedures/Commandes'
- Ajouté : Changement de couleurs en temps réel
- Ajouté : Fenêtre 'A propos' améliorée;-)

- Amélioré : Coloration du texte ultra rapide au chargement d'un fichier
- Amélioré : Comportement de la coloration de syntaxe

1er Aout 2001 : Version 2.40

- Ajouté : Commandes de support des Data's : Read, Restore, Data, DataSection, EndDataSection
- Ajouté : Support des nombres flottants (première phase)
- Ajouté : Bibliothèque MemoryBank
- Ajouté : Bibliothèque StatusBar
- Ajouté : Bibliothèque Image
- Ajouté : Bibliothèque Systray
- Ajouté : EventlParam(), EventwParam(), ListIndex(), ListCount() ChangeCurrentElement(), ToolBarImageButton(), EventMouseButton(), UseDirectory(), CreatePopupMenu(), DisplayPopupMenu(), TreeGadget(), ImageGadget(), ButtonImageGadget(), AddTreeGadgetItem(), ListIconGadget(), AddListIconGadgetItem(), ChangeListIconGadgetDisplay(), AddGadgetColumn()

- Modifié : Le type par défaut devient un 'Long' (32 bits) au lieu d'un 'Word' (16 bits)
- Modifié : WaitWindowEvent()/WindowEvent() renvoient tous les événements Windows !
- Modifié : ComboBoxGadget(), PanelGadget() et ListViewGadget()
- Modifié : ExamineDirectory() -> Un nombre est ajouté pour pouvoir examiner plusieurs répertoires simultanément

- Corrigé : CopyFile() (ne peut plus écraser un fichier existant)
- Corrigé : FrontColour() (les couleurs Texte ne changent pas..)
- Corrigé : GetGadgetState(), SetGadgetState() et RemoveGadgetItem() pour supporter PanelGadget

- Supprimé : InitWindow(), InitRequester(), InitToolBar(), InitFont(), InitFile() and InitMenu()

17 Mai 2001 : Version 2.30

- Ajout: Support des 'Tab' dans la bibliothèque Gadget
- Ajout: Directives de compilation : CompilerIf/Else/Endif, CompilerSelect/Case/Default/EndSelect
- Ajout: Bibliothèque CD-Audio
- Ajout: Bibliothèque FileSystem
- Ajout: Linker d'icone intégré (GoRC n'est plus nécessaire)
- Ajout: GetGadgetState(), SetGadgetState(), AddGadgetItem(), RemoveGadgetItem(), ClearGadgetItemList() PanelGadget(), ClosePanelGadget(), TextGadget(), SpritesCollision(), Delay(), OptionGadget(), Frame3DGadget() Loc(), PeekW/B(), PokeW/B(), GetPathPart(), GetFilePart(), RunProgram(), DoubleClick(), PathRequester()

- Amélioration: Debugger (Le mode pas à pas fonctionne maintenant parfaitement)
- Amélioration: Fichier exécutable généré plus compact et plus rapide
- Amélioration: Réécriture complète du noyau du compilateur
- Amélioration: Réduction significative de la taille du compilateur et de l'éditeur
- Amélioration: Beaucoup de petites correction de bugs trop longues à énumérer

- Correction: Quelques bugs du compilateur

- Changement: LSR et RSR en << et >>
- Changement: AddComboBoxItem() et AddListViewItem() en AddGadgetItem()

25 March 2001 : Version 2.20

- Ajout: Support du debugger dans toutes les PureLibrairies. Un programme ne 'plante' plus maintenant aussi facilement et il est plus facile de détecter les erreurs.
- Ajout: Support de Windows NT4.0 pour les librairies multimédia (Sprite, Palette, Sound & Keyboard), ce qui permet le développement de jeux ou d'applications mulitmédia qui sont compatible WinNT4 !
- Ajout: Lof(), ReadMemory(), WriteMemory(), PeekS(), PokeS(), NetworkClientEvent(), SetGadgetFont(), WaitWindowEvent(), FileSeek()
- Ajout: Bibliothèque Module qui permet de jouer les modules Protracker, Fastracker ou Impulse Tracker.
- Ajout: Chaque fichier source contient ses informations (exécutable, options de compilation, etc.)
- Ajout: Préférences pour personnaliser facilement l'éditeur (couleurs, répertoire par défaut, etc...)
- Ajout: Possibilité d'associer une icone lors lors de la création d'un fichier exécutable
- Ajout: Accès direct au fichier d'aide Win32.hlp en pressant F1 sur une fonction de l'API.

- Corrections de bugs du compilateur, il est maintenant plus stable

- Mise à jour des documentations

26 Février 2001 : Version 2.10

- Ajout: ListViewGadget(), AddListViewItem(), GetGadgetText(), SetGadgetText(), PeekS(), SizeOf()
- Ajout: Fichier résident Microsoft Windows © contenant les constantes et les structures nécessaires pour accéder à l'API depuis PureBasic
- Ajout: Debugger intégré pour suivre pas à pas le déroulement d'un programme. Il propose 4 commandes (Pas à pas, Stop, Continue, et Quit (utile pour sortir d'une boucle infinie...) et peut être appelé et contrôlé dans le code source par les commandes suivantes : CallDebugger, EnableDebugger, DisableDebugger.

- Editeur largement amélioré : multilangues (Français, Allemand, Anglais), aide contextuelle (F1 sur un mot-clé), Goto ligne, options de compilation, amélioration de la syntaxe colorée, fichier '.prefs'

- Mise à jour: Documentation Allemande des manuels

- Nombreux bugs corrigés et stabilité de PureBasic améliorée.

17 Décembre 2000 : Version 2.00

- Version finale !
- Correction de tous les bugs connus

28 November 2000 : Version 2.00 PR 3

- Quelques bugs DirectX sont corrigés (WaponezII doit maintenant fonctionner partout)
- 2 nouvelles librairies sont ajoutées (Requester et ToolBar)
- Editeur dédié (avec syntaxe colorée et un accès direct au compilateur)

12 November 2000 : Version 2.00 PR 2

- Seconde version publique de la version Windows. Pour programmeurs expérimentés et beta-testers.
- 6 nouvelles librairies sont ajoutées (Sprite, Joystick, Keyboard, Sound, Network and Palette)
- De nombreux bugs ont été corrigés. Merci aux traqueurs de bugs :)
- Une première version de Waponez II (Shoot-em-up) est ajoutée pour tester les fonctions de jeu.

22 Octobre 2000 : Version 2.00 PR 1

- Première version publique de la très attendue version Windows ! Destinée uniquement aux programmeurs expérimentés.

- On y retrouve la majorité des fonctionnalités de la version Amiga, plus quelques nouvelles. La version Amiga 2.00 sera proposée en même temps que la version Windows complète pour que leurs développements soient parfaitement synchronisés.

- Mise à jour de la version allemande de PureBasic 1.60 (AmigaOS).

- Fantaisie Software a maintenant une nouvelle adresse internet : http://www.purebasic.com


ConsoleError()

Syntaxe

ConsoleError(Message$)
Description
Envoie le Message$ (avec un retour à la ligne) vers la sortie erreur (stderr) du 'Programme'. Cette sortie peut être lue par exemple avec la commande ReadProgramError() de la bibliothèque Process.

OS Supportés

Tous


LGPL

      GNU LIBRARY GENERAL PUBLIC LICENSE
           Version 2, June 1991

 Copyright (C) 1991 Free Software Foundation, Inc.
            59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the library GPL.  It is
 numbered 2 because it goes with version 2 of the ordinary GPL.]

          Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Library General Public License, applies to some
specially designated Free Software Foundation software, and to any
other libraries whose authors decide to use it.  You can use it for
your libraries, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if
you distribute copies of the library, or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link a program with the library, you must provide
complete object files to the recipients so that they can relink them
with the library, after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  Our method of protecting your rights has two steps: (1) copyright
the library, and (2) offer you this license which gives you legal
permission to copy, distribute and/or modify the library.

  Also, for each distributor's protection, we want to make certain
that everyone understands that there is no warranty for this free
library.  If the library is modified by someone else and passed on, we
want its recipients to know that what they have is not the original
version, so that any problems introduced by others will not reflect on
the original authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that companies distributing free
software will individually obtain patent licenses, thus in effect
transforming the program into proprietary software.  To prevent this,
we have made it clear that any patent must be licensed for everyone's
free use or not licensed at all.

  Most GNU software, including some libraries, is covered by the ordinary
GNU General Public License, which was designed for utility programs.  This
license, the GNU Library General Public License, applies to certain
designated libraries.  This license is quite different from the ordinary
one; be sure to read it in full, and don't assume that anything in it is
the same as in the ordinary license.

  The reason we have a separate public license for some libraries is that
they blur the distinction we usually make between modifying or adding to a
program and simply using it.  Linking a program with a library, without
changing the library, is in some sense simply using the library, and is
analogous to running a utility program or application program.  However, in
a textual and legal sense, the linked executable is a combined work, a
derivative of the original library, and the ordinary General Public License
treats it as such.

  Because of this blurred distinction, using the ordinary General
Public License for libraries did not effectively promote software
sharing, because most developers did not use the libraries.  We
concluded that weaker conditions might promote sharing better.

  However, unrestricted linking of non-free programs would deprive the
users of those programs of all benefit from the free status of the
libraries themselves.  This Library General Public License is intended to
permit developers of non-free programs to use free libraries, while
preserving your freedom as a user of such programs to change the free
libraries that are incorporated in them.  (We have not seen how to achieve
this as regards changes in header files, but we have achieved it as regards
changes in the actual functions of the Library.)  The hope is that this
will lead to faster development of free libraries.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, while the latter only
works together with the library.

  Note that it is possible for a library to be covered by the ordinary
General Public License rather than by this special one.

      GNU LIBRARY GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library which
contains a notice placed by the copyright holder or other authorized
party saying it may be distributed under the terms of this Library
General Public License (also called "this License").  Each licensee is
addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.

  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also compile or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    c) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    d) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the source code distributed need not include anything that is normally
distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Library General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

          NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

         END OF TERMS AND CONDITIONS

           How to Apply These Terms to Your New Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

    <one line to give the library's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public
    License along with this library; if not, write to the Free
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  <signature of Ty Coon>, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!


          A: Fantaisie Software
             10, rue de Lausanne
             67640 Fegersheim
             France

     ********************************* PureBasic ******************************

            J'aimerais acquérir la version complète de PureBasic.

     Prix par copie: 59 Euros

     Nom:     _________________________________________________________

     Addresse:_________________________________________________________

              _________________________________________________________

              _________________________________________________________

     Pays:    _________________________________________________________

     e-Mail:  _________________________________________________________

     Toutes ces informations sont considérées comme privées et personnelles.
     Elles ne seront jamais distribuées à de tierces entités.

     J'effectue le règlement par

       ( ) Chèque. La méthode la plus sûre en France

       ( ) Paiement en ligne (sécurisé) sur www.purebasic.com

     Envoyez-moi la version complète par:

       ( ) e-Mail (lien vers une archive .zip ainsi que son mot de passe)

       ( ) Courrier (sur CD-Rom, bien plus lent (entre 1 et 2 semaines))

     J'ai lu les termes et les conditions de ce contrat et je les accepte.

     __________________     ________________________________________

         Date                              Signature

     Remarques à propos de PureBasic:


Licence Scintilla

License for Scintilla and SciTE

Copyright 1998-2003 by Neil Hodgson <neilh@scintilla.org>

All Rights Reserved

Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in
supporting documentation.

NEIL HODGSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS, IN NO EVENT SHALL NEIL HODGSON BE LIABLE FOR ANY
SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
OR PERFORMANCE OF THIS SOFTWARE.


SmartWindowRefresh()

Syntaxe

SmartWindowRefresh(#Fenetre, Etat)
Description

OS Supportés

Windows