Tutorial RAPIDQ
Transcription
Tutorial RAPIDQ
RAPIDQ APPRENTISSAGE RAPIDQ LANGAGE BASIC 1. Guide du langage 1.1. Les directives Les directives du langage RAPIDQ servent à indiquer des actions que le compilateur doit effectuer. $APPTYPE GUI Indique au compilateur qu’il doit compiler une application Windows $INCLUDE « RAPIDQ.INC » Indique au compilateur qu’il doit utiliser le contenu du fichier RAPIDQ.INC pour compiler le programme. En général, il s’agit de fichiers de constantes. En l’occurrence, RAPIDQ.INC est le fichier de constantes fourni avec le compilateur RAPIDQ. On y trouve tout ce qu’il faut pour programmer des boutons, etc. sous Windows. $RESOURCE RES_BMP1 AS « CLOUDS.BMP » Indique au compilateur qu’il faut inclure au programme l’image qui se trouve dans le fichier CLOUDS.BMP, et de lui donner le nom RES_BMP1 pour pouvoir l’utiliser dans le programme. $DEFINE NOMBRE_DE_CASES 64 Indique au compilateur que lorsque le programme utilisera le mot clé NOMBRE_DE_CASES, il faudra le remplacer par la valeur 64 pour compiler. Ceci permet de rendre plus compréhensible le programme, parce qu’on donne un nom compréhensible aux valeurs que le programme utilise. $UNDEF NOMBRE_DE_CASES Indique au compilateur qu’il doit enlever la définition précédente appliquée au mot clé NOMBRE_DE_CASES $IFDEF NOMBRE_DE_CASES ‘ Si NOMBRE_DE_CASES a été défini $ELSE ‘ Si NOMBRE_DE_CASES n’a pas été défini $ENDIF Indique au compilateur de compiler une partie de code dans le cas où un mot clé est défini et une autre partie de code si ce mot clé n’est pas défini. C’est très pratique pour fabriquer un programme qui peut être adapté à plusieurs utilisations : par exemple, changer facilement le titre d’un programme, ou d’autres idées du même genre. -1- RAPIDQ $IFNDEF NOMBRE_DE_CASES ‘ Si NOMBRE_DE_CASES n’a pas été défini $ELSE ‘ Si NOMBRE_DE_CASES a été défini $ENDIF Même type d’utilisation que $IFDEF, mais avec la logique inversée. 1.2. Déclaration de variables La déclaration de variable se fait au moyen de l’instruction suivante : DIM Nombre AS INTEGER L’expression ci-dessus déclare la variable « Nombre » en tant qu’entier, c’est-à-dire un nombre entier entre –2 milliards et +2 milliards. INTEGER s’appelle un type. De même, on peut déclarer les types suivants : DIM DIM DIM DIM DIM Nombre AS BYTE Nombre AS WORD Nombre AS SHORT Nombre AS Single Texte AS STRING => => => => => Nombre Nombre Nombre Nombre Chaîne entier entre 0 et 255 entier entre 0 et 65535 entier entre –32768 et 32767 réel à virgules de caractères On peut aussi déclarer des tableaux de données : DIM Nombre(10) AS INTEGER => Tableau de 10 entiers est le premier nombre du tableau, Nombre(2) est le deuxième nombre du tableau, etc. Nombre(1) 1.3. Objets de Windows La programmation sous Windows avec RAPIDQ est facilitée par l’utilisation d’objets prêts à l’emploi permettant d’animer les caractéristiques et les objets les plus courants de l’environnement Windows. Les principaux objets utilisés sont : Type QFORM QLABEL QEDIT QBUTTON QMAINMENU Description Fenêtre de Windows affichant les informations d’un programme. Texte non modifiable : étiquette d’une donnée, titre, textes divers affichés en pleine fenêtre Zone de saisie de texte modifiable : pour entrer une donnée d’un programme Bouton : pour effectuer une action dans un programme Menu principal d’un programme : celui qu’on trouve juste sous la barre de titre de la fenêtre du programme -2- RAPIDQ Type QMENUITEM QLISTBOX Description Items de menu secondaires dans un menu : ce sont les choix de menu que l’on trouve lorsqu’on clique sur un choix du menu principal ; ces items de menu secondaires sont affichés verticalement sous le choix du menu principal sur lequel on a cliqué. Zone de choix d’un mot ou texte dans une liste de mots ou de textes On peut également utiliser de nombreux autres objets, plus complexes : Type QCANVAS QCHECKBOX QCOMBOBOX QCOOLBTN QDIRTREE QFILELISTBOX QFONTDIALOG QGAUGE QGROUPBOX QIMAGE QOPENDIALOG QOVALBTN QPOPUPMENU QRADIOBUTTON QRICHEDIT QSAVEDIALOG Description Zone rectangulaire dans laquelle le programme peut dessiner ou écrire Case à cocher : il s’agit d’un texte avec une case blanche à sa gauche. Si l’utilisateur clique sur le texte ou la case, la case est remplie avec une croix, montrant par exemple que l’option correspondant au texte est sélectionnée Zone de choix modifiable : l’utilisateur peut choisir un mot ou un texte parmi ceux affichés en cliquant dessus, et il peut aussi ajouter un nouveau mot ou texte. Cet objet est utilisé pour proposer une liste de choix modifiable à l’utilisateur Bouton spécial permettant des fonctionnalités supplémentaires : bouton avec image, bouton à position levée/enfoncée ou jeu de plusieurs boutons liés entre eux (tous se lèvent quand l’un s’enfonce) Fenêtre présentant les répertoires, comme sous l’explorateur Windows Fenêtre présentant les fichiers, comme sous l’explorateur Windows Fenêtre présentant un choix de police de caractères, comme sous Windows Barre de progression, allant de 0% à 100% pour indiquer la progression d’une action longue sous Windows Zone permettant de grouper différents objets dans une même zone Zone permettant d’afficher une image (fichier .bmp) Fenêtre proposant l’ouverture d’un fichier, comme cela est fait sous Windows Bouton de forme ovale Menu apparaissant là où l’utilisateur a cliqué (exemple de menu contextuel apparaissant dans Windows sur le bureau lorsqu’on clique avec le bouton droit) Bouton de type radio, permettant à l’utilisateur de choisir une option parmi plusieurs, en cliquant sur des zones de texte comportant à gauche un rond blanc, rempli d’un point noir pour l’option choisie Zone d’édition de texte, avec de nombreuses possibilités d’édition standard, telles que celles qu’on trouve dans un traitement de texte Fenêtre proposant la sauvegarde d’un fichier, comme cela est fait sous Windows -3- RAPIDQ Type QSCROLLBAR QSCROLLBOX QSTATUSBAR QTABCONTROL QTRACKBAR PRINTER QBITMAP QFONT QMEMORYSTREAM QSPLITTER QTIMER QDXIMAGELIST QDXSCREEN QDXSOUND QDXTIMER QD3DFACE Description Barre de défilement identique à ce qui est fait sous Windows Fenêtre possédant des barres de défilement verticale et horizontale Barre d’état située en général en bas d’une fenêtre, permettant au programme d’afficher son état et des informations diverses. On trouve un exemple de barre d’état dans Word ou Excel. Fenêtre présentée avec des onglets, permettant la sélection de diverses fonctionnalités Curseur Gestionnaire des imprimantes Gestion des images BMP. Restitution et sauvegarde de ces images Spécification d’une police de caractère, pour utilisation dans un objet de Windows Allocation de mémoire vive et manipulation Ligne séparatrice déplaçable à l’intérieur d’une fenêtre Horloge permettant de lancer une fonction à intervalles réguliers Stockage d’une liste d’images pour la programmation 3D par DirectX (pour les jeux vidéo) Création et gestion d’une fenêtre type DirectX (pour les jeux vidéo) Création et gestion d’un environnement DirectSound (pour les jeux vidéo) Horloge permettant de lancer une fonction à intervalles réguliers. Cette horloge est de haute précision et adaptée à l’environnement DirectX Mise en œuvre de l’environnement graphique Direct3D avec des objets constitués de Faces Les propriétés ou fonctions utilisables pour chaque objet peuvent être utilisées ou appelées par la syntaxe suivante : DIM Form AS QFORM => Déclare un objet QFORM Form.Height = 40 Form.Center Form.ShowModal => Définit la hauteur de la fenêtre => Indique le centrage de la fenêtre => Affiche la fenêtre sous Windows Autrement dit, on utilise le nom de l’objet suivi d’un point, et suivi lui-même du nom de la propriété ou de la fonction à utiliser. 1.4. Fonctions et sous-programmes Le language RAPIDQ permet de définir des fonctions et des sous-programmes. Un sous-programme est un morceau de code en BASIC qui peut être « appelé » par un autre morceau de code en BASIC. Ceci est très utile chaque fois qu’un morceau de code doit être utilisé à plusieurs endroits dans un programme. Par exemple, si l’on veut écrire un texte changeant dans un bouton, on écrira le sousprogramme ci-dessous : -4- RAPIDQ SUB TexteBouton(Texte AS STRING, Bouton AS QBUTTON) Bouton.Caption = Texte END SUB Et dans le programme principal, on verra les lignes suivantes : DIM MonBouton AS QBUTTON … TexteBouton(« Coucou », MonBouton) … TexteBouton(« Bonjour », MonBouton) Ceci permettra de mettre le texte « Coucou », puis à un autre moment, le texte « Bonjour » sur le bouton MonBouton. Une fonction est un morceau de code en BASIC qui peut être « appelé » par un autre morceau de code en BASIC, et qui peut renvoyer une valeur au programme qui l’a appelée. On peut par exemple créer une fonction qui fait une somme. FUNCTION Somme(Nombre1 AS INTEGER, Nombre2 AS INTEGER) AS INTEGER Somme = Nombre1 + Nombre2 END FUNCTION Et dans le programme principal, on verra les lignes suivantes : DIM Nb1, Nb2, Total AS INTEGER Total = Somme(Nb1, Nb2) Ceci permet de calculer la somme de Nb1 et de Nb2, et de mettre le résultat dans Total. 1.5. Eléments de base du langage BASIC de RAPIDQ 1.5.1. Les opérateurs a) Opérateurs arithmétiques - Si Chaine est une STRING, alors Chaine[3] représente le 3ème caractère de cette chaîne de caractères. - Pour calculer 2 au carré, il faut écrire 2 ^ 2. - La multiplication se note * : 4 fois 3 s’écrit : 4 * 3. - La division se note / : 4 divisé par 2 s’écrit : 4 / 2. - Le reste de la division de 15 par 10 s’écrit : 15 MOD 10. b) Opérateurs logiques - Pour tester si a est IF (a = b) THEN … END IF égal à b, on écrit : - Pour tester si a est différent de b, on écrit : -5- RAPIDQ IF (a <> b) THEN … END IF - Pour tester si a est inférieur à b, on écrit : IF (a < b) THEN … END IF - Pour tester si a est supérieur à b, on écrit : IF (a > b) THEN … END IF - Pour tester si a est inférieur ou égal à b, on écrit : IF (a <= b) THEN … END IF - Pour tester si a est supérieur ou égal à b, on écrit : IF (a >= b) THEN … END IF - Pour tester si a est égal à b et c est égal à d, on écrit : IF ((a = b) AND (c = d)) THEN … END IF - Pour tester si a est égal à b ou c est égal à d, on écrit : IF ((a = b) OR (c = d)) THEN … END IF 1.5.2. Les conditions On peut écrire plusieurs types d’instructions conditionnelles. IF (a = b) THEN ‘ Instructions à exécuter si a est égal à b END IF IF (a = b) THEN ‘ Instructions à exécuter si a est égal à b ELSE ‘ Instructions à exécuter si a est différent de b END IF IF (a = b) THEN ‘ Instructions à exécuter si a est égal à b ELSEIF (a < b) THEN ‘ Instructions à exécuter si a est inférieur à b ELSE ‘ Instructions à exécuter si a est supérieur à b END IF On peut également écrire des instructions de sélection d’une variable parmi plusieurs valeurs : -6- RAPIDQ SELECT CASE a CASE 0 CASE 1 CASE 2 END SELECT ‘ Instructions à exécuter si a vaut 0 ‘ Instructions à exécuter si a vaut 1 ‘ Instructions à exécuter si a vaut 2 1.5.3. Boucles En BASIC de RAPIDQ, on peut décrire des boucles dans un programme. FOR i = 1 TO 100 ‘ Instructions à réaliser pour i entre 1 et 100 NEXT I On peut écrire une boucle dépendant d’une condition vérifiée par un test. WHILE (a ‘ ‘ ‘ WEND = b) Instructions à réaliser tant que a = b Attention, la boucle peut être éternelle si a n’est jamais égal à b ! 2. Mon premier programme Voici notre premier programme : ce sera une calculatrice. On commence toujours le programme par la ligne ci-dessous, qui permet à RAPIDQ de reconnaître les objets de Windows et les mots-clés du langage. $INCLUDE "RAPIDQ.INC" Ensuite, on déclare les variables du langage. Ce sont les cases dans lesquelles nous allons déposer les valeurs des données nécessaires au fonctionnement du programme. Nous avons besoin de 2 chaînes de caractères (STRING), Nombre1 et Nombre2, dans lesquelles nous déposerons les nombres (sous forme de caractères tapés au clavier) qui seront saisis par l’utilisateur de notre calculatrice. Nous avons également besoin de 2 entiers (INTEGER), Nb1 et Nb2, dans lesquels nous déposerons les valeurs correspondant aux 2 chaînes de caractères saisies par l’utilisateur de la calculatrice. Il faudra donc mettre dans ces variables la conversion des chaînes de caractères saisies en un nombre correspondant. Par exemple, si l’utilisateur tape 123, on trouvera dans Nombre1 la chaîne de caractères constituée du caractère 1, suivi du caractère 2, suivi du caractère 3. Cette chaîne de caractère sera convertie par le programme ci-dessous en un véritable entier 123. Nous verrons plus loin comment il faut faire cela. Nous avons besoin également d’une chaîne où nous déposerons le résultat de l’opération faite, sous forme de chaîne de caractères. Il s’agit de Resultat (STRING). Enfin, nous utiliserons également un entier (INTEGER) dans lequel se trouvera le résultat de l’opération appliquée sur Nb1 et Nb2. Il s’agit de la variable Res. -7- RAPIDQ DIM DIM DIM DIM DIM DIM Nombre1 As String Nombre2 As String Resultat As String Nb1 As Integer Nb2 As Integer Res As Integer Puis le programme doit créer une fenêtre sous Windows, dans laquelle l’utilisateur pourra saisir les nombres qu’il veut calculer et dans laquelle nous trouverons des boutons pour les opérations addition, soustraction, multiplication et division. Enfin, cette fenêtre comportera une zone pour afficher le résultat. On commence par créer un objet QFORM par l’instruction CREATE ci-dessous. CREATE Form AS QFORM Caption = "Calculatrice" Width = 320 Height = 240 Center => => => => => Titre de la fenêtre Largeur en pixels Hauteur en pixels Centrer la fenêtre dans la fenêtre Windows Puis on crée une zone de texte dans la fenêtre (QLABEL). Le CREATE de cette zone de texte est imbriqué dans le CREATE de QFORM, afin de montrer que la zone de texte appartient à la fenêtre Form que nous avons créée. CREATE Label1 AS QLABEL Caption = "Ma Calculatrice moderne" Left = 77 Top = 5 Width = 132 Height = 21 END CREATE Puis on crée une zone de titre pour indiquer la case TOTAL. CREATE Label2 AS QLABEL Caption = "TOTAL" Left = 24 Top = 157 Width = 48 END CREATE On crée alors les zones d’édition (QEDIT) pour les nombres. CREATE Edit1 AS QEDIT Text = "" Left = 17 Top = 49 END CREATE CREATE Edit2 AS QEDIT Text = "" Left = 17 Top = 90 TabOrder = 1 END CREATE CREATE Edit3 AS QEDIT Text = "" Left = 22 Top = 177 TabOrder = 2 END CREATE Puis on crée les boutons des différentes opérations. -8- RAPIDQ CREATE Button1 AS QBUTTON Caption = "+" Left = 208 Top = 43 TabOrder = 3 END CREATE CREATE Button2 AS QBUTTON Caption = "--" Left = 208 Top = 76 TabOrder = 4 END CREATE CREATE Button3 AS QBUTTON Caption = "X" Left = 207 Top = 113 TabOrder = 5 END CREATE CREATE Button4 AS QBUTTON Caption = "/" Left = 208 Top = 153 TabOrder = 6 END CREATE END CREATE Les différents objets de notre programme sont créés. Il faut maintenant créer les sous-programmes qui permettront de réaliser les opérations de la calculatrice. SUB Ajouter Nombre1 = Edit1.Text Nb1 = VAL(Nombre1) Nombre2 = Edit2.Text Nb2 = VAL(Nombre2) Res = Nb1 + Nb2 Resultat = STR$(Res) Edit3.Text = Resultat END SUB => => => => => => => => => => => => => => => SUB Soustraire Nombre1 = Edit1.Text Nb1 = VAL(Nombre1) Nombre2 = Edit2.Text Nb2 = VAL(Nombre2) Res = Nb1 - Nb2 Resultat = STR$(Res) Edit3.Text = Resultat END SUB SUB Multiplier Nombre1 = Edit1.Text Nb1 = VAL(Nombre1) Nombre2 = Edit2.Text Nb2 = VAL(Nombre2) Res = Nb1 * Nb2 Resultat = STR$(Res) -9- Copier le nombre 1 saisi par l’utilisateur Le convertir en entier Copier le nombre 2 saisi par l’utilisateur Le convertir en entier Faire l’addition des 2 nombres Convertir le résultat de l’addition en chaîne de caractères Copier la chaîne du résultat dans le champ QEDIT correspondant à l’écran RAPIDQ Edit3.Text = Resultat END SUB SUB Diviser Nombre1 = Edit1.Text Nb1 = VAL(Nombre1) Nombre2 = Edit2.Text Nb2 = VAL(Nombre2) IF (Nb2 = 0) THEN FOR i = 1 TO 3 MessageBox("Vous ne devez pas diviser par zéro ! " + STR$(i) + " fois", "Erreur", 0) NEXT i ELSE Res = Nb1 / Nb2 Resultat = STR$(Res) Edit3.Text = Resultat END IF END SUB Maintenant que les sous-programmes permettant de réaliser les opérations de notre calculatrice sont créés, nous devons indiquer à Windows d’appeler ces sousprogrammes lorsqu’on clique sur les boutons. Ceci se fait par les instructions cidessous. Button1.OnClick Button2.OnClick Button3.OnClick Button4.OnCLick = = = = Ajouter Soustraire Multiplier Diviser Pour terminer, on demande à Windows d’afficher la fenêtre de notre programme, par l’instruction ci-dessous : Form.ShowModal - 10 - RAPIDQ 3. Utilisation des objets Windows 3.1. QFORM - Déclaration : DIM Form AS QFORM - Titre de la fenêtre : Form.Caption - Hauteur de la fenêtre : Form.Height - Largeur de la fenêtre : Form.Width - Icône : Form.Icon - Position sur le bureau : Form.Left, Form.Top - Pour centrer la fenêtre sur le bureau : Form.Center - Pour afficher et attendre le résultat : Form.ShowModal - Exemple : $INCLUDE "RAPIDQ.INC" DIM Form AS QFORM Form.Caption = "Utilisation QFORM" Form.Height = 300 Form.Width = 400 Form.Left = 100 Form.Top = 140 Form.ShowModal - 11 - RAPIDQ 3.2. QLABEL - Déclaration : DIM Label AS QLABEL - Police : Label.Font - Texte : Label.Text $INCLUDE "RAPIDQ.INC" DIM Form AS QFORM DIM Label AS QLABEL Form.Caption = "Utilisation QLABEL" Form.Height = 200 Form.Width = 300 Form.Left = 100 Form.Top = 140 Label.Parent = Form Label.Caption = "Ceci est un label" Label.Height = 20 Label.Width = 200 Label.Left = 30 Label.Top = 50 Form.ShowModal - 12 - RAPIDQ 3.3. QEDIT - Déclaration : DIM Edit AS QEDIT - Hauteur de la zone d’édition : Edit.Height - Largeur de la zone d’édition : Edit.Width - Texte : Edit.Text $INCLUDE "RAPIDQ.INC" DIM Form AS QFORM DIM Edit AS QEDIT Form.Caption = "Utilisation QEDIT" Form.Height = 200 Form.Width = 300 Form.Left = 100 Form.Top = 140 Edit.Parent = Form Edit.Height = 50 Edit.Width = 250 Edit.Top = 30 Edit.Left = 30 Edit.Text = "Texte initial modifiable" Form.ShowModal - 13 - RAPIDQ 3.4. QBUTTON - Déclaration : DIM Bouton AS QBUTTON - Texte : Bouton.Caption - Fichier de l’image : Bouton.BMP (fichier .bmp uniquement) - Hauteur du bouton : Bouton.Height - Largeur du bouton : Bouton.Width - Fonction appelée si on clique sur le bouton : Bouton.OnClick $INCLUDE "RAPIDQ.INC" DIM Form AS QFORM DIM Bouton AS QBUTTON SUB Quitter MESSAGEBOX("Vous avez cliqué sur Quitter", "Bonjour", 0) END SUB Form.Caption = "Utilisation QBUTTON" Form.Height = 200 Form.Width = 300 Form.Left = 100 Form.Top = 140 Bouton.Parent = Form Bouton.Height = 40 Bouton.Width = 140 Bouton.Caption = "Quitter" Bouton.OnClick = Quitter Form.ShowModal - 14 - RAPIDQ 3.5. QMAINMENU - Déclaration : DIM Menu AS QMAINMENU - Ajout d’un item : Menu.AddItems (objet de type QMENUITEM) 3.6. QMENUITEM - Déclaration : DIM MenuItem AS QMENUITEM - Texte de l’item du menu : MenuItem.Caption - Indique s’il y a une coche à côté de l’item : MenuItem.Checked - Item de menu activé : MenuItem.Enabled (valeur « True » si activé, « False » si inhibé) - Ajout d’un item : MenuItem.AddItems (objet de type QMENUITEM) $INCLUDE "RAPIDQ.INC" DECLARE DECLARE DECLARE DECLARE SUB SUB SUB SUB Quitter Copier Coller ActiverFonction CREATE Form AS QFORM Caption = "Utilisation QMAINMENU, QMENUITEM" Height = 200 Width = 300 Left = 100 Top = 140 CREATE Menu AS QMAINMENU CREATE MFile AS QMENUITEM Caption = "&File" CREATE MFileOpen AS QMENUITEM Caption = "&Open" END CREATE CREATE MFileClose AS QMENUITEM Caption = "&Close" END CREATE CREATE MFileSave AS QMENUITEM Caption = "&Save" END CREATE CREATE MFileQuitter AS QMENUITEM Caption = "&Quitter" OnClick = Quitter END CREATE END CREATE CREATE MEdit AS QMENUITEM - 15 - RAPIDQ Caption = "&Edit" CREATE MEditCopier AS QMENUITEM Caption = "&Copier" OnClick = Copier END CREATE CREATE MEditColler AS QMENUITEM Caption = "Co&ller" Enabled = False OnClick = Coller END CREATE CREATE MEditActiverFonction AS QMENUITEM Caption = "Activer &fonction" Checked = True OnClick = ActiverFonction END CREATE END CREATE CREATE MAide AS QMENUITEM Caption = "&Aide" END CREATE END CREATE END CREATE SUB Quitter MESSAGEBOX("Vous avez cliqué sur Quitter", "Bonjour", 0) END SUB SUB Copier MEditColler.Enabled = True MEditCopier.Enabled = False END SUB SUB Coller MEditCopier.Enabled = True MEditColler.Enabled = False END SUB SUB ActiverFonction IF (MEditActiverFonction.Checked = False) THEN MEditActiverFonction.Checked = True ELSE MEditActiverFonction.Checked = False END IF END SUB Form.ShowModal - 16 - RAPIDQ 3.7. QLISTBOX - Déclaration : DIM ListBox AS QLISTBOX - Nombre de colonnes dans la boîte : ListBox.Columns - Ajout d’items dans la liste : ListBox.AddItems - Fonction appelée sur click souris : ListBox.OnClick - Fonction appelée sur double click souris : ListBox.OnDblClick - Libellé de l’item n° N : ListBox.Item(N) - Etat de sélection de l’item n° N : ListBox.Selected(N) (True si sélectionné, False sinon) $INCLUDE "RAPIDQ.INC" CREATE Form AS QFORM Caption = "Utilisation QLISTBOX" Height = 200 Width = 300 Left = 100 Top = 140 CREATE ListBox AS QLISTBOX END CREATE END CREATE SUB Selectionner For i = 0 TO 3 IF (ListBox.Selected(i) = True) THEN MESSAGEBOX(ListBox.Item(i), "Vous avez sélectionné", 0) END IF NEXT i END SUB ListBox.AddItems "1. Oranges", "2. Bananes", "3. Poires", "4. Pommes" ListBox.OnClick = Selectionner Form.ShowModal - 17 - RAPIDQ 3.8. QCANVAS - Déclaration : DIM Canvas AS QCANVAS - Hauteur : Canvas.Height - Largeur : Canvas.Width - Couleur : Canvas.Color - Rafraîchissement : Canvas.OnPaint - Ecriture d’un texte : Canvas.TextOut(X, Y, Texte, Couleur, 0) - Dessin d’un cercle : Canvas.Circle(X1, Y1, RX, RY, Couleur, Remplissage) - Dessin d’un rectangle : Canvas.Rect(X1, Y1, X2, Y2, Couleur) - Dessin d’une image : Canvas.Draw(X, Y, FichierBMP) - Dessin d’une ligne : Canvas.Line(X1, Y1, X2, Y2, Couleur) - Dessin d’un rectangle arrondi : Canvas.RoundRect(X1, Y1, X2, Y2, RX, RY, Couleur) $INCLUDE "RAPIDQ.INC" DECLARE SUB Paint DECLARE SUB Redimensionner DECLARE SUB HorlogeEchue DIM Y AS INTEGER DIM Horloge AS QTIMER CREATE Form AS QFORM Caption = "Utilisation QCANVAS" Height = 200 Width = 300 Left = 100 Top = 140 Color = 0 OnResize = Redimensionner CREATE Canvas AS QCANVAS Color = 0 OnPaint = Paint END CREATE END CREATE SUB Paint Canvas.TextOut(65, Y - 30, "Bienvenue dans le tutoriel RAPIDQ !", &H00FF00, 0) Canvas.TextOut(30, Y, "Exemple d'utilisation d'un Canvas...", &HFFFFFF, 0) END SUB SUB Redimensionner - 18 - RAPIDQ Canvas.Height = Form.ClientHeight Canvas.Width = Form.ClientWidth END SUB SUB HorlogeEchue Horloge.Interval = 1 Y = Y + 1 IF (Y = 230) THEN Y = -20 END IF Paint END SUB Y = -20 Canvas.Height = Form.ClientHeight Canvas.Width = Form.ClientWidth Horloge.OnTimer = HorlogeEchue Horloge.Interval = 1 Form.ShowModal - 19 - RAPIDQ 3.9. QCHECKBOX - Déclaration : DIM CheckBox AS QCHECKBOX - Texte : CheckBox.Caption - Etat coché ou non : CheckBox.Checked (True ou False) - Hauteur : CheckBox.Height - Largeur : CheckBox.Width $INCLUDE "RAPIDQ.INC" DECLARE SUB Check CREATE Form AS QFORM Caption = "Utilisation QCHECKBOX" Height = 200 Width = 300 Left = 100 Top = 140 CREATE CheckBox AS QCHECKBOX Caption = "J'achète la revue" Width = 150 Left = 30 Top = 30 OnClick = Check END CREATE END CREATE SUB Check MESSAGEBOX("Vous avez choisi d'acheter la revue !", "Bravo...", 0) END SUB Form.ShowModal - 20 - RAPIDQ 3.10. QCOMBOBOX - Déclaration : DIM ComboBox AS QCOMBOBOX - Hauteur : ComboBox.Height - Largeur : ComboBox.Width - Fonction à appeler si la sélection est faite : ComboBox.OnClick - Numéro de l’item sélectionné : ComboBox.ItemIndex - Valeur de l’item numéro N : ComboBox.Item(N) - Ajouter un ou plusieurs items : ComboBox.AddItems $INCLUDE "RAPIDQ.INC" DECLARE SUB Changement CREATE Form AS QFORM Caption = "Utilisation QCOMBOBOX" Height = 200 Width = 300 Left = 100 Top = 140 CREATE ComboBox AS QCOMBOBOX Width = 150 Left = 30 Top = 30 OnChange = Changement END CREATE END CREATE SUB Changement MESSAGEBOX(ComboBox.Item(ComboBox.ItemIndex), "Votre choix", 0) END SUB ComboBox.AddItems "1. Pommes", "2. Poires", "3. Bananes", "4. Orange" Form.ShowModal - 21 - RAPIDQ 3.11. QCOOLBTN - Déclaration : DIM CoolBouton AS QCOOLBTN - Nom du fichier image (.bmp) du bouton : CoolBouton.BMP - Etat enfoncé du bouton : CoolBouton.Down (True ou False) - On peut réunir des boutons pour que si l’on enfonce un bouton, les autres se lèvent. Ceci se fait en donnant une valeur commune à tous les boutons concernés pour le champ CoolBouton.GroupIndex - Fonction à appeler lorsque le bouton est enfoncé : CoolBouton.OnClick $INCLUDE "RAPIDQ.INC" DECLARE SUB Changement CREATE Form AS QFORM Caption = "Utilisation QCOOLBTN" Height = 200 Width = 300 Left = 100 Top = 140 CREATE Bouton1 AS QCOOLBTN Width = 150 Left = 30 Top = 30 Caption = "Choix 1" GroupIndex = 1 Down = True END CREATE CREATE Bouton2 AS QCOOLBTN Width = 150 Left = 30 Top = 110 Caption = "Choix 2" GroupIndex = 1 END CREATE END CREATE Form.ShowModal - 22 - RAPIDQ 3.12. QDIRTREE - Déclaration : DIM DirTree AS QDIRTREE - Répertoire initial de la fenêtre : DirTree.InitialDir - Hauteur : DirTree.Height - Largeur : DirTree.Width - Fonction à appeler si le répertoire courant est modifié : DirTree.OnChange $INCLUDE "RAPIDQ.INC" DECLARE SUB ChangerRepertoire CREATE Form AS QFORM Caption = "Utilisation QDIRTREE" Height = 200 Width = 300 Left = 100 Top = 140 CREATE DirTree AS QDIRTREE InitialDir = CURDIR$ Width = Form.ClientWidth Height = Form.ClientHeight OnChange = ChangerRepertoire END CREATE END CREATE SUB ChangerRepertoire ShowMessage DirTree.Directory END SUB Form.ShowModal - 23 - RAPIDQ 3.13. QFILELISTBOX - Déclaration : DIM FileListBox AS QFILELISTBOX - Répertoire où se trouve les fichiers ou répertoires affichés : FileListBox.Directory - Nom du fichier sélectionné : FileListBox.Filename - Numéro du fichier sélectionné : FileListBox.ItemIndex - Indique si les icônes des fichiers sont affichés : FileListBox.ShowIcons (True ou False) - Masque des fichiers à afficher : FileListBox.Mask (par exemple, *.*) - Indique quels types de fichiers sont affichés : FileListBox.AddFileTypes. Les valeurs possibles sont : - ftReadOnly : uniquement les fichiers en lecture seulement - ftHidden : uniquement les fichiers cachés - ftSystem : uniquement les fichiers systèmes - ftVolumeID : uniquement les disques - ftDirectory : uniquement les répertoires - ftArchive : uniquement les archives - ftNormal : les fichiers sans attributs particuliers - Indique quels types de fichiers ne sont pas affichés : FileListBox.DelFileTypes. Mêmes valeurs que ci-dessus - Fonction à appeler lorsqu’on double-clique sur un fichier : FileListBox.OnDblClick $INCLUDE "RAPIDQ.INC" DECLARE SUB ChangerRepertoire DECLARE SUB SelectFichier DECLARE SUB Redimensionner CREATE Form AS QFORM Height = 200 Width = 300 Left = 100 Top = 140 CREATE DirList AS QFILELISTBOX ShowIcons = True Mask = "*.*" AddFileTypes(ftDirectory) DelFileTypes(ftNormal) OnDblClick = ChangerRepertoire Height = Form.ClientHeight Width = Form.ClientWidth \ 2 END CREATE CREATE FileList AS QFILELISTBOX - 24 - RAPIDQ ShowIcons = True Mask = "*.EXE" OnDblClick = SelectFichier Left = Form.ClientWidth \ 2 Height = Form.ClientHeight Width = Form.ClientWidth \ 2 END CREATE END CREATE SUB Redimensionner DirList.Height = Form.ClientHeight DirList.Width = Form.ClientWidth \ 2 FileList.Height = Form.ClientHeight FileList.Width = Form.ClientWidth \ 2 Form.Repaint END SUB SUB ChangerRepertoire ChDir(DirList.Item(DirList.ItemIndex) - "[" - "]") DirList.Directory = CurDir$ FileList.Directory = CurDir$ Form.Caption = CurDir$ END SUB SUB SelectFichier RUN FileList.FileName END SUB Form.OnResize = Redimensionner Form.ShowModal - 25 - RAPIDQ 3.14. QFONTDIALOG - Déclaration : DIM FontDialog AS QFONTDIALOG - Demander la police voulue : FontDialog.GetFont - Modifier la police : FontDialog.SetFont - Police sélectionnée : FontDialog.Name - Indique qu’un choix de police a été fait : FontDialog.Execute $INCLUDE "RAPIDQ.INC" DIM Font AS QFONT DIM FontDialog AS QFONTDIALOG CREATE Form AS QFORM Height = 200 Width = 300 Left = 100 Top = 140 Caption = "Utilisation de QFONTDIALOG" END CREATE FontDialog.GetFont(Font) If (FontDialog.Execute) THEN ShowMessage "Police choisie : " + FontDialog.Name FontDialog.SetFont(Font) END IF Form.ShowModal - 26 - RAPIDQ 3.15. QGAUGE - Déclaration : DIM Gauge AS QGAUGE - Couleur de fond : Gauge.BackColor - Couleur de la barre de progression : Gauge.ForeColor - Texte : Gauge.ShowText - Position de la barre de progression : Gauge.ShowText (entre 0 et 100) $INCLUDE "RAPIDQ.INC" DECLARE SUB HorlogeEchue DIM Horloge AS QTIMER DIM Y AS INTEGER CREATE Form AS QFORM Height = 200 Width = 300 Left = 100 Top = 140 Caption = "Utilisation de QGAUGE" CREATE Gauge AS QGAUGE Top = 30 Left = 30 Height = 20 Width = 150 END CREATE END CREATE SUB HorlogeEchue IF (Y <> 100) THEN Y = Y + 1 Horloge.Interval = 100 + Y Gauge.Position = Y END IF END SUB Y = 0 Gauge.Position = 0 Horloge.OnTimer = HorlogeEchue Horloge.Interval = 100 Form.ShowModal - 27 - RAPIDQ 3.16. QGROUPBOX - Déclaration : DIM GroupBox AS QGROUPBOX - Titre de la boîte de regroupement : GroupBox.Caption $INCLUDE "RAPIDQ.INC" CREATE Form AS QFORM Height = 200 Width = 300 Left = 100 Top = 140 Caption = "Utilisation de QGROUPBOX" CREATE GroupBox AS QGROUPBOX Top = 30 Left = 30 Height = 110 Width = 150 CREATE Bouton1 AS QBUTTON Top = 30 Left = 30 Height = 20 Width = 50 Caption = "OK" END CREATE CREATE Bouton2 AS QBUTTON Top = 70 Left = 30 Height = 20 Width = 50 Caption = "NOK" END CREATE END CREATE END CREATE Form.ShowModal - 28 - RAPIDQ 3.17. QIMAGE - Déclaration : DIM Image AS QIMAGE - Fichier contenant l’image à afficher : Image.BMP - Dimensionnement de l’image en fonction de sa taille : Image.Autosize $INCLUDE "RAPIDQ.INC" CREATE Form AS QFORM Top = 30 Left = 30 Height = 200 Width = 300 Caption = "Utilisation de QIMAGE" CREATE Image AS QIMAGE Top = 30 Left = 30 Height = 80 Width = 80 BMP = "D:\Documents and Settings\picard10\My Documents\Perso\RapidQ\Help.bmp" END CREATE END CREATE Form.ShowModal - 29 - RAPIDQ 3.18. QOPENDIALOG - Déclaration : DIM OpenDialog AS QOPENDIALOG - Titre de la fenêtre : OpenDialog.Caption - Nom du fichier sélectionné : OpenDialog.FileName - Filtre de sélection des fichiers : OpenDialog.Filter. Les différents filtres sont séparés par des caractères « | » - Numéro du filtre adopté pour la sélection des fichiers : OpenDialog.FilterIndex - Pour effectuer une sélection de fichier : OpenDialog.Execute (True ou False) $INCLUDE "RAPIDQ.INC" DIM OpenDialog AS QOPENDIALOG CREATE Form AS QFORM Top = 30 Left = 30 Height = 200 Width = 300 Caption = "Utilisation de QOPENDIALOG" END CREATE OpenDialog.Caption = "Sélection fichier" OpenDialog.Filter = "*.*|*.jpg|*.bmp" OpenDialog.FilterIndex = 0 IF (OpenDialog.Execute) THEN ShowMessage "Fichier : " + OpenDialog.FileName END IF Form.ShowModal - 30 - RAPIDQ 3.19. QOVALBTN - Déclaration : DIM BoutonOvale AS QOVALBTN - Mêmes attributs et possibilités que le bouton QCOOLBTN. S’y référer. $INCLUDE "RAPIDQ.INC" CREATE Form AS QFORM Caption = "Utilisation QOVALBTN" Height = 200 Width = 300 Left = 100 Top = 140 CREATE Bouton1 AS QOVALBTN Width = 150 Left = 30 Top = 30 Caption = "Choix 1" END CREATE CREATE Bouton2 AS QOVALBTN Width = 150 Left = 30 Top = 110 Caption = "Choix 2" END CREATE END CREATE Form.ShowModal - 31 - RAPIDQ 3.20. QPOPUPMENU - Déclaration : DIM Popup AS QPOPUPMENU - Indication que le menu « popup » s’affiche dès le clic souris droit : Popup.AutoPopup $INCLUDE "RAPIDQ.INC" DIM Menu1 AS QMENUITEM DIM Menu2 AS QMENUITEM CREATE Form AS QFORM Caption = "Utilisation QPOPUPMENU" Height = 200 Width = 300 Left = 100 Top = 140 CREATE Popup AS QPOPUPMENU AutoPopup = True END CREATE END CREATE Menu1.Caption = "Choix &1" Menu2.Caption = "Choix &2" Popup.AddItems(Menu1, Menu2) Form.ShowModal - 32 - RAPIDQ 3.21. QRADIOBUTTON - Déclaration : DIM Bouton AS QRADIOBUTTON - Indique si le bouton radio est coché : Bouton.Checked (True ou False) $INCLUDE "RAPIDQ.INC" CREATE Form AS QFORM Top = 30 Left = 30 Height = 200 Width = 300 Caption = "Utilisation de QRADIOBUTTON" CREATE Bouton1 AS QRADIOBUTTON Top = 30 Left = 30 Caption = "Pommes" END CREATE CREATE Bouton2 AS QRADIOBUTTON Top = 70 Left = 30 Caption = "Oranges" END CREATE CREATE Bouton3 AS QRADIOBUTTON Top = 110 Left = 30 Caption = "Bananes" END CREATE END CREATE Form.ShowModal - 33 - RAPIDQ 3.22. QSAVEDIALOG - Déclaration : DIM SaveDialog AS QSAVEDIALOG - Titre de la fenêtre : SaveDialog.Caption - Nom du fichier sélectionné : SaveDialog.FileName - Filtre de sélection des fichiers : SaveDialog.Filter. Les différents filtres sont séparés par des caractères « | » - Numéro du filtre adopté pour la sélection des fichiers : SaveDialog.FilterIndex - Pour effectuer une sélection de fichier : SaveDialog.Execute (True ou False) $INCLUDE "RAPIDQ.INC" DIM SaveDialog AS QSAVEDIALOG SaveDialog.Caption = "Sélection fichier" SaveDialog.Filter = "*.*|*.jpg|*.bmp" SaveDialog.FilterIndex = 0 IF (SaveDialog.Execute) THEN ShowMessage "Fichier : " + SaveDialog.FileName END IF - 34 - RAPIDQ 3.23. QSCROLLBAR - Déclaration : DIM Barre AS QSCROLLBAR - Hauteur = Barre.Height - Largeur = Barre.Width - Valeur minimum = Barre.Min - Valeur maximum = Barre.Max - Activer l’aide sur la barre = Barre.ShowHint - Texte de l’aide sur la barre = Barre.Hint - Position de la barre = Barre.Position - Fonction à appeler si la barre change de position = Barre.OnChange $INCLUDE "RAPIDQ.INC" DECLARE SUB ChangementCouleur DECLARE SUB Peindre FUNCTION ConvertitRGB(R AS INTEGER, G AS INTEGER, B AS INTEGER) AS INTEGER ConvertitRGB = (B SHL 16) OR (G SHL 8) OR R END FUNCTION CREATE Form AS QFORM Caption = "Utilisation de QSCROLLBAR" CREATE LabelRouge AS QLABEL Left = 10 Top = 22 Caption = "Rouge:" END CREATE CREATE LabelVert AS QLABEL Left = 5 Top = 52 Caption = "Vert:" END CREATE CREATE LabelBleu AS QLABEL Left = 10 Top = 82 Caption = "Bleu:" END CREATE CREATE LabelNumRouge AS QLABEL Left = 270 Top = 22 Caption = "0" END CREATE - 35 - RAPIDQ CREATE LabelNumVert AS QLABEL Left = 270 Top = 52 Caption = "0" END CREATE CREATE LabelNumBleu AS QLABEL Left = 270 Top = 82 Caption = "0" END CREATE CREATE ScrollRouge AS QSCROLLBAR Left = 50 Top = 20 Width = 200 Height = 20 Min = 0 Max = 255 ShowHint = True Hint = "Composante rouge" OnChange = ChangementCouleur END CREATE CREATE ScrollVert AS QSCROLLBAR Left = 50 Top = 50 Width = 200 Height = 20 Min = 0 Max = 255 ShowHint = True Hint = "Composante verte" OnChange = ChangementCouleur END CREATE CREATE ScrollBleu AS QSCROLLBAR Left = 50 Top = 80 Width = 200 Height = 20 Min = 0 Max = 255 ShowHint = True Hint = "Composante bleue" OnChange = ChangementCouleur END CREATE CREATE BoitePeinte AS QCANVAS Left = 50 Top = 110 Height = 90 Width = 200 OnPaint = Peindre END CREATE END CREATE SUB ChangementCouleur LabelNumRouge.Caption = STR$(ScrollRouge.Position) LabelNumVert.Caption = STR$(ScrollVert.Position) LabelNumBleu.Caption = STR$(ScrollBleu.Position) Peindre END SUB SUB Peindre BoitePeinte.Paint(0, 0, ConvertitRGB(ScrollRouge.Position, ScrollVert.Position, ScrollBleu.Position), &HFFFFFF) END SUB Form.ShowModal - 36 - RAPIDQ 3.24. QSCROLLBOX - Déclaration : DIM ScrollBox AS QSCROLLBOX - Position sur le scroll horizontal : ScrollBox.HorzPosition - Position sur le scroll vertical : ScrollBox.VertPosition - Détermine si les barres de défilement s’affichent automatiquement en cas d’affichage plus grand que la fenêtre : ScrollBox.AutoScroll (True ou False) $INCLUDE "RAPIDQ.INC" CREATE Form AS QFORM Top = 30 Left = 30 Height = 200 Width = 300 Caption = "Utilisation de QSCROLLBAR" CREATE ScrollBox AS QSCROLLBOX Height = Form.ClientHeight Width = Form.ClientWidth AutoScroll = False CREATE Bouton AS QBUTTON Top = 50 Left = 50 Width = 300 Height = 50 Caption = "Cliquez" END CREATE END CREATE END CREATE Form.ShowModal - 37 - RAPIDQ 3.25. QSTATUSBAR - Déclaration : DIM StatusBar AS QSTATUSBAR - Ajouter des panneaux dans la barre de status : StatusBar.AddPanels : on passe en paramètres à AddPanels les différentes chaînes de caractère situées dans les panneaux de la barre de status - Modifier le texte d’un panneau numéro N : StatusBar.Panel(N).Caption - Modifier la taille d’un panneau numéro N : StatusBar.Panel(N).Width $INCLUDE "RAPIDQ.INC" CREATE Form AS QFORM Top = 30 Left = 30 Height = 200 Width = 300 Caption = "Utilisation de QSTATUSBAR" CREATE StatusBar AS QSTATUSBAR END CREATE END CREATE StatusBar.AddPanels "20:22", "Modified", "INS", "qstatusbar.bas" StatusBar.Panel(3).Width = 100 Form.ShowModal - 38 - RAPIDQ 3.26. QTABCONTROL - Déclaration : DIM TabControl AS QTABCONTROL - Ajouter des onglets : TabControl.AddTabs. On passe en paramètre les chaînes de caractères désignant chaque onglet - Fonction à appeler lorsqu’on change d’onglet : TabControl.OnChange - Supprimer des onglets : TabControl.DelTabs. On passe en paramètre les numéros d’onglets à supprimer $INCLUDE "RAPIDQ.INC" DECLARE SUB Changement CREATE Form AS QFORM Top = 30 Left = 30 Height = 200 Width = 300 Caption = "Utilisation de QTABCONTROL" CREATE TabControl AS QTABCONTROL AddTabs "Tab 1", "Tab 2", "Tab 3", "Tab 4" Width = Form.ClientWidth Height = Form.ClientHeight OnChange = Changement HotTrack = True CREATE Panel1 AS QPANEL Top = 40 Left = 5 Width = TabControl.ClientWidth - 10 Height = TabControl.ClientHeight - 50 Caption = "Panel 1" BevelInner = bvLowered CREATE Bouton1 As QBUTTON Caption = "Bouton 1" END CREATE Visible = True END CREATE CREATE Panel2 AS QPANEL Top = 40 Left = 5 Width = TabControl.ClientWidth - 10 Height = TabControl.ClientHeight - 50 Caption = "Panel 2" BevelInner = bvLowered CREATE Bouton2 As QBUTTON Caption = "Bouton 2" END CREATE - 39 - RAPIDQ Visible = False END CREATE CREATE Panel3 AS QPANEL Top = 40 Left = 5 Width = TabControl.ClientWidth Height = TabControl.ClientHeight Caption = "Panel 3" BevelInner = bvLowered CREATE Bouton3 As QBUTTON Caption = "Bouton 3" END CREATE Visible = False END CREATE CREATE Panel4 AS QPANEL Top = 40 Left = 5 Width = TabControl.ClientWidth Height = TabControl.ClientHeight Caption = "Panel 4" BevelInner = bvLowered CREATE Bouton4 As QBUTTON Caption = "Bouton 4" END CREATE Visible = False END CREATE END CREATE END CREATE SUB Changement SELECT CASE TabControl.TabIndex CASE 0 Panel1.Visible = True Panel2.Visible = False Panel3.Visible = False Panel4.Visible = False CASE 1 Panel1.Visible = False Panel2.Visible = True Panel3.Visible = False Panel4.Visible = False CASE 2 Panel1.Visible = False Panel2.Visible = False Panel3.Visible = True Panel4.Visible = False CASE 3 Panel1.Visible = False Panel2.Visible = False Panel3.Visible = False Panel4.Visible = True END SELECT END SUB Form.ShowModal - 40 - 10 - 50 10 - 50 RAPIDQ 3.27. QFILESTREAM Les Filestreams permettent de lire et d’écrire dans des fichiers. Cela est indispensable pour les applications qui doivent sauvegarder des données dans un fichier, pour pouvoir les réutiliser lors d’une prochaine session de l’utilisation du programme. Voici un exemple d’utilisation de QFILESTREAM pour la lecture de données dans un fichier et l’écriture de ces données dans un autre fichier. $INCLUDE "RAPIDQ.INC" DIM DIM DIM DIM DIM DIM File1 AS QFILESTREAM File2 AS QFILESTREAM Entier AS INTEGER Chaine AS STRING Longueur AS INTEGER Buffer(100) AS INTEGER Entier = 10 Chaine = "Voici une chaîne" Longueur = LEN(Chaine) FOR i = 0 TO 99 Buffer(i) = i NEXT i File2.Open("Test.txt", fmCreate) File2.Write(Entier) File2.WriteStr(Chaine, LEN(Chaine)) File2.SaveArray(Buffer(0), 100) File2.Close Entier = 0 Chaine = "" FOR i = 0 TO 99 Buffer(i) = 0 NEXT i File2.Open("Test.txt", fmRead) File2.Read(Entier) Chaine = File2.ReadStr(Longueur) File2.LoadArray(Buffer(0), 100) File2.Close File1.Open("Copie.txt", fmCreate) File1.Write(Entier) File1.WriteStr(Chaine, LEN(Chaine)) File1.SaveArray(Buffer(0), 100) File1.Close - 41 -