Vous êtes sur la page 1sur 84

IAI – TOGO /2011-2012 2éme Année GL

Cours Delphi 7
PROGRAMME
Chapitre 1
Installation de Delphi

Chapitre 2
Historique
Introduction
Que ce que Delphi
Utilisation du modèle objet
Que ce qu’un objet

Chapitre 3
Démarrage de Delphi
L’EDI : L’environnement de développement intégré
Menus et barres d’outils
Concepteur de fiche, la palette de composants.
L’inspecteur d’objet
L’arborescence d’objets
Le référentiel d’objets
L’éditeur de code
Où trouver des informations ?
Aide en ligne
Aide F1

Chapitre 4
Présentation Générale
Structure d’un programme Pascal, Delphi
Utiliser des unités
Créer des unités
Les projets
Fichiers d’un projet

Chapitre 5
Certaines notions de bases
MessageDlg
Routines standards et entrées
Certaines propriétés
Certaines méthodes
Certains évènements
Exemple de propriété
Exemple d’évènement
TP N°1
1
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Chapitre 6
Certains objets Delphi
Panel
Button
MainMenu
PopupMenu
PageControl
ActionList
ImageList
Image
ToolBar
Timer
Label
RadioButton & CheckBox
RadioGroup
ListBox
Edit
ComboBox
Memo & RichEdit
StringGrid
TP N°2

Chapitre 7
Comment répondre aux actions de l’utilisateur à l’exécution
OnKeyPress
OnKeyDown
OnKeyUp
OnMouseMove
OnMouseUp
OnMouseDown
L’évènement TShiftState

Chapitre 8
Objets pour manipuler une Base De Données
Accès à une Base De Données (AccesBD)
DataSource
Table
Database
Query
Contrôle d’une Base De Données (ControlBD)
DBGrid
DBNavigator
DBText
DBEdit
DBMemo
DBListBox

2
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
DBComboBox
DBLookUpListBox
DBLookUpComboBox

LES ETATS
1- Quick Report, pour afficher vos tables (QReport)
QuickRep
QRLabel
QRDBText
QRExpr
QRSysData
TP N°3
2- RAVE REPORT

TP N°4

Chapitre 9
Les Bases De Données
Bases Paradox et DBase
Bases ODBC
Création tables
Lister les champs
Ajout d’enregistrements
Lister les enregistrements
Supprimer 1 enregistrement
Base de données texte
Base de données et SQL
Insertion
Suppression
Exploration
Utilisation classique des TABLES
Composants BD
Fiche
Tables Maître/détail
BD Tables
Composant BD
QUERY
Améliorations de la présentation des colonnes d’une grille (DBGrid)
Les filtres
Impressions de rapports
Compléments sur les DBGrid et transtypage en DrawGrid

Chapitre 10
Comment effectuer une recherche dans une table ?
Méthodes FindKey, FindNearest et Locate
Requêtes (simple et paramétrée)

Chapitre 11

3
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
Programmation avec Delphi
Création d’un projet
Ajout de modules de données
Construction de l’interface utilisateur
Positionnement des composants sur une fiche
Définition des propriétés des composants
Ecriture du code
Ecriture de gestionnaires d’événements
Utilisation de la bibliothèque de composants
Compilation et débogage des projets
Déploiement des applications
Internationalisation d’applications
Types de projets
Applications CLX
Applications serveur Web
Applications de bases de données
Administrateur BDE
Explorateur SQL (explorateur de base de données)
Module Base de données
Dictionnaire de données
Composants personnalisés
DLL
COM et ActiveX
Bibliothèques de types

Chapitre 12
Développement d’un logiciel avec les SGBD ACCESS, SQL Server et MySQL

Utilisation de tous les concepts pour développer un logiciel dans delphi


Formulaires de saisie, consultation et recherche
Etats
Statistiques
Exemple de Création d’une page d’accueil
Exemple de Création d’un menu général

PROJET 1 : DELTA Gestion Simplifiée du personnel : Cas de la DIAMOND BANK

PROJET 2 : GVENTE Gestion automatisée des Ventes et Stock : Cas de la


Boutique Notre Dame sis au Grd Marché de Lomé

PROJET 3 : Choix des étudiants

Quelques astuces dans le développement Delphi

Chapitre 13
DEPLOIEMENT : Création d’un fichier d’installation pour les applications Delphi
4
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Chapitre
CHAPITRE 1

1
INSTALLATION DE DELPHI

5
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Chapitre
CHAPITRE 2

2
I- HISTORIQUE

Plusieurs langages existent et évoluent avec le temps. En voici quelques-uns.


Il y a quelques années, on utilisait :
Le Basic ou GWBasic
Ce langage est assez facile à utiliser, mais il génère des applications limitées en taille, assez peu
performantes et lentes.
Le Pascal
Ce langage est bien structuré, d'une difficulté moyenne, il donne des applications rapides.
Le C puis C++
Ce langage laisse une grande liberté au programmeur, il est assez difficile à utiliser, il donne des
applications performantes et rapides.
Ces langages généraient des exécutables pour l'environnement DOS.
Avec l'arrivée de Windows, chacun de ces langages a évolué, actuellement on utilise :
Visual Basic
Assez facile à utiliser, ce langage génère des exécutables assez lents (cependant, une
amélioration de la vitesse vient d'arriver avec la dernière version).
Delphi
Ce langage offre beaucoup de possibilités, les exécutables sont très rapides. Il est utilisé par les
professionnels. Il existe en version 1 pour Windows 3.x, en version 2 et 3 pour Windows 95 et
NT, les versions 5, 6 , 7, 2007,2009 ….
C++ Builder
Semblable à Delphi, la syntaxe diffère, mais les possibilités sont voisines.

II- INTRODUCTION

1- Qu’est-ce que Delphi ?

Delphi est un environnement de programmation visuel orienté objet pour le développement


rapide d’applications (RAD). En utilisant Delphi, vous pouvez créer des applications Microsoft
Windows 95, Windows 98 et Windows NT très efficaces, avec un minimum de codage manuel.
Delphi fournit tous les outils qui vous sont nécessaires pour développer, tester, déboguer et
déployer des applications, incluant une importante bibliothèque de composants réutilisables, un
ensemble d’outils de conception, des modèles d’applications et de fiches, ainsi que des experts
de programmation. Ces outils simplifient le prototypage et réduisent la durée du
développement.
Remarque :
Avant de créer une application en Delphi, il faut d’abord créer un nouveau répertoire dans
lequel il faut enregistrer le projet ainsi que tous les fichiers associés à ce dernier.

6
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
2- Utilisation du modèle objet

La programmation orientée objet (POO) est une extension de la programmation structurée qui
intensifie la réutilisation du code et l’encapsulation de données avec des fonctionnalités. Quand
vous avez créé un objet (ou, plus précisément, une classe), vous et d’autres programmeurs
pouvez l’utiliser dans d’autres applications ce qui réduit les temps de développement et accroît
la productivité.

3- Qu’est-ce qu’un objet ?

Un objet, ou classe, est un type de données qui regroupe des données et des opérations sur ces
données. Avant la programmation orientée objet, les données et les opérations (les fonctions)
constituaient des éléments distincts. Vous pouvez comprendre les objets si vous comprenez les
enregistrements Pascal Objet. Les enregistrements (analogues aux structures en C) sont constitués
de champs qui contiennent des données, chaque champ ayant son propre type. Les
enregistrements sont un moyen commode de désigner une collection éléments de données
variés. Les objets sont également des collections d’éléments de données. Mais les objets, à la
différence des enregistrements, contiennent des procédures et fonctions portant sur leurs
données. Ces procédures et fonctions sont appelées des méthodes. Les éléments de données
d’un objet sont accessibles via des propriétés. Les propriétés des objets Delphi ont une valeur
qu’il est possible de modifier à la conception sans écrire de code. Si vous voulez modifier la
valeur d’une propriété à l’exécution, il vous suffit d’écrire un minimum de code. La combinaison
des données et de fonctionnalités dans un seul élément est appelée encapsulation. Outre
l’encapsulation, la programmation orientée objet est caractérisée par l’héritage et le
polymorphisme. Héritage signifie que les objets dérivent leurs fonctionnalités d’autres objets
appelés ancêtres); les objets peuvent modifier leurs comportements hérités. Polymorphisme
signifie que différents objets qui dérivent d’un même ancêtre gèrent la même interface de
méthode et de propriété, on dit aussi qu’ils sont interchangeables.

7
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Chapitre
CHAPITRE 3

3
I- DEMARRAGE DE DELPHI

Vous pouvez démarrer Delphi de plusieurs façons :


• Double-cliquer sur l’icône Delphi (si vous avez créé un raccourci).
• Choisir Tous les ProgrammesBorland - Delphi 7 dans le menu Démarrer
de Windows.
• Choisir Exécuter dans le menu Démarrer de Windows, puis entrer Delphi32.
• Double-cliquer sur Delphi32.exe dans le répertoire Delphi\Bin

II- ENVIRONNEMENT DELPHI

Lorsque vous démarrez Delphi pour la première fois, vous voyez apparaître quelques-uns des
principaux outils proposés dans l’EDI. Dans Delphi, l’EDI comprend des barres d’outils, des
menus, la palette de composants, l’inspecteur d’objets, l’arborescence d’objets, l’éditeur de
code, l’explorateur de code, le gestionnaire de projet et bien d’autres outils.

8
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
Selon l’édition de Delphi, les caractéristiques et les composants disponibles varient. Le modèle
de développement Delphi repose sur des outils bidirectionnels. Cela signifie que vous pouvez
passer alternativement des outils de conception visuelle aux modifications du code sous forme
de texte. Par exemple, après avoir utilisé le concepteur de fiche pour agencer les boutons et les
autres éléments d’une interface graphique, vous pouvez voir immédiatement le fichier fiche
contenant la description textuelle de votre fiche. De même, vous pouvez modifier
manuellement tout code généré par Delphi sans perdre l’accès à l’environnement de
programmation visuelle.
Dans l’EDI, tous les outils de programmation sont facilement accessibles.Vous pouvez concevoir
des interfaces graphiques, parcourir les bibliothèques de classes, écrire du code, compiler,
tester, déboguer et gérer des projets sans quitter l’EDI

1- Menus et barres d’outils

La fenêtre principale, qui occupe la partie supérieure de l’écran, contient le menu principal, les
barres d’outils et la palette de composants.

Les barres d’outils de Delphi permettent un accès rapide aux opérations et aux commandes les
plus utilisées. La plupart des opérations accessibles dans les barres d’outils se retrouvent dans
les menus déroulants.

De nombreuses opérations possèdent des équivalents clavier ainsi que des boutons dans la
barre d’outils. Lorsqu’un raccourci clavier est disponible, il est toujours inscrit à côté de la
commande dans le menu déroulant.Vous pouvez cliquer avec le bouton droit de la souris sur la
plupart des outils et des icônes pour afficher un menu de commandes appropriées à l’objet que

9
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
vous manipulez. Il s’agit des menus contextuels. Les barres d’outils peuvent également être
personnalisées. Vous pouvez leur ajouter des commandes ou les déplacer.

2-Concepteur de fiche, la palette de composants et l’inspecteur d’objet

Un concepteur de fiche est une fiche vierge pour démarrer la conception de l’interface utilisateur
de votre application. Une application peut inclure plusieurs fiches. La palette de composants, le
concepteur de fiche, l’inspecteur d’objets et l’arborescence d’objets vous permettent de
concevoir l’interface utilisateur d’une application. La palette de composants est constituée de
pages à onglets où des groupes d’icônes représentent les composants visuels ou non visuels. Les
pages regroupent les composants selon leurs diverses fonctionnalités. Ainsi les pages
Supplément et Win32 contiennent des contrôles fenêtrés comme les boîtes de saisie ou les
cases à cocher ; la page Dialogues contient les boîtes de dialogue standard utilisées dans les
opérations de fichier comme l’ouverture ou l’enregistrement de fichiers.

Chaque composant possède des attributs spécifiques (propriétés, événements et méthodes)


vous permettant de contrôler votre application.
Utilisez le concepteur de fiche pour arranger les composants à votre convenance dans l’interface
utilisateur. Pour chaque composant que vous placez sur une fiche, utilisez l’inspecteur d’objets
pour définir des propriétés de conception, créer des gestionnaires d’événements, filtrer la
visibilité des propriétés et des événements, ce qui établira le lien entre l’apparence visuelle de
votre application et le code qui la fait s’exécuter

10
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
3- L’aborescence d’objets

L’arborescence d’objets affiche les relations parent-enfant et entre enfants des composants dans
une vue hiérarchique arborescente. Cette arborescence est synchronisée avec l’inspecteur
d’objets et le concepteur de fiche : si vous déplacez la sélection dans l’arborescence d’objets,
elle est déplacée en conséquence dans l’inspecteur d’objets et dans la fiche. L’arborescence
d’objets vous permet de changer la relation établie entre des composants. Si par exemple, vous
ajoutez des composants volet et case à cocher à votre fiche, ces deux composants sont frères.
Mais, si vous utilisez l’arborescence d’objets pour déplacer la case à cocher sur l’icône du volet,
la case à cocher devient un enfant du volet. Si les propriétés d’un objet n’ont pas été
renseignées, l’arborescence d’objets affiche un point d’interrogation rouge à côté. Vous pouvez
également double-cliquer sur un objet dans l’arborescence pour ouvrir l’éditeur de code afin
d’écrire un gestionnaire d’événement. Si l’arborescence d’objets n’apparaît pas, sélectionnez
Voir|Arborescence d’objets.

L’arborescence d’objets est particulièrement utile pour afficher les relations entre objets de
base de données.

4- Le référentiel d’objets

Le référentiel d’objets contient des fiches, boîtes de dialogue, modules de données, experts,
exemples d’applications DLL ainsi que d’autres éléments pouvant simplifier le développement.
Choisissez Fichier|Nouveau|Autre pour afficher la boîte de dialogue Nouveaux éléments par
laquelle débute un projet. La boîte de dialogue Nouveaux éléments est également appelée le
référentiel d’objets. Recherchez dans le référentiel un objet qui ressemble à celui que vous
voulez créer.

11
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Pour modifier ou supprimer des objets dans le référentiel d’objets, choisissez Outils|Référentiel
ou cliquez avec le bouton droit dans la boîte de dialogue Nouveaux éléments et choisissez
Propriétés. Pour ajouter des modèles de projet ou de fiche au référentiel d’objets

5- L’éditeur de codes

A mesure que vous construisez l’interface utilisateur de votre application, Delphi génère le code
sous-jacent. Lorsque vous sélectionnez et modifiez les propriétés des fiches et des composants,
ces modifications sont automatiquement répercutées dans les fichiers source. Vous pouvez
ajouter directement du code à vos fichiers source en utilisant l’éditeur de code intégré, un
éditeur ASCII complet. Delphi propose diverses aides à l’écriture de code, dont les outils
d’audit de code (Code Insight), l’achèvement de classe et la navigation dans le code.

12
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Audit de code
Les outils d’audit de code (Code Insight) affichent des fenêtres surgissantes
contextuelles.Achèvement du code Entrez le nom d’une classe suivi d’un point (.) pour afficher
la liste des propriétés, méthodes et événements appropriés à cette classe ; sélectionnez un
élément et appuyez sur Entrée. Dans la section interface du code, vous pouvez sélectionner
plusieurs éléments. Tapez le début d’une instruction d’affectation puis appuyez sur Ctrl+espace
pour afficher une liste d’arguments valides pour la variable. Tapez un nom de procédure, de
fonction ou de méthode pour faire apparaître une liste d’arguments. Paramètres du code Tapez
un nom de méthode et une parenthèse ouvrante pour afficher la syntaxe des arguments de la
méthode. Evaluation d’expression dans conseil Pendant que votre programme est suspendu au
cours du débogage, pointez sur une variable pour afficher sa valeur courante. Les composants
ajoutés à la fiche sont visibles dans le code.Code généré.

Pour activer ou désactiver ces outils, choisissez Outils|Options de l’éditeur et sélectionnez


l’onglet Audit de code. Cochez ou non les outils dans la zone Fonctionnalités automatiques.

