Initiation Delphi
1 AVERTISSEMENT
Ce support est un document d'initiation dont le contenu se limite volontairement aux parties tudies et ne saurait se substituer la notice du concepteur du logiciel. La base utilise est Delphi6, dition Professionnelle: il est vident que ldition "Entreprise" comporte davantage de fonctionnalits qui ne seront pas abordes par ce document.
Ce document est distribu uniquement lors d'un cycle de formation Delphi ne peut tre reproduit partiellement ou intgralement: tous droits rservs. La connaissance pralable d'un langage de programmation structure (de prfrence Pascal) est fortement recommande, mais non indispensable. Conventions: le texte entre crochets reprsente une option facultative, le texte en italique des lignes de programme
page 2/65
2 INTRODUCTION
Delphi est un systme de dveloppement visuel rapide sous Windows (Rapid Application Development) qui permet de crer des applications fentres directement excutables (.EXE) et redistribuables librement sous Windows ou DOS. Il est noter qu'i existe une version pour Linux nomme KYLIX (compatible avec les composants CLX, il suffit de recompiler). Sa simplicit d'emploi autorise une utilisation immdiate, car il suffit de cliquer-glisser des composants dans une fiche et de grer quelques vnements pour crer des applications simples. Des assistants, modles et tuteurs interactifs facilitent la prise en main du logiciel. Delphi utilise le langage Pascal Orient Objet (il est toutefois possible d'utiliser d'anciennes sources en Pascal standard grce au compilateur en ligne de commande). Ce langage est facile apprendre et beaucoup plus simple que le C++ traditionnel. Les objets utiliss ont des proprits et des mthodes. Les proprits sont les caractristiques de l'objet (couleur, taille, ...) tandis que les mthodes sont les procdures (classiques ou vnementielles) et fonctions qui y sont rattaches. Des outils puissants sont rattachs Delphi. Le canevas facilite les graphismes et vite l'appel aux API de Windows (cette solution reste videmment possible). Les principales botes de dialogue de Windows existent en tant qu'objets et sont facilement rutilisables. L'utilitaire BDE permet la cration et l'accs ais aux bases de donnes de tous types. La liaison avec ACCESS se fait directement, grce un driver natif intgr. Il est facile d'crire des DLL utilisables par n'importe quel autre programme sous Windows. Ces DLL peuvent contenir des fiches Delphi, des procdures, des donnes ou des ressources graphiques (bitmaps, icnes, curseurs). La cration d'objets (visuels ou non) rutilisables est un gain de temps apprciable pour le dveloppement. L'intgration des objets Active X peut complter la bibliothque existante. Il existe d'autres systmes de dveloppement rapide sous Windows. Delphi est particulirement bien plac: moins de lignes de code et rapidit de compilation possibilit d'utiliser des procdures vnementielles partages notion de modles rutilisables (fiches, menus, objets) orientation objet totale et native richesse des composants fournis: pas d'OCX acheter en complment assembleur intgr, compilateur en ligne de commande dbogage facile au niveau du source et du processeur possibilit d'allocation dynamique de la mmoire en utilisant les pointeurs
page 3/65
3 Nouveauts
Consulter l'aide en ligne sous "nouveauts" On note des: la vue arborescente des objets
de nombreux nouveaux composants dont o "TActionManager" qui permet de centraliser les procdures vnementielles de chaque fentre o les composants CLX qui peuvent tre ports sur LINUX o les composants ADO
page 4/65
page 5/65
4.2.2.1 Fonctions Les fonctions sont des modules (ou sous-programmes) qui retournent une seule valeur ou rsultat aprs acceptation d'un certain nombre d'arguments (0 n). 4.2.2.2 Procdures simples Les procdures sont des modules qui effectuent des actions. Elles acceptent galement des arguments. Elles peuvent retourner des arguments modifis (s'ils sont dclars en donnersultat). 4.2.2.3 Procdures vnementielles Elles conditionnent les ractions de l'objet vis--vis des actions extrieures (clavier, souris, ...). Ce sont des procdures appeles par un dclencheur. Windows recense un grand nombre d'vnements dont la nature est prcise par un systme de messages internes. Par exemple, le fait d'appuyer sur une touche du clavier ou de dplacer la souris provoque l'mission d'un message interne Windows qui pourra tre trait par la procdure vnementielle. 4.2.3 Programmation structure Contrairement au premiers langages (basic) qui utilisaient des tiquettes avec des instructions de saut de type "goto" o l'on risquait un enchevtrement dans le droulement du programme, la POO demande une programmation modulaire et le langage Pascal est particulirement adapt. L'criture d'un programme se fait sous forme de blocs hirarchiss, ce qui permet une meilleure comprhension. L'indentation des modules donne une lecture proche du dveloppement algorithmique. 4.2.4 L'encapsulation C'est le concept de base de la POO. L'ide est de rassembler les donnes et les modules de programme dans une seule et mme structure appele objet. Les donnes sont appeles "proprits" et les modules sont les "mthodes". On peut utiliser des mthodes de l'objet sans connatre le dtail de l'implmentation de chacune d'elle. L'encapsulation protge les donnes contre leur utilisation par d'autres modules extrieurs. 4.2.5 L'hritage Les objets sont capables d'tre drivs partir d'objets prexistants. Les objets "fils" hritent les proprits et mthodes de leur parent de faon automatique. Il suffit alors de rajouter des proprits et mthodes spcifiques: ce procd est appel programmation par exception. De plus, tous les changements effectus dans l'objet "parent" sont rpercuts automatiquement sur les objets "descendants" sans manipulation supplmentaire.
page 6/65
4.2.6 Le polymorphisme Le nom d'une mthode existante peut tre rutilis dans un objet "fils" en dclarant une implmentation diffrente. Le polymorphisme est la capacit de dsigner des mthodes diffrentes (bien que portant le mme nom) en fonction de l'objet concern. Par exemple le signe "+" peut servir l'addition, la concatnation ou l'incrmentation d'une date. Dans le cas de redfinition(OVERRIDE) d'une mthode, il est possible de rutiliser le code hrit (INHERITED) et d'ajouter simplement quelques lignes (qui pourront par exemple redfinir certaines proprits). 4.2.7 Dveloppeur ou utilisateur? On distingue deux catgories de personnes. Les dveloppeurs qui connaissent bien la POO et qui crent des objets et les utilisateurs qui construisent leurs applications partir de ces objets prfabriqus. 4.3 LEXIQUE La source principale de confusion pour les dbutants en POO est le grand nombre de nouveaux termes techniques 4.3.1 Classe (CLASS) C'est l'ensemble des dfinitions, proprits et mthodes qui serviront crer l'objet. Elle dfinit la structure de l'objet et quelles en seront les proprits. Ses modifications seront rpercutes sur les classes descendantes. 4.3.2 Objet (OBJECT) C'est une instance de la classe. Il a une existence physique et occupe de la place en mmoire. Il est cr partir d'une classe. Toutes les modifications effectues en excution n'affectent en rien les descendants de sa classe. 4.3.3 Instanciation C'est le processus qui cre en mmoire un objet bas sur une classe.
page 7/65
4.3.4 Constructeur (CONSTRUCTOR) C'est le module de la classe qui dit au systme comment effectuer l'instanciation de celleci. Il rserve de la place mmoire et initialise certaines proprits. Delphi appelle cette mthode "Create". 4.3.5 Destructeur (DESTRUCTOR) C'est l'inverse du constructeur. Ce module est charg de librer la mmoire occupe par l'objet. ("Destroy" en Delphi). 4.3.6 Classe anctre C'est une classe partir de laquelle sont hrites les proprits et les mthodes. Ce n'est pas obligatoirement la classe parente immdiate, mais elle peut tre plus leve hirarchiquement. 4.3.7 Classe parent C'est la classe immdiatement suprieure au niveau hirarchique 4.3.8 Classe enfant C'est la classe immdiatement infrieure au niveau hirarchique 4.3.9 Classe descendante Son niveau hirarchique est infrieur la classe considre. Ce n'est pas obligatoirement la classe enfant qui est situe directement au niveau infrieur suivant. 4.3.10 Propritaire(OWNER) Une application est propritaire des fentres qu'elle manipule. Une fentre est propritaire des objets quelle contient. Un panneau, comme la barre d'outils, est propritaire de ses turboboutons... 4.3.11 Hritage Une classe hrite automatiquement des proprits et mthodes de ses anctres.
page 8/65
4.4 CONCLUSION Le but de la POO est de crer des composants rutilisables pour faciliter la cration de projets par assemblage d'lments prfabriqus. Les avantages sont normes: rutilisation de l'existant sans limite (pas d'critures rptitives), dveloppement RAD visuel possible (une application peut se crer comme un assemblage lors d'un puzzle), cloisonnement de scurit entre les donnes (vite les effets de bord), facilit d'volution (il suffit de placer des objets plus volus), et de maintenance (possibilit de tester individuellement chaque objet). L'hritage et le polymorphisme accroissent de faon sensible la productivit du programmeur.
page 9/65
action
slection dslection ouverture fermeture dplacement duplication interrogation destruction insertion
manipulation souris
clic sur l'objet
rsultat
l'objet change de couleur ou des poignes apparaissent clic en dehors de l'objet l'objet reprend sa couleur initiale ou ses poignes disparaissent double-clic sur l'objet soit on se trouve dans l'application correspondante l'objet, soit on voit ses proprits clic en dehors ou sur bouton X l'objet est ferm cliquer-glisser sur (parfois le bord) de l'objet est dplac l'objet Ctrl + cliquer-glisser sur (parfois le il y a deux objets identiques bord) de l'objet clic-droit sur l'objet apparition d'un menu surgissant appel contextuel slection puis touche "Suppr" l'objet a disparu menu contextuel sur l'objet suivant il y a 1 objet en plus
page 10/65
6 L'cran de Delphi
On voit la barre de titre, la barre des menus, la barre d'outils ( gauche), la palette des composants, la fentre principale, l'diteur de code (en dessous) et l'diteur de proprits (et la vue arborescente des objets). Une fiche est cre d'office, c'est la fentre principale de l'application (modifiable). Touches de fonction importantes: F12: bascule entre l'affichage de la fiche et son code F11: fait apparatre l'inspecteur d'objets.
page 11/65
Des infos-bulle donnent la signification des boutons. Le paramtrage peut se faire en appelant le menu contextuel (clic-droit).
Il est intressant de placer les boutons suivants: Nouvelle application, tout enregistrer Dfaire et refaire Couper, copier, coller Vrifier la syntaxe Excuter, pas pas Voir une fiche Voir la palette d'alignement Rubriques d'aide Aide sur les API Windows
page 12/65
C'est une barre d'outils de type particulier: on y trouve les objets qui existent dj dans Delphi. Les onglets correspondent aux catgories de composants: cliquer sur l'onglet pour changer de palette. Pour placer un composant dans la fiche, on peut cliquer sur un composant puis cliquer dans la fiche (cliquer-glisser pour redimensionner de suite). Il est galement possible de double-cliquer sur un composant: il se mettra automatiquement au centre de la fiche en cours. Pour placer plusieurs composants identiques, slectionner le type avec maj-clic. Il existe divers types de composants: visuels: ils sont visibles l'excution (sauf indication contraire); certains d'entre eux peuvent prendre le "focus", c'est dire tre slectionns par l'utilisateur non-visuels: ne sont visibles qu'en phase de cration; ils disparaissent l'excution. Les composants peuvent se reproduire avec copier-coller. Voici les composants les plus utiliss dans une application standard.
page 13/65
6.2.1 Les composants de la page Standard Les composants de la page Standard de la palette des composants permettent d'utiliser dans une application Delphi les contrles standard de Windows :
RadioButton
Utilisation Composant cadre (nouveau): sert de conteneur de composants Menu principal Menu surgissant Texte en lecture seule pour l'utilisateur (ex: titre) Texte en lecture-criture modifiable par l'utilisateur (zone de saisie) Mmo: comme le composant prcdent, mais possibilit d'utiliser plusieurs lignes de texte Bouton d'action: c'est le composant le plus utilis Case cocher. Propose une option que l'utilisateur peut faire passer de Oui Non ou de Vrai Faux. Les cases cocher peuvent servir afficher un groupe de choix qui ne sont pas mutuellement exclusifs. Les utilisateurs peuvent slectionner plusieurs cases cocher dans un groupe. Bouton radio. Propose une option que l'utilisateur peut faire passer de Oui Non ou de Vrai Faux. Les boutons radio peuvent servir afficher un groupe de choix qui sont mutuellement exclusifs. Les utilisateurs ne peuvent slectionner qu'un seul bouton radio par groupe. Bote liste. Affiche une liste droulante de choix. Bote options. Affiche une liste de choix en combinant une bote liste et une bote de saisie. Les utilisateurs peuvent saisir des donnes dans la bote de saisie ou slectionner un lment dans la zone bote liste. Barre de dfilement. Propose un moyen de modifier la zone visualise d'une liste ou d'une fiche. Une barre de dfilement peut galement tre utilise pour se dplacer par incrments dans un intervalle de valeurs. Bote groupe. Sert de conteneur des options associes dans une fiche. Groupe de boutons radio. Cre une bote groupe qui contient des boutons radio sur une fiche. Volet. Cre dans une fiche des volets pouvant contenir d'autres composants. Les volets peuvent servir crer des barres d'outils ou des lignes d'tat. Composant permettant la centralisation du code vnementiel
page 14/65
Les composants de la page "Supplment" de la palette des composants permettent d'utiliser dans une application Delphi des contrles Windows spcialiss : Composant BitBtn SpeedButton MaskEdit StringGrid DrawGrid Image Shape Bevel ScrollBox CheckListBox Splitter StaticText Utilisation Bouton bitmap. Cre un composant bouton pouvant afficher une image. TurboBouton. Propose un bouton pouvant afficher une image mais pas un libell. Les TurboBoutons sont frquemment regroups dans un volet afin de crer une barre d'outils. Comme le composant "Edit" mais permet une saisie formate Grille de chanes. Cre une grille pouvant tre utilise pour afficher des donnes chanes de caractres en lignes et en colonnes comme dans un tableur. Grille d'affichage. Cre une grille permettant d'afficher des donnes en lignes et en colonnes. Plus difficile utiliser que le composant prcdent. Image, gre maintenant galement les jpeg Forme. Dessine des formes gomtriques : cercle ou ellipse, carr ou rectangle (arrondi ou non). Biseau. Cre des lignes ou des botes avec un aspect tridimensionnel cisel. Bote de dfilement. Cre un conteneur redimensionnable affichant automatiquement des barres de dfilement lorsque c'est ncessaire. Bote liste de cases cocher. Affiche une liste droulante semblable une bote liste, mais avec une case cocher ct de chaque lment. Diviseur. Plac sur une fiche entre deux contrles aligns, il permet aux utilisateurs de redimensionner les contrles, l'excution, en faisant glisser la ligne de division. Texte statique. Un composant texte non modifiable, comme le composant Label, mais contenant un handle de fentre, ce qui est utile quand la touche raccourci du composant doit appartenir un contrle fentr. Utilisez le composant StaticText pour donner l'utilisateur des informations sur l'tat en cours de l'application. Composant utilis pour contenir des barres d'outils Contrle des vnements au niveau application (nouveau) Gre des couples: cl, valeur Zone de saisie avec tiquette Liste de couleurs pour choix Graphique Composant centralisateur de procdures vnementielles Barre de menu d'ActionManager Barre d'outils d'ActionManager Bote de dialogue permettant l'utilisateur de configurer les 2 composants page 15/65
ControlBar Application Events Value List Editor Labeled Edit ColorBox Chart ActionManager ActionMainMenu Bar ActionToolBar CustomizeDlg
prcdents
page 16/65
Les composants de la page Win32 de la palette des composants permettent d'utiliser dans une application Delphi des contrles d'interface utilisateur standard de Windows 32 bits (Windows 95, 98 ou NT). Composant TabControl PageControl ImageList RichEdit TrackBar ProgressBar HotKey Animate DateTimePicker MonthCalendar TreeView ListView HeaderControl StatusBar ToolBar CoolBar PageScroller ComboBoxEx Utilisation Onglets: permet d'accder des pages d'informations Pages: comme le contrle prcdent, mais il y a de la place pour placer des composants Liste d'images: sert souvent stocker les images des boutons des barres d'outils modernes Editeur de texte format: crer un logiciel de traitement de textes devient facile avec ce composant Glissire de rglage: permet l'utilisateur de dfinir une valeur analogique Barre de progression: sert souvent indiquer la proportion d'achvement du travail Raccourci-clavier qui peut tre dfini par l'utilisateur Clip vido muet Bote liste permettant la saisie de dates ou d'heures. Calendrier: l'utilisateur peut slectionner une date ou une plage de dates Vue arborescence Affichage mode liste Entte de colonne Barre d'tat Barre d'outils nouvelle gnration Barres d'outils multiples style "internet explorer' Zone d'affichage pouvant servir aux barres d'outils Liste droulante avec images
page 17/65
Grce aux composants de la page Systme de la palette des composants, il est possible d'utiliser dans une application Delphi des contrles spcialiss du systme. Composant Timer PaintBox MediaPlayer OleContainer DdeClientConv DdeClientItem DdeServerConv DdeServerItem Utilisation Minuterie: permet de dclencher des vnements intervalles rguliers Bote peindre. Spcifie une zone rectangulaire de la fiche constituant la dlimitation des dessins de l'application. Multimdia. Affiche un contrle de style tlcommande pour lire ou enregistrer des fichiers multimdias son ou vido. Conteneur OLE. Cre dans une fiche une zone client OLE (Incorporation et Liaison d'Objet). Conversation client DDE. tablit une connexion client avec une application serveur DDE (change Dynamique de Donnes). lment client DDE. Spcifie les donnes du client DDE (change Dynamique de Donnes) transfrer lors d'une conversation DDE. Conversation serveur DDE. tablit une connexion serveur avec une application client DDE (change Dynamique de Donnes). lment serveur DDE. Spcifie les donnes du serveur DDE (change Dynamique de Donnes) transfrer lors d'une conversation DDE.
page 18/65
Les composants de la page Dialogues de la palette des composants permettent d'utiliser dans une application Delphi les botes de dialogues communes de Windows. Grce ces botes de dialogue, il est possible de proposer une interface homogne pour des oprations relatives aux fichiers (comme l'enregistrement, l'ouverture ou l'impression). Une bote de dialogue commune est ouverte lors de l'excution de sa mthode "Execute". Celle-ci renvoie l'une des valeurs boolennes suivantes : "True", si l'utilisateur choisit OK et valide la bote de dialogue "False", si l'utilisateur choisit Annuler ou quitte la bote de dialogue sans enregistrer aucune modification. Chaque composant Bote de dialogue commune (sauf le composant "PrinterSetup") a un ensemble de proprits regroupes sous l'intitul Options dans l'inspecteur d'objets. Les proprits Options interviennent sur l'aspect et le comportement des botes de dialogue communes. Pour afficher les proprits Options, double-cliquez sur "Options" dans l'inspecteur d'objets. Pour fermer par programmation une bote de dialogue, utilisez la mthode "CloseDialog". Pour modifier la position d'une bote de dialogue l'excution, utilisez les proprits Handle, Left, Top et Position. Composant OpenDialog SaveDialog OpenPictureDialog SavePictureDialog FontDialog ColorDialog PrintDialog PrinterSetupDialog FindDialog ReplaceDialog Utilisation Bote de dialogue d'ouverture. Bote de dialogue d'enregistrement. Bote de dialogue d'ouverture d'image avec prvisualisation Bote de dialogue d'enregistrement d'image avec prvisualisation Bote de dialogue des polices Bote de dialogue des couleurs Bote de dialogue d'impression Bote de dialogue de configuration d'impression. Bote de dialogue de recherche Bote de dialogue de remplacement
page 19/65
Les composants de la page Win3.1 de la palette des composants permettent d'utiliser dans vos applications Delphi des contrles de Windows 3.1 pour assurer la compatibilit avec les applications construites avec des versions prcdentes de Delphi. La plupart de ces anciens contrles offrent le mme comportement que les derniers contrles 32 bits. Important : Evitez ces contrles lorsque vous crez de nouvelles applications. Le tableau suivant indique les contrles utiliser la place des anciens contrles : Contrle Win 3.1 DBLookupList DBLookupCombo TabSet Outline Header NoteBook TabbedNoteBook Composant DBLookupList DBLookupCombo TabSet Outline TabbedNotebook Notebook Remplacez-le par DBLookupListBox DBLookupComboBox TabControl TreeView HeaderControl PageControl PageControl Page du nouveau contrle ContrleBD ContrleBD Win32 Win32 Win32 Win32 Win32
Utilisation Liste de rfrence de base de donnes. Bote de liste oriente donnes pour afficher l'excution les valeurs trouves dans les colonnes d'une autre table. Bote options de rfrence de base de donnes. Bote options oriente donnes pour afficher l'excution les valeurs trouves dans les colonnes d'une autre table. Onglets. Cre des onglets semblables ceux d'un classeur. Le composant TabSet peut s'utiliser avec le composant Notebook pour permettre aux utilisateurs de changer de page. Arborescence. Affiche des informations sous forme d'arborescences de diffrents formats. Classeur onglets. Cre une zone d'affichage des donnes. Les utilisateurs peuvent redimensionner chaque section de cette zone pour y afficher diffrentes quantits de donnes. Classeur. Cre un composant pouvant contenir plusieurs pages. Le composant TabSet peut s'utiliser avec le composant Notebook pour permettre aux utilisateurs de changer de page.
page 20/65
Utilisation En-tte. Cre une zone d'affichage des donnes. Les utilisateurs peuvent redimensionner chaque section de cette zone pour y afficher diffrentes quantits de donnes. Bote liste de fichiers. Affiche une liste droulante des fichiers du rpertoire en cours. Bote liste des rpertoires. Affiche la structure des rpertoires du lecteur actif. Les utilisateurs peuvent changer de rpertoire dans une bote liste des rpertoires. Bote options des lecteurs. Affiche une liste droulante des lecteurs disponibles. Bote options de filtrage. Spcifie un filtre ou un masque afin d'afficher un sous-ensemble des fichiers.
page 21/65
L'inspecteur d'objets de Delphi est la passerelle entre l'aspect visuel de votre application et le code qui lui permet de fonctionner. L'inspecteur d'objets vous permet de : dfinir en mode conception les proprits des composants que vous placez sur une fiche (ou de la fiche elle-mme), crer les gestionnaires d'vnements. Le slecteur d'objet en haut de l'inspecteur affiche est une liste droulante contenant tous les composants de la fiche active, ainsi que leur type. Vous pouvez ainsi slectionner rapidement diffrents composants de la fiche active. Vous pouvez modifier la largeur des colonnes de l'Inspecteur d'objets en faisant glisser la ligne de sparation vers une nouvelle position.
page 22/65
L'inspecteur d'objets comporte deux pages : 6.4 Page Proprits La page Proprits de l'Inspecteur d'objets vous permet, en mode conception, de dfinir les proprits des composants de votre fiche, mais aussi celles de la fiche. Vous pouvez dfinir des proprits d'excution en crivant directement du code source dans les gestionnaires d'vnements. La page Proprits n'affiche que les proprits du composant slectionn dans la fiche. Dfinir les proprits d'un composant en mode conception revient dfinir son tat initial. Des proprits peuvent tre imbriques: dans ce cas, elle sont prcdes par une flche. Pour dvelopper l'arborescence, double-cliquez. La prsence de 3 points de suspension (...) indique la prsence d'un diteur de proprits particulier. On trouve galement des listes droulantes. 6.5 Page Evnements La page Evnements de l'Inspecteur d'objets vous permet d'associer des vnements aux objets de votre projet. Trois utilisations sont possibles: UTILISATION double-clic cot de l'vnement EFFET cration automatique d'un entte de procdure par dfaut introduction d'un nom de procdure cration automatique d'un entte de procdure avec le nom choisi ouverture d'une liste droulante (s'il y a dj choix d'une procdure commune plusieurs des procdures compatibles) vnements
page 23/65
Dans certains cas, on voit dans la partie de gauche l'explorateur de code. Il facilite la navigation dans vos fichiers. La fentre de l'explorateur de code contient une arborescence qui montre tous les types, classes, proprits, mthodes, variables globales et routines globales dfinis dans votre unit. Il montre galement les autres units listes dans la clause uses L'diteur de code est un diteur complet. Il vous permet d'accder au code (source) des modules de votre projet. De nombreuses commandes sont disponibles dans le menu contextuel de l'diteur de code. Pour personnaliser l'diteur de code, utilisez la bote de dialogue "Outils" "Options d'environnement". Pour obtenir de l'aide sur un lment dans l'diteur de code, placez le pointeur de souris sur le terme qui vous intresse et appuyez sur F1. Lors de la compilation, si vous recevez un message d'erreur, Delphi : affiche l'erreur dans la bote de message de l'diteur de code met en surbrillance la ligne de code qui pose problme.
page 24/65
7 Premier projet
7.1 Notions lmentaires Un projet est un l'ensemble des fichiers ncessaires au fonctionnement de l'application. Quand on charge Delphi, un projet de base est cr. Il comporte une fentre prte recevoir diffrents objets.
On remarque la barre de titre, la case systme comportant une icne et des boutons pour agrandir, rduire ou fermer la fentre. L'inspecteur d'objets permet d'agir sur les proprits et mthodes vnementielles de l'objet.
page 25/65
Il est vident que cette premire application n'est pas encore excutable. Pour ce faire, il est ncessaire de compiler (traduire en binaire). Nous n'avons pas crit une ligne de programme, le systme s'en est charg. Examinons les lignes de code gnres (.PAS).
Lignes de code
unit Unit1;
Explications
nom du module source correspondant la fiche "Form1" ne pas changer ce nom directement, mais au moment de l'enregistrement entte pour dsigner la section qui sera "vue" par les autres modules permet d'inclure d'autres modules nom des modules inclus
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private { Dclarations prives } public { Dclarations publiques } end; var Form1: TForm1; implementation {$R *.DFM} end.
dbut de la dclaration du type des objets dclaration d'un nouveau type d'objet de type fentre proprits et mthodes "prives" du type d'objet proprits et mthodes "publiques" du type d'objet; elles seront visibles par les autres modules fin de dclaration d'objet "achat" de variables globales instanciation de l'objet: allocation de mmoire vive dans cette section seront crites les mthodes des objets manipuls directive de compilation permettant d'inclure les dfinitions des fentres (.DFM) Fin du module
page 26/65
Ce module ne peut fonctionner seul. Un module de projet (.DPR) se charge de fdrer l'ensemble des modules, mais il n'est pas visible en ce moment. Pour le visualiser, ouvrez le menu "Projet" et choisissez "voir le source". Un onglet correspondant apparat dans l'diteur de code. program Project1; uses Forms, Unit1 in 'UNIT1.PAS' {Form1}; {$R *.RES} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. nom du programme modules utiliss c'est le module de la fiche "Form1" directive de compilation permettant d'inclure les fichiers ressources (.RES) dbut du programme principal initialisation du programme cration de la fiche "Form1" de type Tform1 excution de l'application Fin du programme principal
On peut galement visualiser le code de la fiche (.DFM), grce l'option "voir comme texte" de son menu contextuel. object Form1: TForm1 Left = 295 Top = 132 Width = 696 Height = 480 Caption = 'Form1' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -13 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False PixelsPerInch = 120 TextHeight = 16 end Revenir la fiche avec "voir comme fiche" du menu contextuel. Pour enregistrer le projet, choisir "enregistrer projet sous" dans le menu fichier. Il faudra donner un nom aux diffrents modules (.PAS) et au projet (DPR).
page 27/65
7.2 Excution On peut vrifier la syntaxe du code, compiler ou excuter directement le projet. Pour disposer d'un excutable, il est ncessaire de compiler. En cas d'erreur, la compilation s'arrte et visualise un message d'erreur.
Si l'on dsire des renseignements sur l'erreur, il suffit cliquer sur le message d'erreur ou d'avertissement et d'appuyer sur la touche F1 (aide en ligne) et on obtient la fentre suivante:
page 28/65
Il suffit de rectifier le code et de relancer une compilation. Ensuite, on peut directement utiliser l'excutable gnr (.EXE). Quitter Delphi et lancer le programme depuis le l'explorateur Windows. Examen des fichiers gnrs: Suffixe dof dpr exe dcu dfm pas res cfg ddp Signification options de compilation et informations de versions source du projet programme excutable compil unit compile dfinition de la feuille source pascal ressources: icne de l'application configuration du compilateur diagrammes
Pour examiner certains de ces fichiers, il est pratique d'utiliser l'explorateur Windows. Mettre un raccourci vers le bloc-notes (notepad.exe) dans le rpertoire SendTo.
page 29/65
8 Modification du projet
Relancer Delphi et ouvrir le projet prcdent. Nous dsirons prsent installer un bouton qui change la couleur du fond de la fentre en rouge. 8.1 Mise en place du composant Choisir un bouton ("Tbutton") par un clic dans la palette standard et cliquer dans la fiche. On peut galement double-cliquer dans la palette et le bouton se mettra automatiquement au milieu de la fiche. Ce bouton se nomme "Button1" et ne fait rien pour l'instant. Si l'on examine le module source, on trouve sa dclaration dans les types. Deux proprits importantes: "caption" qui permet de changer l'affichage du texte sur le bouton et "name" qui est le nom qui servira adresser l'objet. Changer le nom du bouton (c'est indispensable pour les projets importants) avec quelque chose de plus significatif: BtRouge. On constate que la proprit "caption" est galement modifie. Changer cette proprit pour que le bouton affiche "Colorer en rouge". Le composant peut tre redimensionn grce ses poignes (visibles quand slectionn). 8.2 Affectation d'une procdure vnementielle La liste des vnements peut s'observer grce l'inspecteur d'objets. Pour crer une procdure simple "OnClic", il suffit de double-cliquer sur le bouton. Le code suivant est gnr: procedure Tform1.BtRougeClick(Sender: Tobject); begin end; Cette procdure vnementielle est prte accueillir une ou plusieurs lignes d'instructions entre "begin" et "end". Si l'on dsire rajouter des commentaires (et c'est indispensable pour une bonne maintenance), utiliser les mthodes suivantes: { commentaires: plusieurs lignes possibles } (* commentaires: plusieurs lignes possibles *) // commentaires: sur une seule ligne Si je ne connais pas la faon de colorer la fentre, je vais chercher les proprits de l'objet Tform grce l'aide en ligne. Il suffit de slectionner "Form1" et d'appuyer sur le touche F1. Ensuite, cliquer sur "proprits". La liste affiche "color": cliquer sur cette proprit. On trouve que "clRed" correspond au rouge.
page 30/65
Je vais donc complter la procdure pour obtenir le listing suivant: procedure Tform1.BtRougeClick(Sender: Tobject); {colore en rouge le fond de la fentre} begin Form1.color:=ClRed; end; Remarques: quand je tape "Form1.", l'diteur de code me propose la liste des proprits, mthodes et variables de l'objet. le sparateur entre objet et mthodes est le point et l'instruction d'affectation est ":=" et non "=" qui est rserv aux tests d'galit ou la dclaration des types. Les lignes d'instruction se terminent par le point-virgule. Enregistrer le projet, et vrifier son excution.
8.3 Amliorations Il est dommage de ne pas avoir de bouton pour remettre la couleur d'origine et un autre pour quitter le programme. On pourrait double-cliquer sur la fiche pour rtablir la couleur d'origine. Slectionner la fentre et double-cliquer ct de l'vnement "OnDblClick" dans l'inspecteur d'objet. Le code suivant est gnr: procedure Tform1.FormDblClick(Sender: Tobject); begin end; L'aide nous dit que "clWindow" pour la couleur de fond courante des fentres. La procdure devient donc: procedure Tform1.FormDblClick(Sender: Tobject); begin Form1.color:=clWindow; end; Excuter et tester. La palette "supplments" nous fournit un composant intressant: TBitBtn. C'est un bouton comportant une image (glyphe) et ayant des fonctions prprogrammes (Kind). Mettre cette proprit "Kind" "bkClose".
page 31/65
Aligner les deux boutons gauche grce la palette d'alignement (menu "Voir").
On peut slectionner plusieurs objets en cliquant-glissant pour tracer un rectangle qui les touche ou les englobe. Un menu contextuel sur les objets permet galement de les rendre de mme taille ou de les changer d'chelle: Prsenter les deux boutons de mme taille et aligns droite et gauche. Enregistrer et excuter.
Exercice:
Enlever le bouton "rouge" et placer trois curseurs dans des panneaux de couleur pour rgler l'intensit des 3 couleurs de base: rouge, vert et bleu. Les intensits varient de 0 255. La fonction RGB (voir l'aide en ligne) est utile. Un seul gestionnaire d'vnement suffira.
page 32/65
9 Elments de programmation
9.1 Dclaration de variables Une variable est un nom qui, dans du code, reprsente une adresse mmoire dont le contenu peut changer lorsque le code est excut. Vous devez dclarer une variable avant de l'utiliser. Les tapes requises sont les suivantes : Choix du nom d'une variable Choix du type d'une variable 9.1.1 Choix du nom d'une variable Lorsque vous dclarez une variable, vous devez choisir un nom. Pour faciliter la lecture de votre code, il est prfrable de choisir un nom parlant, qui vous rappelle la signification de la variable. Par exemple, Jour, Nom ou Total sont des noms plus vocateurs que X, Y ou Z. En dehors du choix de noms vocateurs, il convient de garder l'esprit un certain nombre de rgles qui s'appliquent aux variables et tous les autres identificateurs: Les identificateurs peuvent avoir une longueur de 63 caractres. Sils dpassent cette longueur, le compilateur ne tient pas compte des caractres supplmentaires. Les identificateurs doivent commencer par une lettre ou par un trait de soulignement (_). Les caractres suivants peuvent tre des lettres, des traits de soulignement ou les chiffres de 0 9. Ils ne peuvent contenir de caractres gnriques comme $, %, *, etc. Par exemple, si vous utilisez des identificateurs appels Faire@Midi ou Retour_en_ %, vous aurez une erreur de syntaxe. Vous ne devez pas utiliser un mot rserv de Pascal objet pour dsigner un identificateur: and, as, asm, array, begin, case, class, const, constructor, destructor, div, do, downto, else, end, except, exports, file, finally, for, function, goto, if, implementation, in, , inherited, inline, initialization, interface, is, label, library, mod, nil, not, object, of, or, packed, procedure, program, property, raise, record, repeat, set, shl, shr, string, then, to, try, type, unit, until, uses, var, while, with, xor Evitez dutiliser des identificateurs dj dfinis dans le langage Pascal objet pour dsigner vos identificateurs. Par exemple, les mots Boolean et Integer sont des types de donnes prdfinis. Conventions d'criture: nous allons adopter une sparation des significations par majuscules comme par exemple: TMonObjetPersonnelSecret. Interdiction formelle de mettre des espaces ou des accents.
page 33/65
9.1.2 Choix du type d'une variable Lorsque vous dclarez une variable, vous devez dclarer son type. Le type d'une variable dfinit l'ensemble des valeurs qu'elle peut contenir. En rgle gnrale, vous dclarerez une variable l o vous en aurez besoin. Par exemple, si vous voulez utiliser une variable dans un gestionnaire d'vnements, vous la dclarerez l'intrieur de celui-ci. Il s'agit dans ce cas d'une variable locale. Si la variable doit tre visible par plusieurs procdures ou fonctions, elle doit tre dclare avant la section implmentation: elle sera globale. Les dclarations de variables doivent toujours tre prcdes du nom rserv var. La dclaration elle-mme contient deux parties : celle de gauche est le nom de la nouvelle variable, celle de droite, son type. Ces deux parties sont spares par le signe deux points ( : ). Cet exemple contient trois dclarations de variables : Valeur, Somme et Ligne : var Valeur: Integer; Somme: Integer; Ligne: string; Comme Valeur et Somme sont toutes deux du type Integer (entier), la dclaration de variables peut tre prsente comme ci-dessous, avec une virgule pour sparer les deux variables du mme type : var Valeur, Somme: Integer; Ligne: string; Dans l'exemple suivant, nous supposons qu'il existe une bote de saisie appele Edit1 et un bouton appel BoutonAjouter dans la fiche. Trois variables (X, Y et Somme) sont dclares comme tant de type Integer. Lorsque l'utilisateur clique sur BoutonAjouter, des valeurs Integer sont affectes deux variables, X et Y, et ajoutes l'une l'autre. Le rsultat, Somme, apparat dans la bote de saisie : procedure Tform1.BoutonAjouterClick(Sender: Tobject); var X, Y, Somme: Integer; begin X := 100; Y := 10; Somme := X + Y; Edit1.Text := IntToStr(Somme); end;
page 34/65
La ligne ci-dessous affecte la valeur d'une expression une variable : Somme := X + Y; Une expression consiste gnralement en deux identificateurs lis l'un l'autre par un oprateur. Pour plus d'informations sur les expressions, reportez-vous l'entre "expression" dans l'index de l'aide de la VCL. Comme la proprit Text d'une bote de saisie est du type string et la variable Somme du type Integer, une ligne comme celle-ci ne peut pas tre autorise, car elle provoque une erreur d'incompatibilit de types l'excution ou la compilation : Edit1.Text := Somme; Au lieu de cela, la dernire ligne du gestionnaire de l'vnement utilise la fonction IntToStr de la bibliothque d'excution de Delphi pour convertir la valeur Somme en chane de caractres, puis elle affecte la valeur de la variable Somme la proprit Edit1.Text. Cette variante vite le risque d'affecter une valeur Somme : procedure Tform1.BoutonAjouterClick(Sender: Tobject); var X, Y: Integer; begin X := 100; Y := 10; Edit1.Text := IntToStr(X + Y); end;
page 35/65
9.1.3 TYPES DE DONNEES Plusieurs types de donnes sont intgrs au langage Pascal Objet. Vous pouvez crer des variables appartenant n'importe lequel de ces types prdfinis. Le tableau ci-dessous donne la liste (non exhaustive) des types de donnes prdfinis :
ENTIERS
type Integer Shortint Smallint Longint Int64 (nouveau) Byte Word Longword ou cardinal tendue 2147483648..2147483647 128..127 32768..32767 2147483648..2147483647 2^63..2^631 0..255 0..65535 0..4294967295 forme 32 bits sign 8 bits sign 16 bits sign 32 bits sign 64 bits sign 8 bits non sign 16 bits non sign 32 bits non sign
Il est facile d'utiliser des entiers en base hexadcimale: faire prcder le nombre par le signe $.
DECIMAUX
type Single Double (ancien real) Extended Comp Currency tendue 1.5 x 10^45 .. 3.4 x 10^38 5.0 x 10^324 .. 1.7 x 10^308 3.6 x 10^4951 .. 1.1 x 10^4932 2^63+1 .. 2^63 1 922337203685477.5808.. 922337203685477.5807 chiffres significatifs octets utiliss 78 4 1516 8 1920 1920 1920 10 8 8
BOOLEENS
Boolean Peut contenir les valeurs True ou False. Ncessite un octet de mmoire.
page 36/65
CARACTERES
AnsiChar WideChar Char Un caractre ANSI. Un caractre Unicode. Varie en fonction de l'implmentation. Dans cette version du Pascal Objet, Char est semblable AnsiChar.
On peut utiliser le code ANSI du caractre en le faisant prcder par le signe # (ex: #10). CHAINES Type ShortString AnsiString WideString String POINTEURS Un pointeur est une variable qui contient l'adresse mmoire de l'objet manipul. La dclaration se fait sous la forme: var NomPointeur: ^TypeObjet; ou par le mot-cl "pointer" qui reprsente un pointeur non typ ( transtyper lors avant le dfrencement). Utilisation: new(NomPointeur) rserve la mmoire correspondant l'objet NomPointeur^ permet de rcuprer l'objet dispose (NomPointeur) dtruit l'objet (pointeur nil) L'adresse d'un objet peut tre rcupre par la fonction Addr ou @. VARIANTS Variant Type de donnes pouvant contenir des valeurs de diffrents types, et pouvant convertir sa valeur en d'autres types de donnes. Longueur maximum 255 caractres ~2^31 caractres ~2^30 caractres Utilisation Compatibilit ascendante Caractre sur 8 bits (ANSI) Caractres Unicode; serveurs COM et interfaces Varie en fonction de la directive de compilation $H. Par dfaut, string est semblable AnsiString Mmoire ncessaire de 2 256 octets de 4 octets 2Go de 4 octets 2Go
Si vous ne voulez pas utiliser les types de donnes prdfinis, vous pouvez dfinir vos propres types de donnes. Les types prdfinis sont gnralement suffisants pour la plupart des applications Delphi.
page 37/65
9.1.4 Dclaration de constantes Alors que les variables contiennent des valeurs qui peuvent changer pendant lexcution de votre application, les constantes contiennent une valeur immuable que vous leur attribuez au moment o vous les dclarez. De la mme manire que vous dclarez les variables dans une dclaration de variable, les constantes sont dclarer dans une dclaration de constante. Une dclaration de constante doit commencer par le mot rserv const. Dans lexemple ci-dessous, nous avons trois dclarations de constantes : const Pi = 3.14159; Rponse = 342; Produit = 'Delphi'; Pi, Rponse, et Produit sont des noms de constantes qui dcrivent la valeur de celles-ci. Les valeurs relles des constantes, qui ne peuvent tre modifies au cours de lexcution de lapplication, sont 3.14159, 142 et Delphi. Il existe diffrents types de constantes, comme cest le cas pour les variables. Par contre, la diffrence de ces dernires, les constantes gardent le type de valeur dclar dans la dclaration de constante. Par exemple, la constante Pi est de type Real parce que la valeur 3.14159 est un nombre rel, Rponse est de type Integer parce que 342 est un entier et Produit est de type string, parce que Delphi est une chane. Il convient de noter que le signe gal (=), dans une dclaration de constante, diffre de loprateur daffectation (:=) des instructions daffectation. Dans une dclaration de constante, le signe gal indique que la partie gauche et la partie droite de la dclaration sont des valeurs gales. La mauvaise utilisation de loprateur gal dans le code Pascal objet est une erreur assez courante. Lorsque le compilateur rencontre un signe gal au lieu dun oprateur daffectation, il suppose que la partie gauche de linstruction est une constante ou quil y a comparaison de deux valeurs. Si ce nest pas ce que vous vouliez, Delphi affiche un message derreur de syntaxe. Si, inversement, vous avez fait lerreur dutiliser un oprateur daffectation dans une dclaration de constante, il se produit une erreur de syntaxe et un message apparat, vous informant que le compilateur attendait le signe gal.
page 38/65
Voici quelques exemples d'utilisation d'expressions constantes dans des dclarations de constantes : const Min = 0; Max = 100; Centre = (Max - Min) div 2; Beta = Chr(225); NombreCar = Ord('Z') - Ord('A') + 1; Message = 'Pas assez de mmoire'; ChaineErreur = ' Erreur : ' + Message + '. '; PosErreur = 80 - Length(ChaineErreur) div 2; Ln10 = 2.302585092994045684; Ln10R = 1 / Ln10; Numerique = ['0'..'9']; Alpha = ['A'..'Z', 'a'..'z']; AlphaNum = Alpha + Numerique;
page 39/65
9.1.5 Cration de nouveaux types de donnes Pascal objet est livr avec un certain nombre de types de donnes prdfinis, mais vous pouvez en crer d'autres: numr, intervalle, tableau, ensemble, enregistrement, objet. 9.1.5.1 Type numr Une dclaration de type numr donne la liste de toutes les valeurs que le type peut avoir. En voici quelques exemples : type TJours = (Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche); TCouleurPrimaire = (Rouge, Jaune, Bleu); TService = (Finances, Personnel, Ingenirie, Marketing, Informatique); TChien = (Caniche, PittBull, Chihuahua, BergerAllemnad, Teckel); Voici quelques variables de type numr : var JourSemaine : TJours; Teinte : TCouleurPrimaire; Service : TService; Race : TChien; Chaque valeur entre parenthses dans une dclaration de type numr a une valeur de type entier dtermine par sa position dans la liste. Par exemple, Lundi, dans la dclaration de type TJours a la valeur 0, Mardi a la valeur 1, et ainsi de suite. Vous pourriez obtenir le mme rsultat en dclarant la variable JourSemaine comme tant de type Integer et en affectant ensuite une valeur Integer pour reprsenter chaque jour de la semaine. Si ce systme donne de bons rsultats pour des sries ordonnes et prvisibles, comme les jours de la semaine ou les mois de lanne, mais est beaucoup moins utile si lordre des valeurs reprsentes est arbitraire. Il nest pas toujours facile de se souvenir de ce que reprsente un numro. Par exemple, laffectation: Race := Chihuahua; est beaucoup plus vocatrice que Race := 2; Quand vous listez une valeur dans un type numr, vous la dclarez comme identificateur. Si les dclarations de type numr et de variables prcdentes taient dans votre application, vous ne pourriez pas, de ce fait, dclarer une variable Finances, car cet identificateur existe dj.
page 40/65
9.1.5.2 Type intervalle Un type intervalle est un intervalle de valeur de type entier, boolen, caractre ou numr. Les intervalles sont utiles pour limiter le nombre de valeurs quune variable peut avoir. Pour crer un intervalle, spcifiez les valeurs minimale et maximale en les sparant par deux points (..), par exemple : 1..100 Exemples: type TFourchetteBoussole = 0..360; TLettresAdmises = 'A'..'F'; TSalaireMensuel = 10000..30000; THeures = 0..23; Ttemps = (Bruine, Giboules, Pluie, Averse, Orage) {type numr} TPluie = Bruine..Averse {intervalle de Ttemps} 9.1.5.3 Type tableau Un tableau est un ensemble ordonn dun type de donnes o chaque lment est spcifi par sa position par ordre numrique dans lensemble. Lors de la cration du tableau, les lments ne contiennent aucune valeur, mais vous pouvez les remplir avec des donnes et manipuler celles-ci votre guise. Voici un exemple de dclaration de variable pour un tableau de type Double : var Verif : array[1..10] of Double; Cette dclaration indique que la variable Verif dsigne une liste de dix variables de type rel, chacune ayant un numro (appel numro dindice) compris entre 1 et 10. Il est fait rfrence chaque lment dun tableau par le nom du tableau, suivi de son indice entre crochets ([ ]). Le tableau Verif contient donc les dix variables Verif[1], Verif[2], Verif[3], Verif[4] et ainsi de suite, jusqu Verif[10]. Vous pouvez utiliser nimporte laquelle de ces variables l o vous utiliseriez une variable Real ordinaire. En outre, la valeur dindice ne doit pas ncessairement tre une constante. Ce peut tre nimporte quelle expression donnant un entier compris entre 1 et 10. Par exemple, J := 5; Verif[J] := 0,0; Ces instructions affectent la valeur 0,0 la variable Verif[5]. Comme Verif est un tableau de type Double, la valeur que vous lui affectez doit tre de type Real et contenir une virgule dcimale. De plus, les valeurs Double devant commencer par un chiffre, vous ne pouvez pas crire 0,0 sous la forme ,0.
page 41/65
Si vous voulez attribuer la valeur zro toutes les variables Verif du tableau, vous pouvez le faire laide dune boucle for. Comme un indice peut tre une variable, il est plus facile dutiliser une boucle for que daffecter une valeur chaque lment du tableau avec des instructions daffectation distinctes. Cette boucle for affecte la valeur 0,0 aux dix variables : for J := 1 to 10 do Verif(J) := 0,0; Vous pouvez dfinir des tableaux en tant que types. Par exemple : type TVerif = array[1..100] of Double; Vous pouvez ensuite dclarer des variables du type tableau. Lexemple ci-dessous dclare que Compte est une variable de type TVerif, soit un tableau de 100 nombres rels. var Compte : TVerif; 9.1.5.4 Tableaux multidimensionnels Exemple: type TTable = array[1..20, 1..20] of Double;
9.1.5.5 Types de chanes Par dfaut, le compilateur utilise une chane longue pour la dclaration "string". La longueur de cette chane est limite uniquement par la mmoire disponible qui est alloue de faon dynamique. Il n'y a donc plus lieu de dclarer la taille de la chane. Exemple: var MaChaine: string; Si l'on dsire utiliser les anciennes chanes courtes, on peut utiliser "shortstring". Dans ce cas, la longueur est limite 255 caractres.
page 42/65
9.1.5.6 Type ensemble Un ensemble est un groupe dlments du mme type : entier, boolen, caractre, numr ou intervalle. Les ensembles servent vrifier si une valeur appartient un ensemble particulier. Exemple: procedure TForm1.Button1Click(Sender : TObject); type TVoyelles = set of Char; var Voyelles : TVoyelles begin Voyelles := ['A','E','I','O','U','Y' ]; if Edit1.Text[1] in Voyelles then Label2.Caption := 'Bravo !'; else Label2.Caption := 'Veuillez ressayer...'; end; 9.1.5.7 Type enregistrement Les enregistrements (ou structures) sont des ensembles de donnes auxquels votre application peut se rfrer globalement. Exemple: le type enregistrement TEmploy dclar comme suit : type TEmploy = record Nom : string[20]; Pren : string[15]; Embauch : 1990..2050; Salaire : Double; Poste : string[20]; end; Les enregistrements contiennent des champs contenant des valeurs de donnes. Chaque champ a un type de donnes. Les champs du type TEmploy sont Nom, Pren, Embauch, Salaire et Poste. Vous pouvez accder ces champs individuellement ou bien vous rfrer lenregistrement dans son ensemble. Il est galement possible de dclarer des structures comportant des types variables en fonction de la valeur d'un champ. Voici un exemple de dclaration de deux variables denregistrement : var NouvelEmploy, EmployPromu : TEmploy; Le code peut se rfrer au champ Salaire dun enregistrement NouvelEmploy, comme cidessous (le point spare le nom du champ de celui de l'enregistrement): NouvelEmploy.Salaire := 200000,00; Mais votre code peut aussi manipuler lenregistrement comme une entit part entire : EmployPromu := NouvelEmploy;
Maurice GINDENSPERGER (V 5.1)
page 43/65
9.2.1 Affectation (:=) Le signe utilis est := en Pascal. Si l'on crit A:=B, le contenu de la variable A est dtruit et remplac par le contenu de la variable B. La variable B est donc inchange. Une erreur frquente est la confusion avec le signe = seul. Si j'cris A=B, ce n'est pas une affectation, mais une comparaison. Le rsultat sera vrai ("true") ou faux ("false"). Note: Le signe ; termine chaque instruction. S'il est omis, l'instruction se poursuit sur la ligne suivante. Les commentaires peuvent se mettre entre accolades, ou aprs un double-slash dans une mme ligne. 9.2.2 Signes opratoires + Addition ou concatnation (ex: catena:=#66+'on'+'jour') Soustraction ou inversion (unaire) * multiplication / division (rsultat de type rel) DIV division entire MOD modulo (reste de la division entire) 9.2.3 Logique boolenne (true-false) NOT Inversion logique AND Et logique OR Ou logique XOR Ou exclusif 9.2.4 Oprateurs relationnels = Egal Ne pas confondre avec l'instruction d'affectation (:=) > Infrieur <= Infrieur ou gal > Suprieur >= Suprieur ou gal <> Diffrend in A l'intrieur (d'un ensemble)
page 44/65
9.2.5 Les tests Ils permettent de prendre une dcision en fonction de la valeur d'une variable. Syntaxe: if condition then instruction [else instruction] Exemple: if age>65 then showmessage('retrait) // pas de ; car l'instruction n'est pas termine else begin // dbut de bloc showmessage('actif'); MessageBeep(MB_ICONEXCLAMATION); // ou beep() end; // fin de bloc et fin d'instruction Les instructions if peuvent tre imbriques. 9.2.6 Le slecteur Un slecteur se comporte comme un rotacteur en lectronique: il permet de faire un choix unique parmi un ensemble d'options. Attention, le slecteur doit faire partie d'un ensemble ordonn (le systme doit connatre le prcdent et le suivant). Syntaxe: case slecteur of cas1: instruction 1; cas2: instruction 2; (...) casn: instruction n [else instruction] end; Exemple: case Carac of '+': Op:='addition'; '-': Op:='soustraction'; '*': Op:='multiplication'; '/': Op:='division'; else Op:='erreur'; end;
page 45/65
9.2.7 Les boucles L'instruction if permet de faire des boucles, mais il en existe des "prtes l'emploi" La procdure Continue provoque le passage du contrle de l'excution l'itration suivante dans une instruction for, while ou repeat. La procdure Break provoque l'interruption d'une boucle for, while ou repeat. 9.2.7.1 La boucle "pour" (for) Elle est utilise quand on connat la valeur de dpart, d'arrive et de progression de l'indice de boucle. Syntaxe: for variable=valeur_initiale [down] to valeur_finale do instruction; Exemple: mise zro d'un tableau deux dimensions de 100 cases: for i:=0 to 9 do for j:=0 to 9 do Tableau[i,j]:=0; Exercice: afficher une suite de 1 10 dans un mmo ( faire avec les 3 types de boucles). 9.2.7.2 La boucle "tant que" (while) Cette boucle est maintenue par une condition. La sortie se fait ds que celle-ci cesse d'tre vraie (true). Il n'est pas ncessaire de connatre par avance le nombre d'itrations Syntaxe: while condition do [begin] instruction[s] [end] ; Exemple: while not fini do begin travail1; travail2; ... travailn; end; Il est vident que la variable boolenne "fini" doit tre rvalue (il doit ^y avoir un moyen de savoir si le travail est termin) au cours de la boucle, sinon elle ne prendra pas de fin. Exercice: le mme que prcdemment.
page 46/65
9.2.7.3 La boucle "rpter" (repeat) La boucle "rpter" est employe quand on souhaite faire d'emble un parcours dans celle-ci. On ne connat pas priori le nombre de parcours de la boucle, mais il sera suprieur ou gal 1. L'utilisation de begin...end est ici facultative. Syntaxe: repeat instruction[s] until condition; Exemple: repeat prendre une pice; la mettre dans le distributeur automatique; until montant_introduit >= prix_article_choisi;
page 47/65
10 Quelques instructions
Voici quelques instructions utiles; il y en a d'autres dcouvrir dans l'aide 10.1 Abs Ceil Exp Flor Frac Frexp Int IntPower Ln Log10 Log2 LogN Max Min Pi Power Round Sqr Sqrt Trunc Renvoie la valeur absolue de l'argument Arrondit l'entier suprieur Fonction exponentielle Arrondit l'entier infrieur Renvoie la partie fractionnelle de l'argument Renvoie la mantisse et l'exposant Renvoie la partie entire de l'argument Calcule la puissance entire d'une valeur de base Renvoie le logarithme naturel de l'argument Calcule le logarithme en base 10 Calcule le logarithme en base 2 Calcule le logarithme en base N Maximum de 2 valeurs Minimum de 2 valeurs Renvoie 3.1415926535897932385 Renvoie une lvation la puissance Arrondi entier Renvoie le carr de l'argument Renvoie la racine carre de l'argument Partie entire Arithmtiques
page 48/65
10.2 Date DateTimeToStr DateTimeToString DateToStr DayOfWeek DecodeDate DecodeTime EncodeDate EncodeTime FormatDateTime Now StrToDate StrToDateTime StrToTime Time TimeToStr
Date et heure Renvoie la date en cours. Convertit une valeur heure en chane. Convertit une valeur de format heure en chane. Convertit une valeur du format date en chane. Renvoie le jour de la semaine. Dcode la date spcifie. Dcode l'heure spcifie. Renvoie les valeurs spcifies au format date. Renvoie les valeurs spcifies au format heure. Formate une date et une heure en utilisant le format spcifi. Renvoie l'heure et la date en cours. Convertit une chane en date. Convertit une chane au format date/heure. Convertit une chane au format heure. Renvoie l'heure en cours. Convertit un format heure en chane.
Toutes les routines de date et d'heure utilisent les variables de formatage Date/Heure.
page 49/65
10.3 AssignFile ChDir CloseFile CreateDir DeleteFile DiskFree DiskSize FileClose FileDateToDateTime FileExists FileGetAttr FileGetDate FileOpen FileRead FileSearch FileSeek FileSetAttr FileSetDate FileWrite FindClose FindFirst FindNext GetCurrentDir GetDir RemoveDir RenameFile SetCurrentDir
Gestion fichiers Fait correspondre un nom de fichier logique un nom physique Change de dossier Ferme le fichier (remplace "Close") Cre un dossier Detruit un fichier Renvoie l'espace disque disponible. Renvoie la taille du disque spcifi. Ferme le fichier Convertit la date du fichier Teste l'existence du fichier Lit les proprits du fichier Lit la date du fichier Ouvre un fichier Lecture dans un fichier Recherche un fichier Change la position en cours dans le fichier. Dfinit les attributs du fichier. Dfinit l'indicateur DOS de date et heure du fichier. Ecrit dans un fichier spcifique. Termine une squence FindFirst/FindNext. Recherche un nom de fichier et un ensemble d'attributs spcifis dans un rpertoire. Renvoie la prochaine entre correspondant au nom et aux attributs. Renvoie le dossier courant Renvoie le dossier courant sur le lecteur spcifi Supprime un dossier Renomme un fichier Dfinit un dossier courant
page 50/65
Contrle de flux Permet de sortir d'un chemin d'excution sans signaler d'erreur Sortie de boucle for, while ou repeat Rebouclage dans une boucle for, while ou repeat Sort immdiatement du bloc en cours. Arrte l'excution du programme et retourne au systme d'exploitation: viter Arrte l'excution du programme.
Messages et dialogues Cre un message de dialogue Saisie de chane Saisie d'un nom et d'un mot de passe pour se connecter une BDD Boite de dialogue Choix d'un dossier Affiche une bote de dialogue de message avec un bouton OK
10.6 Exclude FillChar Hi Include Lo Move ParamCount ParamStr Random Randomize SizeOf Swap UpCase
Divers Exclut un lment d'un ensemble. Remplit un nombre spcifi d'octets contigus avec une valeur spcifi (de type Byte ou Char). Renvoie l'octet de poids fort de l'argument. Inclut un lment dans un ensemble. Renvoie l'octet de poids faible de l'argument Copie les octets d'une source dans une destination. Renvoie le nombre de paramtres transmis au programme dans la ligne de commande. Renvoie le paramtre spcifi de la ligne de commande. Renvoie un nombre alatoire. Initialise le gnrateur intgr de nombres alatoires avec une valeur alatoire obtenue partir de l'horloge systme. Renvoie le nombre d'octets occups par l'argument. Permute les octets de poids fort et de poids faible de l'argument. Convertit un caractre en majuscule.
page 51/65
10.7 Dec Inc Odd Pred Succ Dcrmente une variable. Incrmente une variable. Teste si l'argument est un nombre impair. Renvoie le prdcesseur de l'argument. Renvoie le successeur de l'argument.
Ordinaux
page 52/65
Une fonction renvoie une donne dont le type est dclar. Elle accepte gnralement des paramtres. La structure est la suivante: function NomFonction(para1:type;):type; begin instructions; end; Il est ncessaire de dclarer le type des paramtres ainsi que celui de la valeur retourne par la fonction. Dans le corps de la fonction, cette valeur retourne doit tre dfinie soit en affectant une valeur au nom de la fonction ou en utilisant le mot-cl "result". Nous allons crer un programme qui lve au cube la valeur saisie. Utilisons, pour changer, la fonction "InputBox" (voir dans l'aide en ligne) pour saisir une valeur et la fonction "ShowMessage" pour afficher le rsultat. La fonction crite dans la partie implmentation peut avoir le code suivant: function Cube(valeur:extended):extended; begin Cube :=valeur*valeur*valeur; end; Le compilateur travaillant du haut vers le bas, il est ncessaire que le code prcdent se situe avant l'utilisation de la fonction. Il est possible de ne pas le faire, soit en dclarant la fonction (1 ligne du code: prototype) en fin de section "interface" (visibilit par les autres modules) ou en mettant ce prototype suivi de la directive "forward" au dbut de la section "implmentation"
page 53/65
Le listing complet est le suivant: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Dclarations prives} public { Dclarations publiques} end; var Form1: TForm1; implementation {$R *.DFM} function Cube(valeur:extended):extended;forward; procedure TForm1.Button1Click(Sender: TObject); var nombre,resultat: extended; begin nombre:=StrToFloat(InputBox('Bote de saisie', 'Taper un nombre','')); resultat:=Cube(nombre); ShowMessage('Le cube du nombre saisi est '+FloatToStr(resultat)); end; function Cube(valeur:extended):extended; begin Result :=valeur*valeur*valeur; end; end. Essayer d'crire la mme fonction dans un nouveau module et de l'utiliser dans le module prsent: attention la clause uses.
Maurice GINDENSPERGER (V 5.1)
page 54/65
1.1
Procdures
Les procdures sont utilises pour effectuer des actions, mais peuvent galement servir renvoyer des valeurs. Comme les fonctions, elles peuvent accepter des paramtres transmis par valeur (option par dfaut), par variables en lecture-criture (prcdes par le mot-cl "var") ou des constantes (prcds par le mot-cl "const"). La syntaxe en est la suivante: procedure NomProcedure(arg1:type; arg2:type; .argn:type); begin intructions; end; Ecrire une procdure qui gnre deux bips une seconde d'intervalle: procedure DeuxBips(); begin beep(); sleep(1000); beep(); end; L'appel cette procdure peut tre dclenche par l'appui d'un bouton: procedure TForm1.Button1Click(Sender: TObject); begin DeuxBips; end;
page 55/65
12 Les menus
12.1 Menu principal La mise en place d'une barre de menus est simplifie par le concepteur de menus. Placer sur la fiche un composant de type "TMainMenu". Double-cliquer sur lui pour accder au concepteur de menus. Il suffit alors de taper les noms en validant avec la touche "entre". Pour se dplacer, on peut utiliser la souris ou les flches de direction. Particularits: Accs rapide Sparation Touches de raccourci Sous-menu Dplacement d'lments il suffit de placer le signe "&" dans le nom pour que la lettre suivante apparaisse en soulign taper le signe "-" la place du nom Attribuer la proprit "shortcut" (attention aux doublons!) Taper Ctrl + flche droite par cliquer-glisser
On peut utiliser des modles existants de menu ou crer des modles personnels (voir menu contextuel). Si l'on utilise des gestionnaires d'vnements partags, on peut les attribuer dans la page vnements de l'inspecteur de proprits. Ensuite, fermer le concepteur de menus. Il est indispensable d'attribuer une procdure vnementielle chaque lment: ouvrir le menu et cliquer sur l'option. L'diteur de code crit tout seul l'entte de la procdure: il ne reste qu' complter. Exercice: crer un projet de type bloc-notes (dans un nouveau rpertoire "Notes"). Y mettre des menus (fichier, dition, ...). Utiliser les botes de dialogue prfabriques (enregistrer, ouvrir). 12.2 Menus surgissants
Placer un composant de type TPopupMenu sur votre fiche. Appeler l'diteur de menus par un double-clic sur lui. Complter comme prcdemment. Il faut ici affecter les vnements avant de refermer le concepteur. Utilisation: Affecter la proprit PopupMenu de l'un des composants de votre fiche avec le nom de ce menu.
page 56/65
Il suffit de placer un composant Tspeedbutton sur la barre cre prcdemment. La proprit "Glyph" permet de choisir une image au bouton. Des images existent dans le rpertoire \Programme\Images\Buttons. Il est facile de crer de nouvelles images grce l'diteur d'images (menu outils). Choisir une taille 16X16 pour un bouton simple. 13.3 Info-bulles
Les info-bulles sont faciles mettre en uvre pour les boutons (ou autres composants). Mettre le texte afficher dans la proprit "Hint" et positionner "ShowHint" "true". 13.4 Affectation d'actions aux boutons
Gnralement les gestionnaires d'vnements existent dj pour les menus (les boutons ne sont qu'un moyen pour procder plus vite). Dans ce cas, il suffit d'affecter la procdure "OnClick" grce l'inspecteur de proprits. Pour crire un gestionnaire, il suffit de double-cliquer sur le bouton. Il est possible de grouper les boutons et de les rendre mutuellement exclusifs. Les boutons peuvent rester enfoncs et prsenter une image diffrente dans ce cas. Exercice: ajouter une barre d'outils au bloc-notes.
page 57/65
En utilisant ajouter, vous pouvez charger votre liste. Des bitmaps se trouvent dans le rpertoire "C:\Program Files\Fichiers communs\Borland Shared\Buttons\". Ensuite il suffit de choisir "nouveau bouton" (ou sparateur) dans le menu contextuel du composant "Toolbar". La proprit "ImageIndex" du bouton dfinit l'image utilise. La proprit "Flat" de Toolbar permet d'avoir un effet de bouton surgissant comme dans certains logiciels rcents bien connus. On peut aussi utiliser le composant "Coolbar" et placer des "Toolbar" garnis dans ses bandes redimensionnables (style internet).
page 58/65
15 Barre d'tat
Le composant correspondant existe sur cette version de Delphi, il s'agit de TStatusBar. C'est une ligne de volets, gnralement place en bas d'une fiche, qui affiche des informations sur l'application en cours d'excution. Chaque volet est reprsent par un objet TStatusPanel numr dans la proprit Panels. La proprit SimplePanel peut tre utilise pour faire basculer, l'excution, la barre d'tat entre l'affichage d'un seul volet et celui de plusieurs volets. 15.1 Mise en place
Placer un composant "TStatusBar" sur la fiche. Si l'on dsire plusieurs volets, il faut attribuer la proprit "panels". L'diteur de proprit se prsente sous la forme suivante:
Choisir "Ajouter" pour augmenter le nombre de subdivisions. On peut accder au contenu de chaque panneau en utilisant la proprit "text" de StatusBar1.Panels1[indice]. Les indices partent de la gauche avec la valeur zro.
15.2
Exercice
Crer un nouveau projet. Mettre l'heure dans la seconde partie d'une barre d'tat 3 volets. Utiliser pour cela un timer systme (voir l'aide en ligne pour l'utilisation). La fonction TIME donne l'heure ( convertir en texte). Option: afficher "MAJ" dans la partie de gauche quand le verrouillage des majuscules est actif. Il faut intercepter la frappe des touches en mettant la proprit "KeyPrev" de la fiche "true" (vrai). Le code de la touche est "VK_CAPITAL". Voir la fonction "GetKeyState".
page 59/65
page 60/65
16 Exercices proposs:
crer un bloc notes amlior, multi documents raliser une calculatrice simple, puis bande, enfin scientifique (puissance, factorielle, sinus, cosinus, tangente, binaire, hexadcimal, )
page 61/65
17 O trouver de l'aide?
Aide en ligne Apprentissage en ligne de Delphi3 (S&SM): sur le CD de Delphi3 Les manuels papier de Delphi4 PASCAL (Philippe SPOLJAR chez Sybex poche) DELPHI Professionnel - Programmation systme 32 bits (Dick LANTIM chez Eyrolles) DELPHI2 - Secrets d'Experts (Charles CALVERT chez S&SM) Outils de dveloppement Delphi 1&2 (Gilles BETZ chez Sybex Mgapoche) DELPHI 3 (Dick LANTIM chez Eyrolles) Internet: www.inprise.com et les groupes de News
page 62/65
4.3 LEXIQUE...................................................................................................................................7
4.3.1 Classe (CLASS)......................................................................................................................................7 4.3.2 Objet (OBJECT).....................................................................................................................................7 4.3.3 Instanciation............................................................................................................................................7 4.3.4 Constructeur (CONSTRUCTOR)...........................................................................................................8 4.3.5 Destructeur (DESTRUCTOR)................................................................................................................8 4.3.6 Classe anctre.........................................................................................................................................8 4.3.7 Classe parent...........................................................................................................................................8 4.3.8 Classe enfant...........................................................................................................................................8 4.3.9 Classe descendante.................................................................................................................................8 4.3.10 Propritaire(OWNER)..........................................................................................................................8 4.3.11 Hritage.................................................................................................................................................8
4.4 CONCLUSION...........................................................................................................................9
6.3 L'inspecteur d'objets................................................................................................................22 6.4 Page Proprits.........................................................................................................................23 6.5 Page Evnements......................................................................................................................23 6.6 L'diteur de code......................................................................................................................24
7 Premier projet............................................................................................................................25
7.1 Notions lmentaires................................................................................................................25
Maurice GINDENSPERGER (V 5.1)
page 63/65
7.2 Excution...................................................................................................................................28
12 Les menus................................................................................................................................56
12.1 Menu principal.......................................................................................................................56 12.2 Menus surgissants...................................................................................................................56
page 64/65
page 65/65