PROGRAMMATION 1 PASCAL (BORLAND PASCAL)
Transcription
PROGRAMMATION 1 PASCAL (BORLAND PASCAL)
PROGRAMMATION 1 PASCAL (BORLAND PASCAL) Syntaxe commentée de Pascal. Utilisation de l’environnement de développement. Spécifications externes des unités développées pour l’enseignement de programmation : WinText mode console, WinTGr simulation de graphiques de type « tortue » (TurtleGraphics), WinAppli programmation événementielle mono fenêtre. A. Lacheny rév. septembre 2002 SOMMAIRE SOMMAIRE ...............................................................................................................................................2 I. SYNTAXE DE PASCAL....................................................................................................................1 1. Structure de programme .................................................................................................................. 1 2. Déclarations..................................................................................................................................... 2 3. Instructions ...................................................................................................................................... 3 4. Expressions...................................................................................................................................... 6 5. Types ............................................................................................................................................... 8 6. Constantes ..................................................................................................................................... 10 7. Éléments de base ........................................................................................................................... 11 8. Unités............................................................................................................................................. 11 9. Mots réservés (sous-ensemble)...................................................................................................... 14 10. Principaux identificateurs prédéfinis......................................................................................... 14 II. UTILISATION DE BORLAND PASCAL .......................................................................................16 1. Contenu du répertoire Pascal ....................................................................................................... 16 2. Installation de BORLAND Pascal................................................................................................. 17 3. Description des unités Pascal ........................................................................................................ 17 III. UNITÉ « WinText » .........................................................................................................................18 IV. UNITÉ « WinTGr » ..........................................................................................................................21 V. UNITÉ « WinAppli » ........................................................................................................................26 1. PRÉSENTATION GÉNÉRALE ................................................................................................... 26 2. FONCTIONNALITÉS .................................................................................................................. 28 3. PROCÉDURES GRAPHIQUES................................................................................................... 30 4. PROCÉDURES UTILITAIRES.................................................................................................... 32 5. DIALOGUES « FICHIERS » ....................................................................................................... 34 VI. LISTE DES PROCÉDURES & FONCTIONS PRÉDÉFINIES .......................................................37 I. SYNTAXE DE PASCAL La syntaxe de Pascal peut être représentée par la description sous forme de graphes orientés de ses unités syntaxiques. Les groupes syntaxiques (dont la description est faite dans un graphe) sont représentées par un rectangle (les précisions en italique permettant d'en justifier l'utilisation) ovale et les symboles terminaux par un cercle ou un . La syntaxe proposée est un sous-ensemble suffisant pour mettre en œuvre les algorithmes étudiés dans l’U.V. Programmation 1. 1. Structure de programme 1.1 Programme Programme ::= Un programme débute par le mot-clé program suivi de son nom, d'un point virgule, du contexte d'utilisation (notions prédéfinies), d'un bloc de description et se termine par un point. 1.2 Environnement d'utilisation Contexte ::= Un contexte peut être vide, sinon il débute par le mot-clé uses suivi de la liste des noms des unités séparés par des virgules (si il y a un seul nom, il n'apparaît pas de virgule) et se termine par un pointvirgule. Exemple : uses WinText, Utile; 1.3 Bloc de description Bloc ::= Un bloc est constitué par les déclarations suivies des instructions. PROGRAMMATION PASCAL : 1. SYNTAXE DE PASCAL. 1 2. Déclarations 2.1 Déclarations Déclarations ::= 2.2 Déclaration de constantes Déclaration de constante(s) ::= Exemple : const Pi = 3.1415926; Un = 1; 2.3 Déclaration de types Déclaration de type(s) ::= Exemple : type TEntier = Integer; TFichier = Text; 2.4 Déclaration de variables Déclaration de variable(s) ::= Exemple : var E1, Total: TEntier; Fich: Text; 2.5 Déclaration de procédure ou de fonction Déclaration de procédure ::= 2.6 En-tête de déclaration de procédure ou de fonction En-tête de procédure ::= Type id = Identificateur (de type) Une déclaration de procédure est constituée par l'identificateur de la procédure suivi des paramètres formels et du bloc de description. Une déclaration de fonction est, en plus, suivie de l'identificateur du type du résultat (de la fonction) (un identificateur de type est un identificateur apparaissant dans une déclaration de type). En BORLAND Pascal, le type du résultat d’une fonction doit être un type prédéfini (11.1). 2.7 Paramètres formels de procédure ou de fonction Paramètres ::= Type id = Identificateur (de type) La liste des paramètres formels peut être vide. Exemples : (en-têtes de procédures et de fonctions) procedure Proc1; procedure Proc2(var X: T1; Y, Z: T1); procedure Proc3(var X: T1; Y: T2; var Z: T2); function Fonc1: T1; function Fonc2(X, Y :T1): T2; 2.8 Annonce de procédure ou de fonction Annonce de procédure ::= La procédure (ou fonction) dont l'en-tête est décrit va être déclarée plus loin dans le programme. 3. Instructions 3.1 Liste d'instructions Instructions ::= Une liste d'instructions est « encadrée » par begin et end, chaque instruction est séparée de la suivante par un point virgule. PROGRAMMATION PASCAL : 1. SYNTAXE DE PASCAL. 3 3.2 Instruction Instruction ::= Une instruction peut toujours être remplacée par une liste d'instructions (3.1) ou être vide. 3.3 Affectation Affectation ::= 3.4 Appel de procédure Appel de procédure ::= 3.5 Structure d'instruction d'alternative Instruction alternative ::= Si les éléments de l'alternative portent sur plusieurs instructions, l'unité syntaxique Instruction doit être associée à l'unité Instructions (3.1) en ajoutant les mots-clés begin et end. 3.6 Structure d'instruction de choix scalaire Instruction de choix ::= Une expression scalaire est une expression dont le type associé est scalaire —ensemble des types que l'on peut injecter dans les entiers par la fonction Ord—. Choix scalaire ::= Fin case ::= La fin de l'instruction (délimitée par else) permet la récupération de tous les autres cas d'évaluation de l'expression scalaire. 3.7 Structure d'instruction répétitive Instruction répétitive ::= 3.7.1 « tant que » Instruction répétitive “tantque” ::= 3.7.2 « répéter » Instruction répétitive “répéter” ::= 3.7.3 « pour » Instruction de parcours d'intervalle scalaire ::= Description d'intervalle ::= L'instruction for est une extension de l'instruction while dans le cas particulier du parcours exhaustif d’un intervalle scalaire (parcours ascendant : to ou descendant : downto) 3.8 Sélection Sélection ::= L'instruction with permet de « factoriser » (alléger l'écriture) la désignation des constituants d'une structure d’« enregistrement » (record). PROGRAMMATION PASCAL : 1. SYNTAXE DE PASCAL. 5 4. Expressions La distinction syntaxique entre « Expression », « Expression simple », « Terme », et « Facteur » permet de formaliser la notion de priorité entre opérateurs. 4.1 Expression Expression ::= 4.2 Expression simple Expression simple ::= 4.3 Terme Terme ::= 4.4 Facteur Facteur ::= 4.5 Variable Variable ::= Exemples : … … … … … V1 … T1[12, (X*2) div 3 + 1] … V39.Champ1[I + 1].Champ2 … Ptr^ … Vx[V3]^.Champ1[120] … 4.6 Appel de fonction Appel de fonction ::= 4.7 Descripteur d'ensemble Ensemble ::= Exemples : … [] … … [0, 2..9] … … ['A'..'Z', 'a'..'z', '0'..'9', '_'] … 4.8 Descripteur de sous-ensemble Sous-ensemble ::= PROGRAMMATION PASCAL : 1. SYNTAXE DE PASCAL. 7 5. Types 5.1 Définition de type Type ::= Un type peut être identifié à un type déjà défini (Integer, Real, Char, Boolean, Text, …), être un type scalaire construit ou être construit à partir de types déjà définis. 5.2 Constructeur de type scalaire Type scalaire ::= Un type scalaire peut être identifié à un type scalaire déjà défini (Integer, Char, Boolean, …), être construit comme un intervalle (d'un type scalaire) ou une énumération d'identificateurs. 5.3 Constructeur de type intervalle Type intervalle ::= Les constantes doivent être du même type scalaire. Exemples : TCode = 1 .. 95; TLettre = 'A' .. 'Z'; 5.4 Constructeur de type énuméré Type énuméré ::= Un type énuméré est défini comme une liste d'identificateurs ; ces identificateurs sont les constantes du nouveau type. Exemples : TCouleur = (Rouge, Orange, Jaune, Vert, Bleu, Violet); TLogique = (Faux, Possible, Vrai); 5.5 Constructeur de type tableau Type tableau ::= Exemples : TTab1 TScal Ttab2 Ttab3 5.6 = = = = array['A'..'Z'] of T1; 'a'..'k'; array[TScal] of T2; array[1..20, False..True] of T3; Constructeur de type enregistrement Type enregistrement ::= Exemples : TEnr1 = record Champ1, Champ2 :T1; Champ3: T2 end; 5.7 Constructeur de type fichier Type fichier ::= 5.8 Constructeur de type chaîne Type chaîne ::= 5.9 Constructeur de type pointeur Type pointeur ::= 5.10 Constructeur de type ensemble Type ensemble ::= PROGRAMMATION PASCAL : 1. SYNTAXE DE PASCAL. 9 6. Constantes 6.1 Constante Constante ::= 6.2 Constante non signée Constante non signée ::= 6.3 Constante chaîne Constante chaîne ::= 6.4 Entier non signé Entier non signé ::= 6.5 Nombre non signé Nombre non signé ::= Exemples : … 1e4 … 3.1415926 … 314.15926E-2 … -1e-2… 7. Éléments de base 7.1 Identificateur Identificateur ::= Un identificateur commence par une lettre suivie d'une combinaison quelconque de lettres, de chiffres et du symbole _ . Exemples : … X … … Nom_de_famille … … A120b_1ab … 7.2 Lettre Lettre ::= Les lettres accentuées (é, à, ç, ö, ...) n'appartiennent pas à l'unité syntaxique Lettre. 7.3 Chiffre Chiffre ::= 8. Unités 8.1 Unité Unité ::= Une unité débute par le mot-clé unit suivi de son nom, d'un point virgule, d'une interface (partie visible de l'extérieur), d’une implémentation (code Pascal de l'unité), d'une initialisation et se termine par un point. PROGRAMMATION PASCAL : 1. SYNTAXE DE PASCAL. 11 8.2 Interface Interface ::= L'interface contient la déclaration de tous les objets visibles (exportables) par l'inclusion de l'unité dans le contexte d'une autre unité ou d'un programme (clause uses) ; les procédures et fonctions sont décrites (bloc) dans la partie interface. 8.3 Implémentation Implémentation ::= L'interface contient le code Pascal des procédures et fonctions exportables et de tous les objets non visibles de l'extérieur. 8.4 Partie initialisation En BORLAND Pascal, il possible d'adjoindre à l'unité une séquence d'instructions exécutée une seule fois (pour permettre, par exemple, l’initialisation de variables globales). Initialisation ::= Liste des unités syntaxiques Affectation ...................................................... 3.3 Annonce de procédure ............................................. 2.8 Appel de fonction ................................................ 2.8 Appel de procédure ............................................... 3.4 Bloc ............................................................. 3.4 Chiffre .......................................................... 7.3 Constante ........................................................ 6.1 Constante chaîne ................................................. 6.3 Constante non signée ............................................. 6.2 Contexte ......................................................... 1.2 Déclaration de constante(s) ...................................... 2.2 Déclaration de procédure ......................................... 2.5 Déclaration de type(s) ........................................... 2.3 Déclaration de variable(s) ....................................... 2.4 Déclarations ..................................................... 2.1 En-tête de procédure ............................................. 2.6 Ensemble ......................................................... 4.7 Entier non signé ................................................. 6.4 Expression ....................................................... 4.1 Expression simple ................................................ 4.2 Facteur .......................................................... 4.4 Identificateur ................................................... 7.1 Implémentation ................................................... 8.3 Initialisation ................................................... 8.4 Instruction ...................................................... 3.2 Instruction alternative .......................................... 3.5 Instruction de choix ............................................. 3.6 Instruction de parcours d'intervalle scalaire .................... 3.7.3 Instruction répéter .............................................. 3.7.2 Instruction répétitive ........................................... 3.7 Instruction tant que ............................................. 3.7.1 Instructions ..................................................... 3.1 Interface ........................................................ 8.2 Lettre ........................................................... 7.2 Nombre non signé ................................................. 6.5 Paramètres ....................................................... 2.7 Programme ........................................................ 1.1 Sélection ........................................................ 3.8 Sous-ensemble .................................................... 4.8 Terme ............................................................ 4.3 Type ............................................................. 5.1 Type chaîne ...................................................... 5.8 Type énuméré ..................................................... 5.4 Type enregistrement .............................................. 5.6 Type ensemble .................................................... 5.10 Type fichier ..................................................... 5.7 Type intervalle .................................................. 5.3 Type pointeur .................................................... 5.9 Type scalaire .................................................... 5.2 Type tableau ..................................................... 5.5 Unité ............................................................ 8.1 Variable ......................................................... 4.5 PROGRAMMATION PASCAL : 1. SYNTAXE DE PASCAL. 13 9. Mots réservés (sous-ensemble) and do forward mod program to while array downto function nil record type with begin else if not repeat unit case end implementation of set until const file in or string uses div for interface procedure then var 10. Principaux identificateurs prédéfinis 10.1 Types Char Integer LongInt Real Boolean scal long X 1 X 2 4 6 X 1 caractère entier court entier long réel logique Min Max Chr(0) -32768 -2147483648 2.9e-39 False Chr(255) 32767 2147483647 1.7e38 True Text fichier texte Le type Real permet 7 à 8 chiffres significatifs en base 10. Codage ASCII / ANSI complément à 2 complément à 2 virgule flottante ASCII / ANSI 10.2 Constantes type MaxInt MaxLongInt Pi False True Input Output Integer LongInt Real Boolean Boolean Text Text 32767 2147483647 3.1415927… faux vrai fichier d'entrée (saisie) usuel (clavier en mode console) fichier de sortie (affichage) usuel (écran en mode console) 10.3 Fonctions de parcours de type scalaire Succ (…) Pred (…) valeur suivante (si elle existe) valeur précédente (si elle existe) 10.4 Fonctions de transfert entre types Ord Chr Trunc Round type source type scalaire Integer type réel type réel par exemple dans le cas d'un caractère : Ord Char type résultat Integer Char rang de la valeur dans le type type entier type entier partie entière valeur arrondie Integer code du caractère 10.5 Procédures et fonction d'entrée/sortie (fichiers texte) Dans le cas des fichiers de type Text les procédures d'entrée/sortie peuvent être considérées comme des « métaprocédures » (les paramètres peuvent être de n'importe quel type prédéfini et leur nombre peut être variable —ce qui est interdit sur tout autre procédure—). Le premier paramètre indique le nom du fichier concerné. 10.5.1 Lecture et écriture sur tout fichier Text ff Read(ff, v1, …, vn) Eof(ff) Readln(ff) lecture sur le fichier ff de la valeur des variables v1, …, vn fonction booléenne de test de la fin du fichier ff lecture du fichier ff jusqu'à la première fin de ligne (incluse) écriture sur le fichier ff de la valeur des expressions e1, …, en écriture d'un saut de ligne sur le fichier ff Les écritures suivantes sont équivalentes : Readln(ff, v1, …, vn) Read(ff, v1, …, vn); Readln(ff) Writeln(ff, e1, …, en) Write(ff, e1, …, en); Writeln(ff) Write(ff, e1, …, en) Writeln(ff) 10.5.2 Initialisation de l'utilisation d'un fichier Text Il est nécessaire d'associer (to assign : assigner) à la variable ff de type Text un fichier physique <nf> qui est désigné par son chemin d'accès —path— dans le système d'exploitation utilisé exprimé par une valeur —variable ou constante— de type string. assignation de ff au fichier physique <nf> Assign(ff, <nf>) ouverture de ff (si assigné!) en lecture Reset(ff) ouverture de ff (si assigné!) en écriture Rewrite(ff) Exemples : Assign(FData,'C:\TEMP\PASCAL\TPAS\DONNEES.TXT'); Reset(FData); ... Assign(FResultat, NomFichier); Rewrite(FResultat); 10.5.3 Fin d'utilisation d'un fichier Text La fermeture de fichier Text est un procédure importante dans un système d'exploitation : elle permet de libérer ce fichier pour d'autres utilisations. Elle permet par ailleurs en mode écriture de générer le marqueur de fin de fichier. En Pascal, cette procédure est souvent faite par défaut (sauf, en particulier si le fichier est déclaré dans une procédure ou une fonction) : il est souhaitable de l'effectuer systématiquement. fermeture (fin d'utilisation) du fichier ff Close(ff) 10.6 Cas particulier du « mode Console » (utilisation de l’unité WinText) En mode Console (WinText) deux fichiers de type Text sont prédéfinis et initialisés automatiquement : Input initialisé en lecture et associé au clavier Output initialisé en écriture et associé à la fenêtre d’exécution de WinText. Les procédures d'entrée/sortie ont la même syntaxe en omettant la premier paramètre (nom du fichier) : 10.6.1 Lecture sur Input (clavier) Read(v1, …, vn) Readln lecture sur Input de la valeur des variables v1, …, vn lecture sur Input jusqu'à la première fin de ligne (incluse) 10.6.2 Écriture sur Output (fenêtre Windows) Write(e1, …, en) Writeln écriture sur Output de la valeur des expressions e1, …, en écriture sur Output d'un saut de ligne Les écritures suivantes sont équivalentes : Readln(v1, …, vn) Read(v1, …, vn); Readln Writeln(e1, …, en) Write(e1, …, en); Writeln L’ordre de fin d’utilisation est généré automatiquement à la fin du programme. PROGRAMMATION PASCAL : 1. SYNTAXE DE PASCAL. 15 II. UTILISATION DE BORLAND PASCAL L’ensemble de l’environnement de développement BORLAND Pascal pour Windows nécessaire pour les T.P. de programmation A.S. (Structures d’algorithmes et de données) est contenu dans le répertoire Pascal. La dernière mise à jour de BORLAND-Pascal datant de 1993 (Windows 3.1) ; ce logiciel ne reconnaît que les noms de répertoires et fichiers courts (8 caractères de type D.O.S.). 1. Contenu du répertoire Pascal Le répertoire Pascal contient 4 sous-répertoires : 1) Exec (0.97 Mo) Répertoire contenant tous les fichiers permettant l’utilisation de BORLAND Pascal soit : Bpw.exe exécutable BORLAND Pascal Tpw.tpl bibliothèque de base Bwcc.dll bibliothèques dynamiques Windows Pbrowser.dll -idTcolorcc.dll -idBpw.cfg fichier de configuration (options) Bpw.dsk -id2) Units (297 K) Répertoire contenant les unités nécessaires pour faire les T.P. (d'Année Spéciale) : WinText.tpw unité permettant le mode console. WinTGr.tpw unité permettant le mode graphique TurtleGraphics. WinAppli.tpw unité permettant la mise en œuvre d'applications Windows monofenêtre (programmation événementielle) Commdlg.tpw unité permettant de générer les dialogues Windows. ainsi que les fichiers d’aide Windows associés : WinText.Hlp WinTGr.Hlp WinAppli.Hlp WinText.Cnt WinTGr.Cnt WinAppli.Cnt Le répertoire sera mis à jour au fur et à mesure des évolutions des unités et des choix pédagogiques. 3) Tools Répertoire contenant : PasToRTF.Exe exécutable permettant de transformer un source pascal ('.Pas') en fichier compatible Word ('.Rtf'). (12 K) WorkShop. Répertoire contenant l'éditeur BORLAND de ressource Windows : (2.67 Mo) WorkShop.Exe exécutable WorkShop.Hlp aide et les bibliothèques dynamiques Windows : Worked1.dll Worked2.dll Worked3.dll Worked4.dll Worked5.dll Worklib1.exe Worklib2.exe Oasis. Répertoire contenant l’éditeur d’aides Windows Oasis (freeware) : OasisStd.exe exécutable OasisStd.hlp aide HcRtf.exe compilateur d’aide Windows 4) Examples Répertoire contenant des exemples sources ou exécutables. (1.32 Mo) 2. Installation de BORLAND Pascal 1) créer un répertoire Pascal sur C: (ou C:\Temp) dans lequel on copiera les 3 répertoires Exec Units Tools 2) après exécution de Bpw.exe s'assurer que dans le menu : - pour Compile on a bien Target… Windows - pour Options dans Directories on a Unit directories : c:\ ... \Pascal\units 3. Description des unités Pascal 1) unité WinText.tpw. (version 1.3 3/10/2000). L’unité WinText permet une mise en œuvre facile de programmes BORLAND Pascal pour Windows (en mode dit «console») : création d’une fenêtre d’exécution associée aux fichiers Text standards de Pascal (Input : procédures Read, Readln & Output : procédures Write, Writeln). Deux procédures (sans paramètres) permettent d’obtenir dans un fichier Text (de nom ‘Echo.Txt’) l’« écho » de tous les caractères affichés dans la fenêtre d’exécution d’un programme. Possibilité de simuler un chronomètre pour évaluer le temps d’exécution (millisecondes). 2) unité WinTGr.tpw. (version 3.1 2/11/2000) L’unité BORLAND Pascal WinTGr permet de d’exécuter des graphiques de type tortue (TurtleGraphics) sous Windows comme dans le langage pédagogique Logo défini par Seymour Pappert. Dans une fenêtre graphique d’exécution dont les coordonnées sont définies par des valeurs réelles par rapport à son centre, les dessins sont obtenues en donnant des ordres à une tortue munie d’un crayon : 1. Poser ou lever le crayon (PenDown ou PenUp), 2. Avancer d’une longueur L (Forwd(L)), 3. Tourner d’un angle A exprimé en degrés (Turn(A)) suivant le sens trigonométrique, 3) unité WinAppli.tpw. (version 2.4 14/06/2001) L’unité WinAppli permet de créer de petites applications graphiques dans une fenêtre d’exécution dont les coordonnées sont définies (valeurs entières) à partir du sommet haut gauche de coordonnées (0,0). Le dessin est fait pour les traits (Line) avec un crayon (Pen) dont on peut modifier la largeur (Width) et la couleur (Color) et pour les figures fermées : rectangle (Rect), ovale (Oval), rectangle à coins arrondis (RoundRect). L’intérieur des figures fermées est rempli avec un pinceau (Brush) dont on peut modifier la couleur (Color) ; si le pinceau est transparent (de couleur Null) seul le contour est dessiné. L’unité permet l’affichage de texte dont on peut modifier la taille et les attributs (style, couleur, couleur de fond), la création de menus Windows, l’utilisation de boîtes de dialogue, … L’unité permet de récupérer et gérer les principaux événements Windows (souris, clavier, menu, sortie) (programmation événementielle). L’unité permet l’utilisation de « dialogues fichiers ». PROGRAMMATION PASCAL : 2. UTILISATION DE BORLAND PASCAL. 17 III. UNITÉ « WinText » SOMMAIRE (WinText version 1.3) L’unité BORLAND Pascal pour Windows WinText permet la mise en œuvre de programmes de type « console » (saisie et affichage de texte en mode « conversationnel »). 1) Présentation de l'environnement WinText. 2) Initialisation, terminaison du mode WinText. 3) Écho dans un fichier Text. 4) Écho dans un fichier Text. 5) Exemple. 1. Présentation Sommaire L'unité WinText permet une mise en œuvre facile de programmes BORLAND Pascal pour Windows (en mode dit « console ») dans les environnements Windows 95/98/NT. 1) création d'une fenêtre d'exécution Windows associée aux fichiers Text standards de Pascal : Input : procédures Read, Readln & Output : procédures Write, Writeln. 2) deux procédures (sans paramètres) permettent d'obtenir dans un fichier Text (de nom 'Echo.Txt' situé dans le même répertoire que le fichier source Pascal) l'écho de tous les caractères affichés dans la fenêtre d'exécution du programme. Pour arrêter l'exécution d'un programme ne répondant plus : appuyer simultanément sur les 3 touches (Ctrl, Alt, Suppr) pour le fermer ! 2. Initialisation, terminaison du mode 'WinText' Sommaire La procédure procedure InitWinText (Titre: string; Width, Height: Integer); permet l'initialisation du mode WinText et la création d'une fenêtre Texte d'en-tête Titre permettant de contenir Height lignes de Width caractères (des valeurs nulles ou incorrectes provoquent la création d'une fenêtre « standard » de 80 caractères de large et 100 caractères de hauteur). La non-utilisation de InitWinText entraîne la création d'une fenêtre « standard » lors de l'exécution d'une procédure de lecture, d'écriture (Read, Write, ...) ou d'InitEcho. Son titre porte alors le nom complet (path) du programme Pascal. La procédure procedure DoneWinText; permet la destruction de la fenêtre Texte. La fenêtre d'exécution n'est pas détruite systématiquement à la fin du programme. L'appel de DoneWinText permet de ne pas avoir à détruire « manuellement » l'application devenue INACTIVE. La procédure procedure ClrScr; permet l'effacement du contenu la fenêtre WinText. 3. Écho dans un fichier « texte » Sommaire Tous les caractères affichés sur la fenêtre d'exécution WinText peuvent être copiés dans un fichier texte (Echo.Txt) à partir de l'appel de la procédure InitEcho jusqu'à l'appel de la procédure DoneEcho. La procédure procedure InitEcho; entraîne le début de l'écho et la procédure procedure DoneEcho; permet la fin temporaire de l'écho (qui peut être repris par un nouvel appel de InitEcho). La fermeture de la fenêtre d'exécution provoque la fermeture automatique du fichier écho. Le fichier Echo.Txt peut être utilisé (et imprimé) par le Bloc-notes de Windows (Cf. Exemple). 4. Gestion du temps Sommaire Pour évaluer les algorithmes par la comparaison du temps d'exécution des différents programmes associés, on dispose de la procédure procedure ResetTickCount; permettant la remise à zéro d'un « chronomètre » simulé à l'aide de l'horloge interne, et de la fonction function TickCount: LongInt; permettant la récupération du temps écoulé depuis la précédente remise à zéro (exprimé en millièmes de secondes) Cf. Exemple 5. Exemple Sommaire Le programme {———————————————————DETERMINATION DE NOMBRES PARFAITS————————————————————— Un nombre parfait est un entier non nul égal à la somme de ses diviseurs d est diviseur de n <=> (d divise n) et (d<n) } program Nombres_Parfaits; uses WinText; {————————————————————————————————————————————————————————AfficheDiviseurs procédure permettant l'affichage de tous les diviseurs de l'entier Nbre} procedure AfficheDiviseurs (Nbre: Integer); var D: Integer; {diviseur} begin Write(Nbre : 12, ' = 1'); D := 2; repeat if Nbre mod D = 0 then Write('+', D : 1); D := D + 1 until D * 2 > Nbre; Writeln end; {—————————————————————————programme principal————————————————————————————} var ValMax, {valeur maximum recherchée} Diviseur, {diviseur possible} Somme, {somme des diviseur} N: Integer; {suite d'entiers positifs} PROGRAMMATION PASCAL : 3. UNITÉ WinText. 19 begin InitWinText('Nombres parfaits', 0, 0); InitEcho; Write('>> Valeur maximum = '); Readln(ValMax); ResetTickCount; N := 2; repeat Somme := 0; Diviseur := 1; repeat if N mod Diviseur = 0 then Somme := Somme + Diviseur; Diviseur := Diviseur + 1 until Diviseur >= N; if N = Somme then AfficheDiviseurs(N); N := N + 1; until N > ValMax; Writeln(' durée = ', TickCount : 5, ' ms'); DoneEcho; Writeln('C''est tout') end. permet (après une exécution) la création de la fenêtre et du fichier Echo.Txt pouvant être lu avec le Bloc-notes de Windows : Avec un algorithme plus efficace, le temps d'exécution d’un programme de recherche des nombres parfaits peut être sensiblement « amélioré » (ramené à moins de 500 ms avec la même machine). IV. UNITÉ « WinTGr » SOMMAIRE (WinTGr version 3.1) L’unité BORLAND Pascal pour Windows WinTGr permet la mise en œuvre de programmes graphiques en mode « TurtleGraphics » (dessin de segments de droite, saisie et affichage de texte en mode « conversationnel » dans une fenêtre graphique Windows 95/98/NT). 1) Présentation de l'environnement WinTGr. 2) Initialisation, terminaison du mode WinTGr. 3) Gestion de la tortue. 4) Saisie et affichage de Texte. 5) Miscellanées. 6) Exemple. 1. Présentation Sommaire L'unité WinTGr permet d'exécuter du graphisme de type TurtleGraphics sous Windows comme dans le langage à vocation pédagogique Logo défini par Seymour Pappert. Dans une fenêtre graphique d'exécution dont les coordonnées (réelles) sont définies par rapport à son centre (représentation mathématique usuelle du repère cartésien), les dessins sont obtenus en donnant des ordres à une tortue munie d'un crayon : avancer (Forwd), tourner (Turn), lever le crayon (PenUp), baisser le crayon (PenDown), … À l'état initial la tortue se trouve à l'origine orientée suivant l'axe des x : les 2 ordres successifs (le crayon étant supposé baissé !) : Turn(45) tourner de 45 degrés dans le sens trigonométrique (à gauche) Forwd(300) avancer de 300 unités de longueur provoquent le tracé du segment : La tortue ici matérialisée en blanc n'est pas visible sur l'écran ! Les unités utilisées sont, pour les longueurs, la distance mesurée horizontalement entre 2 points lumineux d'affichage (pixels) sur l'écran et pour les angles, le degré. >> Initialisation, terminaison PROGRAMMATION PASCAL : 4. UNITÉ WinTGr. 21 2. Initialisation, terminaison Sommaire La procédure procedure InitTurtle (Title: string; Width, Height: Integer); permet l'initialisation du mode WinTGr et la création d'une fenêtre graphique d'en-tête Title dont la taille est définie par sa hauteur (Height) et sa largeur (Width) sont exprimées dans l'unité de mesure de longueur utilisée (La longueur 1 correspondant à la distance entre deux points d'affichage ou pixels ; cette distance étant évaluée sur les axes). L'utilisation de valeurs nulles pour exprimer la taille provoque la création d'une fenêtre « standard » ; l'utilisation de valeurs trop grandes (i.e. MaxInteger) provoque la création d'une fenêtre maximale. L'utilisation de cette procédure est obligatoire en début de programme. La procédure procedure DoneTurtle; permet la destruction de la fenêtre d'exécution. La fenêtre d'exécution n'est pas détruite systématiquement à la fin du programme. L'appel de DoneWinTGr permet de ne pas avoir à détruire « manuellement » l'application devenue INACTIVE. La procédure procedure NewTurtle (Message: string); permet l'effacement du contenu la fenêtre d'exécution, le positionnement de la tortue à l'origine dans l'état initial et l'affichage de la chaîne Message dans le coin haut gauche de la fenêtre. >> Présentation 3. Gestion de la tortue Sommaire Le graphisme est obtenu par un crayon (Pen) dont on peut modifier les caractéristiques : 1) la couleur qui peut être choisie parmi les 16 couleurs de base const Black = 0; Blue = 1; Red = 4; Magenta = 5; DarkGray = 8; LightBlue = 9; LightRed = 12; LightMagenta = 13; type TColor = Black..White; Green = 2; Cyan = 3; Brown = 6; LightGray = 7; LightGreen = 10; LightCyan = 11; Yellow = 14; White = 15; à l'aide de la procédure procedure PenColor (Color: TColor); la couleur par défaut (état initial) est noir (Black). 2) l'épaisseur du trait, à l'aide de la procédure procedure PenWidth (Width: Integer); l'épaisseur par défaut (état initial) est 1 (l'épaisseur du trait est égale à la valeur absolue de Width ; une valeur nulle provoque un trait d'épaisseur 1). 3) l'activation du crayon est obtenue par les 2 procédures procedure PenUp; le crayon est levé (inactif) : les déplacements ne provoquent pas de « trace ». procedure PenDown; le crayon est posé (actif) ; c'est la valeur par défaut (état initial). 4) Le déplacement de la tortue est obtenu par les deux procédures procedure Forwd (Long: Real); la tortue avance de Long unités de longueur (une valeur négative provoque un recul de la tortue). une sortie de la fenêtre d'exécution peut provoquer une erreur d'exécution ! procedure Turn (theta: Real); la tortue tourne de theta degrés dans le sens trigonométrique ; une valeur positive provoque un virage à gauche (et une valeur positive un virage à droite). Un déplacement direct vers un point du plan est possible par la procédure procedure GotoXY (x, y: Real); 4. Saisie et affichage de Texte Sommaire 1) la scrutation du clavier peut être faite par les 2 fonctions function KeyPressed: Boolean; permettant de vérifier si une touche du clavier a été enfoncée. function ReadKey: Char; permettant de récupérer le caractère de la touche enfoncée. La fonction ReadKey provoque une attente de frappe de touche (sauf si KeyPressed est égal à True). L'appel régulier de KeyPressed dans un programme permet de rendre actif la possibilité d'interrompre l'exécution. 2) la saisie d'une chaîne de caractères peut être faite par la procédure procedure ReadString (x, y: Real; Prompt: string; var Result: string); le programme attend la saisie d'une chaîne de caractères après l'affichage de Prompt, la coordonnée du point (x,y) correspond au coin haut gauche du premier caractère de Prompt. Le résultat est récupéré dans Result. 3) l'affichage d'une chaîne de caractères peut être fait par la procédure procedure OutString (x, y: Real; Message: string); le point (x,y) correspond au coin haut gauche du premier caractère affiché de Message. 4) la taille des caractères affichés (dépendant du mode graphique) exprimée en pixels, peut être obtenue par les 2 fonctions function XChar: Integer; function YChar: Integer; 5. Miscellanées Sommaire 1) Il est possible de récupérer des informations sur la position de la tortue dans la fenêtre graphique par les fonctions function Angle: Real; orientation de la tortue (degrés / axe des x) function WhereX: Real; coordonnée x de la tortue function WhereY: Real; coordonnée y de la tortue function InWindow: Boolean; permet de vérifier si la tortue est visible ! 2) la position de la tortue peut être forcée par la procédure procedure Position (x, y, theta: Real); les nouvelles coordonnées de la tortue sont (x,y) et son orientation theta degrés / axe des x. 3) les valeurs maximales visibles pour les x et y dans la fenêtre d'exécution peuvent être obtenues par les 2 fonctions PROGRAMMATION PASCAL : 4. UNITÉ WinTGr. 23 function XMax: Integer; function YMax: Integer; 4) il est possible de sauvegarder dans une pile (stack) l'état de la tortue par la procédure procedure SaveTurtle; puis de le récupérer par la procédure procedure RestoreTurtle; 5) Il est possible de générer l'alerte sonore système par la procédure procedure Beep; et de générer une attente exprimée en millisecondes par la procédure procedure Wait (Time: LongInt); 6. Exemple Sommaire Le programme program Turtle; uses WinTGr; {—————————————————————————————————————————————————— choix d'une couleur} procedure ChoixCouleur (var Couleur: TColor); var i, Err: Integer; x, y: Real; StCoul: string; {chaîne de lecture de la réponse} begin NewTurtle('Couleurs prédéfinies'); PenWidth(yChar); x := xMax/2; y := yMax/9; for i := 0 to 15 do begin Str(i: 2, StCoul); {conversion d'un nombre en type string} OutString(-x-xChar*4, yMax-(y*(i+1)) + yChar/2, StCoul); Position(-x, yMax-(y*(i+1)), 0); PenColor(i); Forwd(2*x); end; ReadString(-100, -YMax+YChar, 'Choix de couleur : ', StCoul); Val(StCoul, Couleur, Err); {conversion d'une chaîne en nombre} end; {———————————————————————————————————————————————————dessin d'une rosace} procedure Rosace (Taille: Real; Couleur: TColor); var i, j :Integer; d: Real; begin NewTurtle('Rosace'); Pencolor(Couleur); PenWidth(2); d := Taille*0.6; for i := 1 to 10 do begin Turn(-36); for j := 1 to 5 do begin Forwd(d); Turn(72) end; end; end; {—————————————————————————programme principal————————————————————————————} var ValC: TColor; {couleur choisie} begin InitTurtle('Essai WinTGr', 420, 420); ChoixCouleur(ValC); Rosace(yMax, ValC); OutString(xMax-11*xChar, -yMax+yChar, 'C''est tout!'); Beep; ReadKey; DoneTurtle end. permet (après une exécution) la création de la fenêtre puis l'affichage PROGRAMMATION PASCAL : 4. UNITÉ WinTGr. 25 V. UNITÉ « WinAppli » SOMMAIRE (WinAppli version 2.3) L’unité BORLAND Pascal pour Windows WinAppli permet de créer des applications Windows (graphiques) monofenêtre en programmation « événementielle ». 1) 2) 3) 4) 5) 6) 7) 8) 9) 1. Présentation de l'Environnement graphique. Initialisation du mode WinAppli (création de la fenêtre). Gestion des Menus déroulants Windows. Gestion des Événements Windows. Création d'une Boîte modale de dialogue. Appel d'un fichier d'aide. Utilisation de procédures utilitaires (Miscellanées). Saisie de texte. Utilisation de Dialogues fichiers. PRÉSENTATION GÉNÉRALE 1.1 Environnement graphique Sommaire L'Initialisation du mode WinAppli provoque la création d'une fenêtre d'exécution dont les coordonnées (de l'intérieur) sont des valeurs entières exprimées en pixels et définies à partir du sommet haut gauche de coordonnées (0, 0) : Le contexte graphique d'affichage est défini par 3 objets : 1) le crayon (pen) qui permet de définir le tracé les lignes (droites) et dont on peut modifier la couleur (PenColor) et l'épaisseur (PenWidth). 2) le pinceau (brush) qui permet de définir le contenu des figures fermées et dont on peut modifier la couleur (BrushColor). 3) la police de caractères (font) qui permet l'affichage de texte ; il est possible d’en modifier la couleur (TextColor), le style (TextStyle) et la couleur de fond (TextBkColor). Il lui correspond des Types et valeurs par défaut. L'affichage se fait par les Fonctions graphiques. 1.2 Fonctions & procédures graphiques Sommaire Les procédures et fonctions graphiques permettent : 1) une Modification du contexte d'affichage : crayon (pen), pinceau (brush) ou caractères (text), 2) de tracer une Ligne droite, 3) de dessiner une Figure fermée, 4) de récupérer la taille (utilisable) de la Fenêtre graphique et d'en effacer le contenu, 5) d'afficher des points (Pixels), 6) de sauvegarder, récupérer et afficher des images (Bitmap), 7) d'afficher du Texte. 1.3 Types prédéfinis & valeurs par défaut Sommaire Les couleurs de base définies de la manière suivante : const Null = -1; {couleur "transparente"} Black = 0; Blue = 1; Green = 2; Cyan = 3; Red = 4; Magenta = 5; Brown = 6; LightGray = 7; DarkGray = 8; LightBlue = 9; LightGreen = 10; LightCyan = 11; LightRed = 12; LightMagenta = 13; Yellow = 14; White = 15; Les types prédéfinis sont type TColor = Null..White; TFontStyle = set of (Bold, Italic, Underline); >>> Cf. Texte TReply = (Yes, No, Cancel); >>> Cf. Boîte modale de dialogue Les valeurs initiales sont pour le crayon : PenColor(Black); PenWidth(1); pour le pinceau : BrushColor(Null); et pour le texte : TextColor(Black); BkColor(White); TextHeight(16); TextStyle([]); Ces valeurs peuvent être personnalisées par la Modification du contexte. 1.4 Modification du contexte d’affichage Environnement graphique 1.4.1 Crayon (pen) La couleur du crayon peut être modifiée par procedure PenColor(Color: TColor); et l'épaisseur de trait (exprimée en pixels) par procedure PenWidth(Width: Integer); PROGRAMMATION PASCAL : 5. UNITÉ WinAppli. 27 1.4.2 Pinceau (brush) La couleur de remplissage (des figures fermées) peut être modifiée par procedure BrushColor(Color: TColor); 1.4.3 Texte La taille (hauteur des caractères en pixels –16 par défaut–) peut être modifiée par procedure TextSize (Height: Integer); la couleur des caractères par procedure TextColor (Color: TColor); la couleur d'affichage du fond de texte par procedure TextBkColor (Color: TColor); et le style par procedure TextStyle (Style: TFontStyle); Exemple : TextColor(Red); TextStyle([Bold, Underline]); caractères rouges, gras & soulignés. TextBkColor(Null); TextStyle([]); caractères « normaux » avec fond transparent (l'affichage précédent n'est pas « effacé »). 1.4.4 Sauvegarde et restauration du contexte graphique (ensemble des valeurs précédentes). procedure SaveContext; procedure RestoreContext; >>> Types et valeurs par défaut. 2. FONCTIONNALITÉS 2.1 Initialisation Sommaire L'initialisation du mode WinAppli est fait par l'appel de la procédure : procedure InitAppli (Title: string; Width, Height: Integer); qui provoque la création d'une fenêtre graphique d'en-tête Title de hauteur Width et de largeur Height (exprimées en pixels). La valeur 0 entraîne la définition de la taille par défaut et la valeur MaxInt la taille maximale (l'appel de cette procédure est obligatoire pour créer une fenêtre). Une fois la fenêtre créée, il est possible de lui associer des Menus déroulants. L'appel de cette procédure alors qu'une fenêtre graphique est déjà créée provoque la destruction de cette fenêtre et de ses attributs (Titre, Menus, ...) puis la création d'une nouvelle fenêtre (pouvant être d'une taille différente) dont il faudra, le cas échéant, recréer les attributs. La procédure procedure DoneAppli; de terminaison du mode WinAppli est implicite et exécutée systématiquement à la fin du programme. 2.2 Menus déroulants Sommaire Les menus de la fenêtre principale sont repérés par leur numéro d'ordre (≥1) ; à chaque menu de nom Name est associé une liste déroulante (PopUp) des choix possibles représentée sous la forme d'une chaîne de caractères : chaque sous menu est séparé du suivant par un point virgule. Chaque sous menu est repéré par son numéro d'ordre (SubMenu). 2.2.1 Ajout d'un menu. procedure AddMenu (Name, PopUp: string); Exemple : InitAppli('Répertoire', 0, 0); AddMenu('Fichier', 'Nouveau;;Ouvrir;Sauver;Sauver sous…;;Fermer'); AddMenu('Etat','Consultation;;Saisie;Modification;Suppression'); AddMenu('?', 'Aide de Répertoire;;A propos ...'); Les valeurs associées aux menus sont 1 pour 'Fichier', 2 pour 'Etat' et 3 pour '?'. Les valeurs des sous menus (SubMenu) associés à 'Fichier' sont : 1 pour 'Nouveau', 2 pour 'Ouvrir', ..., 5 pour 'Fermer'. 2.2.2 Activation ou désactivation du sous menu de rang SubMenu du menu de rang Menu procedure ActiveMenu (Menu, SubMenu: Integer; Enable: Boolean); 2.2.3 Affichage ou non d'une marque (« coche ») en face du sous menu de rang SubMenu du menu de rang Menu procedure MarkMenu (Menu, SubMenu: Integer; Check: Boolean); Exemple : ActiveMenu(1, 3, False); MarkMenu(2, 2, True); La récupération des choix dans les menus est faite par le gestionnaire d'Événements. 2.3 Événements Sommaire Les événements pouvant être interceptés par WinAppli sont caractérisés par le type type TEvent = (eNull, eQuit, eMenu, eKeyboard, eMouseLB, eMouseRB); eNull pas d'événement depuis le dernier appel de la fonction NewEvent eQuit une demande pour quitter l'application a été détectée eMenu événement Menu : choix d'un sous menu (actif) eKeyboard événement Clavier : une touche a été pressée eMouseLB événement Souris : le bouton gauche a été pressé eMouseRB événement Souris : le bouton droit a été pressé ils sont récupérés par l'appel de la fonction function NewEvent: TEvent; PROGRAMMATION PASCAL : 5. UNITÉ WinAppli. 29 Les informations sur le dernier événement (récupéré) peuvent être obtenues par l'appel des procédures 2.3.1 récupération du caractère correspondant à la touche pressée : procedure GetChar (var Key: Char); 2.3.2 récupération du code géographique correspondant à la touche pressée : procedure GetKeyCode (var KeyCode: Integer); 2.3.3 récupération du rang du sous menu correspondant au menu sélectionné : procedure GetMenu (var Menu, SubMenu: Integer); 2.3.4 récupération des coordonnées de la souris (lors du dernier événement Souris) : procedure GetMouseLoc (var x, y: Integer); Exemple de répétition de scrutation des événements : repeat case NewEvent of eMenu : ... eKeyboard : ... eQuit : FinAppli := WarningBox(2, 'Confirmer quitter')=Yes end until FinAppli 3. PROCÉDURES GRAPHIQUES 3.1 Fenêtre graphique Fonctions Graphiques L'effacement de la fenêtre graphique peut être effectué par l'appel de la procédure procedure EraseWindow; La taille utilisable (de l'intérieur) de la fenêtre graphique, exprimée en pixels peut être obtenue par les deux fonctions function xWindow: Integer; function yWindow: Integer; La création de menus entraîne une modification de yWindow. Il est possible de modifier la taille de la fenêtre par la procédure InitAppli ; mais ses attributs seront alors réinitialisés et ses menus supprimés. (>> Initialisation). 3.2 Ligne droite Fonctions Graphiques La procédure procedure DrawLine (x1, y1, x2, y2: Integer); effectue le tracé d'une ligne (droite) allant du point (x1, y1) au point (x2, y2) avec le crayon actif (couleur et épaisseur). 3.3 Figures fermées Fonctions Graphiques Les figures fermées sont définies par rapport à une zone rectangulaire de la fenêtre déterminée par les coordonnées du point haut gauche (x1, y1) et du point bas droit (x2, y2). Le contour est effectué avec le crayon actif (Pen) et l'intérieur est rempli avec le pinceau actif (Brush). 3.3.1 Tracé d'un rectangle procedure DrawRect (x1, y1, x2, y2: Integer); 3.3.2 Tracé d'un rectangle à coins arrondis procedure DrawRoundRect (x1, y1, x2, y2, R: Integer); le rayon de l'arrondi est R exprimé en pixels. 3.3.3 Tracé d'un ovale inscrit dans un rectangle procedure DrawOval (x1, y1, x2, y2: Integer); 3.4 Texte Fonctions Graphiques Le texte est affiché avec la police fixe « Courier New » : tous les caractères d'une même taille ont la même largeur. Il est possible d'en modifier la taille (hauteur), la couleur, la couleur du fond et le style (gras, souligné, italique) ; Cf. Modification du contexte. La procédure procedure DrawString (x, y: Integer; Message: string); permet l'affichage de Message à partir de (x, y) = coordonnée du point haut gauche du premier caractère. Il est possible de récupérer (pour calculer la taille des messages affichés) les largeur et hauteur effectives d'un caractère (y compris l'espacement) par les fonctions : function xText: Integer; function yText: Integer; La chaîne de caractère Message peut être obtenue à partir d'une expression Value de type numérique (Integer, LongInt, Real, ...) par la procédure procedure Str (Value: <type numérique>[: Longueur [:nombre de décimales]]; var Message: string); on associe à Value des formats comme dans les ordres de lecture (Read) sur fichier Text. Exemple : Str(Val: 12: 6, StrVal); DrawString(10, 10, StrVal); Il est possible de faire de la Saisie de texte par la procédure ReadString. 3.5 Pixel Fonctions Graphiques L'affichage dans la fenêtre graphique d'exécution est composé de pixels (points). Ces pixels sont normalement affichés par les procédures de dessin. Ils peuvent, aussi, être affichés (un par un) par les deux procédures : 3.5.1 Affichage d'un point d'une couleur donnée procedure DrawPixel (x, y: Integer; Color: TColor); 3.5.2 Affichage d'un point de couleur calculée par la fonction système RGB (Red Green Blue) procedure DrawPixRGB (x, y: Integer; R, G, B: Byte); 3.5.3 Récupération de la couleur RGB (Red Green Blue) d’un point affiché sur la fenêtre procedure GetPixRGB (x, y: Integer; var R, G, B: Byte); PROGRAMMATION PASCAL : 5. UNITÉ WinAppli. 31 3.6 Bitmap Fonctions Graphiques Les bitmaps correspondent à un rectangle d'affichage sur la fenêtre (un rectangle est défini par son point haut gauche et son point bas droit). Le logiciel permet de mémoriser jusqu'à kMaxImages (=64) bitmaps par l'appel de la procédure procedure GetImage (Numero, top, left, bottom, right: Integer); la bimap correspondant au rectangle (délimité par top, left, bottom, right) affiché sur la fenêtre est repérée par son Numero (devant être compris entre 1 et kMaxImage). La bitmap peut alors être affichée par l'appel de la procédure procedure PutImage (Numero, top, left: Integer); Les bitmaps peuvent être récupérées à partir d'un fichier ressource par la procédure procedure LoadImage (Numero: Integer; Name: string); qui correspond au chargement de la bitmap de nom Name se trouvant dans un fichier ressource ('*.Res') inclus au programme par la commande de compilation: {$R <nom du fichier> : l'image correspondante est repérée comme dans GetImage par Numero et peut être affichée par PutImage. 4. PROCÉDURES UTILITAIRES 4.1 Boîte modale de dialogue Sommaire Il est possible d'afficher des boîtes d'alerte système pouvant comporter de 1 à 3 boutons ; la réponse étant caractérisée par le type TReply (Cf. Types et valeurs par défaut) ; ils sont récupérés par l'appel de la fonction permettant l'affichage d'une boîte de dialogue d'alerte ayant Num boutons de réponse et contenant la chaîne Message function WarningBox (Num: Integer; Message: string): TReply; le résultat de l'appel est Yes No Cancel si le bouton « Oui » ou « OK » a été pressé, si le bouton « Non » a été pressé (Num = 2 ou 3), si le bouton « Annuler » a été pressé (Num = 3). Exemples : WarningBox(1, Concat('Jeu de Taquin v1.2',#13,'08/02/2000')) WarningBox(2, 'Fin du test')=Yes 1 2 WarningBox(3, 'Enregistrer les modifications ...')=Cancel 3 4.2 Appel d’un fichier d’aide Sommaire Il est possible d'appeler un fichier d'aide Windows95 (créé par exemple par le freeware Oasis) par les appels des procédures : procedure ExecHelp (HelpName: string); procedure DoHelpContext (HelpName: string; Context: Integer); permettant l'exécution de l'aide Windows (WinHelp) avec le fichier de nom HelpName (devant avoir le suffixe '*.Hlp'). La procédure DoHelpContext permet d'afficher directement le premier item de l'aide ayant le numéro de contexte Context. Exemples : ExecHelp('Essai'); DoHelpContext('Essai', 1); L'exécution de WinHelp peut être « terminée » par l'appel de la procédure procedure DoneHelp; Il est possible d'exécuter un programme Windows (>Miscellanées ). 4.3 Saisie de « texte » Sommaire L'édition d'une chaîne de caractères, par saisie au clavier, peut être faite par la procédure procedure EditString(x, y, Long: Integer; Local: Boolean; var Result: string); qui provoque l'affichage de la chaîne Result dans un rectangle délimitant sa taille maximum (déterminée par Long). Le point (x, y) correspond au coin haut gauche du premier caractère. L'édition peut être faite par le clavier en utilisant les touches de contrôle : Inser basculement en mode « overwrite » ou « insert » (par défaut) Suppr suppression du caractère à droite du curseur Début positionnement du curseur au début Fin positionnement du curseur en fin. la souris peut être utilisée pour déplacer le curseur d'édition (bouton gauche). Si le booléen Local est égal à True, la chaîne résultante doit être validée par la touche Entrée sinon elle peut aussi être validée par un clic du bouton gauche de la souris à l'extérieur du rectangle d'édition. La lecture d'une chaîne de caractères (précédée de l'affichage de Prompt) peut être faite par la procédure procedure GetString(x, y: Integer; Prompt: string; var Result: string; Long: Integer); (fonctionne sur le même principe que EditString, Local et Result étant respectivement initialisés à True et à '') Exemple : GetString(10, 10, ' Nom du client ', NomCl, 40); GetString(10, 30, 'Prénom du client ', PreCl, 30); >>> Affichage de Texte . PROGRAMMATION PASCAL : 5. UNITÉ WinAppli. 33 La chaîne de caractères obtenue Result peut être traduite en une variable Value de type numérique (Integer, LongInt, Real, ...) par la procédure procedure Val (Result: string; var Value: <type numérique>; var Code: Integer); Code contient le résultat de la transcodification (0 si pas d'erreur sinon sa valeur indique le rang du caractère où été détectée la première erreur). Exemple : repeat GetString(10, 10, ' x = ', StrX, 20); Val(StrX, x, Erreur); until Erreur=0; 4.4 Miscellanées Sommaire 4.4.1 Exécution d'un programme Windows (*.Exe) La procédure procedure ExecFile (CommandLine: string); provoque l'exécution de la ligne de commande CommandLine. Exemple : ExecFile('Winhlp32 Essai.hlp'); 4.4.2 Génération de l'alerte sonore système procedure Beep; 4.4.3 Simulation d'un « chronomètre » La remise à zéro du chronomètre est effectuée par la procédure procedure ResetTickCount; La fonction function TickCount: LongInt; permet la récupération du temps écoulé depuis la précédente remise à zéro (exprimé en millièmes de secondes). 4.4.4 Ajout de la chaîne Name en fin du titre de la fenêtre Windows (permet par exemple d'afficher le nom du fichier en cours d'utilisation) procedure SetEndTitle (Name: string); Exemple : SetEndTitle(Concat('"', NameOfFile(Path), '"')); 5. DIALOGUES « FICHIERS » 5.1 Dialogues « Fichiers » Sommaire Il est possible d’utiliser des dialogues modaux Windows pour récupérer les noms complets DOS (paths) de fichiers en parcourant la hiérarchie des répertoires accessibles (comme en utilisant le menu Fichier et les sous menus Ouvrir… ou Enregistrer sous… de la plupart des logiciels!). Cette unité permet deux types de dialogues : 1) Dialogue Ouvrir ... pour récupérer le nom d'un fichier existant, 2) Dialogue Enregistrer sous … pour récupérer le chemin complet (path) où sauver un fichier. 5.2 Dialogue Ouvrir… Dialogues Fichiers La détermination du nom complet D.O.S. (path) d'un fichier existant peut être effectué par l'appel de la fonction function OpenFile (Mask: string; var Path: string): Boolean; création d'une fenêtre de dialogue dans laquelle n'apparaîtront que les fichiers correspondant au masque. La fonction retourne True si on sort de la fenêtre de dialogue par une validation, on récupère, alors, dans Path le chemin (nom DOS) du fichier sélectionné par l'utilisateur. Exemple : if OpenFile('*.bsp', NomFich) then begin Assign(Fichier, NomFich); Reset(Fichier); … La fonction function NameOfFile (var Path: string): string; retourne le nom (court) du fichier correspondant à Path. 5.3 Dialogue Enregistrer sous… Dialogues Fichiers La détermination du nom complet D.O.S. (path) d'un fichier à partir de son nom court peut être effectué par la fonction function SaveFile (Mask: string; var Path: string): Boolean; création d'une fenêtre de dialogue dans laquelle apparaîtront les répertoires menant à Path. La fonction retourne True si on sort de la fenêtre de dialogue par une validation; on récupère, alors, dans Path le nom complet D.O.S. du fichier dont le répertoire a été sélectionné (Path doit être initialisé avant l'appel de la fonction, la valeur correspondante pouvant être ou non modifiée par l'utilisateur). Exemple : NomFich := 'MONSTRE.BSP'; if SaveFile('*.BSP', NomFich) then begin Assign(Fichier, NomFich); Rewrite(Fichier); … PROGRAMMATION PASCAL : 5. UNITÉ WinAppli. 35 La fonction function ExistFile (var Path: string): Boolean; permet de vérifier l'existence du fichier correspondant à Path et, par exemple, de demander confirmation (de la modification du fichier) à l'utilisateur en utilisant une Boîte modale de dialogue VI. LISTE DES PROCÉDURES & FONCTIONS PRÉDÉFINIES procedure ActiveMenu (Menu, SubMenu: Integer; Enable: Boolean); unité Page WinAppli 29 WinAppli 28 WinTGr 23 WinTGr WinAppli WinAppli 24 34 27 WinText 19 WinAppli 33 WinAppli 28 WinText 19 WinAppli 33 WinTGr 22 WinText 18 WinAppli 30 WinAppli 31 WinAppli 31 WinAppli 31 WinAppli 30 WinAppli 31 WinAppli 31 WinAppli 33 WinAppli 30 WinAppli 34 WinAppli 33 WinAppli 36 WinTGr 22 WinAppli 30 Activer ou désactiver un menu procedure AddMenu (Name, PopUp: string); Ajouter un menu un menu à la barre de menus function Angle: Real; Récupérer l’angle de la tortue avec l’axe des x procedure Beep; Générer un bip sonore procedure BrushColor (Color: TColor); Définir la couleur du pinceau procedure ClrScr; Effacer le contenu de la fenêtre texte procedure DoHelpContext (HelpName: string; Context: Integer); Exécution d’un fichier d’aide Windows (.hlp) procedure DoneAppli; Fin d’application procedure DoneEcho; Fin d’écho procedure DoneHelp; Fin d’aide procedure DoneTurtle; Fin d’application procedure DoneWinText; Fin d’application procedure DrawLine (x1, y1, x2, y2: Integer); Tracé d’une ligne procedure DrawOval (x1, y1, x2, y2: Integer); Tracé d’un ovale inclus dans un rectangle procedure DrawPixel (x, y: Integer; Color: TColor); Tracé d’un point procedure DrawPixRGB (x, y: Integer; R, G, B: Byte); Tracé d’un point procedure DrawRect (x1, y1, x2, y2: Integer); Tracé d’un rectangle procedure DrawRoundRect (x1, y1, x2, y2, R: Integer); Tracé d’un rectangle à coins arrondis procedure DrawString (x, y: Integer; Message: string); Affichage d’une chaîne de caractères procedure EditString (x, y, Long: Integer; Local: Boolean; var Result: string); Édition d’une chaîne de caractères tapée au clavier procedure EraseWindow; Effacement de la fenêtre graphique procedure ExecFile (CommandLine: string); Exécution d’un fichier (.Exe) procedure ExecHelp (HelpName: string); function Exécution d’un fichier d’aide Windows (.Hlp) ExistFile (Path: string): Boolean; Vérification de l’existence d’un fichier procedure Forwd (Long: Real); Faire avancer la tortue procedure GetChar (var Key: Char); Récupérer un caractère tapé au clavier PROGRAMMATION PASCAL : 6. LISTE DES PROCÉDURES ET FONCTIONS PRÉDÉFINIES. 37 procedure GetImage (Numero, top, left, bottom, right: Integer); WinAppli 32 WinAppli 30 WinAppli 30 WinAppli 30 WinAppli 31 WinAppli 33 WinTGr 22 WinAppli 28 WinTGr 19 WinAppli 22 WinText 18 WinTGr 23 WinTGr 23 WinAppli 32 WinAppli 29 WinAppli 35 WinAppli 29 WinTGr 22 WinAppli 35 WinTGr 23 WinTGr WinAppli WinTGr 22 27 22 WinTGr 22 WinTGr WinAppli WinTGr 22 27 23 WinAppli 32 WinTGr 23 WinTGr 23 WinText WinAppli WinAppli 19 34 28 WinTGr 24 Sauver une bitmap affichée dans la fenêtre procedure GetKeyCode (var KeyCode: Integer); Récupérer le code géographique d’une touche du clavier procedure GetMenu (var Menu, SubMenu: Integer); Récupérer les numéros des menu et sous menu sélectionnés procedure GetMouseLoc (var x, y: Integer); Récupérer la position de la souris procedure GetPixRGB (x, y: Integer; var R, G, B: Byte); Récupération de la « couleur » d’un point procedure GetString (x, y: Integer; Prompt: string; var Result: string; Long: Integer); Lire une chaîne tapée au clavier procedure GotoXY (x, y: Real); Déplacement de la souris procedure InitAppli (Title: string; Width, Height: Integer); Création d’une application Windows monofenêtre procedure InitEcho; Début d’écho procedure InitTurtle (Title: string; Width, Height: Integer); Création d’une application procedure InitWinText (Title: string; Width, Height: Integer); Création d’une application function InWindow: Boolean; Vérification de la présence de la tortue dans la fenêtre function KeyPressed: Boolean; Vérification de la pression d’une touche procedure LoadImage (Numero: Integer; Name: string); Sauver une bitmap à partir d’un fichier ressource (*.Res) procedure MarkMenu (Menu, SubMenu: Integer; Check: Boolean); Marquer ou « démarquer » un menu function NameOfFile (var Path: string): string; Récupérer le nom court d’un fichier function NewEvent: TEvent; Récupérer un événement Windows procedure NewTurtle; Réinitialiser l’état de la tortue function OpenFile (Mask: string; var Path: string): Boolean; Récupérer le nom long d’un fichier (existant) avec une boîte de dialogue procedure OutString (x, y: Integer; Message: string); Affichage d’une chaîne de caractères procedure PenColor (Color: TColor); Modification de la couleur du crayon procedure PenDown; Rendre le crayon actif procedure PenUp; Rendre le crayon inactif procedure PenWidth (Width: Integer); Modification de l’épaisseur du crayon procedure Position (x, y, theta: Real); Modifier la position de la tortue procedure PutImage (Numero, top, left: Integer); Afficher une bitmap (précédemment sauvée) function ReadKey: Char; Récupérer un caractère tapé au clavier procedure ReadString (x, y: Integer; Prompt: string; var Result: string); Lire une chaîne tapée au clavier procedure ResetTickCount; Remettre le chronomètre à zéro procedure RestoreContext; Restaurer le contexte graphique (précédemment sauvé) procedure RestoreTurtle; Restaurer l’état de la tortue (précédemment sauvé) procedure SaveContext; WinAppli 28 WinAppli 35 WinTGr 24 WinAppli 34 Sauver le contexte graphique function SaveFile (Mask: string; var Path: string): Boolean; Récupérer le nom long d’un fichier avec une boîte de dialogue procedure SaveTurtle; Sauver l’état de la tortue procedure SetEndTitle (Name: string); Modifier la fin de titre de la fenêtre procedure Str (Value: <type numérique>; var Message: string); 31 Transcodification d’une valeur numérique en chaîne de caractères function Sqrt (X: Real): Real; Calcul de la racine carrée procedure TextBkColor (Color: TColor); WinAppli 28 WinAppli 28 WinAppli 28 WinAppli 28 WinText WinAppli WinTGr 19 34 22 Modifier la couleur du fond de texte procedure TextColor (Color: TColor); Modifier la couleur du texte procedure TextSize (Height: Integer); Modifier la taille du texte procedure TextStyle (Style: TFontStyle); Modifier le « style » du texte function TickCount: LongInt; Récupérer la valeur du chronomètre procedure Turn (Theta: Real); Modifier l’angle de la tortue procedure Val (Result: string; var Value: <type numérique>; var ErrorCode: Integer); 33 Transcodification d’une chaîne de caractères en valeur numérique procedure Wait (Time: LongInt); WinTGr 24 WinAppli 32 WinTGr 23 WinTGr 23 WinTGr 23 WinTGr 24 WinAppli 31 WinAppli 30 WinTGr 23 WinTGr 24 WinAppli 31 WinAppli 30 Générer une attente function WarningBox (Num: Integer; Message: string): TReply; function WhereX: Real; function WhereY: Real; Générer une boîte de dialogue Récupérer l’abscisse de la tortue Récupérer l’ordonnée de la tortue function xChar: Integer; Récupérer la largeur d’un caractère function xMax: Integer; Récupérer la valeur maximum pour x function xText: Integer; Récupérer la largeur d’un caractère function xWindow: Integer; Récupérer la largeur de la fenêtre function yChar: Integer; Récupérer la hauteur d’un caractère function yMax: Integer; function yText: Integer; function yWindow: Integer; Récupérer la valeur maximum pour y Récupérer la hauteur d’un caractère Récupérer la hauteur de la fenêtre PROGRAMMATION PASCAL : 6. LISTE DES PROCÉDURES ET FONCTIONS PRÉDÉFINIES. 39
Documents pareils
Programmation - ARSoft International
1 - Créer un nouveau projet........................................................................................ 16
2 - Définir le nom du projet.....................................................