Achèvement de classe
13
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
L’achèvement de classe génère le code squelette des classes. Placez le curseur n’importe où
dans la déclaration d’une classe dans la section interface d’une unité et appuyez sur Ctrl+Maj+C
ou cliquez avec le bouton droit et choisissez Compléter la classe sous le curseur. Delphi ajoute
automatiquement les spécificateurs privés read et write aux déclarations de toutes les
propriétés qui l’exigent, puis crée le code squelette de toutes les méthodes de la classe. Vous
pouvez aussi utiliser l’achèvement de classe pour remplir les déclarations des méthodes que
vous avez déjà implémentées. Pour activer l’achèvement de classe, choisissez Outils |Options
d’environnement,
cliquez sur l’onglet Explorateur et vérifiez que l’option Finir les propriétés incomplètes est
cochée.
Pendant l’édition du code, pointez sur un identificateur pour afficher sa déclaration. Modèles de
code Appuyez sur Ctrl+J pour lister les instructions de programmation courantes que vous
pouvez insérer dans votre code. Vous pouvez créer vos propres modèles qui viendront
s’ajouter à ceux disponibles.
Grâce à l’achèvement du code, quand vous entrez le point de Button1. Delphi affiche la liste des
propriétés, méthodes et événements de cette classe. Au fur et à mesure que vous tapez, la liste
filtre automatiquement la sélection relative à cette classe. Sélectionnez un élément de la liste et
appuyez sur Entrée pour ajouter cet élément à votre code. Les procédures et les propriétés
sont colorées en brun et les fonctions en bleu.Vous pouvez trier cette liste dans l’ordre
alphabétique en cliquant avec le bouton droit de la souris puis en cliquant sur Trier par nom.
L’audit de symbole dans conseil affiche les informations de déclaration pour tout identificateur
lorsque vous faites passer le curseur de la souris au-dessus de lui.

Navigateur de code
Quand vous faites passer la souris au-dessus d’un nom de classe, de variable, de propriété de
méthode ou de tout autre identificateur, le menu surgissant appelé Audit de symbole dans
conseil indique où l’identificateur est déclaré.Appuyez sur Ctrl : le curseur prend la forme d’une
main, l’identificateur devient bleu et vous pouvez cliquer dessus pour atteindre sa
définition.L’éditeur de code dispose de boutons Avant et Arrière similaires à ceux d’un
navigateur Web. Quand vous atteignez une définition, l’éditeur de code se souvient de vos
déplacements dans le code. Vous pouvez cliquer sur les flèches placées à côté des boutons
Avant et Arrière pour parcourir l’historique de ces références.

14
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
Visualisation du code des fiches
Les fiches constituent la partie visible de la majorité des projets Delphi. C’est là que vous
concevez l’interface utilisateur d’une application. Normalement, vous concevez les fiches en
utilisant les outils visuels de Delphi, et Delphi les stocke dans des fichiers. Les fichiers des fiches
(.dfm ou .xfm pour une application CLX) décrivent chacun des composants d’une fiche, y
compris la valeur de toutes les propriétés persistantes. Pour voir et modifier le fichier d’une
fiche dans Utilisez les boutons de la barre d’outils de la page Diagramme (Propriété, Maître
/détail, Référence) pour désigner la relation entre des composants ou entre des composants et
leurs propriétés. Le type de trait change selon le type de relation. Cliquez sur le bouton Bloc de
commentaire pour ajouter un bloc de commentaire et sur le bouton Connecteur de blocs de
texte
pour établir une connexion avec un autre bloc de commentaire ou une icône.Depuis
l’arborescence des objets, faites glisser les icônes des composants dans la page Diagramme.
Pour voir d’autres diagrammes nommés du projet en cours, choisissez dans la liste déroulante.
Entrez le nom et la description de votre diagramme. L’éditeur de code, cliquez avec le bouton
droit sur la fiche et sélectionnez Voir comme texte. Pour revenir à la vue graphique de la fiche,
cliquez avec le bouton droit et choisissez Voir comme fiche.

Vous pouvez enregistrer les fichiers des fiches soit en format texte (par défaut) soit en format
binaire. Choisissez Outils|Options d’environnement, cliquez sur la page Concepteur, et cochez
ou non l’option Nouvelles fiches comme texte pour préciser le format à utiliser pour les fiches
nouvellement créées.

III- Où TROUVER DES INFORMATIONS ?

Vous pouvez trouver des informations sur Delphi de l’une des façons suivantes :
• dans l’aide en ligne,
• dans la documentation imprimée,

1-Aide en ligne
Le système d’aide en ligne fournit des informations détaillées sur les fonctionnalités de
l’interface utilisateur, l’implémentation du langage, les tâches de programmation et les
composants. Il contient toutes les informations se trouvant dans le Guide du développeur et dans
le Guide du langage Delphi, ainsi que de nombreux fichiers d’aide relatifs aux autres éléments
fournis avec Delphi.

15
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
Pour afficher la table des matières, choisissez Aide|Aide Delphi et Aide|Outils Delphi, puis
choisissez l’onglet Sommaire. Pour rechercher des informations sur les composants ou sur
d’autres sujets, choisissez les onglets Index ou Rechercher et saisissez votre requête.

2- Aide F1
Pour obtenir de l’aide sur tout élément de l’environnement de développement (y compris les
éléments de menu, les boîtes de dialogue, les barres d’outils et les composants) sélectionnez
l’élément et appuyez sur F1.

L’appui sur le bouton Aide dans toute boîte de dialogue affiche également une aide contextuelle.

16
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Les messages d’erreur issus du compilateur et du lieur apparaissent dans une fenêtre spéciale
située sous l’éditeur de code. Pour avoir de l’aide sur les erreurs de compilation, sélectionnez
un message dans la liste et appuyez sur F1.

17
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Chapitre
CHAPITRE 4

4 PRESENTATION GENERALE

Structure d’un programme Pascal, Delphi


Cette structure ressemble fort à celle des programmes des langages de haut niveau tels : ADA,
C++,Visual basic, Java …

18
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

En supprimant les parties facultatives, il reste le programme le plus simple que l’on puisse écrire.
Il s’agit d’une application console, la plus simple possible que vous pouvez compiler et exécuter
depuis la ligne de commande.

Remarques :
o Ce qui est entre accolades { } est un commentaire (et donc ignoré du compilateur), mais
o S’il y a un $ collé contre l’accolade {$ } ceci devient une directive de compilation.
o Ne pas oublier le point-virgule (il sépare 2 instructions mais n’est pas une fin de ligne comme
en ada et en C) à la fin de la première ligne et le point final.
Si Delphi est installé et si votre chemin d'accès contient le répertoire Delphi\Bin (où se trouvent
les fichiers DCC32.EXE et DCC32.CFG), vous pouvez saisir ce programme dans un fichier
appelé Kedal.PAS ou mieux Kedal.DPR à l’aide d’un éditeur texte (comme le bloc-notes de
windows) puis le compiler en saisissant, dans une fenêtre dos, la ligne (il peut être nécessaire
d’ajouter les chemins):DCC32 Kedal sur la ligne de commande qui produira l'exécutable
résultant (kedal.EXE) dont la taille est d’environ 37 ko.
On peut l’exécuter en tapant sur la ligne de commande : Kedal
Si l‘on double-clique sur kedal.EXE dans la fenêtre de l’explorateur, une fenêtre console va
s’ouvrir et se refermer immédiatement puisque ce programme ne fait rien (mais il le fait bien)
dans la mesure où il ne contient aucune instruction.
Ainsi, on peut « bloquer » l’exécution en ajoutant l’instruction readln qui attend que l’utilisateur
ait tapé sur des touches du clavier (éventuellement aucune) puis sur la touche entrée. Il est
d’ailleurs possible, avec readln(x), de mémoriser dans une variable x par exemple, ce que
l’utilisateur a tapé. On aura déclaré x avant le begin. On préviendra l’utilisateur auparavant grâce
à un message au moyen de writeln(‘Appuyez sur entrée’). Tout ceci donne :

program Kedal;
{$APPTYPE CONSOLE}
begin
writeln(‘Appuyez sur entrée’) ;
readln
end.

Mis à part sa simplicité, cet exemple diffère largement du type de programme que vous allez
probablement écrire avec Delphi. Tout d'abord, c'est une application console. Delphi est
généralement utilisé pour écrire des applications Windows ayant une interface graphique ; ainsi,
dans une application Delphi vous ne devez normalement pas appeler Writeln. De plus, la totalité

19
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
du programme exemple (à l'exception de Writeln) se trouve dans un seul fichier. Dans une
application
Delphi, l'en-tête du programme (la première ligne de cet exemple) se trouve dans un fichier
projet séparé qui ne contient
pas la logique réelle de l'application sinon quelques appels aux méthodes définies dans les
fichiers unité.

Utiliser des unités


Il est possible, selon la nature des applications, d’utiliser ou non certaines bibliothèques qui
contiennent fonctions, procédures et autres objets divers et variés. Le noyau se situe dans une
unité nommée system qu’il est inutile de déclarer : on aurait très bien pu mettre :
uses system ;
dans le programme précédent, ça n’aurait rien changé). Writeln et readln font partie du noyau
de delphi, alors que le programme :

program Kedal;
{$APPTYPE CONSOLE}
uses dialogs;
begin
ShowMessage('Cliquez pour quitter’) ;
end.

Le programme précédent va, en plus de l’application console, ouvrir une boîte avec un message
et un bouton. Lorsque l’on clique sur le bouton, on ferme la boite à message ce qui a pour effet
de terminer l’application puisque ShowMessage est la dernière instruction du programme.

20
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
Créer des unités

Les projets
L'exemple suivant propose un programme constitué de deux fichiers : un fichier projet et un
fichier unité. Le fichier projet, que vous pouvez enregistrer sous le nom Kedal.DPR, a la forme
suivante :

La première ligne déclare un programme appelé Kedal qui, encore une fois, est une application
console.
La clause uses

21
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
UnitStop; spécifie au compilateur que Kedal inclut une unité appelée UnitStop. Enfin le
programme appelle la procédure Stop. Mais où se trouve la procédure Stop ? Elle est définie
dans UnitStop. Le code source de UnitStop (colonne de droite) que vous devez enregistrer dans
un fichier appelé UNITSTOP.PAS
UnitStop définit une procédure appelée Stop. En Pascal, les routines qui ne renvoient pas de
valeur sont appelées des procédures. Les routines qui renvoient une valeur sont appelées des
fonctions. Remarquez la double déclaration de Stop dans UnitStop. La première déclaration,
après le mot réservé interface, rend Stop accessible aux modules (comme Kedal) qui utilisent
UnitStop. Le seconde déclaration, placée après le mot réservé implémentation, définit
réellement Stop.
Vous pouvez maintenant compiler Kedal depuis la ligne de commande en saisissant :
DCC32 KEDAL
Il n'est pas nécessaire d'inclure UnitStop comme argument de la ligne de commande. Quand le
compilateur traite le fichier KEDAL.DPR, il recherche automatiquement les fichiers unité dont
dépend le programme Kedal. L'exécutable résultant (KEDAL.EXE) fait la même chose que le
premier exemple : Rien de plus que d’afficher un message et d’attendre que l’utilisateur appuie
sur entrée.
Utiliser des unités
o évite au compilateur de recompiler une partie de code si le programmeur n’a pas modifié
l’unité correspondante
o permet au programmeur de fournir un fichier .DCU (Unité Delphi Compilée) et un mode
d’emploi rendant cette unité parfaitement utilisable tout en protégeant son code.

Fichiers d’un projet


En général, on regroupe tous ces fichiers (il peut y avoir plus d’une unité, et même d’autres
fichiers) dans un répertoire le fichier dpr en faisant partie lui aussi. On y trouve notamment :

22
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Chapitre
CHAPITRE 5

5 CERTAINS NOTIONS DE BASES

Introduction
Dans ce chapitre nous allons voir les notions sur les routines standards et d’entrée, les
propriétés, les méthodes et les événements
Exemple
Pour quitter définitivement l’application (le programme) :
Application.Terminate ;
Ou:
Form1.Close; (si form1 est la fiche principale, sinon, changer form1 par le nom de la fiche
principale)
Pour réduire une fiche (fenêtre) : Application.Minimize ;

1- MessageDlg
Affiche une boîte de dialogue de message au centre de l'écran.
function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint):
Word;
Description :
Appelez MessageDlg pour afficher une boîte de dialogue de message et gérer la réponse de
l'utilisateur. La boîte de dialogue affiche la valeur du paramètre Msg. Utilisez le paramètre
DlgType pour indiquer le type de boîte de dialogue. Utilisez le paramètre Boutons pour
déterminer quels boutons apparaissent dans le message. Utilisez le paramètre HelpCtx pour
spécifier l'ID de contexte de la rubrique d'aide qui doit apparaître quand l'utilisateur clique sur le
bouton d'aide ou appuie sur F1 lorsque le dialogue est affiché. MessageDlg renvoie la valeur du
bouton sélectionné par l'utilisateur. Voici les valeurs possibles :
mrAbort mrYes mrNone
mrOk mrRetry mrNo
mrCancel mrIgnore mrAll

Exemple:
Cet exemple utilise un bouton sur une fiche. Quand l'utilisateur clique sur le bouton, une boîte
de message demandant à l'utilisateur s'il souhaite quitter l'application apparaît. Si l'utilisateur
choisit Oui, une autre boîte de dialogue apparaît pour informer l'utilisateur que l'application est
sur le point de se terminer. Quand l'utilisateur choisit OK, l'application se termine.

procedure TForm1.Button1Click(Sender: TObject);


