Delphi 10.3
Programmation Orientée Objet en environnement Windows
Éditions-ENI
Chapitre 1
Introduction
1. À qui s'adresse ce livre ?19
2. Delphi20
3. Un peu de vocabulaire20
4. Installation22
4.1 Téléchargement22
4.2 Licence23
4.3 Installation24
Chapitre 2
Prise en main de l'IDE de Delphi 10.3
1. Présentation27
2. Mise en pratique32
2.1 Création d'un nouveau projet32
2.2 Ajouts de quelques composants sur la fiche36
2.3 Mise en forme39
2.4 Définir un gestionnaire d'évènement51
2.5 Menu Chercher54
3. Le débogueur intégré de Delphi56
3.1 À quoi sert-il ?56
3.2 Comment ?57
3.3 Utilisation du débogueur57
4. Refactoring63
4.1 Renommer une classe64
4.2 Extraire une méthode d'un bloc de code65
5. Renommage de nom de fichier66
6. Options du projet67
7. Conclusion70
Chapitre 3
Delphi, le langage Pascal objet
1. Introduction71
2. Structure des fichiers Delphi71
2.1 Création d'un projet d'exemple72
2.2 Le fichier .pas75
2.3 Le fichier .dpr78
2.4 Le fichier .dproj81
3. Le mot réservé uses81
4. Les variables et les constantes82
4.1 Déclaration82
4.2 Portée83
5. Les types de variables Delphi85
5.1 Les types entiers85
5.2 Les types décimaux86
5.3 Les types booléens86
5.4 Les types caractères87
5.5 Les types chaînes de caractères87
5.6 Les types énumération90
5.7 Les tableaux91
5.7.1 Tableau statique91
5.7.2 Tableau dynamique92
5.7.3 Manipulations de base93
5.8 Les variants94
5.9 Le record95
5.9.1 Définition95
5.9.2 Le mot réservé with96
6. Les opérateurs97
6.1 Opérateur d'affectation97
6.2 Opérations mathématiques97
6.3 Opérations logiques booléennes102
6.4 Comparaisons numériques102
7. Procédures et fonctions105
7.1 Procédure107
7.2 Fonction108
7.3 Passage de paramètres110
8. Instructions basiques115
8.1 Les tests de conditions115
8.2 If then else116
8.3 Case of else117
8.4 Les instructions d'itération118
9. Les directives de compilation conditionnelles124
10. Les fonctions de conversion126
10.1 Les fonctions de conversion pour les chaînes de caractères126
10.2 Les fonctions de conversion pour les nombres127
10.3 Les fonctions de conversion récemment ajoutées127
11. Les pointeurs129
11.1 Définition130
11.2 Utilisation130
11.3 Implémentation131
11.4 Conclusion132
Chapitre 4
Concept objet en Delphi
1. Introduction à la programmation orientée objet133
2. Principes de la programmation objet134
2.1 Les champs134
2.2 Les méthodes134
2.3 Encapsulation de données135
2.4 Représentation UML et nommage135
2.5 Héritage136
2.6 Polymorphisme138
3. Définition de classe141
3.1 Constructeur143
3.2 Destructeur145
3.3 Le pointeur nil146
3.4 Pointeur interne Self146
3.5 Propriétés147
3.6 Propriété tableau150
3.7 Objets et pointeurs151
3.8 Évènements152
3.9 L'opérateur is157
3.10 L'opérateur as157
3.11 Champs et méthodes statiques159
4. Mise en pratique - Application pour la location de véhicules160
4.1 Convention de nommage161
4.2 Implémentation162
4.3 Utilisation170
4.4 Remarques173
5. Conclusion174
Chapitre 5
Run Time Library, fondation de Delphi
1. Les bibliothèques fournies par Delphi175
2. RTL mise en pratique176
2.1 La classe TObject177
2.2 Les cas d'exception178
2.3 La classe TPersistent et le système RTTI184
2.4 Mise en pratique de l'introspection RTTI185
2.5 La classe helper189
2.6 Les listes en Delphi192
2.6.1 TList192
2.6.2 Exemple d'utilisation de TList193
2.6.3 TObjectList201
2.6.4 TArray201
2.6.5 Les files (FIFO) TQueue et TObjectQueue203
2.6.6 Les piles (LIFO) TStack et TObjectStack206
2.6.7 Les listes de string TStringList206
2.6.8 Les dictionnaires TDictionnary et TObjectDictionnary217
2.7 Le système de fichiers TFile, TPath, TDirectory219
2.7.1 TPath : Manipulation de chemins sur le disque220
2.7.2 TDirectory : Parcours et manipulation de répertoire222
2.7.3 TFile : Manipulation de fichier224
2.8 Les flux, TStream et ses descendants227
2.9 Opérations mathématiques233
2.10 La manipulation de dates avec TDate et TTime235
2.11 La base des registres TRegistry240
2.12 Les expressions régulières avec TRegEx244
2.13 Compression de fichier ou de répertoires245
3. Les méthodes anonymes246
3.1 Définition246
3.2 Déclaration247
3.3 Implémentation247
3.4 Le principe de closure248
3.5 Conclusion250
4. Les interfaces250
4.1 Définition250
4.2 Déclaration251
4.3 Utilisation252
4.4 Héritage d'interface253
4.5 Utilisation de plusieurs interfaces, héritage multiple254
4.6 Utilisation de même nom de méthode dans deux interfaces différentes255
4.7 Pour finir255
5. Conclusion256
Chapitre 6
Les applications Windows avec la VCL
1. La VCL : Visual Component Library257
1.1 Introduction257
1.2 Les classes de base258
1.2.1 La classe TComponent258
1.2.2 La classe TControl259
1.2.3 La classe TWinControl263
2. La classe TApplication264
3. Les applications Windows VCL265
3.1 Une application Windows VCL simple266
3.2 Une application MDI269
4. Création d'une IHM avec Delphi272
4.1 Paramètres d'affichage de TForm272
4.1.1 Méthodes relatives à l'apparition d'une fenêtre273
4.1.2 Évènements de TForm274
4.2 La palette de composants standards274
4.2.1 Le bouton : TButton275
4.2.2 Zone de texte : TLabel276
4.2.3 Case à cocher : TCheckBox276
4.2.4 Choix multiples : TRadioButton277
4.2.5 Choix multiple dans une liste : TCombobox278
4.2.6 Les composants d'édition de textes279
4.2.7 Les menus280
4.2.8 Les alignements avec les TPanel et les TGroupBox284
4.3 Modifier la position d'un composant289
4.4 Travailler avec des frames et réutiliser le contexte graphique293
4.5 Sélectionner des fichiers (TOpenDialog) et des répertoires (TOpenFileDialog)298
4.6 Présentation de données299
4.6.1 Avec TPageControl299
4.6.2 En tableau avec la TStringGrid302
4.6.3 Présentation de données en arbre avec TTreeView305
4.7 Zone avec barre de défilement : TScrollBox309
4.8 Exécuter une action périodique avec TTimer312
4.9 Applications VCL multifenêtres313
4.10 Échanger des données entre deux fenêtres315
4.10.1 Méthode par un appel modal315
4.10.2 Méthode par évènement316
4.11 Récupérer des évènements du clavier318
4.12 Faire un glisser-déposer (Drag&Drop)320
4.13 Afficher des images322
4.13.1 Le contrôle TImage322
4.13.2 Le contrôle TImageList323
4.13.3 Le contrôle TImageCollection324
4.14 Travailler avec les styles prédéfinis en VCL327
4.15 Créer et utiliser son propre style VCL329
4.16 Configurer une application339
4.16.1 Par ligne de commande339
4.16.2 Par fichier de configuration340
5. Conclusion341
Chapitre 7
Les librairies (dll) et les packages (bpl)
1. Définitions343
2. Mise en pratique de l'utilisation d'une dll345
2.1 Création345
2.2 Export de routines346
2.3 Exploitation d'une dll dans un exécutable347
2.3.1 Chargement statique de la dll349
2.3.2 Chargement dynamique de la dll351
2.3.3 La directive delayed353
2.4 Passage de chaînes de caractères353
2.4.1 La méthode ShareMem353
2.4.2 La méthode par type primitif (pchar integer)356
2.4.3 Évènement levé dans une dll et utilisé dans le programme hôte358
3. Les packages BPL Delphi363
3.1 Création d'un package runtime363
3.2 Création d'un package design372
4. Conclusion380
Chapitre 8
Représentation de données : formats XML et JSON
1. Introduction381
2. Format XML382
2.1 Écriture du fichier XML, sérialisation directe382
2.2 Lecture du fichier XML, désérialisation directe393
3. XML Data Binding398
3.1 Utilisation du moteur XML Data Binding399
3.2 Sérialisation406
3.3 Désérialisation407
4. Format JSON408
4.1 Présentation408
4.2 Syntaxe409
4.3 Sérialisation JSON410
4.3.1 Par une structure objet définie manuellement410
4.3.2 Par réflexion413
4.4 Désérialisation415
4.4.1 Par la classe TJSONObject415
4.4.2 Par réflexion418
5. Conclusion419
Chapitre 9
Traitement de tâches asynchrones
1. Description d'un processus421
2. Les threads dans un processus422
3. Pourquoi utiliser du multithreading ?423
3.1 Effectuer plusieurs traitements en parallèle423
3.2 Donner une meilleure expérience utilisateur424
4. La classe TThread426
5. Thread transitoire TThread428
6. Thread transitoire par procédure anonyme (TThread.CreateAnonymousThread)431
7. Thread persistant432
8. Les concepts de ressource partagée et de section critique436
9. Une liste thread safe, l'interface d'échange privilégiée entre deux threads439
9.1 Par TCriticalSection439
9.2 Par TThreadList et TMonitor442
10. PPL : la bibliothèque de programmation parallèle443
10.1 Pourquoi cette bibliothèque en plus de TThread ?444
10.2 Thread transitoire par TTask.Start444
11. Synchronisation de deux threads grâce à l'appel Future445
12. Exécuter N actions en parallèle avec TParallel449
12.1 Présentation449
12.2 Exécution de la même action en parallèle TParallel.For449
12.3 Exécution de N méthodes différentes avec TParallel.Join454
12.4 Remarques457
13. Recommandations457
14. Conclusion458
Chapitre 10
Création d'un service Windows
1. Définition459
2. Configuration460
2.1 Configuration du type d'exécution460
2.2 Configuration du compte associé460
2.3 Configuration des dépendances461
3. Implémentation461
3.1 Configuration du service463
3.2 Implémentation des évènements464
3.3 Exécution et débogage468
3.3.1 L'évènement OnExecute471
3.3.2 Utilisation d'un thread secondaire476
4. Débogage de service Windows477
4.1 Par fichier de log477
4.2 S'attacher au processus par l'IDE483
5. Conclusion485
Chapitre 11
Communication interprocessus (IPC)
1. Introduction487
2. Communication via message Windows488
2.1 Récupération du handle de fenêtre destinataire490
2.2 Envoi du message492
2.3 Réception du message494
2.4 À savoir494
3. Communication via TCP/IP495
3.1 Définitions495
3.2 Implémentation d'un système de communication client/serveur497
3.2.1 Implémentation du serveur498
3.2.2 Implémentation du client500
3.2.3 Gestion du contenu du message502
3.2.4 Ecriture d'un protocole504
3.2.5 Envoi d'un message506
3.2.6 Réception d'un message508
3.2.7 Intégration dans le client513
3.2.8 Intégration dans le serveur514
3.2.9 Identification de l'émetteur du message515
3.3 Implémentation d'un tchat520
3.3.1 Modifications du client de tchat526
3.3.2 Modifications de l'interface graphique529
3.3.3 Rafraîchissement des onglets531
3.3.4 Ajout d'un message entrant533
3.3.5 Envoi d'un message534
3.3.6 Autres modifications du serveur de tchat535
3.4 Utilisation du tchat dans un réseau d'ordinateurs540
3.4.1 Modélisation Model View Controller542
3.4.2 Création d'un service543
4. Conclusion545
Chapitre 12
Connectivité aux bases de données
1. Définitions547
2. Les différents frameworks551
2.1 Le framework BDE551
2.2 Le framework dbGo551
2.3 Le framework dbExpress552
2.4 Le framework FireDAC552
3. Le SQL en bref - fonctions de base553
4. Les composants FireDAC555
5. Une application de e-commerce avec back-office557
5.1 Design de la base de données557
5.2 Etapes de développement559
5.3 Installation MariaDB560
6. L'application de back-office563
6.1 Configuration des composants566
6.1.1 Configuration de TFDConnection : FDConnection566
6.1.2 Configuration du TFDTable : FDTableProduct568
6.1.3 Configuration du TDataSource : DataSourceProduct568
6.1.4 Configuration de TDBGrid : DBGridProduct569
6.1.5 Configuration du TDBNavigator : DBNavigatorProduct571
6.1.6 Configuration du TDBImage : DBImageProduct572
6.2 Interfaçages572
6.2.1 Interfaçage du champ description572
6.2.2 Interfaçage du champ category573
6.2.3 Interfaçage du champ image574
6.3 Personnalisation du rendu de la grille576
6.3.1 Insertion de l'image dans la colonne image576
6.3.2 Modification des couleurs de texte ou de police dans la grille578
6.3.3 Modification de la hauteur des lignes de la grille580
6.4 Tri de la grille par valeur d'un champ581
7. Conclusion582
Chapitre 13
Utilisation du design pattern MVC
1. Introduction583
2. Design pattern MVC583
2.1 Le modèle584
2.2 La vue585
2.3 Le contrôleur585
2.4 Les avantages585
3. Développement de l'application586
3.1 Fonctionnalités586
3.2 Couches MVC586
3.2.1 Les vues586
3.2.2 Les modèles587
3.2.3 Les contrôleurs587
3.3 Navigation entre les pages592
3.4 Normaliser les échanges entre MVC596
3.5 Les vues599
3.5.1 La vue « Login »600
3.5.2 La vue « Choix d'objets »611
3.5.3 La vue gestion de compte626
3.5.4 La vue « Validation de panier »644
3.6 Création d'une facture651
3.6.1 Préparation et création des éléments nécessaires à l'opération651
3.6.2 Création d'un modèle652
3.6.3 Récupération des données655
3.6.4 Design du rapport659
3.6.5 Génération du fichier660
3.7 Calcul du montant total de la commande par procédure stockée662
4. Conclusion666
Chapitre 14
Attributs, annotations et RTTI
1. Introduction667
2. Principe du mapping propriété/colonne668
3. Attributs Delphi669
3.1 Généralités669
3.2 Modélisation670
4. Un moteur d'accès aux données générique677
4.1 Implémentation677
4.2 Le cas des propriétés objets692
4.2.1 Sauvegarde dans la base de données692
4.2.2 Chargement dans la base de données694
4.3 Gestion de listes695
4.4 Les tables de jointure, relation OneToMany698
5. Conclusion711
Chapitre 15
FireDÂC, FireMonkey et LiveBinding
1. FireMonkey713
2. LiveBinding714
3. Migration des outils back-office et E-Commerce en FireMonkey715
3.1 Le composant TListView715
3.2 Liaison visuelle avec une source de données FireDAC : LiveBinding721
4. Interagir avec la TListView724
4.1 Le clic724
4.2 Le double clic725
5. Visualisation Maître/Détail725
5.1 Présentation725
5.2 Maître/Détail utilisateur/commandes726
5.3 Maître/Détail commande/objets achetés732
5.4 Relation Maître/Détail, commande/adresse de livraison736
6. Modification de la valeur issue de la source de donnée739
6.1 Cas d'application739
6.2 La propriété CustomFormat740
6.3 Les routines de conversion742
6.4 Créer ses propres routines de conversion746
7. Conclusion747
Chapitre 16
Serveur d'application REST
1. Définition : application distribuée749
2. Protocole HTTP750
3. Exemple d'échanges de données : information de météo751
3.1 Par le protocole HTTP751
3.2 Par le protocole SOAP (Simple Object Access Protocol)752
3.3 Par une architecture REST754
4. Service web et web-méthodes REST756
4.1 Cas général756
4.2 Cas de l'authentification758
4.2.1 La problématique758
4.2.2 Les méthodes d'authentification HTTP758
4.2.3 Les différentes options759
4.2.4 Implémentation choisie762
5. Implémentation de l'application côté serveur778
5.1 Le projet Web Server Application779
5.2 Mise en place du serveur Apache782
5.2.1 Installation d'Apache783
5.2.2 Configuration du serveur Apache783
5.2.3 Intégration du module785
5.3 Edition des points d'entrée786
5.4 Utilisation du REST Debugger de Delphi788
5.5 Passage de paramètres du client vers le serveur791
5.6 Implémentation de l'enregistrement d'un utilisateur791
5.7 La classe TJsonResult796
5.8 Le cas de l'authentification : le login799
5.9 Récupération des produits805
5.10 Mettre à jour un utilisateur809
5.11 Passer une commande813
5.12 Gérer la montée en charge avec l'utilisation d'un pool de connexion819
6. Conclusion824
Chapitre 17
Client REST multi-plateforme FireMonkey
1. Introduction825
1.1 Design graphique825
1.2 Échanges entre le client et le serveur829
1.3 Implémentation831
2. Appel REST simple, enregistrement d'un utilisateur836
3. Authentification REST de type Basic et login d'un utilisateur843
4. Utilisation du Livebinding avec un modèle de données846
4.1 Utilisation d'un TDataGeneratorAdapter pour définir un prototype d'échange848
4.2 Encapsulation dans un TAdapterBindSource849
4.3 Liaison avec un TListView851
4.4 Gestion de panier854
4.4.1 Design graphique854
4.4.2 Implémentation856
4.5 Passer une commande859
4.6 Gestion compte utilisateur863
5. Conclusion870
Chapitre 18
Travailler avec les styles FireMonkey
1. Présentation871
2. Modifier ou créer un style de composant872
2.1 Le Style Designer872
2.2 Modification du style TLabel875
2.3 Créer un nouveau style878
3. Créer et utiliser un style spécifique pour une TListBox881
3.1 Création d'un style TListBox881
3.2 Ajout d'éléments stylisés dans la TListBox883
3.2.1 Exemple : Affectation du prix884
3.2.2 Exemple : Affectation de l'image884
4. Intégration dans le client REST886
5. Conclusion891
Conclusion893
Index895