begin
if MessageDlg('Bienvenue dans mon application Pascal Objet.
Quitter?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin

23
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
MessageDlg('Fin de l''application Pascal Objet.', mtInformation,[mbOk], 0);
Close;
end;
end;

2- Routines standard et Entrées

Beep Génère un bip standard en utilisant le haut-parleur de l’ordinateur.


Break Force la sortie d’une instruction for, while ou repeat.
Chr Renvoie le caractère correspondant à une valeur ASCII spécifiée.
Cos Calcule le cosinus d’un angle donné.
CurrToStr Convertit une variable monétaire en chaîne.
Date Renvoie la date en cours.
DateTimeToStr Convertit une variable de type TDateTime en chaîne.
DateToStr Convertit une variable de type TDateTime en chaîne.
Dec Décrémente une variable scalaire.
Exit Sort de la procédure en cours.
Exp Calcule l’exponentielle d’une valeur donnée.
FloatToStr Convertit une valeur flottante en chaîne.
FloatToStrF Convertit une valeur flottante en chaîne en utilisant le format spécifié.
High Renvoie la plus grande valeur de l’étendue d’un intervalle, d’un tableau ou
d’une chaîne.
Inc Incrémente une variable scalaire.
Int Renvoie la partie entière d’un nombre réel.
IntToStr Convertit un entier en chaîne.
Length Renvoie la longueur d’une chaîne ou d’un tableau.
Low Renvoie la plus petite valeur de l’étendue d’un intervalle, d’un tableau ou
d’une chaîne.
LowerCase Convertit une chaîne ASCII en minuscules.
MaxIntValue Renvoie la plus grande valeur signée dans un tableau d’entiers.
MaxValue Renvoie la plus grande valeur signée dans un tableau.
MinIntValue Renvoie la plus petite valeur signée dans un tableau d’entiers.
MinValue Renvoie la plus petite valeur signée dans un tableau.
Now Renvoie l’heure et la date en cours.
Ord Renvoie le rang d’une expression de type scalaire.
Pos Renvoie l’indice dans une chaîne du premier caractère d’une sous chaîne
spécifiée.
Pred Renvoie le prédécesseur d’une valeur scalaire.
Random Génère des valeurs aléatoires dans l’intervalle spécifié.
Round Renvoie la valeur d’un réel arrondie à l’entier le plus proche.
ShowMessage Affiche une boîte message avec une chaîne non formatée et le bouton OK.
ShowMessageFmt Affiche une boîte message avec une chaîne formatée et le bouton OK.
Sin Renvoie le sinus de l’angle spécifié en radians.
Sqr Renvoie le carré d’un nombre.
Sqrt Renvoie la racine carrée d’un nombre.
StrToCurr Convertit une chaîne en valeur monétaire.
StrToDate Convertit une chaîne en valeur date (TDateTime).
StrToDateTime Convertit une chaîne en valeur TDateTime.

24
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
StrToFloat Convertit une chaîne en valeur à virgule flottante.
StrToInt Convertit une chaîne en valeur entière.
StrToTime Convertit une chaîne au format heure (TDateTime).
StrUpper Renvoie une chaîne en majuscules.
Succ Renvoie le successeur d’une valeur scalaire.
Sum Renvoie la somme des éléments d’un tableau.
Time Renvoie l’heure en cours.
TimeToStr Convertit une variable de type TDateTime en chaîne.
Trunc Tronque un nombre réel en un entier.
UpCase Convertit un caractère en majuscules.
UpperCase Renvoie une chaîne en majuscules.

3- Certaines Propriétés

Alignment Contrôle le positionnement du texte dans le libellé. Alignment permet


d'indiquer comment le texte du libellé est aligné dans le ClientRect du
contrôle libellé. L'effet de la propriété Alignment est plus évident si la
propriété WordWrap est à True et si le libellé inclut plusieurs lignes de
texte.
Caption de type string, contient la chaîne affichée dans le volet de contrôles
(objets)
Color type enum, Contient la couleur de l’objet
BorderStyle type enum, Détermine le style de la bordure d’un objet.
BorderWidth Spécifie la largeur de la bordure du contrôle.
Font Contient les paramètres du texte (soit Caption, ou Text)
Visible type booléen, contient, TRUE : Pour rendre l’objet visible, et FALSE sinon
Enabled type booléen, contient, TRUE : Pour rendre le contrôle de l’objet
accessible, et FALSE sinon
Hint Type String, contient la chaîne de texte apparaissant lorsque l'utilisateur
déplace la souris au-dessus du contrôle (l’objet).
ShowHint type booléen, contient True pour activer Hint, False sinon.
TabOrder type entier, indique la position du contrôle dans l'ordre de tabulation de
son parent.
TabOrder n'a de sens que si la propriété TabStop a la valeur True et si le contrôle a
un parent (la propriété TabOrder d'une fiche n'a pas de sens sauf si la
fiche est l'enfant d'une autre fiche). Un contrôle dont la propriété
TabOrder a la valeur -1 se trouve hors de l'ordre de tabulation et ne peut
être atteint en utilisant la touche Tab. Pour retirer un contrôle ayant un
parent de l'ordre de tabulation initialisez sa propriété TabStop à False.
PopupMenu Identifie le menu surgissant associé au contrôle.
Heigh type entier, détermine la hauteur du contrôle (objet) en pixels
Left type entier, détermine la coordonnée horizontale, exprimée en pixels
relativement à la fiche, du bord gauche d'un composant. Top type entier,
détermine la coordonnée verticale, exprimée en pixels relativement à la
fiche, du bord gauche d'un composant.
Width type entier, détermine la largeur du contrôle (objet) en pixels
Cursor Spécifie l'image utilisée pour représenter le pointeur de la souris lorsqu'il

25
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
passe au-dessus de la région couverte par le contrôle.
Ctl3D Détermine si un contrôle a un aspect visuel 2D (deux dimensions) ou 3D
(trois dimensions).
Name Contient le nom du composant tel qu'il est désigné dans le code.

4- Certaines Méthodes

Close pour une fiche principale, Close permet de quitter le programme, sinon, il permet
de fermer uniquement la fenêtre
Show
ShowModal Rend un contrôle (objet) visible. ShowModal pour les fenêtres permet de rendre
la fenêtre visible, et de désactiver la première
Hide Rend un contrôle invisible

5- Certains évènements

OnActivate Se produit quand une application devient active.

OnClick Se produit quand l'utilisateur clique sur le contrôle.


OnDblClick Se produit quand l'utilisateur double clique sur le contrôle.
OnCreate Se produit à la création de la fiche.

26
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

OnShow Se produit quand la fiche est affichée (c'est-à-dire quand la propriété


Visible de la fiche prend la valeur True).

27
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
OnHide Se produit quand la fiche est cachée (c'est-à-dire quand la propriété Visible
de la fiche prend la valeur False).
OnEnter Se produit quand un contrôle reçoit la focalisation.
OnExit Se produit quand la focalisation passe du contrôle à un autre contrôle.

6- Exemple de Propriété

La propriété Align
type TAlignSet = set of TAlign;
type TAlign = (alNone, alTop, alBottom, alLeft, alRight, alClient);
TAlignSet est un ensemble de valeurs TAlign. TAlign spécifie comment un contrôle est placé en
fonction de son parent. Voici ses valeurs possibles :
Valeur Signification
AlNone Le contrôle reste à l'emplacement où il a été mis. Valeur par défaut.
alTop Le contrôle se place en haut de son parent et prend toute la largeur de son parent. Sa
hauteur n'est pas modifiée.
alBottom Le contrôle se place en bas de son parent et prend toute la largeur de son parent. Sa
hauteur n'est pas modifiée.
alLeft Le contrôle se place sur le bord gauche de son parent et prend toute la hauteur de son
parent. Sa largeur n'est pas modifiée.
alRight Le contrôle se place sur le bord droit de son parent et prend toute la hauteur de son
parent. Sa largeur n'est pas modifiée.
alClient Le contrôle remplit la zone client de son parent. Si un autre contrôle occupe déjà une
partie de cette zone, le contrôle nouveau se redimensionne pour prendre le reste de la zone.

La propriété Position
Représente la taille et la position de la fiche.
Utilisez la propriété Position pour connaître ou définir la taille et l'emplacement d'une fiche.
Position peut prendre l'une des valeurs suivantes : poDesigned, poDefault, poDefaultPosOnly,
poDefaultSizeOnly, poScreenCenter, poDesktopCenter, poMainFormCenter, poOwnerFormCenter

Valeur Signification
PoDesigned La fiche apparaît à l'écran à la position et avec les dimensions qu'elle avait à la
conception.
poDefault La fiche apparaît à la position et avec les dimensions déterminées par Windows. A
chaque exécution de l'application, la fiche est légèrement déplacée en bas à droite. Le bord droit
de la fiche est toujours à proximité du bord de l'écran, et le bord inférieur de la fiche est
toujours
à proximité du bas de l'écran indépendamment de la résolution de l'écran.
poDefaultPosOnly La fiche apparaît avec la taille utilisée à la conception, mais Windows choisit sa
position à l'écran. A chaque exécution de l'application, la fiche est légèrement déplacée en bas à
droite. Quand la fiche ne peut plus se déplacer vers le bas et la droite tout en conservant sa
taille et en étant affichée entièrement, la fiche apparaît dans l'angle supérieur
gauche de l'écran.
poDefaultSizeOnly La fiche apparaît à la position utilisée à la conception, mais Windows
choisit sa taille. Le bord droit de la fiche est toujours à proximité du bord de l'écran, et le bord
inférieur de la fiche est toujours à proximité du bas de l'écran indépendamment de la résolution
de l'écran.

28
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
poScreenCenter La fiche conserve les dimensions définies à la conception, mais est positionnée au
centre de l'écran. Dans les applications multi-écran, la fiche peut être déplacée de cette position
centrale afin de tenir complètement sur un écran, comme spécifié par la propriété
DefaultMonitor.
poDesktopCenter La fiche conserve la taille définie à la conception mais elle est placée au centre
de l'écran. Il n'y a pas d'ajustements pour les applications multi-écran.
poMainFormCenter La fiche conserve la taille que vous lui aviez donné à la conception, mais est
placée dans le centre de la fiche principale de l'application. Aucun ajustement n'est réalisé pour
applications multi-moniteurs. Cette position ne doit être utilisé qu'avec des fiches secondaires.
Si elle est définie pour une fiche principale, elle agit comme poScreenCenter.
poOwnerFormCenter La fiche conserve la taille que vous lui aviez donné à la conception, mais est
placée dans le centre de la fiche spécifiée par la propriété Owner. Si la propriété Owner ne
spécifie pas de fiche, cette position agit comme poMainFormCenter.

7- Exemple d’événement
L’événement OnClose
Se produit quand la fiche se ferme.
type
TCloseAction = (caNone, caHide, caFree, caMinimize);
TCloseEvent = procedure(Sender: TObject; var Action: TCloseAction) of object;

Utilisez l'événement OnClose pour effectuer des actions particulières quand la fiche se ferme.
L'événement OnClose spécifie le gestionnaire d'événement à appeler quand une fiche va être
fermée. Le gestionnaire spécifié par OnClose peut, par exemple, s'assurer que tous les champs
d'une fiche de saisie ont un contenu correct avant d'autoriser la fermeture de la fiche. Une fiche
est fermée par la méthode Close ou si l'utilisateur choisit la commande Fermeture dans le menu
système de la fiche. Le type TCloseEvent pointe sur une méthode qui gère la fermeture d'une
fiche. La valeur du paramètre Action détermine si la fiche se ferme effectivement. Les valeurs
possibles de Action sont :
Valeur Signification
caNone La fiche n'est pas autorisée à se fermer, il ne se passe rien.
CaHide La fiche n'est pas fermée, juste cachée. L'application peut toujours accéder à la fiche.
CaFree La fiche est fermée et toute la mémoire allouée à la fiche est libérée.
caMinimize La fiche est réduite, pas fermée. C'est l'action par défaut pour les fiches enfant MDI.
Si une fiche est un enfant MDI alors que sa propriété BorderIcons a la valeur biMinimize, l'action
par défaut est caMinimize. Si une fiche enfant MDI n'a pas ce paramètre, l'action par défaut est
caNone, c'est-à-dire que rien ne se produit quand l'utilisateur tente de fermer la fiche. Si une
fiche est une fiche enfant SDI, l'action par défaut est caHide. Pour fermer une fiche et la libérer
dans un événement OnClose, affectez la valeur caFree à Action.
Exemple :
Cet exemple affiche une boîte message quand l'utilisateur tente de fermer la fiche. Si l'utilisateur
clique sur le bouton Oui, la fiche se ferme sinon elle reste ouverte.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if MessageDlg('Fermer application ?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
Action := caFree
else
Action := caNone; end;

29
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Chapitre
CHAPITRE 6

6 CERTAINS OBJETS DELPHI

Vue d’ensemble de la fiche

30
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Voici quelques objets de Delphi et leurs descriptions

Utilisez TPanel pour placer un volet vide dans une fiche. Les volets disposent de propriétés
permettant d'entourer le contrôle d'une bordure biseautée, ainsi que des méthodes facilitant la
gestion du positionnement des contrôles enfant incorporés ans le volet.
Proprété :
BevelInner Détermine le style du biseau interne d'un volet.
BevelOuter Détermine le style du biseau externe d'un volet.
BevelWidth Spécifie la distance, exprimée en pixels, qui sépare les biseaux interne et externe.
Voir BorderStyle, BorderWidth dans le chapitre Certaines Propriétés

Utilisez TButton pour placer un bouton poussoir Windows standard dans une fiche. TButton
introduit plusieurs propriétés permettant de contrôler son comportement dans la définition
d'une boite de dialogue. Les utilisateurs choisissent des contrôles bouton pour effectuer une
action. Pour utiliser un bouton affichant un bitmap au lieu d'un texte, utiliser TBitBtn. Pour
utiliser un bouton pouvant rester en position enfoncée, utilisez TSpeedButton.
Voir :
La propriété Cursor, et l’évènement OnClick dans le chapitre Certaines Propriétés et Certains
évènements.
Remarque :
L’évènement OnClick pour un bouton est très utilisé, pour accéder directement à la procédure
sans passer par l’inspecteur d’objet, double cliquer sur l’objet bouton qui est sur la fiche.

Utilisez TMainMenu pour placer un menu principal dans une fiche. Pour commencer la
conception d'un menu, ajoutez un composant menu principal à votre fiche, puis double-cliquez
sur le composant.

31
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Utilisez TPopupMenu pour définir le menu surgissant qui apparaît quand l'utilisateur clique sur
un contrôle avec le bouton droit de la souris. Pour qu'un menu surgissant soit disponible,
affectez l'objet TPopupMenu à la propriété PopupMenu du contrôle. La conceptions d’un
PopupMenu se fait exactement comme celle d’un MainMenu.

Utilisez TPageControl pour créer une boîte de dialogue multipage ou un classeur à onglets.
TPageControl affiche plusieurs pages superposées qui sont des objets TTabSheet. L'utilisateur
sélectionne une page en cliquant sur l'onglet de la page qui apparaît en haut du contrôle. A la
conception, pour ajouter une nouvelle page à un objet TPageControl, cliquez avec le bouton
droit de la souris dans l'objet TPageControl et choisissez Nouvelle page.
ActivePage Spécifie la page affichée dans le contrôle pages.
MultiLine Détermine si les onglets peuvent apparaître sur plusieurs lignes.
Style Spécifie le style du contrôle onglets.
Valeur Signification
TsTabs Onglets standard
tsButtons Onglets boutons
tsFlatButtons Onglets boutons plats
TabPosition Détermine si les onglets apparaissent en haut ,en bas, à gouche, ou à droite.
TabWidth Indique la largeur, exprimée en pixels, des onglets d'un contrôle onglets.
TabSheet : c’est une page individuelle d'un objet TPageControl. Pour donner un titre pour une
page (TabSheet ) dans son onglet, utiliser la propriété Caption
32
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

TActionList implémente le comportement générique introduit dans CustomActionList, mais


n'introduit aucun comportement nouveau. TactionList publie quelques membres hérités de
TCustomActionList. Pour centraliser la réponse à des commandes utilisateur (actions), utilisez
des listes d'actions, conjointement avec des actions et des liaisons d'actions. Les composants des
listes d'actions sont l'interface utilisateur permettant de travailler avec des actions. Ajoutez des
composants de listes d'actions à votre fiche ou à votre module de données à partir de la page
standard de la palette des composants. Pour afficher l'éditeur de liste d'actions à partir duquel
vous pouvez ajouter, supprimer et réorganiser les actions, double-cliquez sur la liste d'actions.
Pour créer des actions standards :

1 - Ajouter un composant Imagelist


2 - Modifier la propriété Images du composant ActionList : donner le nom du composant
ImageList ajouté, ‘ImageList1’.
3 - Double cliquez sur l’objet ActionList :

4 - Dans la partie Actions (à droite), cliquez sur le bouton droit de la souris :

33
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

5 - Cliquez maintenant sur Nouvelle action standard…

6 - Choisissez les actions voulues, puis cliquez sur OK.

34
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Remarque :
Si vous utilisez un objet ActionList, les images de ImageList son ajoutées automatiquement,
sinon vous pouvez ajouter vous même des images de votre choix. Les listes d'images sont
utilisées pour gérer de manière efficace de grands nombres d'icônes ou de bitmaps. Toutes les
images d'une liste d'images sont contenues dans un seul grand bitmap au format de périphérique
écran. Une liste d'images peut également contenir un bitmap monochrome contenant des
masques à utiliser pour dessiner des images en transparence (le style icône). Une liste d'images
peut contenir de nombreuses images de même taille et permet d'accéder aux images via un
indice dans l'intervalle 0 à n - 1. La liste d'images dispose de méthodes pour faciliter le stockage,
la lecture et le dessin des images stockées.
Pour ajouter des images à une liste d'images lors de la conception, cliquez sur le bouton droit et
choisissez Editeur de liste d'images.

L’editeur ImageList :

En mode conception, vous utilisez l'éditeur de liste d'images pour ajouter des bitmaps et des
icônes à un composant TImageList. Lorsque vous travaillez dans l'éditeur de liste d'images, vous
pouvez cliquer sur Appliquer pour enregistrer votre travail sans quitter l'éditeur, ou cliquer sur
OK pour enregistrer vos modifications et quitter le dialogue. L'utilisation du bouton Appliquer
est particulièrement intéressante car, une fois que vous avez quitté le dialogue, vous ne pouvez
plus modifier les images existantes.
Pour afficher l'éditeur de liste d'images :
Sélectionnez l'objet TImageList et double-cliquez sur le composant ou cliquez avec le bouton
droit et sélectionnez Editeur ImageList.

Image sélectionnée

35
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
Ce contrôle affiche l'image sélectionnée. Vous pouvez changer cette image en cliquant sur une
autre image de la liste Images qui est au-dessous. Quand une image est sélectionnée, vous
pouvez la supprimer de la liste des images. Si l'image n'a pas été ajoutée à la liste des images
avant la session en cours de l'éditeur, vous pouvez utiliser les autres contrôles pour modifier ses
propriétés. Cependant, une fois que l'éditeur de liste d'images est fermé, ces propriétés sont
immuables et les contrôles de l'image sélectionnée sont estompés si l'éditeur de liste d'images
est rouvert et cette image sélectionnée à nouveau.

Couleur transparente
Utilisez la liste déroulante Couleur transparente pour spécifier la couleur utilisée pour créer le
masque servant à dessiner l'image avec transparence. La couleur transparente par défaut est la
couleur du pixel du coin inférieur gauche sur le bitmap. Vous pouvez aussi changer la couleur
transparente en cliquant directement sur un pixel dans l'image sélectionnée. Quand une image a
une couleur transparente, tous les pixels de l'image ayant cette couleur ne s'affichent pas dans
cette couleur, mais sont au contraire transparents et laissent voir ce qui est derrière l'image.
Pour les images icône, la couleur transparente est mise à clNone (les icônes sont déjà
masquées).

Couleur remplissage
Utilisez la liste déroulante Couleur remplissage pour spécifier la couleur utilisée ajoutée autour
de l'image sélectionnée si elle est plus petite que les dimensions indiquées par les propriétés
Height et Width du contrôle liste d'images. Ce contrôle est estompé si l'image sélectionnée
remplit entièrement les dimensions spécifiées par la liste d'images (c'est-à-dire si elle est au
moins aussi haute et large que les valeurs des propriétés Height et Width). Ce contrôle est
également estompé pour les images icône, car ces dernières jouent le rôle de masques et leur
contour est transparent.

Options
Utilisez les boutons radio Options pour indiquer comment la liste d'images affichera l'image
sélectionnée si elle ne correspond pas exactement aux dimensions spécifiées par les propriétés
Height et Width de la liste d'images. Ces boutons sont désactivés pour les icônes.)

Option Description
Rogner Affiche une partie de l'image en partant du coin supérieur gauche, et en étendant la
largeur et la hauteur de la liste d'images vers le coin inférieur droit. Ajuster Provoque
l'étirement de toute l'image afin qu'elle tienne en largeur et en hauteur dans la liste d'images.
Centrer Centre l'image sur la largeur et la hauteur de la liste d'images. Si la largeur ou la hauteur
de l'image est supérieure à la largeur ou à la hauteur de la liste d'images, l'image risque d'être
rognée.

Images
Affiche une prévisualisation des images contenues dans la liste d'images. Contient des contrôles
permettant d'ajouter ou de supprimer des images dans la liste. Chaque image est affichée dans
une zone 24x24 ; il est ainsi possible de visualiser plusieurs images à la fois. Sous chaque image,
une légende indique la position de l'image dans la liste (en partant du numéro zéro). Il est
possible de modifier la légende de l'image afin de changer sa position dans la liste. Vous pouvez
aussi faire glisser l'image à sa nouvelle position.

36
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
Ajouter
Affiche la boîte de dialogue Ajouter des images. Elle vous permet de sélectionner un ou
plusieurs bitmaps et icônes à ajouter dans la liste d'images. Les images sont ensuite affichées en
surbrillance dans la liste et leur légende est numérotée en fonction de leur position dans la liste.
Si un bitmap dépasse la largeur ou la hauteur de la liste d'image, un message vous demande si
vous souhaitez que le bitmap soit divisé en plusieurs images. Ceci est particulièrement utile pour
les bitmaps de la barre d'outils qui sont souvent composés de plusieurs petites images affichées
dans un ordre précis et stockées sous forme d'un bitmap plus grand.

Supprimer
Supprime de la liste d'images les images sélectionnées. Les images restantes sont repositionnées
et renumérotées en partant de zéro. Affiche la boîte de dialogue Ajouter des images. Elle vous
permet de sélectionner un ou plusieurs bitmaps et icônes à ajouter dans la liste d'images. Les
images sont ensuite affichées en surbrillance dans la liste et leur légende est numérotée en
fonction de leur position dans la liste. Si un bitmap dépasse la largeur ou la hauteur de la liste
d'image, un message vous demande si vous souhaitez que le bitmap soit divisé en plusieurs
images. Ceci est particulièrement utile pour les bitmaps de la barre d'outils qui sont souvent
composés de plusieurs petites images affichées dans un ordre précis et stockées sous forme
d'un bitmap plus grand.

Supprimer
Supprime de la liste d'images les images sélectionnées. Les images restantes sont repositionnées
et renumérotées en partant de zéro.

Exporter
Vous permet d'enregistrer dans un fichier l'image sélectionnée. Ce fichier contient le bitmap tel
quel, avec les modifications (rognage ou étirement) effectuées.

Utilisez TImage pour afficher une image graphique dans une fiche. Utilisez un objet TPicture
pour spécifier l'objet bitmap, icône, métafichier ou autre qui est affiché par TImage. TImage
introduit diverses propriétés permettant de déterminer comment l'image est affichée à
l'intérieur de l'objet TImage. Pour afficher une image dans un composant Image :
1 - Double cliquez sur le composant Image qui se trouve dans la fiche :

37
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

2 - Cliquez sur le bouton Charger…

3 - Choisissez une image qui se trouve dans votre disque dûr.

4 - Si l’image est grande, et qu’elle n’apparaît pas complètement dans votre composant
Image:Modifier la propriété Stretch à True, si vous voulez donner des dimensions de votre
choix.

38
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
5 - sinon, modifier la propriété AutoSize à true, si vous voulez garder les dimensions réelles de
l’image.

Les proprétés :
AutoSize Spécifie si le contrôle se redimensionne automatiquement pour s'adapter à son
contenu.
Center Indique si l'image est centrée dans le contrôle image.
Stretch Indique si l'image doit être modifiée afin qu'elle rentre exactement dans les limites du
contrôle image.

TToolBar est un conteneur pour les boutons d'outils (TToolButton). Il offre un moyen simple
d'organiser et de gérer des contrôles visuels. Tous les boutons d'outils d'une barre d'outils
conservent une largeur et une hauteur uniformes. Une barre d'outils peut contenir d'autres
contrôles. Ces contrôles (maintenus en place par des boutons d'outils invisibles) conservent une
hauteur uniforme. Les contrôles peuvent passer automatiquement à la ligne suivante s'ils ne
tiennent pas horizontalement sur la barre d'outils. La propriété Flat permet de faire apparaître
l'arrière-plan derrière la barre d'outils et d'affecter des bordures apparentes aux boutons
d'outils.
Des espaces et des séparateurs (qui sont en fait des boutons d'outils configurés spécialement)
peuvent grouper les contrôles sur la barre d'outils à la fois visuellement et fonctionnellement.
Habituellement, les boutons d'outils correspondent aux éléments de menus de l'application et ils
permettent à l'utilisateur d'accéder d'une manière plus directe aux commandes de l'application.

Les propriétés :
Flat Rend la barre d'outils transparente et élimine les bordures pour les boutons d'outils.
Images Enumère les images pouvant apparaître sur des boutons d'outils.

TTimer est utilisé pour simplifier l'appel des fonctions SetTimer et KillTimer de l'API Windows
et le traitement des messages WM_TIMER. Utilisez un composant timer pour chaque timer de
l'application. Les propriétés et événements du composant timer affectent le timer en spécifiant
39
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
des informations sur l'événement timer (parmi ces informations, l'intervalle du timer qui
correspond au paramètre de la fonction SetTimer de l'API Windows). L'exécution du timer se
produit réellement au travers de son événement OnTimer.

Les propriétés :
Enabled Détermine si le timer répond aux événements timer.
Interval Détermine l'intervalle de temps, exprimé en millisecondes, s'écoulant avant que le
composant timer génère un autre événement OnTimer.

TLabel est un contrôle non-fenêtré qui affiche du texte dans une fiche. Ce texte peut être utilisé
pour libeller un autre contrôle et peut attribuer la focalisation à ce contrôle quand l'utilisateur
saisit un raccourci clavier.

Propriétés :
AutoSize type booléen:
AutoSize permet de faire en sorte que le libellé ajuste sa taille automatiquement afin que la zone
client s'adapte à la hauteur et à la largeur du texte. Quand AutoSize est à False, le libellé a une
taille fixe. Quand AutoSize est à True, la taille du libellé est réajustée quand son texte change. La
taille du libellé est aussi réajustée quand la propriété Font change. Quand WordWrap est à
True, la largeur du libellé est fixe. Si AutoSize est aussi à True, les changements apportés au
texte provoquent un changement de hauteur du libellé. Quand AutoSize est à True alors que
WordWrap est à False, la hauteur du libellé est déterminée par la fonte et les changements
apportés au texte provoquent un changement de largeur du libellé.
FocusControl Affectez à FocusControl le contrôle fenêtré destiné à recevoir la focalisation quand
l'utilisateur appuie sur la touche raccourci spécifiée par le libellé. Pour spécifier une touche
raccourci, faites précéder un caractère du texte du libellé d'un "et" commercial (&) et initialisez
la propriété ShowAccelChar à True.
Transparent type booléen:
Initialisez Transparent à True pour que le libellé n'empêche pas de voir d'autres contrôles sur la
fiche. Si, par exemple, le libellé est utilisé pour ajouter du texte à un graphique, vous pouvez
initialiser Transparent à True pour que le libellé ne soit pas séparé de l'objet graphique.
L'écriture d'un texte avec un arrière-plan transparent est plus lente que lorsque Transparent est
à False. Si l'image placée sous le libellé n'est pas trop complexe, vous pouvez améliorer les
performances en choisissant comme couleur d'arrière-plan pour le libellé une couleur
correspondant à l'objet situé en dessous et en initialisant Transparent à False.
WordWrap type booléen:
Initialisez WordWrap à True pour permettre au libellé d'afficher plusieurs lignes de texte.
Quand WordWrap est à True, tout texte trop long pour la largeur du contrôle libellé passe à la
ligne suivante au niveau de la marge droite et continue sur les lignes suivantes. Initialisez
WordWrap à False pour limiter le libellé à une seule ligne. Quand WordWrap est à False, tout
texte trop long pour le libellé est tronqué.

40
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

RadioButton
Utilisez TRadioButton pour ajouter un bouton radio à une fiche. Les boutons radio proposent à
l'utilisateur un ensemble d'options mutuellement exclusives, c'est-à-dire qu'un seul bouton radio d'un
groupe peut être sélectionné à la fois à un moment donné. Quand l'utilisateur sélectionne un bouton
radio, le bouton radio précédemment sélectionné devient désélectionné. Les boutons radio sont
fréquemment regroupés dans une boîte groupe (TGroupBox). Commencez par ajouter la boîte groupe à
la fiche, puis choisissez les boutons radio dans la palette des composants et placez-les dans la boîte
groupe. Par défaut, tous les boutons radio placés dans le même contrôle fenêtré conteneur (comme
TRadioGroup ou TPanel) appartiennent au même groupe. Par exemple, deux boutons radio d'une fiche
ne peuvent être sélectionnés simultanément que s'ils appartiennent à des conteneurs différents, par
exemple deux boîtes groupe.

CheckBox
Un composant TCheckBox propose une option à l'utilisateur. L'utilisateur peut activer la case à cocher
pour sélectionner l'option, ou supprimer la coche pour la désélectionner.

Propriété ;
Checked type booléen:
Consultez la propriété Checked pour déterminer si le bouton radio est sélectionné. Affectez la
valeur True à la propriété Checked pour sélectionner le bouton radio et désélectionner tous les
autres boutons radio du même conteneur. Affectez la valeur False à Checked pour
désélectionner le bouton radio, plus aucun bouton du groupe n'étant alors sélectionné.

Un objet TRadioGroup est une boîte groupe particulière ne pouvant contenir que desboutons
radio. Les boutons radio contenus directement dans le même composant sont "groupés".
Quand l'utilisateur active un bouton radio, tous les autres boutons radio de son groupe
deviennent désactivés. Il ne peut donc y avoir deux boutons radio activés simultanément dans
une fiche que s'ils sont placés dans des conteneurs distincts, comme des boîtes groupe. Pour
ajouter des boutons radio à un objet TRadioGroup, modifiez la propriété Items dans
l'inspecteur d'objets. Chaque chaîne de Items fait apparaître un bouton radio dans le groupe
ayant la chaîne comme libellé. La valeur de la propriété ItemIndex détermine le bouton radio
sélectionné du groupe. Vous pouvez afficher les boutons radio sur une ou plusieurs colonnes en
définissant la valeur de la propriété Columns.

Propriétés :
Columns type entier:
La propriété Columns détermine le nombre de colonnes du groupe de boutons radio. Sa valeur
peut varier de 1 à 16. La valeur par défaut est 1, ce qui signifie que les boutons radio sont
disposés verticalement sur une seule colonne.
Items type TString:
La propriété Items contient un objet TStrings qui liste les libellés des boutons radio du groupe.
Dans les descendants de TCustomRadioGroup, TRadioGroup et TDBRadioGroup, dans

41
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
lesquels cette propriété est publiée, il est possible d'ajouter ou de supprimer des boutons en
modifiant la propriété liste Items avec l'inspecteur d'objets.

Remarque : Les éléments d'un objet groupe de boutons radio sont des instances particulières de
TRadioButton générées par TCustomRadioGroup. Il n'est pas possible d'inclure dans le groupe
de boutons radio des instances de TRadioButton créées de manière autonome.
ItemIndex type entier:
La propriété ItemIndex contient l'indice du bouton radio dans la propriété Items. Le premier
bouton a l'indice 0. A l'exécution, la valeur de la propriété ItemIndex change quand l'utilisateur
sélectionne un bouton radio. Pour qu'un bouton apparaisse sélectionné au démarrage de
l'application, affectez à la conception l'indice de ce bouton à la propriété ItemIndex. Sinon,
laissez la valeur par défaut de ItemIndex, -1, ce qui signifie qu'il n'y a pas de bouton sélectionné.

Utilisez TListBox pour afficher une liste défilante d'éléments où l'utilisateur peut sélectionner,
ajouter ou supprimer des éléments.
Propriétés :
Columns type entier:
Utilisez la propriété Columns pour spécifier le nombre de colonnes, dans une boîte liste
multicolonne, visibles sans utiliser la barre de défilement horizontale.
Items type TString:
Utilisez la propriété Items pour ajouter, insérer, supprimer ou déplacer des éléments. Par
défaut, les éléments d'une boîte liste sont de type TStrings. Utilisez ce type d'élément pour
accéder aux propriétés et méthodes permettant de manipuler les éléments de la liste.
Les méthodes Add et Delete :
Items.add(‘chaine de caractères’) ajoute une chaîne en fin de liste.
Items.Delete(i :integer) supprime la chaîne qui se trouve à la (i+1)ème ligne.

Exemple :
Le code suivant ajoute un texte comme élément d'une boîte liste :
procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.Items.Add('Vertical');
ListBox1.Items.Add('Horizontal');
end;

MultiSelect type booléen:


Affectez la valeur True à la propriété MultiSelect pour permettre à l'utilisateur de sélectionner
plusieurs éléments. Si MultiSelect a la valeur False, il n'est pas possible de sélectionner à la fois
plusieurs éléments de la boîte liste. MultiSelect permet à l'utilisateur de sélectionner plusieurs
éléments non contigus. Elle ne permet pas à l'utilisateur de sélectionner une séquence
d'éléments en une seule opération comme le permet la propriété ExtendedSelect. Si MultiSelect
a la valeur True et que plusieurs éléments sont sélectionnés, la valeur de la propriété ItemIndex,
indiquant l'indice de l'élément sélectionné (Selected), donne l'indice de l'élément sélectionné
détenant la focalisation.

42
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

ItemIndex type entier:


A l'exécution, utilisez la propriété ItemIndex pour sélectionner un élément. Affectez à la
propriété ItemIndex l'indice de l'élément à sélectionner. La valeur de la propriété ItemIndex
pour le premier élément de la liste est 0. Si aucun élément n'est sélectionné, la valeur est -1
(valeur par défaut) sauf si MultiSelect a la valeur True. Si la propriété MultiSelect a la valeur
True, l'utilisateur peut sélectionner plusieurs éléments de la boîte liste. Dans ce cas, la valeur de
la propriété ItemIndex est l'indice de l'élément sélectionné qui détient la focalisation. Si
MultiSelect a la valeur True, ItemIndex a par défaut la valeur 0.
Items[i] type String:
Désigne le titre (chaîne de caractère) de l’élément i

Utilisez un objet TEdit pour placer dans une fiche un contrôle de saisie Windows standard. Les
contrôles de saisie permettent à l'utilisateur de saisir du texte. Les contrôles permettent
également d'afficher du texte. Même pour afficher uniquement du texte, choisissez un contrôle
de saisie pour permettre à l'utilisateur de sélectionner le texte et de le copier dans le Presse-
Papiers. Choisissez un objet libellé si la possibilité de sélection qu'offre le contrôle de saisie n'est
pas utile.

Les propriétés :
CharCase
Utilisez la propriété CharCase pour faire passer le contenu du contrôle de saisie en majuscules
ou en minuscules. Les valeurs possibles de la propriété CharCase sont :
Valeur Signification
ecLowerCase Le texte est converti en minuscules.
ecNormal Le texte apparaît tel quel, il n'y a pas de conversion.
ecUpperCase Le texte est converti en majuscules.
Quand CharCase prend la valeur ecLowerCase ou ecUpperCase, les caractères sont convertis
au fur et à mesure que l'utilisateur les entre dans le contrôle de saisie. L'affectation de la valeur
ecLowerCase ou ecUpperCase à la propriété CharCase change réellement le texte, pas
simplement son aspect. Toute information sur la distinction minuscules/majuscules est perdue et
n'est pas rétablie en affectant la valeur ecNormal à la propriété CharCase.
MaxLength
Utilisez la propriété MaxLength pour limiter le nombre de caractères pouvant être entrés dans
le contrôle de saisie. Une valeur nulle indique qu'il n'y a pas de limite, définie par l'application, à
la longueur. Utilisez MaxLength pour limiter la longueur du texte d'un contrôle de saisie si le
texte doit être copié dans un tampon de taille fixe.
Remarque : L'affectation d'une valeur à MaxLength ne tronque pas le texte existant, elle
empêche simplement l'utilisateur d'ajouter du texte après avoir atteint la limite de MaxLength
caractères.
Remarque : Même si MaxLength a la valeur 0, il peut y avoir des limitations du nombre de
caractères pouvant être saisis dans le contrôle de saisie imposées par le système d'exploitation.
PasswordChar
Utilisez la propriété PasswordChar pour créer un contrôle de saisie affichant un caractère
spécial à la place de chaque caractère entré. Si PasswordChar a la valeur caractère nulle
43
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
(caractère ANSI zéro), le contrôle de saisie affiche le texte normalement. Si PasswordChar
contient tout autre caractère, le contrôle de saisie affiche le caractère spécifié par
PasswordChar à la place de chaque caractère entré. PasswordChar n'affecte que l'aspect du
contrôle de saisie. La valeur de la propriété Text contient bien les caractères effectivement
saisis.
Text
Utilisez la propriété Text pour lire la valeur de Text pour le contrôle ou pour affecter une
nouvelle chaîne à la valeur de Text. Par défaut, Text contient le nom du contrôle. Pour les
contrôles boîte de saisie et mémo, la valeur de Text apparaît dans le contrôle. Pour les boîtes à
options, la valeur de Text apparaît dans la partie contrôle de saisie de la boîte à options.
Remarque : Les contrôles affichant du texte utilisent soit la propriété Caption soit la propriété
Text pour spécifier la valeur texte. La propriété utilisée dépend du type de contrôle. En général,
Caption est utilisée pour le texte apparaissant comme un titre ou un libellé de fenêtre, alors que
Text est utilisée pour le texte apparaissant sous forme de contenu d'un contrôle.

Un composant TComboBox est une boîte de saisie associée à une liste déroulante. Les
utilisateurs peuvent sélectionner un élément de la liste ou entrer directement une valeur dans la
boîte de saisie.

Propriétés :
Items type TString:
Utilisez la propriété Items pour accéder à la liste d'éléments apparaissant dans la liste de la boîte
à options.
Text type String:
Lélément selectionné dans le ComboBox sera placé dans cette propriété
Add (voir ListBox)

Memo
Utilisez TMemo pour placer dans une fiche un contrôle de saisie multiligne Windows standard.
Les boîtes de saisie multilignes permettent à l'utilisateur de saisir plusieurs lignes de texte. Ces
composants sont appropriés pour la représentation de données volumineuses.

RichEdit
Utilisez un objet TRichEdit pour placer un contrôle standard Windows éditeur de texte formaté
dans une fiche. Les contrôles éditeur de texte formaté permettent à l'utilisateur de saisir du
texte avec divers attributs de fonte et de mise en forme des paragraphes. TRichEdit propose les
propriétés et méthodes pour saisir et manipuler du texte formaté. Cependant TRichEdit ne
propose aucun composant d'interface utilisateur pour permettre à l'utilisateur d'accéder à ses
options de formatage du texte.

Propriétés :
Lines type TString:
44
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
Utilisez la propriété Lines pour manipuler le texte d'un contrôle mémo ligne par ligne. Lines est
un objet TStrings, il est donc possible d'utiliser les méthodes de TStrings avec Lines afin
d'effectuer des manipulations comme compter les lignes de texte, ajouter de nouvelles lignes,
supprimer des lignes ou remplacer les lignes par un autre texte. Pour manipuler la totalité du
texte d'un seul bloc, utilisez la propriété Text. Pour manipuler les lignes une par une, la
propriété Lines est plus commode.

Exemple :
procedure TForm1.Button1Click(Sender: TObject);
begin
Showmessage('La 6ième ligne de votre texte est: '+Memo1.Lines[5]);
end;

Vous pouvez utiliser aussi Add pour ajouter des lignes:


Memo1.Lines.add(‘une phrase’) ;
Uiliser aussi count pour connaître le nombre de lignes :

Exemple:
Cet exemple affiche le nombre de lignes dans un Memo en cliquant sur un bouton.
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(inttostr(memo1.lines.Count))
end;

45
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Chapitre
CHAPITRE 7

7
COMMENT REPONDRE AUX ACTIONS DE L’UTILISATEUR A L’EXECUTION

Les actions lancées lorsqu’un utilisateur appuie sur une touche ou une combinaison de
touches du clavier sont :

1- OnKeyPress

Se produit quand un utilisateur appuie sur une touche alphanumérique. Les touches n'ayant pas
d'équivalent ASCII (Maj ou F1, par exemple) ne génèrent pas d'événement OnKeyPress
Exemple :
Ce gestionnaire d'événement affiche un message oui si la touche k est appuyée :

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);


begin
if Key = ‘k’ then ShowMessage(‘oui’)
end;

2- OnKeyDown

Se produit quand l'utilisateur appuie sur une touche alors que le contrôle détient la focalisation.

3- OnKeyUp

Se produit quand l'utilisateur relâche une touche enfoncée


Exemple :
Le code suivant arrête un travail d'impression lorsque l'utilisateur appuie sur Echap. Remarquez
que vous pourriez initialiser KeyPreview à True pour vous assurer que le gestionnaire
d'événement OnKeyDown de Form1 est appelé.

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift:


TShiftState);
begin
if (Key = VK_ESCAPE) then ShowMessage(‘oui’)
end;

TShiftState indique l'état des touches Alt, Ctrl, Maj et des boutons de la souris. Le type
TShiftState est utilisé par les gestionnaires du clavier et de la souris pour déterminer l'état des
touches Alt, Ctrl et Maj ainsi que l'état des boutons de la souris au moment où l'événement se
produit. Consulter le chapitre suivant pour voir l’ensemble des indicateurs et leur signification.
Key contient :
46
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

VK_LBUTTON bouton Gauche Souris VK_CANCEL Arrêt Exec. Programme


VK_RBUTTON bouton Droite Souris VK_BACK Retour Arrière
VK_MBUTTON bouton Central Souris VK_TAB Tabulation
VK_RETURN Entrée VK_SHIFT Touche de contrôle MAJ
VK_CONTROL Touche de contrôle CTRL VK_MENU Touche de contrôle ALT
VK_PAUSE Pause VK_ESCAPE Echappement
VK_SPACE Barre d'espacement VK_PRIOR Page Haut
VK_NEXT Page Bas VK_END Fin
VK_HOME Début VK_LEFT Flèche gauche
VK_UP Flèche haut VK_RIGHT Flèche droite
VK_DOWN Flèche bas VK_SNAPSHOT Impression d'écran
VK_INSERT Insérer VK_DELETE Supprimer
VK_HELP Aide VK_NUMPAD0..VK_NUMPAD9 Touche
pavé numérique 0 à 9
VK_MULTIPLY Touche pavé numérique VK_ADD Touche pavé numérique +
VK_SEPARATOR Touche [Entrée] VK_SUBTRACT Touche pavé numérique -
VK_DECIMAL. (Point décimal) VK_DIVIDE Touche pavé numérique /
VK_F1…VK_F12 Touches de fonctionF1 à F12 VK_NUMLOCK Verrouillage pavé
numérique
VK_SCROLL Verrouillage scrolling VK_CAPITAL Verrouillage majuscules

Remarque :
Le Key dans OnKeyPress et celui dans OnKeyDown/OnKeyUp ne sont pas de même type. Le
premier est de type char (caractère) et l’autre de type Word. Les actions lancées lorsqu’un
utilisateur clique sur un bouton de la souris sont :

4- OnMouseMove

Se produit quand l'utilisateur déplace le pointeur de la souris au-dessus d'un contrôle.


type TMouseMoveEvent = procedure(Sender: TObject; Shift: TShiftState; X, Y: Integer) of
object;
Utilisez le gestionnaire d'événement OnMouseMove pour répondre lorsque le pointeur de la
souris se déplace après que le contrôle ait capturé la souris. Utilisez le paramètre Shift du
gestionnaire d'événement OnMouseMove pour déterminer l'état des touches mortes et des
boutons de la souris. Les touches mortes sont les touches Maj, Ctrl et Alt ou des combinaisons
de touches mortes et des boutons de la souris. X et Y indiquent les coordonnées, exprimées en
pixels, du pointeur de la souris dans la zone client de Sender.
Exemple :
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
Label1.Caption : = IntToStr(x) ;
Label2.Caption : = IntToStr(y) ;
end ;

47
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

5- OnMouseUp

Se produit lorsque l'utilisateur relâche un bouton de la souris qui a été enfoncé alors que le
pointeur de la souris se trouvait au-dessus d'un composant.

6- OnMouseDown

Se produit quand un utilisateur appuie sur un bouton de la souris alors que le pointeur de la
souris est au-dessus d'un contrôle.
type TMouseEvent = procedure (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer) of object;
TMouseButton définit les constantes de bouton de la souris utilisées par les gestionnaires
d'événements.
type TMouseButton = ( mbLeft , mbRight , mbMiddle );
Le type TMouseButton définit les constantes de bouton de la souris utilisées par les
gestionnaires d'événements de la souris pour connaître le bouton à l'origine de l'événement. Le
type TShiftState est utilisé par les gestionnaires du clavier et de la souris pour déterminer l'état
des touches Alt, Ctrl et Maj ainsi que l'état des boutons de la souris au moment où l'événement
se produit. Voici un ensemble d'indicateurs et leur signification :
Le type TshiftState
Valeur Signification
ssShift La touche Maj est enfoncée.
ssAlt La touche Alt est enfoncée.
ssCtrl La touche Ctrl est enfoncée.
SsLeft Le bouton gauche de la souris est enfoncé.
ssRight Le bouton droit de la souris est enfoncé.
ssMiddle Le bouton central de la souris est enfoncé.
ssDouble On a double-cliqué sur la souris.

Exemple :
procedure TForm1.FormMouseDown(Sender: TObject; Button:
TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if button=mbright then showmessage('oui')
end;

48
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Chapitre
CHAPITRE 8

8 OBJETS POUR MANIPULER UNE BASE DE DONNEES

ACCES BD

TDataSource sert d'interface entre un composant ensemble de données et les contrôles


orientés données d'une fiche. La classe TDataSource sert de canal entre un ensemble de
données et les contrôles orientés données d'une fiche permettant ainsi l'affichage, les
déplacements, et la modification des données de l'ensemble de données sous-jacent. Pour que
les données d'un ensemble de données puissent être affichées et manipulées dans des contrôles
orientés données, l'ensemble de données doit être associé à un composant source de données.
De même, chaque contrôle orienté données doit être associé à un composant source de
données pour pouvoir recevoir et manipuler les données.
Les composants source de données servent également à relier les ensembles de données dans
une relation maître-détail.
Propriété :
DataSet : Permet de relier le DataSource à une Table

TTable encapsule une table de base de données. La classe TTable permet d'accéder aux
données d'une table de base de données en utilisant le moteur de bases de données Borland
(BDE). TTable donne un accès direct à chaque enregistrement et à chaque champ de la table
d'une base de données sous-jacente, que ce soit une base de données Paradox, dBASE, Access,
FoxPro, une base de données ODBC ou une base de données SQL dans un serveur distant
comme InterBase, Oracle, Sybase, MS-SQL Server, Informix ou DB2. Un composant table peut
également travailler sur un sous-ensemble d'enregistrements d'une table en utilisant des
intervalles et des filtres. Au moment de la conception, vous pouvez créer, supprimer, actualiser
ou renommer la table base de données connectée à TTable en cliquant avec le bouton droit sur
TTable et en utilisant le menu surgissant.
Propriétés :
Active : ouvre automatiquement la table
DatabaseName : La propriété DatabaseName spécifie le nom de la base de données à utiliser
avec un composant base de données. Si DatabaseName contient un nom d'alias existant du
moteur de bases de données Borland (BDE), il n'est pas nécessaire de définir la valeur des
49
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
propriétés AliasName et DriverName. Si DatabaseName ne correspond pas à un alias BDE
existant, l'application doit spécifier un nom d'alias existant dans la propriété AliasName en plus
de DatabaseName, ou elle doit définir la valeur des propriétés DriverName et Params.
DatabaseName peut contenir un chemin d'accès complet pour se connecter à une base de
données Paradox ou dBASE.
ReadOnly : possibilité ou non de modification de la table
TableName : La propriété TableName permet de spécifier le nom de la table de base de
données encapsulée par ce composant. Pour affecter à TableName une valeur significative, il faut
avoir déjà défini la propriété DatabaseName. A la conception, si DatabaseName est définie, il est
possible de sélectionner un nom de table valide dans la liste déroulante de la propriété
TableName dans l'inspecteur d'objets.
Remarque : Pour définir TableName, il faut que la propriété Active ait la valeur False.
Eof : indique c’est la fin de la table a été atteinte

TDatabase permet, dans une application de base de données, de contrôler précisément la


connexion avec une base de données basée sur le BDE. Utilisez un objet TDatabase quand une
application de base de données basée sur le BDE nécessite l'une des options suivantes sur la
connexion avec une base de données :
Connexion persistante avec la base de données.
Accès personnalisé à un serveur de bases de données.
Contrôle des transactions.
Alias BDE spécifique à l'application
La classe TDatabase est particulièrement utile car elle permet de contrôler le traitement des
transactions par le BDE lors d'une connexion avec un serveur SQL distant.
Remarque : La déclaration explicite d'un composant TDatabase pour chaque connexion de base
de données n'est pas nécessaire pour une application n'ayant pas besoin de contrôler
explicitement une connexion. Si un composant TDatabase n'est pas explicitement déclaré et
instancié dans une connexion de base de données, un composant base de données temporaire
est créé à l'exécution, utilisant des valeurs par défaut pour les propriétés.

AliasName Choisissez un Alias


DatabaseName Donnez un nom
LoginPrompt Initialisez à False

TQuery encapsule un ensemble de données et un ensemble de résultats basés sur une


instruction SQL. La classe TQuery permet d'accéder à une ou plusieurs tables d'une base de
données en utilisant des instructions SQL. Les composants requête peuvent être utilisés avec
des serveurs de bases de données distants comme Sybase, SQL Server, Oracle, Informix, DB2,
50
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
et InterBase, et avec des tables locales Paradox, InterBase, dBASE, Access et FoxPro, ou avec
des bases de données ODBC. Les composants requête sont pratiques, car ils peuvent : Accéder
à plusieurs tables à la fois (ce qu'on appelle en SQL une «jointure»).
Accéder automatiquement à un sous-ensemble des lignes et colonnes de leurs tables sous-
jacentes au lieu de renvoyer systématiquement toutes les lignes et toutes les colonnes.
Remarque :
TQuery joue un rôle encore plus important dans le développement d'applications de base de
données évolutives. S'il y a le moindre risque qu'une application conçue pour fonctionner avec
des bases de données locales soit ultérieurement déployée sur un serveur de bases de données,
utilisez des composants TQuery dès le départ pour faciliter la migration plus tard.

ControleBD

TDBGrid affiche et manipule les enregistrements d'un ensemble de données dans une grille
tabulaire. Placez un objet TDBGrid dans une fiche afin d'afficher et d'éditer les enregistrements
d'une table de base de données ou d'une requête. Une application peut utiliser une grille de
données pour insérer, supprimer ou modifier les données de la base de données ou simplement
pour les afficher. A l'exécution, les utilisateurs peuvent utiliser le navigateur de base de données
(TDBNavigator) pour se déplacer dans les données de la grille, et pour insérer, supprimer ou
modifier les données. Les modifications effectuées dans la grille de données ne sont pas
transmises aux données sous-jacentes tant que l'utilisateur ne s'est pas déplacé sur un
enregistrement différent ou n'a pas quitté l'application. TDBGrid implémente les
comportements génériques introduits dans TCustomDBGrid. TDBGrid publie de nombreuses
propriétés héritées de TCustomDBGrid, mais n'introduit aucun comportement nouveau.

Proprété :
DataSource Donnez le DataSource correspondant

Le navigateur de base de données (TDBNavigator) est utilisé pour se déplacer dans un ensemble
de données et effectuer des actions sur les données (par exemple, insérer un nouvel
enregistrement ou expédier un enregistrement). Utilisez un navigateur de base de données dans
des fiches contenant des contrôles orientés données comme TDBGrid ou TDBEdit.
TDBNavigator permet à l'utilisateur de contrôler l'ensemble de données en modification ou en
consultation. Quand l'utilisateur choisit un des boutons du navigateur, l'action correspondante

51
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
est effectuée sur l'ensemble de données auquel est lié le navigateur. Si par exemple, l'utilisateur
clique sur le bouton Insérer, un nouvel enregistrement est inséré dans l'ensemble de données.
TDBNavigator peut afficher les boutons suivants :

Bouton Rôle
Premier Le premier enregistrement de l'ensemble de données devient l'enregistrement en
cours, les boutons Premier et Précédent sont désactivés et les boutons Suivant et Dernier sont
activés.
Précédent L'enregistrement précédent devient l'enregistrement en cours, les boutons Dernier
et Suivant sont activés. Suivant L'enregistrement suivant devient l'enregistrement en cours et les
boutons Premier et Précédent sont activés.
Dernier Le dernier enregistrement de l'ensemble de données devient l'enregistrement en cours,
les boutons Dernier et Suivant sont désactivés et les boutons Premier et Précédent sont activés.
Insérer Insère un nouvel enregistrement qui précède l'enregistrement en cours et bascule
l'ensemble de données en mode insertion et modification.
Supprimer Supprime l'enregistrement en cours et l'enregistrement suivant devient
l'enregistrement en cours.
Modifier Bascule l'ensemble de données en mode modification pour que l'enregistrement en
cours puisse être modifié.
Emettre Ecrit les modifications de l'enregistrement en cours dans la base de données.
Annuler Annule les modifications dans l'enregistrement en cours et restitue l'état de l'affichage
de l'enregistrement tel qu'il était avant la modification, désactive les modes insertion et
modification s'ils sont actifs.
Rafraîchir Actualise les données du tampon de l'ensemble de données associé. Pour les
composants TQuery, ce bouton est désactivé sauf si la propriété RequestLive a la valeur True.

Proprété :
DataSource Donnez le DataSource correspondant

TDBText représente un contrôle orienté données qui affiche la valeur d'un champ dans une
fiche. Utilisez TDBText pour afficher dans une fiche le contenu d'un champ de l'enregistrement
en cours d'un ensemble de données. Les valeurs de champ affichées par des contrôles texte de
base de données ne peuvent être modifiées par l'utilisateur dans le contrôle texte. Pour
permettre à l'utilisateur de modifier le contenu du champ, utilisez TDBEdit ou TDBMemo. Si
votre application n'a pas besoin de l'orientation données de la classe TDBText, utilisez plutôt le
composant texte (TLabel) ou le composant texte statique (TStaticText) plus économes en
ressources système.

Proprété :
DataSource Donnez le DataSource correspondant

52
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

TDBEdit représente un contrôle de saisie monoligne pouvant afficher et modifier les valeurs
d'un champ d'un ensemble de données. Utilisez TDBEdit pour permettre aux utilisateurs de
modifier un champ de base de données. TDBEdit utilise la propriété Text pour représenter le
contenu du champ. TDBEdit ne permet la saisie que d'une seule ligne de texte. Si un champ peut
contenir des données volumineuses nécessitant plusieurs lignes, utilisez un objet TDBMemo. Si
votre application n'a pas besoin de l'orientation données de la classe TDBEdit, utilisez plutôt un
contrôle de saisie (TEdit) ou un contrôle de saisie masqué (TMaskEdit) plus économe en
ressources système. Pour fournir un masque restreignant la saisie et contrôlant le format
d'affichage des données, utilisez les propriétés relatives au masque de TField et ses descendants.
Ces propriétés comprennent : TField.::EditMask, TDateTimeField.::DisplayFormat et
TNumericField :DisplayFormat. La propriété devant être utilisée est indiquée dans le type du
champ ainsi que le descendant TField correspondant à ce type.

Proprété :
DataSource Donnez le DataSource correspondant DataField :

TDBMemo représente un contrôle de saisie multiligne pouvant afficher et modifier un champ


d'un ensemble de données. Utilisez TDBMemo pour permettre à l'utilisateur de modifier ou de
consulter un champ contenant du texte, même volumineux. TDBMemo utilise la propriété Text
pour représenter le contenu du champ.
TDBMemo gère plusieurs lignes de texte. Cet objet est donc adapté aux champs
alphanumériques longs et aux champs texte BLOB (objet binaire volumineux). Pour les champs
alphanumériques plus courts, mieux vaut utiliser un composant TDBEdit. Si votre application n'a
pas besoin de l'orientation données de la classe TDBMemo, utilisez plutôt le contrôle mémo
(TMemo) plus économe en ressources système.

Proprété :
DataSource Donnez le DataSource correspondant
DataField Donner le champ correspondant

TDBListBox est une boîte liste orientée données qui permet à l'utilisateur de changer la valeur
du champ de l'enregistrement en cours d'un ensemble de données en sélectionnant un élément
dans une liste. Utilisez TDBListBox pour ajouter à une fiche une boîte liste permettant aux
utilisateurs de changer la valeur d'un champ à partir d'un ensemble de choix prédéfinis. Si
l'application n'a pas besoin des fonctionnalités orientées données de TDBListBox, utilisez plutôt
une boîte liste (TListBox) pour économiser des ressources système. Les créateurs de

53
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
composants souhaitant créer des objets boîte liste personnalisés doivent utiliser
TCustomListBox comme classe de base.

Proprété :
Items Pour ajouter les éléments de la liste.

TDBComboBox représente un contrôle boîte à options orienté données. Utilisez TDBComboBox pour
permettre à l'utilisateur de changer la valeur d'un champ de l'enregistrement en cours dans un ensemble
de données, en sélectionnant un élément dans une liste ou en tapant des informations dans la boîte de
saisie du contrôle. L'élément sélectionné ou le texte tapé devient la nouvelle valeur du champ si la
propriété ReadOnly de la boîte à options de base de données a la valeur False. La boîte à options peut
être personnalisée pour autoriser ou interdire la saisie dans la boîte de saisie du contrôle, pour afficher
la liste sous forme déroulante ou de manière permanente, pour trier les éléments de la liste, etc.

Proprété :
Items Pour ajouter les éléments de la liste.

TDBLookupListBox propose une liste d'éléments de référence pour renseigner les champs qui
attendent des valeurs provenant d'autres ensembles de données. Utilisez TDBLookupListBox
pour proposer aux utilisateurs une liste d'éléments de référence permettant de définir la valeur
d'un champ en utilisant les valeurs d'un champ d'un autre ensemble de données. Les boîtes listes
de référence affichent habituellement des valeurs décrivant la valeur réelle du champ.
Si TDBLookupListBox est lié à un composant champ de référence, il bénéficie automatiquement
de la relation entre la valeur du champ et les valeurs de référence dans l'ensemble de données
de référence à partir du composant champ. La relation entre les valeurs de champ et les valeurs
correspondantes dans l'ensemble de données de référence peut aussi être définie explicitement
en utilisant les propriétés de la boîte liste de référence quand la boîte liste n'est pas liée à un
composant champ de référence.

Proprété :
DataSource Donnez le DataSource correspondant
DataField Donner le champ correspondant
ListSource Identifie une source de données pour les données affichées
dans le contrôle de référence.
ListField dentifie les champs dont les valeurs sont affichées dans le
contrôle de référence.
KeyField Identifie le champ de l'ensemble de données ListSource qui doit
correspondre à la valeur du champ DataField.

54
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

TDBLookupComboBox représente une boîte à options qui identifie un ensemble de valeurs de


champ d'un ensemble de données à l'aide d'un ensemble de valeurs correspondantes d'un autre
ensemble de données. Utilisez TDBLookupComboBox pour fournir à l'utilisateur une liste
déroulante d'éléments de références pour l'initialisation de champs nécessitant des données d'un
autre ensemble de données. Si TDBLookupComboBox est lié à un composant champ de
références, il utilise automatiquement la relation entre la valeur du champ et les valeurs de
références dans l'ensemble de données de références du composant champ. La relation entre
les valeurs du champ et les valeurs correspondantes dans l'ensemble de données de références
peut aussi être définie de manière explicite en utilisant les propriétés de la boîte à options de
références si la boîte à options n'est pas liée à un composant champ de références.

Propriété :
DataSource Donnez le DataSource correspondant
DataField Donner le champ correspondant
ListSource Identifie une source de données pour les données affichées dans le contrôle de
référence.
ListField identifie les champs dont les valeurs sont affichées dans le contrôle de référence.
KeyField Identifie le champ de l'ensemble de données ListSource qui doit correspondre à la
valeur du champ DataField.

OBJET ETAT : QREPORT, RAVE


QReport

Utilisez TQuickRep pour créer un état connecté à un ensemble de données. TQuickRep est le
composant d'état le plus répandu. Pour plus d'informations sur la création des états, reportez-
vous au guide de l'utilisateur.

Propriétés
Dataset voir la définition de DataSet
RecordCount RecordCount essaie de renvoyer le nombre d'enregistrements d'un ensemble de
données maître. QuickReport utilise cette information pour maintenir la barre de progression
pendant la génération d'état. Certaines bases de données ne peuvent renvoyer le compteur
d'enregistrements. Pour ces bases de données, la barre de progression ne sera pas affichée.
RecordNumber RecordNumber renvoie le numéro de l'enregistrement en cours de traitement
par l'état. Le premier enregistrement / ligne est 0. Pour afficher la page QuickRep en mode
exécution, utilisez la méthode Preview :
QuickRep1.Preview ;

55
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

L'emploi du composant TQRLabel ressemble à un Tlabel ordinaire, valable seulement pour les
états. Utilisez ce composant pour imprimer du texte statique sur un état en entrant du texte
dans la propriété Caption. Vous pouvez aussi modifier le texte à imprimer dans l'événement
OnPrint, ce qui rend facile l'impression des calculs ou d'autres informations.

Propriétés
DataSet Choisir une table
DataField Choisir un champ de la table

Utilisez le composant TQRDBText pour imprimer tout champ texte d'une table, à l'exception
des champs mémo au format RichText. TQRDBText peut imprimer des champs
alphanumériques, des champs à virgule flottante, des champs date et heure et des champs
mémo. TQRDBText peut s'étendre verticalement pour s'adapter au texte, si celui-ci excède la
taille originale. La propriété AutoStretch doit être définie à True pour permettre l'étirement.
Un composant peut s'étendre sur plusieurs pages. Pour formater les sorties, utilisez la propriété
Mask.

Propriétés
DataSet Choisir une table
DataField Choisir un champ de la table
Mask Utilisez la propriété Mask pour formater le résultat du composant
TQRDBText. Si aucun masque n'est spécifié, QuickReport utilise le formatage par défaut pour le
champ. Pour plus d'informations sur le formatage d'un champ numérique, reportez-vous à la
rubrique FormatFloat de l'aide VCL.

Utilisez TQRExpr pour calculer une expression durant la génération d'un état. Pour plus d'informations
sur l'utilisation des expressions, reportez-vous au guide de l'utilisateur. Le double-clic sur cette
expression dans l'inspecteur d'objets affiche un constructeur d'expressions. Dans la propriété
Expression, entrez l'expression à évaluer. Le changement d'expression n'est pas autorisé durant la
génération d'un état.

Propriétés
Expression Dans la propriété Expression, entrez l'expression à évaluer. Le changement d'expression n'est
pas autorisé durant la génération d'un état.

56
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
Value Utilisez la propriété Value pour accéder à la valeur de l'expression. Elle renvoie un enregistrement
variant avec le résultat d'un calcul.

Méthodes
Reset Appelez Reset dans tout gestionnaire d'événement durant la génération d'un état pour la valeur
d'une expression à réinitialiser à 0. Cela est utile lorsque vous souhaitez un contrôle manuel sur la
réinitialisation des calculs.d'expressions récapitulatives

Utilisez TQRSysData pour imprimer des informations système, comme le titre de l'état et le
numéro de page en cours. Dans la propriété Data, sélectionnez les données à imprimer. Dans la
propriété Text, mettez le texte qui précède.

Propriété :
Data Utilisez la propriété Data pour sélectionner l'élément de données à imprimer par le
composant TQRSysData.

57
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Chapitre
CHAPITRE 9

9 LES BASES DE DONNEES

On procède en 2 temps :
C  réer la structure de la base et des tables
C  réer l’interface sous delphi
Utiliser BDE (Borland Database Engine) : le moteur est en libre distribution si delphi a été
acquis régulièrement, il doit être déployé avec l’application BD
Delphi est prévu pour fonctionner avec
D  es bases Paradox
D es bases Dbases
D
 es bases ODBC

Bases Paradox et DBase

Le module de bases de données Delphi permet de créer des BD au format Paradox ou Dbase

Bases ODBC

Le gestionnaire est accessible à partir de : C:\WINDOWS\SYSTEM\ODBCAD32.EXE Ou


Démarrer/paramètres/panneau de configuration
Il permet d’associer un nom logique/physique : la démarche à suivre est de :
Créer une base vide avec Access : tstbd.mdb
L ui associer un nom logique ess-bd

58
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
Dans la suite, nous allons créer des tables, y ajouter des enregistrements, les relire ainsi que les
champs et détruire des enregistrements. Les codes donnés ci-dessous sont des applications
consoles et ne correspondent pas à l’utilisation classiques sous delphi pour laquelle ces
opérations son faites de façon quasi automatiques et sont transparentes pour le développeur.

Création tables

program cre_table;
{$APPTYPE CONSOLE}
uses sysutils, dbtables, db, Forms;
var table1:ttable;
begin
table1:=ttable.create(application);
with Table1 do begin
59
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
Active := False; // sinon imp de créer les champs
DatabaseName := 'ess_bd';
TableName := 'Matable';
if Table1.Exists then begin
writeln('La table existe déjà : elle sera
effacée');
readln;
end; // ici, il faudrait affiner
with FieldDefs do begin // def des champs
Clear;
with AddFieldDef do begin
Name := 'numero';
DataType := ftInteger;
Required := True;
end;
with AddFieldDef do begin
Name := 'nom';
DataType := ftString;
Size := 30;
end;
with AddFieldDef do begin
Name := 'prenom';
DataType := ftString;
Size := 30;
end;
end;
{ Puis description des index }
with IndexDefs do begin
Clear;
{ il s'agit d'une clé primaire // Imp pour les tables texte}
with AddIndexDef do begin
Name := 'cle';
Fields := 'numero';
Options := [ixPrimary];
end;
with AddIndexDef do begin
Name := 'Fld2Indx';
Fields := 'nom';
Options := [ixCaseInsensitive];
end;
end;
{ Appel de la méthode CreateTable pour créer la table }
CreateTable;
end;
end.

Lister les champs

program litchamp;
{$APPTYPE CONSOLE}
Uses sysutils, dbtables, db, Forms;
var Table1:ttable;
i: Integer;
begin
Table1:=ttable.create(application);
Table1.DatabaseName := 'ess_bd';
Table1.TableName := 'Matable';
Table1.Active := true; // maintenant oui !
60
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
for i:= 0 to Table1.FieldDefs.Count - 1 do
writeln(Table1.FieldDefs[i].Name);
Table1.Active := False;
readln;
end.

Ajout d’enregistrements

program aj_enr; {$APPTYPE CONSOLE}


Uses sysutils, dbtables, db, Forms;
var Table1:ttable;
i: Integer;
begin
Table1:=ttable.create(application);
Table1.DatabaseName := 'ess_bd';
Table1.TableName := 'Matable';
Table1.Active := True;
Table1.Append; // Ajout en fin
Table1.FieldValues['nom'] := 'toto';
Table1.FieldValues['prenom'] := 'titi';
Table1.Post; // validation ajout
Table1.Active := False;
end.

Lister les enregistrements

program lire_enr; {$APPTYPE CONSOLE}


Uses sysutils, dbtables, db, Forms;
var table1:ttable;
i: Integer;
begin
table1:=ttable.create(application);
Table1.DatabaseName := 'ess_bd';
Table1.TableName := 'Matable';
Table1.Active := true;
Table1.First;
for i := 1 to Table1.RecordCount do begin
writeln(Table1.FieldValues['numero'],' ',
Table1.FieldValues['prenom'],' ',
Table1.FieldValues['nom']);
Table1.Next;
end;
Table1.Active := False;
readln;
end.

Supprimer 1 enregistrement

program det_enr; {$APPTYPE CONSOLE}


Uses sysutils, dbtables, db, Forms;
var table1:ttable;
i: Integer;
begin
table1:=ttable.create(application);
Table1.DatabaseName := 'ess_bd';
Table1.TableName := 'Matable';
61
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
Table1.Active := true;
Table1.First ; // on est sur le premier
Table1.MoveBy(2); // maintenant sur le 3e
Table1.delete; // si moins de 3--> sur le dernier
Table1.Active := False; // erreur si aucun
readln;
end.

Base de données et SQL :

1. insertion
program query_ins; {$APPTYPE CONSOLE}
uses sysutils, dbtables, db, Forms;
var requete:tquery;
begin
requete:=tquery.create(application);
requete .Active := false;
requete .DatabaseName := 'ess_bd';
requete.Close;
requete.SQL.Clear;
requete.SQL.Add('insert into matable
(numero,nom,prenom)
values (10,''tata'',''titi'')');
requete.execSQL;
end.

2. suppression
program query_supr; {$APPTYPE CONSOLE}
uses sysutils, dbtables, db, Forms;
var requete:tquery;
begin
requete:=tquery.create(application);
requete .Active := false;
requete .DatabaseName := 'ess_bd';
requete.Close;
requete.SQL.Clear;
requete.SQL.Add('delete from matable
where nom=''tata''');
requete.execSQL;
end.

3. exploration
program query_lire; {$APPTYPE CONSOLE}
uses sysutils, dbtables, db, Forms;
var requete:tquery;
i:byte;
begin
requete:=tquery.create(application);
requete.Active := false;
requete.DatabaseName := 'ess_bd';
requete.Close;
requete.SQL.Clear;
requete.SQL.Add('select * from matable ');
requete.open;

62
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
Utilisation de l’unité Forms nécessaire à l’initialisation de l’application en vue de l’initialisation
des objets OLE
Nom d’un répertoire vide créé précédemment
Les 5 lignes ci-contre sont les valeurs des propriétés des différents objets.
Il est donc possible de n’écrire aucune ligne de code et de se passer de l’événement et de la
méthode associée à FormActivate

for i:=0 to requete.Fieldcount-1 do


write(requete.Fields[i].FieldName:10, ' ');
writeln;
while not requete.eof do begin
for i:=0 to requete.Fieldcount-1 do
write(requete.Fields[i].value:10, ' ');
writeln;
requete.Next;
end{while};
readln;
end.

Utilisation classique des TABLES

Placer sur une « form » : TdataSource, Ttable, TDBGrid :

type
TForm1 = class(TForm)
DataSource1: TDataSource;
Table1: TTable;
DBGrid1: TDBGrid;
procedure FormActivate(Sender: TObject);

procedure TForm1.FormActivate(Sender: TObject);
Begin
DBGrid1.DataSource := DataSource1;
DataSource1.DataSet := Table1;
Table1.databaseName := 'ess_bd';
Table1.TableName := 'matable'; // Query1
Table1.Active := true; // ou encore :Table1.open;
end;

63
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
Composants BD

1. Fiche

type
Type
TForm1 = class(TForm)
DataSource1: TDataSource;
Table1: TTable;
DBGrid1: TDBGrid;
TForm1 = class(TForm)
DataSource1: TDataSource;
Table1: TTable;
DBText1: TDBText;
DBEdit1: TDBEdit;
DBNavigator1: TDBNavigator;

procedure FormActivate (Sender: TObject);


end;
var
Form1: TForm1;
Implementation {$R *.DFM}
procedure TForm1.FormActivate(Sender: TObject);
begin
DataSource1.DataSet := Table1;
Table1.databaseName := 'ess_bd';
Table1.TableName := 'matable';
DBNavigator1.DataSource := DataSource1;
DBText1.DataSource := DataSource1;
DBText1.DataField:='numero';
DBEdit1.DataSource := DataSource1;
DBEdit1.DataField:='nom';
Table1.Active := true;
end;

Tables Maître/détail

64
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Soit une base de données relationnelle créée avec Access (par exemple), les liens ODBC ont
étés effectués :

BD Tables

DBGrid1.DataSource :=
DataSource1;
DataSource1.DataSet := Table1;
Table1.databaseName := 'bd_rel';
Table1.TableName := 'produits';
DBGrid2.DataSource := DataSource2;
DataSource2.DataSet := Table2;
Table2.databaseName := 'bd_rel';
Table2.TableName := 'fournisseurs';
// Table1.MasterSource:= DataSource2;
// Table1.MasterFields:='Ref_fournisseur' ;
Table2.Active := true;
Table1.Active := true;

Les 7 premières lignes et les 2 dernières permettent de créer 2 tables indépendantes!


MasterSource et MesterFilds permettent de lier 2 tables
Malheureusement les lignes de codes NE CONVIENNENT PAS
Il faut obligatoirement utiliser l’inspecteur d’objet pour remplir toutes les propriétés
précédentes.

Propriété de table1

65
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

La liaison précédente
num-fournisseur->ref-fournisseur de table1 donne pour chaque fournisseur la liste des produits
Il est possible de définir à la place une liaison ref-fournisseur-> num-fournisseur dans table2
pour obtenir le fournisseur pour chaque produit Bien entendu c’est l’un ou l’autre sous peine de
référence circulaire!

Composant BD

1. QUERY

procedure TForm1.FormActivate(Sender: TObject);


begin
DBGrid1.DataSource := DataSource1;
DataSource1.DataSet := Query1;
Query1.databaseName := 'ess_bd';
Query1.SQL.clear;
Query1.SQL.add('select nom from matable');
Query1.Active := true;
end;

2. Améliorations de la présentation des colonnes d’une grille (DBGrid)

Inspecteur d’objet : propriétés de DBGrid

3. Les filtres :

Effet comparable à SQL


Inspecteur d’objet : propriétés de Ttable
Filter peut contenir une chaîne du genre : nom=‘par*’ or num-ref >17
Si Filtred = true, le filtre est actif
foCaseInsensitive = true majuscules et minuscules indifférentes

66
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
Impressions de rapports

Les propriétés liant les Ttables et les Tquickrep sont les mêmes que pour les TDbGrid.

Bien que la propriété Visible n’apparaisse pas dans la liste, elle existe. On utilisera les méthodes
Preview et Print

67
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Chapitre
CHAPITRE 10

10 COMMENT EFFECTUER UNE RECHERCHE DANS UNE TABLE ?

Pour effectuer une recherche dans une table on utilise les méthodes FindKey, et
FindNearest

Exemples :
FindKey est utilisé pour effectuer une recherche dont le(s) champ(s) correspondant à l’index
sont strictement égaux à la (aux) valeur(s) passée(s) en paramètre.

Table1.IndexFieldNames :=’nom du champ dans la table’ ;


Table1.FindKey([‘chaîne de caractères’]) ;

Du fait que la méthode FindKey est une fonction booléenne, on peut donc remplacer
l’instruction Table1.FindKey([‘chaîne de caractères’]) par:
if Table1.FindKey([‘chaîne de caractères’]) then … //si l’enregistrement est trouvé
else … //si l’enregistrement n’est pas trouvé
FindNearest est utilisé pour effectuer une recherche dont le(s) champ(s) correspondant à
l’index sont proches de la (des) valeur(s) passée(s) en paramètre.
Table1.IndexFieldNames :=’nom du champ dans la table’ ;
Table1.FindNearest([‘chaîne de caractères’]) ;

Remarque :
L’instruction Table1.IndexFieldNames n’est pas obligatoire si le recherche se fait sur le champ
clé de la table, il est donc évident de la supprimer.

Locate

Appelez Locate pour rechercher un enregistrement particulier dans un ensemble de données et


positionner le curseur dessus.
KeyFields est une chaîne contenant une liste délimitée par des points-virgules des noms de
champs à utiliser pour la recherche.
KeyValues est un tableau de variants contenant les valeurs à rechercher dans les champs clé. Si
KeyFields ne contient qu'un seul nom de champ, KeyValues spécifie la valeur pour ce champ
dans l'enregistrement voulu. Pour spécifier plusieurs valeurs de recherche, transmettez un
tableau de variants en tant KeyValues, ou construisez un tableau de variants à la volée en
utilisant la routine VarArrayOf. Par exemple :

with TADOBOE do
Locate(Nom;Prenom;Phone', VarArrayOf(['ADOBOE, 'Francis', '2367731']), [loPartialKey]);

68
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
Recherche à travers les requêtes

Requete Simple

Requete paramétrée

// Procédure d’affectation des paramêtres


69
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

procedure TCritere1.FlatButton1Click(Sender: TObject);


var i:integer;
som1,som2,som3,som4,som5:real;
begin
with dmc,Q_CreanceP_Oui
do begin
Active:=false;
ParamByName('d1').Asdatetime:=self.DateS.DateTime;
ParamByName('d2').Asdatetime:=self.DateS2.DateTime;
ParamByName('p0').AsString:=pvente.Text;
Active:=true;
end;
if dmc.Q_CreanceP_Oui.IsEmpty
then
showmessage('Aucune créance encaissé au point de vente '+pvente.Text)
else begin
som1:=0;
som2:=0;
som3:=0;
som4:=0;
som5:=0;
dmc.Q_CreanceP_Oui.Active:=true;
dmc.Q_CreanceP_Oui.First;
for i:=1 to dmc.Q_CreanceP_Oui.RecordCount
do begin
som1:=som1+dmc.Q_CreanceP_Oui.Fields[4].Value;
som2:=som2+dmc.Q_CreanceP_Oui.Fields[7].Value;
som3:=som3+dmc.Q_CreanceP_Oui.Fields[8].Value;
som4:=som4+dmc.Q_CreanceP_Oui.Fields[5].Value;
som5:=som5+dmc.Q_CreanceP_Oui.Fields[6].Value;

//som5:=som5+strtofloat(dmc.Q_Creance_Oui.Fields[6].Value); ### ### ### ###


dmc.Q_CreanceP_Oui.Next;
end;

EtatCreancePOui.Prepare;
EtatCreancePOui.nb1.Caption:=floattostr(som1) ;
EtatCreancePOui.nb2.Caption:=floattostr(som2) ;
EtatCreancePOui.nb3.Caption:=floattostr(som3) ;
EtatCreancePOui.nb4.Caption:=floattostr(som4) ;
EtatCreancePOui.nb5.Caption:=floattostr(som5) ;
EtatCreancePOui.Pvente.Caption:=dmc.Qinterm.Fields[1].Value;

EtatCreancePOui.PreviewModal;

end;
end;

70
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

//RECHERCHE PARAMETREE INCREMENTEE

procedure TF_Saisie_Enc.critereChange(Sender: TObject);


begin
if critere0.ItemIndex=1
then begin
dmc.Q_Creance.Active:=false;
dmc.Q_Creance.ParamByName('p1').AsString:=critere.Text+'%';
dmc.Q_Creance.ParamByName('p2').AsString:='%';
dmc.Q_Creance.Active:=true;
end
else
if critere0.ItemIndex=0
then begin
dmc.Q_Creance.Active:=false;
dmc.Q_Creance.ParamByName('p1').AsString:= '%';
dmc.Q_Creance.ParamByName('p2').AsString:=critere.Text+'%';
dmc.Q_Creance.Active:=true;
end;

71
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Chapitre
CHAPITRE 11

11 PROGRAMMATION AVEC DELPHI

Les sections suivantes fournissent une analyse du développement de logiciels avec Delphi
création d’un projet, travail sur les fiches, écriture de code, compilation, débogage, déploiement
et internationalisation des programmes. Elles présentent également les types de projets que
vous pouvez développer.

1- Création d’un projet

Un projet est une collection de fichiers qui sont soit créés au moment de la conception soit
générés lorsque vous compilez le code source du projet. Lorsque vous démarrez Delphi pour la
première fois, un nouveau projet est ouvert. Cela génère automatiquement, entre autres
fichiers, un fichier projet (Project1.dpr), un fichier unité (Unit1.pas) et un fichier ressource
(Unit1.dfm, Unit1.xfm pour les applications CLX). Si un projet est déjà ouvert et que vous
voulez en ouvrir un nouveau, choisissez Fichier|Nouveau|Application, ou choisissez
Fichier|Nouveau|Autre et double-cliquez sur l’icône Application. Fichier|Nouveau|Autre ouvre
un référentiel d’objets qui fournit les fiches, les cadres et les modules, ainsi que les modèles pré-
fabriqués comme les boîtes de dialogue, que vous pouvez ajouter à votre projet.
Lorsque vous démarrez un projet, vous devez savoir ce que vous voulez développer, par
exemple une application ou une DLL. Pour des informations sur les types de projets pouvant
être développés avec Delphi,

2- Ajout de modules de données

Un module de données est une sorte de fiche ne contenant que des composants non visuels.
Les composants non visuels d’un module de données peuvent être placés sur des fiches
normales, à côté de composants visuels. Mais, si vous prévoyez de réutiliser des groupes de
bases de données et d’objets système, ou si vous voulez séparer les parties de votre application
concernant la connexion aux bases de données et les règles de gestion, les modules de données
offrent un outil d’organisation pratique. Pour créer un module de données, choisissez
Fichier|Nouveau|Module de
données. Delphi ouvre un module de données vide, ce qui affiche dans l’éditeur de code un
fichier unité supplémentaire, et ajoute le module au projet en cours en tant que nouvelle unité.
Pour ajouter des composants non visuels à un module de données, procédez comme avec une
fiche.

72
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Lorsque vous ouvrez un module de données existant, Delphi affiche ses composants.

3- Construction de l’interface utilisateur

Avec Delphi, vous devez d’abord créer une interface utilisateur (IU) en sélectionnant des
composants dans la palette de composants et en les plaçant sur la fiche principale.

4- Positionnement des composants sur une fiche

Pour placer des composants sur une fiche :


1 Double-cliquez sur le composant ou
2 Cliquez une seule fois sur le composant puis sur la fiche à l’endroit où vous voulez le faire
apparaître.

Sélectionnez le composant et faites-le glisser là où vous voulez le faire apparaître


sur la fiche.

73
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

5- Définition des propriétés des composants

Après avoir placé des composants sur une fiche, définissez leurs propriétés et codez leurs
gestionnaires d’événements. En définissant les propriétés d’un composant, vous changez la façon
dont celui-ci apparaît et se comporte dans votre application. Lorsqu’un composant est
sélectionné sur une fiche, ses propriétés et ses événements sont affichés dans l’inspecteur
d’objets.

De nombreuses propriétés possèdent des valeurs simples, comme les noms des couleurs, True
ou False, et des entiers. Pour les propriétés booléennes, vous pouvez double-cliquer sur le mot
pour passer alternativement de True à False. Certaines propriétés sont associées à des éditeurs
permettant de définir des valeurs plus complexes. Lorsque vous cliquez sur la valeur d’une de

74
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
ces propriétés, des points de suspension apparaissent. Pour certaines propriétés, comme la
taille, il faut entrer une valeur.

Lorsque plusieurs composants sont sélectionnés dans la fiche, l’inspecteur d’objets affiche
toutes les propriétés partagées par ces composants. L’inspecteur d’objets permet également de
développer en ligne les références à un composant. Cela permet d’accéder aux propriétés et
événements d’un composant référencé sans avoir à le sélectionner. Si, par exemple, vous
ajoutez un bouton et un composant menu surgissant dans une fiche, vous pouvez sélectionner le
composant bouton et, dans l’inspecteur d’objets, initialiser sa propriété PopupMenu à
PopupMenu1 pour afficher toutes les propriétés du menu surgissant.

6- Ecriture du code

La partie fondamentale de toute application est le code associé à chaque composant. Bien que
l’environnement RAD de Delphi apporte la majorité des blocs de construction de vos
applications, comme les composants visuels et non visuels pré-empaquetés, il vous faudra
fréquemment écrire des gestionnaires d’événements et, sans doute, certaines de vos propres
classes. Pour vous aider dans cette tâche, les milliers d’objets de la bibliothèque de classes sont
à votre disposition

7- Ecriture de gestionnaires d’événements

75
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
Votre code doit répondre aux événements qui se produisent pour un composant au moment de
l’exécution. Un événement est le lien établi entre une occurrence du système, comme le clic
d’un bouton, et une portion de code qui répond à cette occurrence. Le code qui répond est le
gestionnaire de l’événement. Ce code modifie les valeurs des propriétés et appelle des
méthodes. Pour voir les gestionnaires d’événements prédéfinis d’un composant de votre fiche,
sélectionnez le composant et, dans l’inspecteur d’objets, cliquez sur l’onglet Evénements.

8- Utilisation de la bibliothèque de composants

Delphi est fourni avec une bibliothèque constituée d’objets, certains étant des composants ou
des contrôles, que vous pouvez utiliser pour écrire du code. Vous pouvez utiliser les
composants de la VCL pour les applications Windows et ceux de la CLX pour les applications
Windows et Linux. La bibliothèque de composants contient des objets visibles à l’exécution,
comme les contrôles de saisie, les boutons et les autres éléments d’interface utilisateur, ainsi
que des contrôles non visuels comme les ensembles de données ou les timers. Le diagramme
suivant montre certain des classes principales constituant la hiérarchie de la VCL. La hiérarchie
de la CLX est similaire.

76
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
Les objets dérivés de TComponent possèdent les propriétés et les méthodes autorisant leur
installation dans la palette de composants et leur ajout aux fiches et aux modules de données
Delphi. Les composants étant intégrés à l’EDI, vous pouvez utiliser des outils comme le
concepteur de fiche pour développer des applications très rapidement. Les composants
apportent un haut degré d’encapsulation. Par exemple, les boutons sont pré-programmés pour
répondre aux clics de souris en déclenchant des événements OnClick. Si vous utilisez un contrôle
bouton, vous n’avez pas à écrire de code gérant les événements générés lors d’un clic sur le
bouton ; vous n’êtes chargé que de la logique de l’application qui doit s’exécuter en réponse au
clic lui-même. La plupart des éditions de Delphi sont livrées avec le code source des
composants de la bibliothèque et avec des exemples de techniques de programmation Delphi.

9- Compilation et débogage des projets

Après avoir écrit votre code, vous devez compiler et déboguer votre projet. Avec Delphi, vous
pouvez soit compiler votre projet en premier et le déboguer ensuite indépendamment, soit le
compiler et le déboguer en une seule étape en utilisant le débogueur intégré. Pour compiler
votre programme en incluant les informations de débogage, choisissez Projet|Options, cliquez
sur la page Compilateur, cochez Informations de débogage.
Delphi utilise un débogueur intégré qui permet de contrôler l’exécution du programme, suivre
les variables et modifier les valeurs des données. Vous pouvez avancer dans votre code ligne par
ligne, en examinant l’état du programme à chaque point d’arrêt. Pour vous servir du débogueur
intégré, choisissez Outils|Options du débogueur, cliquez sur l’onglet Général et vérifiez que la
case Débogage intégré est cochée. Vous pouvez commencer une session de débogage dans
l’EDI en cliquant sur le bouton Exécuter, en choisissant Exécuter|Exécuter ou en appuyant sur
F9.

Le débogueur intégré met à votre disposition de nombreuses fenêtres de débogage, notamment


les fenêtres Points d’arrêt, Pile d’appels, Points de suivi, Variables locales, Threads, Modules,
CPU et Journal d’événements. Affichez-les en choisissant Voir|Fenêtres de débogage. Toutes les
vues du débogueur ne sont pas disponibles dans toutes les éditions de Delphi.

77
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Lorsque vous avez défini votre bureau tel que vous voulez qu’il fonctionne pendant le débogage,
vous pouvez enregistrer ces paramètres en tant que bureau de débogage ou d’exécution. Cette
disposition du bureau sera utilisée chaque fois que vous déboguerez une application

10- Déploiement des applications

Si vous voulez que votre application puisse être installée et exécutée par d’autres personnes,
vous devez préalablement la déployer. Pour déployer une application, créez un paquet
d’installation incluant non seulement les fichiers indispensables comme les exécutables, mais
aussi tous les fichiers de support, les DLL, les fichiers paquet ou les applications
complémentaires. Delphi est fourni avec un utilitaire d’installation, InstallShield Express, qui vous
permet de créer un programme d’installation avec ces fichiers. Pour installer InstallShield
Express, choisissez l’édition personnalisée de InstallShield Express pour Delphi, dans l’écran
d’installation de Delphi.

11- Internationalisation d’applications

Delphi offre de nombreuses fonctionnalités consacrées à l’internationalisation et à la localisation


des applications. L’EDI et la VCL apportent le support des éditeurs de méthodes de saisie (IME)
et des jeux de caractères étendus pour internationaliser votre projet. Avec certaines éditions de
Delphi, vous disposez d’un environnement de traduction qui permet la localisation des logiciels
et le développement simultané dans plusieurs langues. L’environnement de traduction vous
permet de gérer plusieurs versions localisées d’une application comme des parties d’un même
projet. L’environnement de traduction comprend trois outils intégrés :

• L’expert DLL de ressources, un expert DLL qui génère et gère les DLL des ressources.
• Le module de traduction, une grille pour visualiser et modifier les ressources traduites.
• Le référentiel de traduction, base de données partageable contenant les traductions.
Pour ouvrir l’expert DLL de ressources, choisissez Fichier|Nouveau|Autre et double-cliquez sur
l’icône Expert DLL de ressources. Pour configurer les outils de traduction, choisissez
Outils|Options des outils de traduction.

12- Types de projets

Toutes les éditions de Delphi gèrent la programmation générale Windows 32 bits, les DLL, les
paquets, les composants personnalisés, le multithreading, les contrôleurs COM et automation,
ainsi que le débogage multiprocessus. Certaines éditions supportent les applications serveur
comme les applications serveur Web, les applications de bases de données, les serveurs COM,
les applications multiniveaux, CORBA et les systèmes d’aide à la décision.

78
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
13- Applications CLX

Vous pouvez utiliser Delphi pour développer des applications 32 bits multiplates-formes qui
s’exécuteront sur les systèmes d’exploitation Windows et Linux. Pour développer une
application CLX, choisissez Fichier|Nouveau| Application CLX. L’EDI est similaire à
l’environnement d’une application Delphi normale, à cette différence que n’apparaissent dans la
palette des composants et dans le référentiel d’objets que les éléments utilisables dans une
application CLX. Les fonctionnalités Windows gérées par Delphi ne peuvent pas être portées
directement dans un environnement Linux.

14- Applications serveur Web

Une application serveur Web fonctionne avec un serveur Web en traitant les requêtes d’un
client et en renvoyant un message HTTP sous la forme d’une page Web. Pour publier des
données sur le Web, Delphi propose deux technologies différentes, selon l’édition de Delphi
dont vous disposez. La technologie d’application serveur Web la plus ancienne de Delphi est
l’agent Web (Web Broker). Les applications agent Web peuvent répartir des requêtes, effectuer
des actions et renvoyer des pages Web aux utilisateurs. La plus grande partie de la logique
métier d’une application est définie dans des gestionnaires d’événements écrits par le
développeur de l’application. Pour créer une application serveur agent Web, choisissez
Fichier|Nouveau|Autre et double-cliquez sur l’icône Application Serveur Web. Vous pouvez
ajouter à votre module Web des composants issus des pages Internet et InternetExpress de la
palette de composants. WebSnap apporte en plus des adaptateurs, des répartiteurs et des
générateurs de page supplémentaires, la gestion des sessions et des modules de page Web.
Ces fonctionnalités supplémentaires ont été conçues pour gérer automatiquement les tâches
courantes des applications serveur Web. Le développement WebSnap est plus simple et plus
visuel que le développement Web Broker. Un développeur d’applications WebSnap peut
consacrer davantage de temps à la
conception de la logique métier de l’application, plutôt qu’à l’écriture de gestionnaires
d’événements pour les tâches communes de transfert de pages. Pour créer une nouvelle
application serveur WebSnap, choisissez Fichier|
Nouveau|Autre, sélectionnez la page WebSnap et double-cliquez sur l’icône Application
WebSnap. Vous pouvez ajouter des composants WebSnap à partir de la page WebSnap de la
palette de composants.

79
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

15- Applications de bases de données

Delphi apporte une grande variété d’outils de bases de données et de connectivité qui
simplifient le développement des applications de bases de données.
Pour créer une application de base de données, commencez par concevoir l’interface d’une
fiche en utilisant les composants de page ContrôleBD. Puis, ajoutez une source de données dans
un module de données en utilisant la page AccèsBD. Enfin, pour vous connecter à divers
serveurs de bases de données, ajoutez un composant ensemble de données ou connexion de
données au module de données depuis les pages déjà citées de la palette ou depuis celles
associées aux outils de connectivité suivants :

• dbExpress est un ensemble de pilotes utilisés par des applications multiplates-formes donnant
un accès rapide à des serveurs SQL comme DB2, Informix, InterBase, MSSQL, MySQL et
Oracle. Avec un pilote dbExpress, vous pouvez accéder aux bases de données en utilisant des
ensembles de données unidirectionnels.

• Le BDE (Borland Database Engine, moteur de bases de données) est un ensemble de pilotes
supportant de nombreux formats de bases de données parmi les plus utilisés, y compris dBASE,
Paradox, FoxPro, Microsoft Access, et toute source de données ODBC.

• ADO (ActiveX Data Objects) est une interface Microsoft de haut niveau pour toute source de
données, dont les bases de données relationnelles ou non, les systèmes de messagerie
électronique et les systèmes de fichiers, le texte et les graphiques, ainsi que les objets de gestion
personnalisés.

• Les composants InterBase Express (IBX) sont basés sur l’architecture de composants d’accès
aux données personnalisés de Delphi. Les applications IBX donnent accès aux fonctionnalités
avancées d’InterBase et offrent une interface de composants ultra-performante pour InterBase
5.5 et ses versions ultérieures. IBX est compatible avec la bibliothèque Delphi de composants
orientés données. Certains outils de connectivité aux bases de données ne sont pas proposés
dans toutes les éditions de Delphi.

16- Administrateur BDE

80
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

L’administrateur BDE (BDEAdmin.exe) permet de configurer les pilotes BDE et de définir les
alias employés par les contrôles orientés données de la VCL pour se connecter aux bases de
données.
A partir du menu Démarrer de Windows, choisissez Programmes|Borland
Delphi|Administrateur BDE. Choisissez ensuite Aide|Index.

17- Explorateur SQL (explorateur de base de données)

L’explorateur SQL (DBExplor.exe) vous permet de parcourir et de modifier les bases de


données. Vous pouvez l’utiliser pour créer des alias, voir les informations de schéma, exécuter
des requêtes SQL et maintenir les dictionnaires de données ou les jeux d’attributs.
Depuis le menu principal de Delphi, choisissez Base de données|Explorateur pour ouvrir
l’explorateur. Choisissez ensuite Aide|Index. Ou recherchez “explorateur de base de données”
dans l’index principal de l’aide.

18- Module Base de données

Le module Base de données (DBD32.exe) vous permet de créer, de voir et de modifier les
tables des bases de données Paradox et dBase dans divers formats.
A partir du menu Démarrer de Windows, choisissez Programmes|Borland Delphi|Module Base
de données. Puis choisissez Aide|Guide de l’utilisateur.

19- Dictionnaire de données

Le dictionnaire de données fournit un espace de stockage personnalisable indépendant de vos


applications dans lequel vous pouvez créer des jeux d’attributs de champs étendus décrivant le
contenu et l’aspect des données.
Le dictionnaire de données peut résider sur un serveur distant pour partager encore plus
d’informations.
Choisissez Aide|Outils Delphi pour voir “Dictionnaire des données”.

20- Composants personnalisés

Les composants livrés avec Delphi sont pré-installés dans la palette de composants et proposent
des fonctionnalités suffisamment étendues pour répondre à la majorité des besoins de
développement. Vous pourriez programmer avec Delphi pendant des années sans avoir besoin
d’installer de nouveaux composants. Mais, parfois pour résoudre certains problèmes spéciaux
ou encapsuler des types de comportement très particuliers, la contribution des composants
personnalisés devient nécessaire. Les composants personnalisés favorisent la réutilisation du
code et la cohérence des applications. Vous pouvez installer des composants personnalisés
fournis par des tiers ou créer les vôtres. Pour créer un nouveau composant, choisissez
Composant| Nouveau composant pour afficher l’expert Nouveau composant

21- DLL

81
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL
Les DLL (bibliothèques de liaison dynamique) sont des modules compilés contenant des
routines pouvant être appelées par les applications et d’autres DLL. Une DLL contenant du
code et des ressources partageables, elle est
habituellement utilisée par plusieurs applications. Pour créer un modèle de DLL, choisissez
Fichier|Nouveau|Autre et double-cliquez sur l’icône Expert DLL.

22- COM et ActiveX

Delphi supporte le standard COM de Microsoft et offre des experts facilitant la création des
contrôles ActiveX. Choisissez Fichier|Nouveau|Autre et cliquez sur l’onglet ActiveX pour
accéder aux experts. Des exemples de contrôles ActiveX sont installés dans la page ActiveX de
la palette de composants. De nombreux composants serveur COM sont proposés dans l’onglet
Serveurs de la palette de composants. Vous pouvez les utiliser comme s’il s’agissait de
composants de la VCL. Par exemple, vous pouvez placer un des composants Microsoft Word
sur une fiche, afin d’offrir une instance de Microsoft Word à l’interface d’une application.

23- Bibliothèques de types

Les bibliothèques de types sont des fichiers contenant des informations sur les types de
données, les interfaces, les fonctions membres et les classes d’objets présentées dans un
contrôle ou un serveur ActiveX. En incluant une bibliothèque de types à votre application COM
ou à votre bibliothèque ActiveX, vous mettez ces informations à la disposition d’autres
applications et d’autres outils de programmation. Delphi possède un éditeur de bibliothèques de
types qui permet la création et la maintenance de celles

82
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Chapitre
CHAPITRE 12

12 DEVELOPPEMENT D’UN LOGICIEL DE BASES DE DONNES

Utilisation de tous les concepts pour développer un logiciel dans Delphi


Formulaires de saisie, consultation et recherche
Etats
Statistiques
Exemple de Création d’une page d’accueil
Exemple de Création d’un menu général
Quelques astuces dans le développement Delphi

83
Cours de Delphi par Francis K. ADOBOE
IAI – TOGO /2011-2012 2éme Année GL

Chapitre
CHAPITRE 13

13
Déploiement : Création d’un fichier d’installation pour les applications Delphi

84
Cours de Delphi par Francis K. ADOBOE

Vous aimerez peut-être aussi