Guide Du Développeur: C Builder 6
Guide Du Développeur: C Builder 6
Borland ®
C++Builder 6™
pour Windows ®
Reportez-vous au fichier DEPLOY situé dans le répertoire racine de votre produit C++Builder pour obtenir la liste
complète des fichiers que vous pouvez distribuer en accord avec les termes du contrat de licence de C++Builder.
Les applications mentionnées dans ce manuel sont brevetées ou en attente de brevet. Reportez-vous au CD du
produit ou à la boîte de dialogue A propos. Ce document ne donne aucun droit sur ces brevets.
COPYRIGHT © 1983-2002 Borland Software Corporation. Tous droits réservés. Tous les produits Borland sont des
marques commerciales ou des marques déposées de Borland Software Corporation aux Etats-Unis ou dans
les autres pays. Toutes les autres marques sont la propriété de leurs fabricants respectifs.
CPE1360WW21001 6E4R0102
02030405-9 8 7 6 5 4 3 2 1
PDF
Table des matières
Chapitre 1 Chapitre 4
Introduction 1-1 Utilisation de BaseCLX 4-1
Contenu de ce manuel . . . . . . . . . . . . . . 1-1 Utilisation des flux . . . . . . . . . . . . . . . . . 4-2
Conventions typographiques. . . . . . . . . . . 1-3 Utilisation des flux pour lire ou écrire
Support technique . . . . . . . . . . . . . . . . . 1-3 des données . . . . . . . . . . . . . . . . . . 4-2
Méthodes de flux pour la lecture
et l’écriture . . . . . . . . . . . . . . . . . 4-2
Partie I Lecture et écriture de composants. . . . . 4-3
Programmation C++Builder Copie de données d’un flux vers un autre . 4-3
Spécification de la position et de la taille
Chapitre 2 du flux . . . . . . . . . . . . . . . . . . . . . 4-4
Développement d’applications Déplacement sur une position
particulière . . . . . . . . . . . . . . . . . 4-4
avec C++Builder 2-1 Utilisation des propriétés de position
L’environnement de développement intégré. . 2-1
et de taille. . . . . . . . . . . . . . . . . . 4-4
Conception d’applications . . . . . . . . . . . . 2-2
Utilisation des fichiers . . . . . . . . . . . . . . . 4-5
Création des projets . . . . . . . . . . . . . . . . 2-3
Approches des E/S fichier . . . . . . . . . . . 4-5
Modification du code . . . . . . . . . . . . . . . 2-4
Utilisation de flux de fichier . . . . . . . . . . 4-6
Compilation des applications . . . . . . . . . . 2-4
Création et ouverture de fichiers
Débogage des applications . . . . . . . . . . . . 2-5
en utilisant des flux de fichier . . . . . . 4-6
Déploiement des applications . . . . . . . . . . 2-5
Utilisation du handle de fichier . . . . . . 4-7
Manipulation de fichiers . . . . . . . . . . . . 4-7
Chapitre 3 Suppression d’un fichier . . . . . . . . . . 4-8
Utilisation des bibliothèques Recherche d’un fichier . . . . . . . . . . . 4-8
de composants 3-1 Modification d’un nom de fichier . . . . 4-10
Présentation des bibliothèques de classes . . . 3-1 Routines date-heure de fichier . . . . . . 4-10
Propriétés, méthodes et événements . . . . 3-2 Copie d’un fichier . . . . . . . . . . . . . 4-10
Propriétés . . . . . . . . . . . . . . . . . . 3-2 Utilisation des fichiers ini et du registre. . . . 4-11
Méthodes . . . . . . . . . . . . . . . . . . 3-3 Utilisation de TIniFile et TMemIniFile . 4-11
Evénements . . . . . . . . . . . . . . . . . 3-3 Utilisation de TRegistryIniFile . . . . . . 4-13
Evénements utilisateur. . . . . . . . . . . 3-3 Utilisation de TRegistry. . . . . . . . . . 4-13
Evénements système . . . . . . . . . . . . 3-4 Utilisation des listes . . . . . . . . . . . . . . . 4-14
Objets, composants et contrôles . . . . . . . . . 3-4 Opérations de listes courantes. . . . . . . . 4-14
Branche TObject . . . . . . . . . . . . . . . . 3-6 Ajout d’éléments de liste . . . . . . . . . 4-15
Branche TPersistent . . . . . . . . . . . . . . 3-7 Suppression d’éléments de liste . . . . . 4-15
Branche TComponent . . . . . . . . . . . . . 3-7 Accès aux éléments de la liste . . . . . . 4-15
Branche TControl. . . . . . . . . . . . . . . . 3-9 Réorganisation d’éléments de liste . . . 4-16
Branche TWinControl/TWidgetControl . . . 3-10 Listes persistantes . . . . . . . . . . . . . . . 4-16
Utilisation des listes de chaînes. . . . . . . . . 4-17
Lecture et enregistrement
des listes de chaînes. . . . . . . . . . . . . 4-17
i
Création d’une nouvelle liste de chaînes . . 4-18 Recensez la famille de conversion
Listes de chaînes à court terme . . . . . . 4-18 et les autres unités . . . . . . . . . . . . 4-34
Listes de chaînes à long terme . . . . . . 4-18 Utilisation des nouvelles unités . . . . . 4-35
Manipulation des chaînes d’une liste . . . . 4-19 Création d’espaces de dessin . . . . . . . . . . 4-36
Comptage des chaînes d’une liste . . . . 4-20
Accès à une chaîne spécifique . . . . . . 4-20 Chapitre 5
Recherche d’éléments Utilisation des composants 5-1
dans une liste de chaînes . . . . . . . . 4-20 Initialisation des propriétés d’un composant . . 5-2
Parcours des chaînes d’une liste . . . . . 4-20 Initialisation des propriétés à la conception . 5-2
Ajout d’une chaîne à une liste . . . . . . 4-20 Utilisation des éditeurs de propriétés. . . 5-3
Déplacement d’une chaîne Initialisation des propriétés à l’exécution . . 5-3
dans une liste . . . . . . . . . . . . . . . 4-21 Appel de méthodes. . . . . . . . . . . . . . . . . 5-3
Suppression d’une chaîne d’une liste . . 4-21 Utilisation des événements
Association d’objets et des gestionnaires d’événements . . . . . . . 5-4
à une liste de chaînes . . . . . . . . . . 4-21 Génération d’un nouveau
Utilisation des chaînes . . . . . . . . . . . . . . 4-22 gestionnaire d’événement . . . . . . . . . . 5-4
Routines manipulant les caractères Génération du gestionnaire de l’événement
étendus . . . . . . . . . . . . . . . . . . . . 4-22 par défaut d’un composant . . . . . . . . . 5-4
Routines couramment utilisées Recherche de gestionnaires d’événements . . 5-5
pour les AnsiStrings . . . . . . . . . . . . . 4-23 Association d’un événement à un gestionnaire
Routines couramment utilisées d’événement existant . . . . . . . . . . . . . 5-5
pour les chaînes à zéro terminal . . . . . . 4-26 Utilisation du paramètre Sender. . . . . . 5-6
Impression . . . . . . . . . . . . . . . . . . . . . 4-27 Affichage et codage d’événements
Conversion de mesures . . . . . . . . . . . . . . 4-28 partagés . . . . . . . . . . . . . . . . . . . 5-6
Exécution des conversions . . . . . . . . . . 4-28 Association d’événements de menu
Exécution des conversions simples. . . . 4-28 à des gestionnaires d’événements . . . . . . 5-6
Exécution des conversions complexes . . 4-29 Suppression de gestionnaires d’événements 5-7
Ajout de nouveaux types de mesure . . . . 4-29 Composants multiplates-formes ou non
Création d’une famille de conversion multiplates-formes . . . . . . . . . . . . . . . . 5-7
simple et ajout d’unités . . . . . . . . . . . 4-29 Ajout de composants personnalisés
Déclaration des variables . . . . . . . . . 4-30 à la palette des composants . . . . . . . . 5-10
Recensement de la famille
de conversion . . . . . . . . . . . . . . . 4-30 Chapitre 6
Recensement des unités de mesure . . . 4-30 Manipulation des contrôles 6-1
Utilisation des nouvelles unités . . . . . 4-30 Implémentation du glisser-déplacer
Utilisation d’une fonction de conversion . . 4-31 dans les contrôles . . . . . . . . . . . . . . . . . 6-1
Déclaration des variables . . . . . . . . . 4-31 Début de l’opération glisser-déplacer . . . . 6-1
Recensement de la famille Acceptation des éléments à déplacer . . . . . 6-2
de conversion . . . . . . . . . . . . . . . 4-31 Déplacement des éléments. . . . . . . . . . . 6-3
Recensement de l’unité de base . . . . . 4-31 Fin de l’opération glisser-déplacer . . . . . . 6-3
Ecriture des méthodes de conversion Personnalisation du glisser-déplacer
à destination et à partir avec un objet déplacement . . . . . . . . . . 6-4
de l’unité de base . . . . . . . . . . . . . 4-32 Changement du pointeur de la souris . . . . 6-4
Recensement des autres unités . . . . . . 4-32 Implémentation du glisser-ancrer
Utilisation des nouvelles unités . . . . . 4-32 dans les contrôles . . . . . . . . . . . . . . . . . 6-4
Utilisation d’une classe pour gérer Transformation d’un contrôle fenêtré
les conversions . . . . . . . . . . . . . . . . 4-32 en un site d’ancrage. . . . . . . . . . . . . . 6-5
Création de la classe de conversion . . . 4-33 Transformation d’un contrôle
Déclaration des variables . . . . . . . . . 4-34 en un enfant ancrable . . . . . . . . . . . . . 6-5
ii
Contrôle de l’ancrage des contrôles enfant . 6-6 Création de paquets et de DLL . . . . . . . . . 7-10
Contrôle du désancrage Utilisation des paquets et des DLL . . . . . 7-11
des contrôles enfant . . . . . . . . . . . . . 6-6 Utilisation des DLL dans C++Builder . . . . . 7-12
Contrôle de la réponse des contrôles enfant Création de DLL dans C++Builder. . . . . . . 7-12
aux opérations glisser-ancrer . . . . . . . . 6-7 Création de DLL contenant
Manipulation du texte dans les contrôles . . . 6-7 des composants VCL et CLX . . . . . . . . . 7-13
Définition de l’alignement du texte . . . . . 6-7 Liaison de DLL . . . . . . . . . . . . . . . . . . 7-16
Ajout de barres de défilement Ecriture d’applications de bases de données . 7-16
en mode exécution . . . . . . . . . . . . . . 6-8 Distribution d’applications
Ajout de l’objet Clipboard . . . . . . . . . . 6-9 de bases de données . . . . . . . . . . . . 7-17
Sélection de texte. . . . . . . . . . . . . . . . 6-9 Création d’applications serveur Web. . . . . . 7-18
Sélection de la totalité d’un texte . . . . . . 6-9 Utilisation de WebBroker. . . . . . . . . . . 7-18
Couper, copier et coller du texte . . . . . . . 6-10 Création d’applications WebSnap . . . . . . 7-19
Effacement du texte sélectionné . . . . . . . 6-10 Utilisation d’InternetExpress . . . . . . . . 7-20
Désactivation des éléments de menu . . . . 6-10 Création d’applications services Web. . . . 7-20
Ajout d’un menu surgissant . . . . . . . . . 6-11 Ecriture d’applications en utilisant COM . . . 7-20
Gestion de l’événement OnPopup . . . . . . 6-12 Utilisation de COM et de DCOM . . . . . . 7-21
Ajout de graphiques à des contrôles . . . . . . 6-12 Utilisation de MTS et de COM+ . . . . . . 7-21
Spécification du style dessiné Utilisation de modules de données . . . . . . 7-22
par le propriétaire . . . . . . . . . . . . . . 6-13 Création et modification de modules
Ajout d’objets graphiques de données standard . . . . . . . . . . . . 7-23
à une liste de chaînes . . . . . . . . . . . . 6-14 Nom d’un module de données
Ajout d’images à une application . . . . 6-14 et de son fichier unité . . . . . . . . . . 7-23
Ajout d’images à une liste de chaînes . . 6-14 Placer et nommer les composants . . . . 7-24
Dessiner des éléments dessinés Utilisation des propriétés et événements
par le propriétaire . . . . . . . . . . . . 6-15 des composants dans un module
Dimensionnement des éléments dessinés de données . . . . . . . . . . . . . . . . 7-25
par le propriétaire . . . . . . . . . . . . . . 6-15 Création de règles de gestion
Dessin des éléments par le propriétaire. . . 6-16 dans un module de données . . . . . . 7-25
Accès à un module de données
Chapitre 7 depuis une fiche . . . . . . . . . . . . . . . 7-25
Création d’applications, de composants Ajout d’un module de données distant
à un projet serveur d’application . . . . . 7-26
et de bibliothèques 7-1 Utilisation du référentiel d’objets. . . . . . . . 7-27
Création d’applications . . . . . . . . . . . . . . 7-1
Partage d’éléments dans un projet . . . . . 7-27
Applications d’interface utilisateur
Ajout d’éléments au Référentiel d’objets. . 7-27
graphique . . . . . . . . . . . . . . . . . . . 7-1
Partage d’objets par une équipe
Modèles d’interfaces utilisateur . . . . . 7-2
de développement. . . . . . . . . . . . . . 7-27
Applications SDI . . . . . . . . . . . . . . 7-2
Utilisation d’un élément du référentiel
Applications MDI. . . . . . . . . . . . . . 7-2
d’objets dans un projet . . . . . . . . . . . 7-28
Définition des options de l’EDI, du projet
Copie d’un élément . . . . . . . . . . . . 7-28
et de la compilation . . . . . . . . . . . 7-3
Héritage d’un élément . . . . . . . . . . 7-28
Modèles de programmation . . . . . . . . . 7-3
Utilisation d’un élément . . . . . . . . . 7-28
Applications console . . . . . . . . . . . . . . 7-4
Utilisation de modèles de projet . . . . . . 7-29
Utilisation de la VCL et de la CLX
Modification d’éléments partagés. . . . . . 7-29
dans les applications console . . . . . . 7-4
Spécification d’un projet par défaut, d’une
Applications service . . . . . . . . . . . . . . 7-4
nouvelle fiche et de la fiche principale . . 7-29
Threads de service . . . . . . . . . . . . . 7-7
Activation de l’aide dans les applications . . . 7-30
Propriétés de nom d’un service . . . . . 7-9
Interfaces avec les systèmes d’aide . . . . . 7-30
Débogage d’applications service . . . . . 7-10
iii
Implémentation de ICustomHelpViewer . . 7-31 Transfert de paramètres supplémentaires
Communication avec le gestionnaire aux fiches . . . . . . . . . . . . . . . . . . . . 8-8
d’aide . . . . . . . . . . . . . . . . . . . . . 7-31 Récupération des données des fiches. . . . . 8-9
Demande d’informations Récupération de données
au gestionnaire d’aide . . . . . . . . . . . . 7-32 dans les fiches non modales . . . . . . . 8-9
Affichage de l’aide basée sur un mot clé . . 7-33 Récupération de données
Affichage des sommaires . . . . . . . . . . . 7-34 dans les fiches modales . . . . . . . . . 8-10
Implémentation de IExtendedHelpViewer . 7-34 Réutilisation des composants
Implémentation de IHelpSelector . . . . . . 7-35 et des groupes de composants . . . . . . . . 8-13
Recensement des objets du système d’aide. 7-36 Création et utilisation
Recensement des visualiseurs d’aide . . 7-36 des modèles de composants . . . . . . . . . . 8-13
Recensement des sélecteurs d’aide . . . . 7-36 Manipulation des cadres. . . . . . . . . . . . . 8-14
Utilisation de l’aide Création de cadres . . . . . . . . . . . . . . 8-14
dans une application VCL . . . . . . . . . . . 7-37 Ajout de cadres à la palette
Comment TApplication traite-il l’aide VCL 7-37 des composants . . . . . . . . . . . . . . . 8-15
Comment les contrôles VCL Utilisation et modification des cadres . . . 8-15
traitent-ils l’aide . . . . . . . . . . . . . . . 7-37 Partage des cadres . . . . . . . . . . . . . . 8-16
Utilisation de l’aide Développement de boîtes de dialogue. . . . . 8-17
dans une application CLX . . . . . . . . . . . 7-38 Utilisation des boîtes de dialogue
Comment TApplication d’ouverture . . . . . . . . . . . . . . . . . . 8-17
traite-il l’aide CLX . . . . . . . . . . . . . . 7-38 Organisation des actions pour les barres d’outils
Comment les contrôles CLX et les menus . . . . . . . . . . . . . . . . . . . 8-18
traitent-ils l’aide . . . . . . . . . . . . . . . 7-38 Qu’est-ce qu’une action ?. . . . . . . . . . . 8-20
Appel direct à un système d’aide . . . . . . . . 7-39 Définition des bandes d’actions . . . . . . . 8-21
Utilisation de IHelpSystem . . . . . . . . . . . . 7-39 Création des barres d’outils et des menus . 8-21
Personnalisation du système d’aide de l’EDI . 7-40 Ajout de couleurs, de motifs ou d’images
aux menus, boutons et barres d’outils 8-23
Chapitre 8 Ajout d’icônes aux menus
Conception de l’interface utilisateur et aux barres d’outils . . . . . . . . . . 8-23
Création de barres d’outils et de menus
des applications 8-1 personnalisables par l’utilisateur . . . 8-24
Contrôle du comportement de l’application . . 8-1
Cacher les éléments et les catégories
Manipulation de l’application . . . . . . . . 8-2
inutilisés dans les bandes d’actions . . 8-25
Gestion de l’écran . . . . . . . . . . . . . . . 8-2
Utilisation des listes d’actions. . . . . . . . . . 8-26
Paramétrage des fiches . . . . . . . . . . . . . . 8-2
Définition des listes d’actions . . . . . . . . 8-26
Utilisation de la fiche principale . . . . . . . 8-3
Que se passe-t-il lors du déclenchement
Cacher la fiche principale . . . . . . . . . . . 8-3
d’une action ? . . . . . . . . . . . . . . . . 8-27
Ajout de fiches . . . . . . . . . . . . . . . . . 8-3
Réponse par les événements . . . . . . . 8-27
Liaison de fiches . . . . . . . . . . . . . . 8-3
Comment les actions trouvent
Gestion de la disposition . . . . . . . . . . . 8-4
leurs cibles . . . . . . . . . . . . . . . . 8-29
Utilisation des fiches . . . . . . . . . . . . . . . 8-5
Actualisation des actions . . . . . . . . . . . 8-29
Contrôle du stockage en mémoire
Classes d’actions prédéfinies . . . . . . . . 8-30
des fiches . . . . . . . . . . . . . . . . . . . 8-5
Conception de composants action . . . . . 8-31
Affichage d’une fiche créée
Recensement d’actions . . . . . . . . . . . . 8-32
automatiquement . . . . . . . . . . . . . 8-6
Création et gestion de menus . . . . . . . . . . 8-32
Création dynamique de fiche . . . . . . . 8-6
Ouverture du concepteur de menus . . . . 8-33
Création de fiches non modales
Construction des menus . . . . . . . . . . . 8-34
comme fenêtres . . . . . . . . . . . . . . 8-7
Nom des menus . . . . . . . . . . . . . . 8-34
Création d’une instance de fiche
Nom des éléments de menu . . . . . . . 8-34
en utilisant une variable locale . . . . . 8-7
iv
Ajout, insertion et suppression Création de groupes de boutons outil . 8-52
d’éléments de menu . . . . . . . . . . . 8-35 Utilisation de boutons outil bascule . . 8-52
Ajout de lignes de séparation. . . . . . . 8-37 Ajout d’un composant barre multiple . . . 8-52
Spécification de touches accélératrices Définition de l’aspect
et de raccourcis clavier . . . . . . . . . . 8-37 de la barre multiple . . . . . . . . . . . 8-53
Création de sous-menus. . . . . . . . . . . . 8-37 Réponse aux clics . . . . . . . . . . . . . . . 8-53
Création de sous-menus par déplacement Affectation d’un menu
de menus existants . . . . . . . . . . . . 8-38 à un bouton outil . . . . . . . . . . . . 8-53
Déplacement d’éléments de menu . . . . 8-38 Ajout de barres d’outils cachées . . . . . . 8-54
Ajout d’images à des éléments de menu 8-39 Masquage et affichage d’une barre d’outils 8-54
Affichage du menu . . . . . . . . . . . . . 8-40
Edition des éléments de menu Chapitre 9
dans l’inspecteur d’objets . . . . . . . . . . 8-40 Types de contrôles 9-1
Utilisation du menu contextuel Contrôles texte . . . . . . . . . . . . . . . . . . . 9-1
du concepteur de menus . . . . . . . . . . 8-41 Contrôles de saisie . . . . . . . . . . . . . . . 9-2
Commandes du menu contextuel . . . . 8-41 Propriétés des contrôles de saisie . . . . . . . 9-3
Déplacement parmi les menus Contrôles de saisie mémo
à la conception . . . . . . . . . . . . . . 8-41 et texte formaté . . . . . . . . . . . . . . 9-3
Utilisation des modèles de menu . . . . . . 8-42 Contrôles de visualisation de texte
Enregistrement d’un menu comme modèle 8-43 (CLX seulement). . . . . . . . . . . . . . . . 9-4
Conventions de nom pour les éléments Libellés . . . . . . . . . . . . . . . . . . . . . . 9-4
et les gestionnaires d’événements Contrôles de saisies spécialisées . . . . . . . . . 9-5
des modèles de menu . . . . . . . . . . 8-44 Barres de défilement . . . . . . . . . . . . . . 9-5
Manipulation d’éléments de menu Barres graduées . . . . . . . . . . . . . . . . . 9-5
à l’exécution. . . . . . . . . . . . . . . . . . 8-45 Contrôles flèches haut-bas (VCL seulement) 9-6
Fusion de menus . . . . . . . . . . . . . . . . 8-45 Contrôles incrémenteur (CLX seulement) . . 9-6
Spécification du menu actif : Contrôles touche d’accès rapide
propriété Menu . . . . . . . . . . . . . . 8-45 (VCL seulement). . . . . . . . . . . . . . . . 9-7
Ordre des éléments de menu fusionnés : Contrôles séparateur . . . . . . . . . . . . . . 9-7
propriété GroupIndex . . . . . . . . . . 8-46 Boutons et contrôles similaires . . . . . . . . . . 9-7
Importation de fichiers ressource . . . . . . 8-46 Contrôles bouton . . . . . . . . . . . . . . . . 9-8
Conception de barres d’outils Boutons bitmap . . . . . . . . . . . . . . . . . 9-8
et de barres multiples . . . . . . . . . . . . . . 8-47 Turboboutons . . . . . . . . . . . . . . . . . . 9-9
Ajout d’une barre d’outils en utilisant Cases à cocher . . . . . . . . . . . . . . . . . . 9-9
un composant volet . . . . . . . . . . . . . 8-48 Boutons radio . . . . . . . . . . . . . . . . . . 9-9
Ajout d’un turbobouton à un volet . . . 8-48 Barres d’outils . . . . . . . . . . . . . . . . . 9-10
Spécification du glyphe Barres multiples (VCL seulement) . . . . . 9-10
d’un turbobouton . . . . . . . . . . . . . 8-49 Contrôles liste . . . . . . . . . . . . . . . . . . . 9-11
Définition de l’état initial Boîtes liste et boîtes liste de cases à cocher 9-11
d’un turbobouton . . . . . . . . . . . . . 8-49 Boîtes à options . . . . . . . . . . . . . . . . 9-12
Création d’un groupe de turboboutons . 8-49 Vues arborescentes . . . . . . . . . . . . . . 9-13
Utilisation de boutons bascule . . . . . . 8-50 Vues liste . . . . . . . . . . . . . . . . . . . . 9-13
Ajout d’une barre d’outils en utilisant Sélecteurs Date/Heure et calendriers
le composant barre d’outils . . . . . . . . . 8-50 mensuels (VCL seulement). . . . . . . . . 9-14
Ajout d’un bouton outil . . . . . . . . . . 8-50 Regroupement de contrôles . . . . . . . . . . . 9-14
Affectation d’images Boîtes groupe et groupes de boutons radio 9-14
à des boutons outil . . . . . . . . . . . . 8-51 Volets . . . . . . . . . . . . . . . . . . . . . . 9-15
Définition de l’aspect et des conditions Boîtes de défilement . . . . . . . . . . . . . 9-15
initiales d’un bouton outil . . . . . . . . 8-51 Contrôles onglets . . . . . . . . . . . . . . . 9-16
v
Contrôles pages . . . . . . . . . . . . . . . . 9-16 Enregistrement d’une image
Contrôles en-têtes . . . . . . . . . . . . . . . 9-16 dans un fichier . . . . . . . . . . . . . 10-21
Contrôles d’affichage . . . . . . . . . . . . . . . 9-16 Remplacement de l’image . . . . . . . 10-22
Barres d’état. . . . . . . . . . . . . . . . . . . 9-17 Utilisation du presse-papiers
Barres de progression . . . . . . . . . . . . . 9-17 avec les graphiques . . . . . . . . . . . . 10-23
Propriétés d’aide ou de conseil d’aide . . . 9-17 Copier des graphiques
Grilles . . . . . . . . . . . . . . . . . . . . . . . . 9-18 dans le presse-papiers. . . . . . . . . 10-23
Grilles de dessin . . . . . . . . . . . . . . . . 9-18 Couper des graphiques
Grilles de chaînes . . . . . . . . . . . . . . . 9-18 dans le presse-papiers. . . . . . . . . 10-23
Editeur de liste de valeurs (VCL seulement) . 9-19 Coller des graphiques
Contrôles graphiques . . . . . . . . . . . . . . . 9-20 depuis le presse-papiers . . . . . . . 10-24
Images . . . . . . . . . . . . . . . . . . . . . . 9-20 Techniques de dessin
Formes . . . . . . . . . . . . . . . . . . . . . . 9-20 dans une application . . . . . . . . . . . 10-25
Biseaux . . . . . . . . . . . . . . . . . . . . . 9-20 Répondre à la souris . . . . . . . . . . 10-25
Boîtes à peindre . . . . . . . . . . . . . . . . 9-21 Ajout d’un champ à un objet fiche . . 10-28
Contrôles animation (VCL seulement) . . . 9-21 Amélioration du dessin des lignes . . 10-29
Utilisation du multimédia . . . . . . . . . . . 10-31
Chapitre 10 Ajout de séquences vidéo silencieuses
Utilisation des graphiques à une application . . . . . . . . . . . . . 10-31
Exemple d’ajout de séquences vidéo
et du multimédia 10-1 silencieuses . . . . . . . . . . . . . . . 10-32
Présentation de la programmation relative
Ajout de séquences audio et/ou vidéo
aux graphiques . . . . . . . . . . . . . . . . . . 10-1
à une application . . . . . . . . . . . . . 10-33
Rafraîchissement de l’écran . . . . . . . . . . 10-2
Exemple d’ajout de séquences audio
Types des objets graphiques . . . . . . . . . 10-3
et/ou vidéo (VCL seulement) . . . . 10-35
Propriétés et méthodes communes
du canevas . . . . . . . . . . . . . . . . . . 10-4
Utilisation des propriétés
Chapitre 11
de l’objet canevas . . . . . . . . . . . . . . 10-5 Ecriture d’applications multithreads 11-1
Utilisation des crayons. . . . . . . . . . . 10-6 Définition d’objets thread . . . . . . . . . . . . 11-2
Utilisation des pinceaux . . . . . . . . . . 10-8 Initialisation du thread . . . . . . . . . . . . 11-3
Lecture et définition de pixels . . . . . 10-10 Affectation d’une priorité par défaut . . 11-3
Utilisation des méthodes du canevas Libération des threads . . . . . . . . . . 11-4
pour dessiner des objets graphiques. . . 10-10 Ecriture de la fonction thread . . . . . . . . 11-4
Dessin de lignes et de polylignes . . . 10-10 Utilisation du thread principal
Dessin de formes . . . . . . . . . . . . . 10-12 VCL/CLX . . . . . . . . . . . . . . . . . 11-4
Gestion de plusieurs objets de dessin Utilisation de variables locales
dans votre application . . . . . . . . . . . 10-13 aux threads . . . . . . . . . . . . . . . . 11-6
Faire le suivi de l’outil de dessin Vérification de l’arrêt
à utiliser . . . . . . . . . . . . . . . . . 10-13 par d’autres threads . . . . . . . . . . . 11-6
Changement d’outil en utilisant Gestion des exceptions
un turbobouton . . . . . . . . . . . . 10-14 dans la fonction thread . . . . . . . . . 11-7
Utilisation des outils de dessin . . . . . 10-14 Ecriture du code de nettoyage . . . . . . . 11-7
Dessiner sur un graphique . . . . . . . . . 10-18 Coordination de threads . . . . . . . . . . . . . 11-8
Création de graphiques défilables . . . 10-18 Eviter les accès simultanés . . . . . . . . . . 11-8
Ajout d’un contrôle image . . . . . . . 10-18 Verrouillage d’objets. . . . . . . . . . . . 11-8
Chargement et enregistrement Utilisation de sections critiques . . . . . 11-8
de fichiers graphiques . . . . . . . . . . . 10-20 Utilisation du synchronisateur à écriture
Chargement d’une image exclusive et lecture multiple . . . . . . 11-9
depuis un fichier . . . . . . . . . . . . 10-21
vi
Autres techniques de partage Classes d’exception VCL et CLX . . . . . 12-18
de la mémoire . . . . . . . . . . . . . . 11-10 Considérations de portabilité . . . . . . . 12-20
Attente des autres threads . . . . . . . . . 11-10
Attente de la fin d’exécution Chapitre 13
d’un thread . . . . . . . . . . . . . . . 11-10 Gestion en langage C++
Attente de l’achèvement d’une tâche . 11-11
Exécution d’objets thread . . . . . . . . . . . . 11-12
de VCL et CLX 13-1
Les modèles objet en C++ et en Pascal Objet . 13-1
Redéfinition de la priorité par défaut . . . 11-12
Héritage et interfaces . . . . . . . . . . . . . 13-2
Démarrage et arrêt des threads . . . . . . 11-13
Utilisation d’interface à la place
Débogage d’applications multithreads . . . . 11-13
de l’héritage multiple . . . . . . . . . . 13-2
Nommer un thread . . . . . . . . . . . . . 11-14
Déclaration des classes interfaces . . . . 13-2
Conversion d’un thread anonyme
IUnknown et IInterface . . . . . . . . . . 13-3
en thread nommé . . . . . . . . . . . . 11-14
Création de classes gérant IUnknown . 13-4
Affectation de noms distincts
Classes interfaces et gestion
à des threads similaires . . . . . . . . 11-15
de la durée de vie . . . . . . . . . . . . 13-5
Identification et instanciation des objets . . 13-6
Chapitre 12 Différences entre les références C++
Gestion des exceptions 12-1 et Pascal Objet . . . . . . . . . . . . . . 13-6
Gestion des exceptions C++ . . . . . . . . . . . 12-1 Copie d’objets . . . . . . . . . . . . . . . 13-7
Syntaxe de gestion des exceptions . . . . . . 12-2 Utilisation d’objets comme arguments
Le bloc try . . . . . . . . . . . . . . . . . . 12-2 de fonction . . . . . . . . . . . . . . . . 13-8
L’instruction throw . . . . . . . . . . . . . 12-3 Construction d’objets en C++Builder
L’instruction catch . . . . . . . . . . . . . 12-3 pour les classes VCL/CLX . . . . . . . . . 13-8
Redéclenchement des exceptions . . . . . . 12-4 Construction d’objets en C++ . . . . . . 13-8
Spécifications des exceptions . . . . . . . . . 12-4 Construction d’objets Pascal Objet . . . 13-8
Déroulement des exceptions . . . . . . . . . 12-5 Construction des objets C++Builder . . 13-8
Pointeurs sécurisés . . . . . . . . . . . . . 12-6 Appels de méthodes virtuelles dans les
Constructeurs dans la gestion d’exceptions 12-6 constructeurs des classes de base . . . . 13-10
Gestion des exceptions non interceptées Modèle Pascal Objet. . . . . . . . . . . .13-11
et inattendues . . . . . . . . . . . . . . . . . 12-6 Modèle C++ . . . . . . . . . . . . . . . .13-11
Exceptions structurées sous Win32 . . . . . . . 12-7 Modèle C++Builder . . . . . . . . . . . .13-11
Syntaxe des exceptions structurées . . . . . 12-8 Exemple : appel de méthodes virtuelles13-11
Gestion des exceptions structurées . . . . . 12-8 Initialisation par le constructeur
Filtres d’exceptions. . . . . . . . . . . . . . . 12-9 des données membres
Mélange du C++ avec des exceptions pour les fonctions virtuelles . . . . . 13-12
structurées. . . . . . . . . . . . . . . . . . 12-11 Destruction d’objets. . . . . . . . . . . . . 13-14
Exemple d’un programme C++ Exceptions déclenchées
ayant des exceptions C. . . . . . . . . 12-12 dans les constructeurs. . . . . . . . . 13-14
Définition d’exceptions . . . . . . . . . . . 12-13 Méthodes virtuelles appelées
Déclenchement d’exceptions . . . . . . . . 12-13 dans les destructeurs . . . . . . . . . 13-15
Blocs de terminaison. . . . . . . . . . . . . 12-14 AfterConstruction et BeforeDestruction . 13-15
Options de gestion des exceptions Fonctions virtuelles de classe . . . . . . . 13-15
C++Builder . . . . . . . . . . . . . . . . . 12-15 Gestion des types de données et des concepts
Gestion des exceptions VCL/CLX. . . . . . . 12-16 du langage Pascal Objet . . . . . . . . . . . 13-16
Différences entre la gestion d’exceptions Typedefs . . . . . . . . . . . . . . . . . . . 13-16
C++ et VCL/CLX . . . . . . . . . . . . . 12-16 Classes gérant le langage Pascal Objet . . 13-16
Gestion des exceptions du système Equivalents dans le langage C++
d’exploitation . . . . . . . . . . . . . . . . 12-17 du langage Pascal Objet . . . . . . . . . 13-17
Gestion des exceptions VCL et CLX. . . . 12-18 Paramètres var . . . . . . . . . . . . . . 13-17
vii
Paramètres sans type. . . . . . . . . . . 13-17 Registre . . . . . . . . . . . . . . . . . . . 14-7
Tableaux ouverts . . . . . . . . . . . . . . . 13-18 Autres différences . . . . . . . . . . . . . 14-8
Calcul du nombre d’éléments. . . . . . 13-18 Fonctionnalités manquantes dans la CLX . 14-9
Temporaires . . . . . . . . . . . . . . . . 13-19 Fonctionnalités non portées directement. . 14-9
Tableau de constantes . . . . . . . . . . 13-19 Comparaison entre les unités CLX et VCL 14-10
Macro OPENARRAY . . . . . . . . . . . 13-20 Différences dans les constructeurs
Macro EXISTINGARRAY . . . . . . . . 13-20 d’objets CLX . . . . . . . . . . . . . . . . 14-13
Fonctions C++ attendant un argument Gestion des événements widget
tableau ouvert . . . . . . . . . . . . . . 13-20 et système . . . . . . . . . . . . . . . . . 14-14
Types définis différemment . . . . . . . . . 13-20 Partage des fichiers source
Types de données booléens . . . . . . . 13-21 entre Windows et Linux . . . . . . . . . 14-14
Types de données Char . . . . . . . . . 13-21 Différences d’environnement
Interfaces Delphi . . . . . . . . . . . . . . . 13-21 entre Windows et Linux . . . . . . . . . 14-14
Chaînes de ressource . . . . . . . . . . . . 13-22 Structure de répertoires sous Linux . . . 14-17
Paramètres par défaut . . . . . . . . . . . . 13-22 Ecriture de code portable . . . . . . . . . 14-18
Informations de type à l’exécution . . . . 13-23 Utilisation des directives
Types sans correspondants . . . . . . . . . 13-24 conditionnelles . . . . . . . . . . . . . 14-19
Type réel sur six octets. . . . . . . . . . 13-24 Emission de messages . . . . . . . . . 14-20
Tableaux renvoyés par des fonctions . 13-24 Inclusion de code assembleur inline . 14-21
Extensions des mots clés . . . . . . . . . . 13-25 Différences de programmation
__classid . . . . . . . . . . . . . . . . . . 13-25 sous Linux . . . . . . . . . . . . . . . . . 14-22
__closure . . . . . . . . . . . . . . . . . . 13-25 Applications de bases de données
__property . . . . . . . . . . . . . . . . . 13-27 multiplates-formes . . . . . . . . . . . . . . 14-22
__published . . . . . . . . . . . . . . . . 13-29 Différences de dbExpress . . . . . . . . . 14-23
Extensions du mot clé __declspec . . . . . 13-29 Différences au niveau composant . . . . . 14-24
__declspec(delphiclass) . . . . . . . . . 13-29 Différences au niveau
__declspec(delphireturn). . . . . . . . . 13-30 de l’interface utilisateur . . . . . . . . . 14-25
__declspec(delphirtti) . . . . . . . . . . 13-30 Portage d’applications
__declspec(dynamic) . . . . . . . . . . . 13-30 de bases de données vers Linux. . . . . 14-26
__declspec(hidesbase) . . . . . . . . . . 13-30 Mise à jour des données
__declspec(package) . . . . . . . . . . . 13-31 dans les applications dbExpress. . . . . 14-28
__declspec(pascalimplementation) . . . 13-31 Applications Internet multiplates-formes . . 14-30
__declspec(uuid) . . . . . . . . . . . . . 13-31 Portage d’applications Internet
vers Linux . . . . . . . . . . . . . . . . . 14-31
Chapitre 14
Développement d’applications Chapitre 15
multiplates-formes 14-1 Utilisation des paquets
Création d’applications multiplates-formes . . 14-1 et des composants 15-1
Portage d’applications Windows vers Linux. . 14-2 Pourquoi utiliser des paquets ? . . . . . . . . 15-2
Techniques de portage. . . . . . . . . . . . . 14-2 Les paquets et les DLL standard . . . . . . 15-2
Portages propres à une plate-forme . . . 14-3 Paquets d’exécution . . . . . . . . . . . . . . . 15-3
Portages multiplates-formes. . . . . . . . 14-3 Utilisation des paquets
Portages d’émulation Windows . . . . . 14-3 dans une application . . . . . . . . . . . . 15-3
Portage de votre application . . . . . . . . . 14-3 Paquets chargés dynamiquement . . . . . . 15-4
CLX et VCL . . . . . . . . . . . . . . . . . . . 14-5 Choix des paquets d’exécution à utiliser. . 15-4
Différences de CLX . . . . . . . . . . . . . . 14-6 Paquets personnalisés . . . . . . . . . . . . 15-5
Présentation visuelle . . . . . . . . . . . . 14-6 Paquets de conception . . . . . . . . . . . . . . 15-5
Styles . . . . . . . . . . . . . . . . . . . . . 14-7 Installation de paquets de composants. . . 15-6
Variants . . . . . . . . . . . . . . . . . . . 14-7 Création et modification de paquets . . . . . . 15-7
viii
Création d’un paquet . . . . . . . . . . . . . 15-7 Basculement dynamique de DLL
Modification d’un paquet existant . . . . . . 15-8 de ressource . . . . . . . . . . . . . . . . 16-13
Fichiers source de paquet et fichiers Localisation des applications . . . . . . . . . 16-13
d’options de projet . . . . . . . . . . . . . . 15-9 Localisation des ressources . . . . . . . . 16-13
Empaquetage des composants . . . . . . 15-9
Présentation de la structure d’un paquet . 15-10 Chapitre 17
Nom de paquets . . . . . . . . . . . . . 15-10 Déploiement des applications 17-1
Liste Requires . . . . . . . . . . . . . . . 15-10 Déploiement d’applications généralistes . . . 17-1
Liste Contains . . . . . . . . . . . . . . 15-11 Utilisation des programmes d’installation . 17-2
Construction des paquets . . . . . . . . . . 15-11 Identification des fichiers
Directives de compilation de l’application. . . . . . . . . . . . . . 17-3
propres aux paquets . . . . . . . . . . 15-12 Fichiers de l’application . . . . . . . . . 17-3
Utilisation du compilateur et du lieur Fichiers paquet. . . . . . . . . . . . . . . 17-3
en ligne de commande . . . . . . . . . 15-13 Modules de fusion. . . . . . . . . . . . . 17-4
Fichiers de paquets créés Contrôles ActiveX . . . . . . . . . . . . . 17-5
lors d’une construction. . . . . . . . . 15-14 Applications complémentaires . . . . . . 17-6
Déploiement de paquets . . . . . . . . . . . . 15-14 Emplacement des DLL . . . . . . . . . . 17-6
Déploiement d’applications utilisant Déploiement d’applications CLX . . . . . . . . 17-6
des paquets . . . . . . . . . . . . . . . . . 15-15 Déploiement d’applications
Distribution de paquets de bases de données . . . . . . . . . . . . . . 17-7
à d’autres développeurs . . . . . . . . . . 15-15 Déploiement d’applications de bases
Fichiers de collection de paquets . . . . . 15-15 de données dbExpress . . . . . . . . . . . 17-8
Déploiement d’applications BDE . . . . . . 17-9
Chapitre 16 Le moteur de bases de données
Création d’applications Borland . . . . . . . . . . . . . . . . . . 17-9
internationales 16-1 SQL Links . . . . . . . . . . . . . . . . 17-10
Internationalisation et localisation. . . . . . . . 16-1 Déploiement d’applications de bases de
Internationalisation . . . . . . . . . . . . . . 16-1 données multiniveaux (DataSnap) . . . .17-11
Localisation . . . . . . . . . . . . . . . . . . . 16-2 Déploiement d’applications Web . . . . . . . .17-11
Internationalisation des applications . . . . . . 16-2 Déploiement sur serveur Apache . . . . . 17-12
Codage de l’application . . . . . . . . . . . . 16-2 Activation des modules. . . . . . . . . 17-12
Jeux de caractères. . . . . . . . . . . . . . 16-2 Applications CGI . . . . . . . . . . . . 17-12
Jeux de caractères OEM et ANSI . . . . . 16-3 Programmation pour des environnements
Jeux de caractères sur plusieurs octets . 16-3 hôtes hétérogènes . . . . . . . . . . . . . . . 17-13
Caractères larges . . . . . . . . . . . . . . 16-3 Résolution d’écran et profondeur
Inclure des fonctionnalités bi-directionnelles de couleurs . . . . . . . . . . . . . . . . . 17-14
dans les applications . . . . . . . . . . . 16-4 Si vous n’utilisez pas de redimensionnement
Propriété BiDiMode . . . . . . . . . . . . 16-6 dynamique . . . . . . . . . . . . . . . 17-14
Fonctionnalités spécifiques Si vous redimensionnez dynamiquement
aux cibles locales . . . . . . . . . . . . . 16-9 les fiches et les contrôles . . . . . . . 17-14
Conception de l’interface utilisateur. . . . . 16-9 Adaptation à des profondeurs de couleurs
Texte . . . . . . . . . . . . . . . . . . . . . 16-9 variables. . . . . . . . . . . . . . . . . 17-16
Images graphiques . . . . . . . . . . . . 16-10 Fontes . . . . . . . . . . . . . . . . . . . . . 17-16
Formats et ordre de tri. . . . . . . . . . 16-10 Versions des systèmes d’exploitation . . . 17-17
Correspondances entre claviers. . . . . 16-10 Termes du contrat de licence logicielle . . . 17-17
Isolement des ressources . . . . . . . . . . 16-11 DEPLOY . . . . . . . . . . . . . . . . . . . 17-17
Création de DLL de ressource . . . . . . . 16-11 README . . . . . . . . . . . . . . . . . . . 17-18
Utilisation des DLL de ressource . . . . . 16-12 Contrat de licence . . . . . . . . . . . . . . 17-18
Documentation de produits
vendus par un tiers . . . . . . . . . . . . 17-18
ix
Partie II Edition des données affichées
dans un contrôle . . . . . . . . . . . . . 19-6
Développement d’applications Activation et désactivation de l’affichage
de bases de données des données . . . . . . . . . . . . . . . . . 19-7
Rafraîchissement de l’affichage
Chapitre 18 des données . . . . . . . . . . . . . . . . . 19-7
Conception d’applications Activation des événements souris,
clavier et timer. . . . . . . . . . . . . . . . 19-8
de bases de données 18-1 Choix de l’organisation des données. . . . . . 19-8
Utilisation des bases de données . . . . . . . . 18-1
Affichage d’un seul enregistrement. . . . . 19-8
Types de bases de données . . . . . . . . . . 18-3
Affichage de données
Sécurité des bases de données . . . . . . . . 18-4
en tant que libellés. . . . . . . . . . . . 19-9
Transactions . . . . . . . . . . . . . . . . . . . 18-5
Affichage et édition de champs
Intégrité référentielle, procédures stockées
dans une zone de saisie . . . . . . . . . 19-9
et déclencheurs . . . . . . . . . . . . . . . . 18-6
Affichage et édition de texte
Architecture des bases de données . . . . . . . 18-6
dans un contrôle mémo . . . . . . . . 19-10
Structure générale . . . . . . . . . . . . . . . 18-7
Affichage et édition dans un contrôle mémo
Fiche interface utilisateur . . . . . . . . . 18-7
de texte formaté . . . . . . . . . . . . 19-10
Module de données . . . . . . . . . . . . 18-7
Affichage et édition de champs graphiques
Connexion directe à un serveur
dans un contrôle image . . . . . . . . .19-11
de bases de données . . . . . . . . . . . . . 18-9
Affichage de données dans des boîtes liste
Utilisation d’un fichier dédié sur disque . 18-10
et des boîtes à options . . . . . . . . .19-11
Connexion à un autre ensemble
Manipulation de champs booléens
de données . . . . . . . . . . . . . . . . . 18-12
avec des cases à cocher . . . . . . . . 19-15
Connexion d’un ensemble de données client
Limitation de valeurs de champ
à un autre ensemble de données
avec des boutons radio . . . . . . . . 19-16
dans la même application . . . . . . . 18-14
Affichage de plusieurs enregistrements . 19-17
Utilisation d’une architecture
Visualisation et édition des données
multiniveau . . . . . . . . . . . . . . . 18-15
avec un contrôle TDBGrid . . . . . . . . . . 19-17
Combinaison des approches . . . . . . . . 18-16
Utilisation d’un contrôle grille
Conception de l’interface utilisateur . . . . . 18-17
à son état par défaut . . . . . . . . . . . 19-18
Analyse des données . . . . . . . . . . . . 18-18
Création d’une grille personnalisée. . . . 19-19
Ecriture de rapports . . . . . . . . . . . . . 18-18
Présentation des colonnes persistantes 19-20
Création de colonnes persistantes . . . 19-21
Chapitre 19 Suppression de colonnes persistantes. 19-22
Utilisation de contrôles de données 19-1 Modification de l’ordre
Fonctionnalités communes des colonnes persistantes . . . . . . . 19-22
des contrôles de données . . . . . . . . . . . . 19-2 Définition des propriétés de colonne
Association d’un contrôle de données en mode conception . . . . . . . . . . 19-23
à un ensemble de données . . . . . . . . . 19-3 Définition d’une colonne
Modification de l’ensemble de données de liste de référence . . . . . . . . . . 19-24
associé à l’exécution . . . . . . . . . . . 19-4 Insertion d’un bouton
Activation et désactivation dans une colonne . . . . . . . . . . . 19-24
de la source de données . . . . . . . . . 19-4 Restauration des valeurs par défaut
Réponse aux modifications effectuées d’une colonne . . . . . . . . . . . . . 19-25
par le biais de la source de données . . 19-4 Affichage des champs ADT et tableau . . 19-25
Edition et mise à jour des données . . . . . 19-5 Définition des options de la grille . . . . 19-28
Activation de l’édition des contrôles Saisie de modifications dans la grille. . . 19-29
lors d’une saisie utilisateur . . . . . . . 19-5 Contrôle du dessin de la grille . . . . . . 19-30
x
Comment répondre aux actions de l’utilisateur Ouverture et fermeture des champs
à l’exécution. . . . . . . . . . . . . . . . . 19-30 d’une grille de décision . . . . . . . . 20-12
Création d’une grille qui contient d’autres Réorganisation des lignes et des colonnes
contrôles orientés données . . . . . . . . . . 19-31 d’une grille de décision . . . . . . . . 20-12
Navigation et manipulation Perforation pour voir les détails
d’enregistrements . . . . . . . . . . . . . . . 19-33 dans les grilles de décision . . . . . . 20-13
Choix des boutons visibles . . . . . . . . . 19-34 Limite des dimensions à sélectionner
Affichage et dissimulation des boutons dans les grilles de décision . . . . . . 20-13
en mode conception . . . . . . . . . . 19-34 Propriétés des grilles de décision . . . . . 20-13
Affichage et dissimulation des boutons Création et utilisation de graphes
à l’exécution . . . . . . . . . . . . . . . 19-34 de décision . . . . . . . . . . . . . . . . . . . 20-14
Affichage de panneaux d’information. . . 19-35 Création de graphes de décision . . . . . 20-14
Utilisation d’un navigateur pour plusieurs Utilisation de graphes de décision . . . . 20-15
ensembles de données . . . . . . . . . . . 19-35 Affichage du graphe de décision . . . . . 20-16
Personnalisation du graphe de décision . 20-17
Chapitre 20 Définition des modèles de graphe
Utilisation de composants de décision par défaut . . . . . . . . 20-18
Personnalisation des séries
d’aide à la décision 20-1 d’un graphe de décision . . . . . . . 20-19
Présentation . . . . . . . . . . . . . . . . . . . . 20-1
Utilisation des composants d’aide
Présentation des références croisées. . . . . . . 20-2
à la décision à l’exécution . . . . . . . . . . 20-20
Références croisées à une dimension . . . . 20-3
Pivots de décision à l’exécution . . . . . . 20-20
Références croisées à plusieurs
Grilles de décision à l’exécution . . . . . 20-21
dimensions . . . . . . . . . . . . . . . . . . 20-3
Graphes de décision à l’exécution . . . . 20-21
Instructions relatives à l’utilisation de composants
Considérations relatives au contrôle
d’aide à la décision . . . . . . . . . . . . . . . 20-3
de la mémoire . . . . . . . . . . . . . . . . . 20-21
Utilisation d’ensembles de données
Définition du maximum de dimensions,
avec les composants d’aide à la décision . . . 20-5
de champs récapitulatifs, et de cellules 20-22
Création d’ensembles de données de décision
Définition de l’état des dimensions. . . . 20-22
avec TQuery ou TTable . . . . . . . . . . . 20-6
Utilisation de dimensions paginées. . . . 20-23
Création d’ensembles de données de décision
avec l’éditeur de requête de décision . . . 20-6
Utilisation des cubes de décision . . . . . . . . 20-7
Chapitre 21
Propriétés et événements Connexion aux bases de données 21-1
des cubes de décision . . . . . . . . . . . . 20-8 Utilisation de connexions implicites . . . . . . 21-2
Utilisation de l’éditeur de cube de décision 20-8 Contrôles des connexions . . . . . . . . . . . . 21-3
Visualisation et modification des paramètres Connexion à un serveur
de dimensions . . . . . . . . . . . . . . . 20-8 de bases de données . . . . . . . . . . . . 21-3
Définition du maximum de dimensions Déconnexion d’un serveur
et de récapitulations . . . . . . . . . . . 20-9 de base de données . . . . . . . . . . . . . 21-4
Visualisation et modification des options Contrôle de la connexion au serveur . . . . . 21-4
de conception . . . . . . . . . . . . . . . 20-9 Gestion des transactions . . . . . . . . . . . . . 21-6
Utilisation de sources de décision . . . . . . . 20-10 Démarrage d’une transaction . . . . . . . . 21-7
Propriétés et événements . . . . . . . . . . 20-10 Achèvement d’une transaction . . . . . . . 21-9
Utilisation de pivots de décision . . . . . . . 20-10 Achèvement d’une transaction réussie . 21-9
Propriétés des pivots de décision . . . . . 20-11 Achèvement d’une transaction
Création et utilisation de grilles de décision . 20-11 non réussie . . . . . . . . . . . . . . . . 21-9
Création de grilles de décision . . . . . . . 20-12 Spécification du niveau d’isolation
Utilisation de grilles de décision . . . . . . 20-12 des transactions . . . . . . . . . . . . . . 21-10
Envoi de commandes au serveur. . . . . . . .21-11
xi
Utilisation d’ensembles de données associés 21-13 Définition d’options de filtre . . . . . . . 22-18
Fermeture d’ensembles de données Navigation parmi les enregistrements
sans déconnexion du serveur . . . . . . . 21-13 d’un ensemble de données filtré . . . . 22-19
Déplacement parmi les ensembles Modification des données . . . . . . . . . . . 22-20
de données associés . . . . . . . . . . . . 21-14 Modification d’enregistrements . . . . . . 22-20
Obtention de métadonnées . . . . . . . . . . . 21-14 Ajout de nouveaux enregistrements . . . 22-21
Enumération des tables disponibles . . . . 21-15 Insertion d’enregistrements . . . . . . 22-22
Enumération des champs d’une table . . . 21-15 Ajout d’enregistrements à la fin . . . . 22-23
Enumération des procédures stockées Suppression d’enregistrements . . . . . . 22-23
disponibles . . . . . . . . . . . . . . . . . 21-15 Validation des données . . . . . . . . . . . 22-24
Enumération des index disponibles . . . . 21-16 Annulation des modifications . . . . . . . 22-24
Enumération des paramètres Modification d’enregistrements entiers. . 22-25
de procédure stockée . . . . . . . . . . . 21-16 Champs calculés . . . . . . . . . . . . . . . . 22-26
Types d’ensembles de données . . . . . . . . 22-27
Chapitre 22 Utilisation d’ensembles de données
Présentation de type table . . . . . . . . . . . . . . . . . . 22-29
Avantages de l’utilisation des ensembles
des ensembles de données 22-1 de données de type table. . . . . . . . . 22-30
Utilisation des descendants de TDataSet . . . . 22-2
Tri des enregistrements avec des index . 22-30
Détermination des états d’un ensemble
Obtention d’informations sur les index 22-31
de données . . . . . . . . . . . . . . . . . . . . 22-3
Spécification d’un index
Ouverture et fermeture des ensembles
avec IndexName . . . . . . . . . . . . 22-31
de données . . . . . . . . . . . . . . . . . . . . 22-5
Création d’un index
Navigation dans les ensembles de données . . 22-6
avec IndexFieldNames . . . . . . . . 22-32
Utilisation des méthodes First et Last . . . . 22-7
Utilisation d’index pour chercher
Utilisation des méthodes Next et Prior . . . 22-7
des enregistrements . . . . . . . . . . . . 22-32
Utilisation de la méthode MoveBy . . . . . 22-8
Exécution d’une recherche
Utilisation des propriétés Eof et Bof. . . . . 22-9
avec les méthodes Goto . . . . . . . . 22-33
Eof . . . . . . . . . . . . . . . . . . . . . . 22-9
Exécution d’une recherche
Bof . . . . . . . . . . . . . . . . . . . . . 22-10
avec les méthodes Find . . . . . . . . 22-34
Marquage d’enregistrements . . . . . . . . 22-11
Spécification de l’enregistrement en cours
La propriété Bookmark . . . . . . . . . 22-11
après une recherche réussie . . . . . 22-34
La méthode GetBookmark . . . . . . . 22-11
Recherche sur des clés partielles . . . 22-34
Les méthodes GotoBookmark
Réitération ou extension
et BookmarkValid . . . . . . . . . . . . 22-11
d’une recherche . . . . . . . . . . . . 22-35
La méthode CompareBookmarks. . . . 22-11
Limitation des enregistrements
La méthode FreeBookmark . . . . . . . 22-11
avec des portées . . . . . . . . . . . . . . 22-35
Un exemple d’utilisation de signets . . 22-12
Présentation des différences
Recherche dans les ensembles de données . . 22-12
entre les portées et les filtres . . . . . 22-35
Utilisation de la méthode Locate. . . . . . 22-12
Spécification de portées. . . . . . . . . 22-36
Utilisation de la méthode Lookup . . . . . 22-13
Modification d’une portée . . . . . . . 22-39
Affichage et édition d’ensembles de données
Application ou annulation
en utilisant des filtres . . . . . . . . . . . . . 22-15
d’une portée . . . . . . . . . . . . . . 22-40
Activation et désactivation des filtres . . . 22-15
Création de relations maître/détail . . . . 22-40
Création de filtres . . . . . . . . . . . . . . 22-16
Comment faire de la table la partie détail
Définition de la propriété Filter . . . . 22-16
d’un autre ensemble de données . . 22-41
Ecriture d’un gestionnaire d’événement
Utilisation de tables détail imbriquées 22-43
OnFilterRecord . . . . . . . . . . . . . 22-18
Contrôle des accès en lecture/écriture
Permutation entre les gestionnaires
aux tables . . . . . . . . . . . . . . . . . . 22-44
d’événements filtre à l’exécution . . . 22-18
xii
Création et suppression des tables. . . . . 22-44 Définition d’un champ de données . . . 23-7
Création de tables . . . . . . . . . . . . 22-44 Définition d’un champ calculé . . . . . . 23-8
Suppression de tables . . . . . . . . . . 22-47 Programmation d’un champ calculé . . 23-9
Vidage des tables. . . . . . . . . . . . . . . 22-47 Définition d’un champ de référence . 23-10
Synchronisation des tables . . . . . . . . . 22-48 Définition d’un champ agrégat . . . . 23-12
Utilisation d’ensembles de données Suppression de champs persistants. . . . 23-12
de type requête. . . . . . . . . . . . . . . . . 22-48 Définition des événements et des propriétés
Spécification de la requête . . . . . . . . . 22-49 des champs persistants . . . . . . . . . . 23-13
Spécification d’une requête en utilisant Définition des propriétés d’affichage
la propriété SQL . . . . . . . . . . . . 22-50 et d’édition en mode conception . . 23-13
Spécification d’une requête en utilisant Définition des propriétés des composants
la propriété CommandText . . . . . . 22-51 champ à l’exécution . . . . . . . . . . 23-15
Utilisation de paramètres Création des ensembles d’attributs
dans les requêtes . . . . . . . . . . . . . . 22-51 pour les composants champ . . . . . 23-15
Fourniture des paramètres Association des ensembles d’attributs
pendant la conception . . . . . . . . . 22-52 aux composants champ . . . . . . . . 23-16
Fourniture des paramètres Suppression des associations
pendant l’exécution. . . . . . . . . . . 22-53 d’ensembles d’attributs . . . . . . . . 23-16
Etablissement de relations maître/détail Contrôle ou dissimulation de la saisie
en utilisant des paramètres . . . . . . . . 22-54 utilisateur . . . . . . . . . . . . . . . . 23-17
Préparation des requêtes . . . . . . . . . . 22-55 Utilisation des formats par défaut pour les
Exécution de requêtes qui ne renvoient pas champs numériques, date et heure . 23-17
d’ensemble de résultats . . . . . . . . . . 22-56 Gestion des événements . . . . . . . . 23-18
Utilisation d’ensembles de résultats Manipulation des méthodes de champ
unidirectionnels. . . . . . . . . . . . . . . 22-57 lors de l’exécution . . . . . . . . . . . . . . 23-19
Utilisation d’ensembles de données de type Affichage, conversion et accès aux valeurs
procédure stockée . . . . . . . . . . . . . . . 22-57 des champs . . . . . . . . . . . . . . . . . . 23-20
Utilisation de paramètres Affichage de valeurs dans les contrôles
avec les procédures stockées . . . . . . . 22-59 standard . . . . . . . . . . . . . . . . . . 23-20
Définition des paramètres Conversion des valeurs de champs. . . . 23-21
pendant la conception . . . . . . . . . 22-60 Accès à des valeurs par la propriété par défaut
Utilisation des paramètres d’un ensemble de données . . . . . . . . 23-22
pendant l’exécution. . . . . . . . . . . 22-61 Accès à des valeurs par la propriété Fields
Préparation des procédures stockées . . . 22-62 d’un ensemble de données . . . . . . . . 23-23
Exécution de procédures stockées qui ne Accès à des valeurs par la méthode
renvoient pas d’ensemble de résultats. . 22-62 FieldByName d’un ensemble
Lecture de plusieurs ensembles de données . . . . . . . . . . . . . . . . . 23-23
de résultats . . . . . . . . . . . . . . . . . 22-63 Définition de la valeur par défaut
d’un champ . . . . . . . . . . . . . . . . . . 23-24
Chapitre 23 Utilisation de contraintes . . . . . . . . . . . 23-24
Manipulation Création de contrainte personnalisée . . . 23-24
Utilisation des contraintes du serveur . . 23-25
des composants champ 23-1 Utilisation des champs objet . . . . . . . . . 23-26
Composants champ dynamique . . . . . . . . . 23-2
Affichage des champs ADT et tableau . . 23-27
Champs persistants . . . . . . . . . . . . . . . . 23-3
Utilisation des champs ADT. . . . . . . . 23-27
Création de champs persistants . . . . . . . 23-4
Utilisation de composants champ
Modification de l’ordre des champs
persistant . . . . . . . . . . . . . . . . 23-27
persistants . . . . . . . . . . . . . . . . . . . 23-6
Utilisation de la méthode FieldByName
Définition de nouveaux champs
d’un ensemble de données . . . . . . 23-28
persistants . . . . . . . . . . . . . . . . . . . 23-6
xiii
Utilisation de la propriété FieldValues Liaison des paramètres . . . . . . . . . 24-13
d’un ensemble de données . . . . . . 23-28 Manipulation des procédures stockées
Utilisation de la propriété FieldValues redéfinies d’Oracle. . . . . . . . . . . 24-13
d’un champ ADT . . . . . . . . . . . . 23-28 Connexion aux bases de données
Utilisation de la propriété Fields avec TDatabase . . . . . . . . . . . . . . 24-14
d’un champ ADT . . . . . . . . . . . . 23-28 Association d’un composant
Utilisation des champs tableau. . . . . . . 23-29 base de données à une session. . . . 24-14
Utilisation de champs persistants . . . 23-29 Interactions entre les composants
Utilisation de la propriété FieldValues base de données et session . . . . . . 24-15
d’un champ tableau . . . . . . . . . . 23-29 Identification de la base de données . 24-15
Utilisation de la propriété Fields Ouverture d’une connexion
d’un champ tableau . . . . . . . . . . 23-29 avec TDatabase. . . . . . . . . . . . . 24-17
Utilisation des champs ensemble Utilisation des composants base de données
de données . . . . . . . . . . . . . . . . . 23-30 dans les modules de données . . . . 24-18
Affichage des champs ensemble Gestion des sessions de bases de données 24-18
de données. . . . . . . . . . . . . . . . 23-30 Activation d’une session . . . . . . . . 24-20
Accès aux données d’un ensemble Spécification du comportement
de données imbriqué . . . . . . . . . . 23-30 de la connexion de base de données
Utilisation de champs de référence . . . . 23-31 par défaut . . . . . . . . . . . . . . . . 24-21
Affichage des champs de référence . . 23-31 Gestion des connexions de bases
Accès aux données d’un champ de données . . . . . . . . . . . . . . . 24-22
de référence . . . . . . . . . . . . . . . 23-31 Manipulation des tables Paradox et dBASE
protégées par mot de passe . . . . . 24-24
Chapitre 24 Spécification des répertoires Paradox. 24-27
Utilisation du moteur de bases Manipulation des alias BDE . . . . . . 24-28
Récupération des informations
de données Borland 24-1 d’une session . . . . . . . . . . . . . . 24-29
Architecture BDE . . . . . . . . . . . . . . . . . 24-1
Création de sessions supplémentaires 24-30
Utilisation d’ensembles de données BDE . . 24-2
Affectation d’un nom à une session . 24-31
Association d’un ensemble de données
Gestion de sessions multiples . . . . . 24-32
avec les connexions de bases de données
Utilisation des transactions avec le BDE . . 24-34
et de session . . . . . . . . . . . . . . . . 24-3
Utilisation du SQL transparent . . . . . . 24-35
Mise en cache des BLOBS . . . . . . . . . 24-4
Utilisation de transactions locales . . . . 24-35
Obtention d’un handle BDE. . . . . . . . 24-5
Utilisation du BDE pour placer
Utilisation de TTable. . . . . . . . . . . . . . 24-5
en mémoire cache les mises à jour . . . . . 24-36
Spécification du type d’une table locale . 24-6
Activation des mises à jour BDE
Contrôle d’accès en lecture/écriture
en mémoire cache . . . . . . . . . . . . . 24-38
aux tables locales . . . . . . . . . . . . . 24-6
Application des mises à jour BDE
Spécification d’un fichier d’index
en mémoire cache . . . . . . . . . . . . . 24-38
dBASE . . . . . . . . . . . . . . . . . . . 24-7
Application des mises à jour en mémoire
Renommer une table locale . . . . . . . . 24-8
cache avec une base de données. . . 24-40
Importation des données
Application des mises à jour en mémoire
d’une autre table . . . . . . . . . . . . . 24-8
cache avec les méthodes de composant
Utilisation de TQuery . . . . . . . . . . . . . 24-9
base de données . . . . . . . . . . . . 24-41
Création de requêtes hétérogènes . . . 24-10
Création d’un gestionnaire d’événement
Obtention d’un ensemble de résultats
OnUpdateRecord. . . . . . . . . . . . 24-41
modifiable . . . . . . . . . . . . . . . . 24-11
Gestion des erreurs de mise à jour
Mise à jour des ensembles de résultats
en mémoire cache . . . . . . . . . . . 24-43
en lecture seule . . . . . . . . . . . . . 24-12
Utilisation de TStoredProc . . . . . . . . . 24-13
xiv
Utilisation d’objets mise à jour pour mettre Utilisation des ensembles
à jour un ensemble de données . . . . . 24-45 d’enregistrements . . . . . . . . . . . .25-11
Création d’instructions SQL Filtrage d’enregistrements
pour les composants mise à jour . . . 24-46 à partir de signets . . . . . . . . . . . 25-12
Utilisation de plusieurs objets Lecture d’enregistrements
mise à jour . . . . . . . . . . . . . . . . 24-50 de façon asynchrone. . . . . . . . . . 25-13
Exécution des instructions SQL. . . . . 24-52 Utilisation des mises à jour groupées. 25-13
Utilisation de TBatchMove . . . . . . . . . . . 24-55 Lecture et enregistrement des données
Création d’un composant action groupée. 24-55 dans des fichiers . . . . . . . . . . . . 25-16
Spécification d’un mode d’action Utilisation de TADODataSet. . . . . . . . 25-17
groupée . . . . . . . . . . . . . . . . . . . 24-56 Utilisation d’objets commande . . . . . . . . 25-19
Ajout d’enregistrements . . . . . . . . . 24-57 Spécification de la commande . . . . . . . 25-19
Mise à jour d’enregistrements . . . . . 24-57 Utilisation de la méthode Execute . . . . 25-20
Ajout et mise à jour d’enregistrements 24-57 Annulation des commandes . . . . . . . . 25-20
Copie d’ensembles de données . . . . . 24-57 Récupération d’ensembles de résultats
Suppression d’enregistrements . . . . . 24-58 à l’aide de commandes . . . . . . . . . . 25-21
Mappage des types de données . . . . . . 24-58 Gestion des paramètres de commande. . 25-21
Exécution d’une action groupée . . . . . . 24-59
Gestion des erreurs relatives Chapitre 26
aux actions groupées. . . . . . . . . . . . 24-59 Utilisation d’ensembles de données
Dictionnaire de données . . . . . . . . . . . . 24-60
Outils de manipulation du BDE . . . . . . . . 24-62
unidirectionnels 26-1
Types d’ensembles de données
unidirectionnels . . . . . . . . . . . . . . . . . 26-2
Chapitre 25 Connexion au serveur de bases de données . 26-3
Utilisation des composants ADO 25-1 Configuration de TSQLConnection . . . . . 26-4
Présentation générale des composants ADO. . 25-2 Identification du pilote . . . . . . . . . . 26-4
Connexion à des stockages de données ADO . 25-3 Spécification des paramètres
Connexion à un stockage de données de connexion . . . . . . . . . . . . . . . 26-4
avec TADOConnection . . . . . . . . . . . 25-3 Dénomination d’une description
Accès à l’objet connexion . . . . . . . . . 25-5 de connexion . . . . . . . . . . . . . . . 26-5
Optimisation d’une connexion . . . . . . . . 25-5 Utilisation de l’éditeur de connexion . . 26-5
Connexions asynchrones . . . . . . . . . 25-5 Spécification des données à afficher . . . . . . 26-6
Contrôle des dépassements de délais . . 25-6 Représentation des résultats d’une requête 26-7
Indication des types d’opérations Représentation des enregistrements
pris en charge par la connexion . . . . 25-6 d’une table . . . . . . . . . . . . . . . . . . 26-7
Spécification de l’exécution automatique Représentation d’une table en utilisant
des transactions par la connexion . . . 25-7 TSQLDataSet . . . . . . . . . . . . . . . . 26-8
Accès aux commandes d’une connexion . . 25-8 Représentation d’une table
Evénements connexion ADO . . . . . . . . . 25-8 en utilisant TSQLTable . . . . . . . . . 26-8
Evénements se produisant pendant Représentation des résultats
l’établissement d’une connexion . . . . 25-8 d’une procédure stockée . . . . . . . . . . 26-8
Evénements se produisant pendant Récupération des données. . . . . . . . . . . . 26-9
la déconnexion . . . . . . . . . . . . . . 25-9 Préparation de l’ensemble de données . . . 26-9
Evénements se produisant pendant Récupération de plusieurs ensembles
la gestion des transactions. . . . . . . . 25-9 de données . . . . . . . . . . . . . . . . . 26-10
Autres événements . . . . . . . . . . . . . 25-9 Exécution des commandes ne renvoyant pas
Utilisation des ensembles de données ADO . . 25-9 d’enregistrement . . . . . . . . . . . . . . . 26-10
Connexion d’un ensemble de données ADO Spécification de la commande à exécuter .26-11
à un stockage de données . . . . . . 25-10 Exécution de la commande . . . . . . . . .26-11
xv
Création et modification des métadonnées Clonage d’un curseur d’ensemble
du serveur . . . . . . . . . . . . . . . . . . 26-12 de données client . . . . . . . . . . . 27-17
Définition de curseurs liés maître/détail . . . 26-13 Ajout d’informations d’application
Accès aux informations de schéma . . . . . . 26-13 aux données . . . . . . . . . . . . . . . . 27-18
Récupération de métadonnées dans un Utilisation d’un ensemble de données client
ensemble de données unidirectionnel . . 26-14 pour mettre en cache les mises à jour . . . 27-18
Lecture des données après l’utilisation Présentation de l’utilisation d’un cache
de l’ensemble de données pour les mises à jour . . . . . . . . . . . 27-19
pour des métadonnées . . . . . . . . . 26-15 Choix du type d’ensemble de données
Structure des ensembles pour les mises à jour en cache. . . . . . 27-21
de métadonnées. . . . . . . . . . . . . 26-15 Indication des enregistrements modifiés . 27-22
Débogage d’applications dbExpress. . . . . . 26-19 Mise à jour des enregistrements . . . . . 27-24
Utilisation de TSQLMonitor pour contrôler Application des mises à jour . . . . . . 27-24
les commandes SQL . . . . . . . . . . . . 26-19 Intervention pendant l’application
Utilisation d’un callback pour contrôler des mises à jour . . . . . . . . . . . . 27-25
les commandes SQL . . . . . . . . . . . . 26-20 Conciliation des erreurs
de mise à jour . . . . . . . . . . . . . 27-27
Chapitre 27 Utilisation d’un ensemble de données client
Utilisation avec un fournisseur. . . . . . . . . . . . . . 27-29
Spécification d’un fournisseur. . . . . . . 27-29
d’ensembles de données client 27-1 Extraction des données dans l’ensemble
Manipulation des données avec un ensemble
de données ou le document source . . . 27-31
de données client . . . . . . . . . . . . . . . . 27-2
Extractions incrémentales. . . . . . . . 27-31
Navigation parmi les données des ensembles
Extraction à la demande . . . . . . . . 27-32
de données client . . . . . . . . . . . . . . . 27-2
Obtention de paramètres de l’ensemble
Limitation des enregistrements affichés. . . 27-3
de données source. . . . . . . . . . . . . 27-32
Edition des données . . . . . . . . . . . . . . 27-6
Transmission de paramètres à l’ensemble
Annulation des modifications. . . . . . . 27-6
de données source. . . . . . . . . . . . . 27-33
Enregistrement des modifications . . . . 27-7
Envoi de paramètres de requête
Définition de contraintes pour les valeurs
ou de procédure stockée . . . . . . . 27-34
des données . . . . . . . . . . . . . . . . . . 27-8
Limitation des enregistrements
Spécification de contraintes
avec des paramètres . . . . . . . . . . 27-34
personnalisées . . . . . . . . . . . . . . . 27-8
Gestion des contraintes liées au serveur . 27-35
Tri et indexation . . . . . . . . . . . . . . . . 27-9
Rafraîchissement des enregistrements . . 27-36
Ajout d’un nouvel index . . . . . . . . 27-10
Communication avec des fournisseurs à l’aide
Suppression et permutation d’index . . 27-11
d’événements personnalisés . . . . . . . 27-37
Utilisation des index pour regrouper
Redéfinition de l’ensemble de données
les données . . . . . . . . . . . . . . . 27-11
source . . . . . . . . . . . . . . . . . . . . 27-38
Représentation des valeurs calculées . . . 27-12
Utilisation d’un ensemble de données client
Utilisation de champs calculés de façon
avec des données basées sur des fichiers . 27-39
interne dans les ensembles de données
Création d’un nouvel ensemble
client . . . . . . . . . . . . . . . . . . . 27-13
de données . . . . . . . . . . . . . . . . . 27-39
Utilisation des agrégats maintenus . . . . 27-13
Chargement des données depuis un fichier
Spécification d’agrégats . . . . . . . . . 27-14
ou un flux . . . . . . . . . . . . . . . . . 27-40
Agrégats de groupes
Fusion des modifications
d’enregistrements . . . . . . . . . . . . 27-15
dans les données . . . . . . . . . . . . . 27-41
Obtention de valeurs d’agrégat. . . . . 27-16
Sauvegarde des données dans un fichier
Copie de données d’un autre ensemble
ou un flux . . . . . . . . . . . . . . . . . 27-41
de données . . . . . . . . . . . . . . . . . 27-16
Affectation directe des données . . . . 27-16
xvi
Chapitre 28 Structure de l’application client . . . . . . . 29-5
Structure du serveur d’applications . . . . 29-5
Utilisation des composants Contenu du module de données
fournisseur 28-1 distant . . . . . . . . . . . . . . . . . . . 29-6
Spécification de la source de données . . . . . 28-2 Utilisation des modules de données
Utilisation d’un ensemble de données comme transactionnels . . . . . . . . . . . . . . 29-7
source des données. . . . . . . . . . . . . . 28-2 Regroupement des modules de données
Utilisation d’un document XML comme source distants . . . . . . . . . . . . . . . . . . 29-9
des données . . . . . . . . . . . . . . . . . . 28-3 Sélection d’un protocole de connexion . . 29-10
Communication avec l’ensemble de données Utilisation de connexions DCOM . . . 29-10
client . . . . . . . . . . . . . . . . . . . . . . . . 28-3 Utilisation de connexions Socket . . . .29-11
Détermination du mode d’application Utilisation de connexions Web . . . . .29-11
des mises à jour à l’aide d’un fournisseur Utilisation de connexions SOAP. . . . 29-12
d’ensemble de données . . . . . . . . . . . . . 28-4 Construction d’une application multiniveau 29-13
Contrôle des informations placées Création du serveur d’applications . . . . . 29-13
dans les paquets de données . . . . . . . . . . 28-5 Configuration du module de données
Spécification des champs apparaissant distant. . . . . . . . . . . . . . . . . . . . 29-15
dans les paquets de données . . . . . . . . 28-5 Configuration d’un module de données
Initialisation des options contrôlant distant non transactionnel . . . . . . 29-15
les paquets de données . . . . . . . . . . . 28-6 Configuration d’un module de données
Ajout d’informations personnalisées distant transactionnel . . . . . . . . . 29-16
aux paquets de données . . . . . . . . . . . 28-7 Configuration de TSoapDataModule . 29-18
Comment répondre aux demandes Extension de l’interface du serveur
de données des clients . . . . . . . . . . . . . 28-8 d’applications . . . . . . . . . . . . . . . 29-18
Comment répondre aux demandes Ajout de rappels à l’interface du serveur
de mise à jour des clients . . . . . . . . . . . . 28-9 d’applications. . . . . . . . . . . . . . 29-19
Modification des paquets delta avant Extension de l’interface d’un serveur
la mise à jour de la base de données . . 28-10 d’applications transactionnel . . . . . 29-19
Comment contrôler l’application Gestion des transactions
des mises à jour . . . . . . . . . . . . . . 28-11 dans les applications multiniveaux . . . 29-19
Filtrage des mises à jour . . . . . . . . . . 28-13 Gestion des relations maître / détail . . . 29-20
Résolution des erreurs de mise à jour Gestion des informations d’état
par le fournisseur . . . . . . . . . . . . . 28-13 dans les modules de données distants . 29-21
Application des mises à jour à des ensembles Utilisation de plusieurs modules
de données représentant plusieurs de données distants . . . . . . . . . . . . 29-23
tables . . . . . . . . . . . . . . . . . . . . . 28-14 Recensement du serveur d’applications . . . 29-24
Comment répondre aux événements Création de l’application client . . . . . . . . 29-24
générés par le client . . . . . . . . . . . . . . 28-14 Connexion au serveur d’applications. . . 29-25
Gestion des contraintes du serveur . . . . . . 28-15 Spécification d’une connexion
à l’aide de DCOM . . . . . . . . . . . 29-26
Chapitre 29 Spécification d’une connexion
Création d’applications à l’aide de sockets . . . . . . . . . . . 29-27
multiniveaux 29-1 Spécification d’une connexion
Avantages du modèle de base de données à l’aide de HTTP . . . . . . . . . . . . 29-28
multiniveau . . . . . . . . . . . . . . . . . . . . 29-2 Spécification d’une connexion
Présentation des applications multiniveaux à l’aide de SOAP. . . . . . . . . . . . 29-28
basées sur les fournisseurs . . . . . . . . . . . 29-3 Courtage de connexions . . . . . . . . 29-29
Présentation d’une application Gestion des connexions serveur. . . . . . 29-29
à niveau triple . . . . . . . . . . . . . . . . 29-4 Connexion au serveur. . . . . . . . . . 29-30
xvii
Fermeture ou changement Obtention du paquet de données résultant 30-8
de connexion serveur. . . . . . . . . . 29-30 Conversion de nœuds définis
Appel des interfaces serveur . . . . . . . . 29-31 par l’utilisateur . . . . . . . . . . . . . . . 30-8
Connexion à un serveur d’applications qui Utilisation d’un document XML comme source
utilise plusieurs modules de données . . 29-32 pour un fournisseur . . . . . . . . . . . . . . 30-9
Ecriture des applications client Web . . . . . 29-33 Utilisation d’un document XML comme client
Distribution d’une application client en tant d’un fournisseur . . . . . . . . . . . . . . . 30-10
que contrôle ActiveX. . . . . . . . . . . . 29-34 Lecture d’un document XML
Création d’une fiche active à partir d’un fournisseur . . . . . . . . . 30-10
pour l’application client . . . . . . . . 29-34 Application de mises à jour d’un document
Construction des applications Web XML à un fournisseur . . . . . . . . . . .30-11
avec InternetExpress . . . . . . . . . . . . 29-35
Construction d’une application Partie III
InternetExpress . . . . . . . . . . . . . . . 29-36 Ecriture d’applications Internet
Utilisation des bibliothèques javascript 29-37
Droits d’accès au serveur d’applications Chapitre 31
et à son lancement . . . . . . . . . . . 29-38
Utilisation d’un courtier XML . . . . . . . 29-38 Ecriture d’applications CORBA 31-1
Lecture des paquets de données XML 29-39 Vue générale d’une application CORBA. . . . 31-2
Application des mises à jour Stubs et squelettes. . . . . . . . . . . . . . . 31-2
à partir des paquets delta XML. . . . 29-40 Utilisation de Smart Agent . . . . . . . . . 31-3
Création des pages Web avec un générateur Activation d’applications serveur . . . . . . 31-4
de page InternetExpress . . . . . . . . . . 29-41 Liaison dynamique d’appels d’interfaces . 31-4
Utilisation de l’éditeur de pages Web . 29-42 Ecriture de serveurs CORBA . . . . . . . . . . 31-5
Définition des propriétés Définition d’interfaces d’objets . . . . . . . 31-5
des éléments Web . . . . . . . . . . . . 29-43 Utilisation de l’expert serveur CORBA . . 31-6
Personnalisation du modèle d’un générateur Génération de stubs et de squelettes
de page InternetExpress . . . . . . . . 29-44 à partir d’un fichier IDL . . . . . . . . . . 31-6
Utilisation de l’expert d’implémentation
Chapitre 30 d’objet CORBA . . . . . . . . . . . . . . . 31-7
Instanciation des objets CORBA . . . . . 31-8
Utilisation de XML dans les applications Utilisation du modèle de délégation . . 31-9
de bases de données 30-1 Visualisation et changement
Définition des transformations. . . . . . . . . . 30-1 des modifications . . . . . . . . . . . 31-10
Correspondance entre les nœuds XML Implémentation des objets CORBA. . . . 31-10
et les champs du paquet de données . . . 30-2 Protection contre les conflits de thread 31-12
Utilisation de XMLMapper . . . . . . . . . . 30-4 Modification des interfaces CORBA . . . 31-13
Chargement d’un schéma XML Recensement d’interfaces serveur. . . . . 31-13
ou d’un paquet de données . . . . . . . 30-5 Ecriture de clients CORBA . . . . . . . . . . 31-14
Définition des mappages . . . . . . . . . 30-5 Utilisation des stubs . . . . . . . . . . . . 31-15
Génération de fichiers Utilisation de l’interface d’appel
de transformation . . . . . . . . . . . . . 30-6 dynamique . . . . . . . . . . . . . . . . . 31-16
Conversion de documents XML en paquets Test des serveurs CORBA . . . . . . . . . . . 31-18
de données . . . . . . . . . . . . . . . . . . . . 30-7 Configuration de l’outil de test . . . . . . 31-18
Spécification du document XML source . . 30-7 Enregistrement et exécution
Spécification de la transformation . . . . . . 30-7 de scripts de test. . . . . . . . . . . . . . 31-19
xviii
Chapitre 32 Type de méthode de requête . . . . . . . 33-7
Activation et désactivation
Création d’applications serveur des éléments d’action . . . . . . . . . . 33-7
Internet 32-1 Choix d’un élément d’action par défaut 33-7
A propos de WebBroker et de WebSnap . . . . 32-1 Réponse aux messages de requête
Terminologie et normes . . . . . . . . . . . . . . 32-3 avec des éléments d’action . . . . . . . . . 33-8
Composition d’une URL Envoi de la réponse . . . . . . . . . . . . 33-9
(Uniform Resource Locator) . . . . . . . . 32-4 Utilisation de plusieurs éléments
URI et URL . . . . . . . . . . . . . . . . . 32-4 d’action . . . . . . . . . . . . . . . . . . 33-9
En-tête de message de requête HTTP . . . . 32-4 Accès aux informations de requêtes client . . 33-9
Activité d’un serveur HTTP . . . . . . . . . . . 32-5 Propriétés contenant des informations
Composition des requêtes client . . . . . . . 32-5 d’en-tête de requête . . . . . . . . . . . . . 33-9
Traitement des requêtes client Propriétés identifiant la destination. . 33-10
par le serveur . . . . . . . . . . . . . . . . . 32-6 Propriétés décrivant le client Web. . . 33-10
Réponses aux requêtes client . . . . . . . . . 32-6 Propriétés identifiant le but
Types d’applications serveur Web . . . . . . . . 32-7 de la requête . . . . . . . . . . . . . . 33-10
ISAPI et NSAPI . . . . . . . . . . . . . . . 32-7 Propriétés décrivant la réponse
CGI autonome . . . . . . . . . . . . . . . 32-7 attendue . . . . . . . . . . . . . . . . . .33-11
WinCGI autonome . . . . . . . . . . . . . 32-7 Propriétés décrivant le contenu . . . . .33-11
Apache . . . . . . . . . . . . . . . . . . . . 32-7 Contenu d’un message de requête HTTP .33-11
Débogueur d’application Web . . . . . . 32-8 Création de messages de réponse HTTP . . .33-11
Conversion des types cibles Informations d’en-tête de réponse . . . . 33-12
d’applications serveur Web . . . . . . . . . 32-9 Indication du statut de la réponse . . 33-12
Débogage d’applications serveur . . . . . . . 32-10 Indication d’attente d’une action
Utilisation du débogueur du client. . . . . . . . . . . . . . . . . 33-12
d’application Web . . . . . . . . . . . . . 32-10 Description de l’application serveur . 33-12
Démarrage de l’application Description du contenu . . . . . . . . . 33-13
avec le débogueur d’application Web 32-10 Définition du contenu de la réponse . . . 33-13
Conversion de votre application en un autre Envoi de la réponse. . . . . . . . . . . . . 33-13
type d’application serveur Web. . . . 32-11 Génération du contenu des messages
Débogage d’applications Web de réponse . . . . . . . . . . . . . . . . . . . 33-14
sous forme de DLL. . . . . . . . . . . . . 32-11 Utilisation du composant
Droits des utilisateurs nécessaires au générateur de page . . . . . . . . . . . . 33-14
débogage des DLL . . . . . . . . . . . 32-12 Modèles HTML . . . . . . . . . . . . . 33-14
Choix du modèle HTML . . . . . . . . 33-15
Chapitre 33 Conversion des balises HTML
Utilisation de l’agent Web 33-1 transparentes . . . . . . . . . . . . . . 33-16
Création d’applications serveur Web Utilisation du générateur de page
avec l’agent Web . . . . . . . . . . . . . . . . . 33-1 depuis un élément d’action. . . . . . 33-16
Module Web . . . . . . . . . . . . . . . . . . 33-2 Chaînage de générateurs de page . . . 33-17
Objet application Web . . . . . . . . . . . . . 33-3 Utilisation des bases de données
Structure d’une application agent Web . . . . . 33-3 dans les réponses . . . . . . . . . . . . . . . 33-18
Répartiteur Web . . . . . . . . . . . . . . . . . . 33-4 Ajout d’une session au module Web . . . 33-19
Ajout d’actions au répartiteur . . . . . . . . 33-5 Représentation HTML
Répartition des messages de requête . . . . 33-5 d’une base de données . . . . . . . . . . 33-19
Eléments d’action . . . . . . . . . . . . . . . . . 33-6 Utilisation des générateurs
Choix du déclenchement de page ensemble de données . . . . 33-19
des éléments d’action . . . . . . . . . . . . 33-6 Utilisation des générateurs de tableau 33-20
URL de destination. . . . . . . . . . . . . 33-6 Choix des attributs de tableau . . . . . 33-20
xix
Choix des attributs de lignes . . . . . . 33-21 Etape 3. Ajout d’un composant
Choix des attributs de colonnes . . . . 33-21 adaptateur . . . . . . . . . . . . . . . 34-16
Incorporation de tableaux Création d’une grille pour afficher
dans un document HTML . . . . . . . 33-21 les données . . . . . . . . . . . . . . . . . 34-17
Configuration d’un générateur Etape 1. Ajout d’une grille . . . . . . . 34-17
de tableau ensemble de données . . . 33-21 Etape 2. Ajout de commandes
Configuration d’un générateur de modification à la grille . . . . . . 34-19
de tableau requête . . . . . . . . . . . 33-22 Ajout d’une fiche de modification . . . . 34-20
Etape 1. Ajout d’un nouveau module
Chapitre 34 de page Web . . . . . . . . . . . . . . 34-20
Création d’applications serveur Web Etape 2. Enregistrement
du nouveau module . . . . . . . . . . 34-20
avec WebSnap 34-1 Etape 3. Mise à disposition
Composants WebSnap de base. . . . . . . . . . 34-2
de CountryTableU pour le nouveau
Modules Web . . . . . . . . . . . . . . . . . . 34-2
module . . . . . . . . . . . . . . . . . 34-20
Types de module d’application Web . . . 34-3
Etape 4. Ajout des champs de saisie . 34-20
Modules de page Web . . . . . . . . . . . 34-4
Etape 5. Ajout de boutons . . . . . . . 34-21
Modules de données Web . . . . . . . . . 34-5
Etape 6. Liaison entre les actions
Adaptateurs . . . . . . . . . . . . . . . . . . . 34-6
de la fiche et la page de la grille. . . 34-22
Champs . . . . . . . . . . . . . . . . . . . 34-6
Etape 7. Liaison des actions de grille
Actions . . . . . . . . . . . . . . . . . . . . 34-6
avec la page de la fiche . . . . . . . . 34-23
Erreurs . . . . . . . . . . . . . . . . . . . . 34-7
Exécution de l’application complète . . . 34-23
Enregistrements . . . . . . . . . . . . . . . 34-7
Ajout du compte-rendu des erreurs . . . 34-24
Générateurs de page . . . . . . . . . . . . . . 34-7
Etape 1. Ajout de la gestion des erreurs
Création d’applications serveur Web
à la grille . . . . . . . . . . . . . . . . 34-24
avec WebSnap . . . . . . . . . . . . . . . . . . 34-8
Etape 2. Ajout de la gestion des erreurs
Sélection d’un type de serveur . . . . . . . . 34-9
à la fiche . . . . . . . . . . . . . . . . 34-24
Spécification des composants du module
Etape 3. Test du mécanisme de gestion
d’application . . . . . . . . . . . . . . . . . 34-9
des erreurs . . . . . . . . . . . . . . . 34-24
Sélection des options du module
Conception HTML avancée . . . . . . . . . . 34-25
d’application Web . . . . . . . . . . . . . 34-11
Manipulation de script côté serveur
Didacticiel WebSnap. . . . . . . . . . . . . . . 34-12
dans des fichiers HTML . . . . . . . . . 34-26
Création d’une nouvelle application . . . 34-12
Prise en charge des ouvertures de session . 34-27
Etape 1. Démarrage de l’expert
Ajout d’une prise en charge
d’application WebSnap. . . . . . . . . 34-12
des ouvertures de session . . . . . . . . 34-28
Etape 2. Enregistrement
Utilisation du service de sessions . . . . . 34-29
des fichiers générés et du projet . . . 34-13
Pages de connexion . . . . . . . . . . . . . 34-30
Etape 3. Spécification du titre
Configuration des pages nécessitant
de l’application . . . . . . . . . . . . . 34-13
des connexions. . . . . . . . . . . . . . . 34-32
Création d’une page CountryTable . . . . 34-13
Droits d’accès utilisateur . . . . . . . . . . 34-32
Etape 1. Ajout d’un nouveau module
Affichage dynamique des champs sous la
de page Web. . . . . . . . . . . . . . . 34-14
forme de zones de saisie ou de texte 34-33
Etape 2. Enregistrement du nouveau
Masquage des champs
module de page Web . . . . . . . . . . 34-14
et de leur contenu . . . . . . . . . . . 34-34
Ajout des composants de données
Interdiction d’accès à la page . . . . . 34-34
au module CountryTable . . . . . . . . . 34-15
Utilisation de scripts côté serveur
Etape 1. Ajout des composants
avec WebSnap . . . . . . . . . . . . . . . . . 34-34
orientés données . . . . . . . . . . . . 34-15
Scripts actifs . . . . . . . . . . . . . . . . . 34-35
Etape 2. Spécification d’un champ clé . 34-16
Moteur de script. . . . . . . . . . . . . . . 34-36
xx
Blocs de script . . . . . . . . . . . . . . . . 34-36 Utilisation de l’expert
Création de scripts . . . . . . . . . . . . . . 34-36 d’application SOAP . . . . . . . . . . . . 36-12
Experts modèles . . . . . . . . . . . . . 34-36 Ajout de nouveaux services Web . . . . . 36-13
TAdapterPageProducer . . . . . . . . . 34-36 Modification du code généré. . . . . . 36-13
Modification et visualisation des scripts . 34-37 Utilisation d’une classe de base
Comment inclure un script différente . . . . . . . . . . . . . . . . 36-14
dans une page . . . . . . . . . . . . . . . 34-37 Utilisation de l’importateur
Objets de script . . . . . . . . . . . . . . . . 34-37 de services Web . . . . . . . . . . . . . . 36-15
Répartition des requêtes et des réponses . . . 34-38 Création de classes d’exception personnalisées
Composants répartiteur . . . . . . . . . . . 34-38 pour les services Web . . . . . . . . . . . 36-16
Fonctions d’un répartiteur d’adaptateur . 34-39 Génération de documents WSDL
Utilisation de composants d’adaptateur pour une application de service Web . . 36-17
pour générer du contenu . . . . . . . 34-39 Conception de clients pour les services Web 36-18
Réception de requêtes de l’adaptateur Importation de documents WSDL . . . . 36-18
et génération des réponses . . . . . . 34-40 Appel des interfaces invocables . . . . . . 36-18
Requête d’image . . . . . . . . . . . . . 34-42
Réponse d’image . . . . . . . . . . . . . 34-42 Chapitre 37
Répartition des éléments d’action . . . . . 34-43 Utilisation des sockets 37-1
Fonctions du répartiteur de page . . . . . 34-44 Implémentation des services . . . . . . . . . . 37-1
Description des protocoles de services . . . 37-2
Chapitre 35 Communication avec les applications . 37-2
Utilisation de documents XML 35-1 Services et ports . . . . . . . . . . . . . . . . 37-2
Utilisation du modèle DOM . . . . . . . . . . . 35-2 Types de connexions par socket . . . . . . . . 37-2
Utilisation des composants XML . . . . . . . . 35-3 Connexions client . . . . . . . . . . . . . . . 37-3
Utilisation de TXMLDocument. . . . . . . . 35-3 Connexions d’écoute . . . . . . . . . . . . . 37-3
Utilisation des nœuds XML. . . . . . . . . . 35-4 Connexions serveur . . . . . . . . . . . . . . 37-3
Utilisation de la valeur d’un nœud . . . 35-5 Description des sockets . . . . . . . . . . . . . 37-3
Utilisation des attributs d’un nœud . . . 35-5 Description des hôtes . . . . . . . . . . . . . 37-4
Ajout et suppression de nœuds enfant . 35-5 Choix entre le nom de l’hôte
Abstraction de documents XML et son adresse IP . . . . . . . . . . . . . 37-5
avec l’expert Liaison de données . . . . . . . 35-6 Utilisation des ports . . . . . . . . . . . . . 37-5
Utilisation de l’expert Utilisation des composants socket . . . . . . . 37-5
Liaison de données XML . . . . . . . . . . 35-8 Obtenir des informations sur la connexion 37-6
Utilisation du code généré par l’expert Utilisation de sockets client . . . . . . . . . 37-6
Liaison de données XML . . . . . . . . . . 35-9 Désignation du serveur souhaité . . . . 37-6
Formation de la connexion . . . . . . . . 37-7
Chapitre 36 Obtention d’informations
Utilisation de services Web 36-1 sur la connexion . . . . . . . . . . . . . 37-7
Présentation des interfaces invocables . . . . . 36-2 Fermeture de la connexion . . . . . . . . 37-7
Utilisation de types non scalaires Utilisation de sockets serveur . . . . . . . . 37-7
dans des interfaces invocables . . . . . . . 36-4 Désignation du port . . . . . . . . . . . . 37-7
Recensement des types non scalaires . . 36-5 Ecoute des requêtes client . . . . . . . . 37-8
Recensement des types typedef Connexion aux clients. . . . . . . . . . . 37-8
et des types énumérés . . . . . . . . . . 36-6 Fermeture des connexions serveur . . . 37-8
Emploi d’objets distants . . . . . . . . . . 36-8 Réponse aux événements socket . . . . . . . . 37-8
Exemple d’objet distant . . . . . . . . . . 36-9 Evénements d’erreurs. . . . . . . . . . . . . 37-9
Conception de serveurs Evénements client . . . . . . . . . . . . . . . 37-9
gérant les services Web . . . . . . . . . . . . 36-11 Evénements serveur . . . . . . . . . . . . . 37-9
Conception d’un serveur de service Web . 36-11 Evénements d’écoute . . . . . . . . . . . 37-9
xxi
Evénements de connexions client . . . 37-10 Chapitre 39
Lectures et écritures sur des connexions
socket . . . . . . . . . . . . . . . . . . . . . . 37-10
Utilisation
Connexions non bloquantes . . . . . . . . 37-10 des bibliothèques de types 39-1
Lecture et écriture d’événements . . . . 37-11 L’éditeur de bibliothèques de types . . . . . . 39-2
Connexions bloquantes . . . . . . . . . . . 37-11 Composants de l’éditeur
de bibliothèques de types . . . . . . . . . 39-3
Partie IV Barre d’outils . . . . . . . . . . . . . . . 39-4
Volet liste des objets. . . . . . . . . . . . 39-5
Développement d’applications COM Barre d’état . . . . . . . . . . . . . . . . . 39-6
Les pages d’informations de type . . . . 39-6
Chapitre 38 Eléments d’une bibliothèque de types . . . 39-9
Présentation Interfaces . . . . . . . . . . . . . . . . . . 39-9
des technologies COM 38-1 Dispinterfaces . . . . . . . . . . . . . . 39-10
COM, spécification et implémentation . 38-2 CoClasses . . . . . . . . . . . . . . . . . 39-10
Extensions de COM . . . . . . . . . . . . 38-2 Définitions de types . . . . . . . . . . . 39-10
Composantes d’une application COM . . . . . 38-3 Modules. . . . . . . . . . . . . . . . . . .39-11
Interfaces COM. . . . . . . . . . . . . . . . . 38-3 Utilisation de l’éditeur de bibliothèques
L’interface COM de base, IUnknown . . 38-4 de types. . . . . . . . . . . . . . . . . . . 39-12
Pointeurs d’interface COM . . . . . . . . 38-5 Types autorisés. . . . . . . . . . . . . . 39-13
Serveurs COM . . . . . . . . . . . . . . . . . 38-5 Création d’une nouvelle bibliothèque
CoClasses et fabricants de classes . . . . 38-6 de types . . . . . . . . . . . . . . . . . 39-14
Serveurs en processus, hors processus Ouverture d’une bibliothèque de types
et distants . . . . . . . . . . . . . . . . . 38-7 existante . . . . . . . . . . . . . . . . . 39-15
Le mécanisme du marshaling. . . . . . . 38-8 Ajout d’une interface à une bibliothèque
Agrégation. . . . . . . . . . . . . . . . . . 38-9 de types . . . . . . . . . . . . . . . . . 39-15
Clients COM . . . . . . . . . . . . . . . . . 38-10 Modification d’une interface en utilisant
Extensions de COM . . . . . . . . . . . . . . . 38-10 la bibliothèque de types . . . . . . . 39-15
Serveurs Automation . . . . . . . . . . . . 38-13 Ajout de propriétés et méthodes
Pages Active Server . . . . . . . . . . . . . 38-14 à une interface ou dispinterface . . . 39-16
Contrôles ActiveX . . . . . . . . . . . . . . 38-14 Ajout d’une CoClasse à une bibliothèque
Documents Active . . . . . . . . . . . . . . 38-15 de types . . . . . . . . . . . . . . . . . 39-17
Objets transactionnels . . . . . . . . . . . . 38-15 Ajout d’une interface à une CoClasse 39-18
Objets événement COM+ et souscripteurs Ajout d’une énumération à une bibliothèque
d’événement . . . . . . . . . . . . . . . . 38-16 de types . . . . . . . . . . . . . . . . . 39-18
Bibliothèques de types . . . . . . . . . . . 38-17 Ajout d’un alias à une bibliothèque
Contenu d’une bibliothèque de types . 38-17 de types . . . . . . . . . . . . . . . . . 39-18
Création de bibliothèques de types . . 38-18 Ajout d’un enregistrement ou d’une union
Quand utiliser les bibliothèques à une bibliothèque de types . . . . . 39-19
de types . . . . . . . . . . . . . . . . . 38-18 Ajout d’un module à une bibliothèque
Accès aux bibliothèques de types . . . 38-19 de types . . . . . . . . . . . . . . . . . 39-19
Avantages des bibliothèques de types . 38-19 Enregistrement et recensement
Utilisation des outils de bibliothèques des informations d’une bibliothèque
de types . . . . . . . . . . . . . . . . . 38-20 de types . . . . . . . . . . . . . . . . . 39-19
Implémentation des objets COM Enregistrement d’une bibliothèque
à l’aide d’experts . . . . . . . . . . . . . . . . 38-20 de types . . . . . . . . . . . . . . . . . 39-20
Code généré par les experts . . . . . . . . 38-23
xxii
Rafraîchissement de la bibliothèque Utilisation de l’expert objet COM . . . . . . . 41-3
de types . . . . . . . . . . . . . . . . . 39-20 Utilisation de l’expert objet Automation . . . 41-4
Recensement d’une bibliothèque Choix d’un modèle de thread . . . . . . . . 41-5
de types . . . . . . . . . . . . . . . . . 39-21 Ecriture d’un objet supportant
Exportation d’un fichier IDL . . . . . . 39-21 le modèle de thread libre . . . . . . . . 41-7
Déploiement des bibliothèques de types . . . 39-21 Ecriture d’un objet supportant
le modèle de thread apartment . . . . 41-8
Chapitre 40 Ecriture d’un objet supportant
Création de clients COM 40-1 le modèle de thread neutre . . . . . . . 41-8
Importation des informations Spécification des options ATL . . . . . . . . . 41-9
d’une bibliothèque de types . . . . . . . . . . 40-2 Définition de l’interface d’un objet COM . . 41-10
Utilisation de la boîte de dialogue Importation Ajout d’une propriété
de bibliothèque de types . . . . . . . . . . 40-3 à l’interface de l’objet . . . . . . . . . . . 41-10
Utilisation de la boîte de dialogue Ajout d’une méthode
Importation d’ActiveX . . . . . . . . . . . . 40-4 à l’interface de l’objet . . . . . . . . . . . .41-11
Code généré par l’importation des Exposition d’événements aux clients . . . .41-11
informations d’une bibliothèque de types 40-5 Gestion des événements
Contrôle d’un objet importé . . . . . . . . . . . 40-7 dans un objet Automation . . . . . . 41-12
Utilisation des composants enveloppe . . . 40-7 Interfaces d’Automation . . . . . . . . . . . . 41-13
Enveloppes ActiveX . . . . . . . . . . . . 40-8 Interfaces doubles . . . . . . . . . . . . . . 41-13
Enveloppes des serveurs Automation . . 40-8 Interfaces de répartition . . . . . . . . . . 41-14
Utilisation de contrôles ActiveX Interfaces personnalisées . . . . . . . . . . 41-15
orientés données . . . . . . . . . . . . . . . 40-9 Marshaling des données . . . . . . . . . . . . 41-15
Exemple : impression d’un document Types compatibles avec l’Automation . . 41-16
avec Microsoft Word . . . . . . . . . . . . 40-11 Restrictions de type
Etape 1 : préparation de C++Builder pour le marshaling automatique . . . . 41-16
pour cet exemple . . . . . . . . . . . . 40-11 Marshaling personnalisé . . . . . . . . . . 41-17
Etape 2 : importation de la bibliothèque Recensement d’un objet COM . . . . . . . . 41-17
de types Word. . . . . . . . . . . . . . 40-12 Recensement d’un serveur en processus . 41-17
Etape 3 : utilisation d’un objet interface Recensement d’un serveur
VTable ou de répartition hors processus . . . . . . . . . . . . . . . 41-18
pour contrôler Microsoft Word . . . . 40-12 Test et débogage de l’application . . . . . . . 41-18
Etape 4 : nettoyage de l’exemple . . . . 40-13
Ecriture de code client basé sur les définitions Chapitre 42
de la bibliothèque de types . . . . . . . . 40-14 Création d’une page Active Server 42-1
Connexion à un serveur . . . . . . . . . 40-14 Création d’un objet Active Server . . . . . . . 42-2
Contrôle d’un serveur Automation Utilisation des éléments intrinsèques ASP. 42-3
en utilisant une interface double . . . 40-14 Application . . . . . . . . . . . . . . . . . 42-4
Contrôle d’un serveur Automation en Request . . . . . . . . . . . . . . . . . . . 42-4
utilisant une interface de répartition . 40-15 Response . . . . . . . . . . . . . . . . . . 42-5
Gestion des événements Session . . . . . . . . . . . . . . . . . . . 42-6
dans un contrôleur Automation . . . 40-16 Server . . . . . . . . . . . . . . . . . . . . 42-7
Création de clients pour les serveurs Création d’ASP pour des serveurs
n’ayant pas une bibliothèque de types . . . 40-18 en et hors processus. . . . . . . . . . . . . 42-7
Recensement d’un objet Active Server. . . . . 42-8
Chapitre 41 Recensement d’un serveur en processus . . 42-8
Création de serveurs COM simples 41-1 Recensement d’un serveur hors processus 42-9
Présentation de la création d’un objet COM . . 41-2 Test et débogage d’une application ASP . . . 42-9
Conception d’un objet COM . . . . . . . . . . . 41-2
xxiii
Chapitre 43 Regroupement des ressources . . . . . . . . 44-6
Fournisseurs de ressources
Création d’un contrôle ActiveX 43-1 base de données . . . . . . . . . . . . . 44-6
Présentation de la création
Gestionnaire de propriétés partagées . . 44-7
d’un contrôle ActiveX . . . . . . . . . . . . . . 43-2
Libération des ressources . . . . . . . . 44-10
Eléments d’un contrôle ActiveX . . . . . . . 43-3
Regroupement d’objets . . . . . . . . . . . 44-10
Contrôle VCL . . . . . . . . . . . . . . . . 43-3
Support transactionnel MTS et COM+. . . . .44-11
Enveloppe ActiveX . . . . . . . . . . . . . 43-3
Attributs transactionnels . . . . . . . . . . 44-12
Bibliothèque de types . . . . . . . . . . . 43-3
Initialisation de l’attribut
Page de propriétés . . . . . . . . . . . . . 43-4
transactionnel. . . . . . . . . . . . . . 44-13
Conception d’un contrôle ActiveX . . . . . . . 43-4
Objets avec état et sans état . . . . . . . . 44-13
Génération d’un contrôle ActiveX
Contrôle de l’arrêt des transactions. . . . 44-14
à partir d’un contrôle VCL . . . . . . . . . . . 43-4
Démarrage des transactions . . . . . . . . 44-14
Génération d’un contrôle ActiveX
Définition d’un objet transaction
basé sur une fiche VCL . . . . . . . . . . . . . 43-6
côté client . . . . . . . . . . . . . . . . 44-15
Licences des contrôles ActiveX . . . . . . . . . 43-8
Définition d’un objet transaction
Personnalisation de l’interface
côté serveur. . . . . . . . . . . . . . . 44-16
du contrôle ActiveX . . . . . . . . . . . . . . . 43-9
Délais des transactions . . . . . . . . . . . 44-17
Ajout de propriétés, méthodes
Sécurité en fonction des rôles . . . . . . . . . 44-17
et événements supplémentaires . . . . . 43-10
Présentation de la création
Ajout de propriétés et de méthodes . . 43-10
des objets transactionnels . . . . . . . . . . 44-18
Ajout d’événement . . . . . . . . . . . . 43-12
Utilisation de l’expert objet transactionnel . 44-19
Activation de la liaison de données simple
Choix d’un modèle de thread
avec la bibliothèque de types . . . . . . . 43-12
pour un objet transactionnel . . . . . . . 44-20
Création d’une page de propriétés
Activités. . . . . . . . . . . . . . . . . . 44-21
pour un contrôle ActiveX . . . . . . . . . . . 43-14
Génération d’événements dans COM+ . . . 44-22
Création d’une nouvelle page
Utilisation de l’expert objet événement . 44-24
de propriétés . . . . . . . . . . . . . . . . 43-15
Utilisation de l’expert Objet Abonnement
Ajout de contrôles à une page
d’événement COM+. . . . . . . . . . . . 44-25
de propriétés . . . . . . . . . . . . . . . . 43-15
Déclenchement d’événement en utilisant
Association des contrôles
un objet événement COM+ . . . . . . . 44-26
de la page de propriétés
Transfert de références d’objets . . . . . . . . 44-27
aux propriétés du contrôle ActiveX . . . 43-15
Utilisation de la méthode SafeRef . . . 44-27
Actualisation de la page de propriétés 43-16
Callbacks . . . . . . . . . . . . . . . . . 44-28
Actualisation de l’objet . . . . . . . . . 43-16
Débogage et test des objets transactionnels . 44-28
Connexion d’une page de propriétés
Installation d’objets transactionnels . . . . . 44-29
à un contrôle ActiveX . . . . . . . . . . . 43-16
Administration d’objets transactionnels . . . 44-30
Recensement d’un contrôle ActiveX . . . . . 43-17
Test d’un contrôle ActiveX . . . . . . . . . . . 43-17
Déploiement d’un contrôle ActiveX
Partie V
sur le Web. . . . . . . . . . . . . . . . . . . . 43-18 Création de composants
Paramétrage des options . . . . . . . . . . 43-19 personnalisés
Chapitre 44 Chapitre 45
Création d’objets MTS ou COM+ 44-1 Présentation générale
Principe des objets transactionnels . . . . . . . 44-2
Contraintes d’un objet transactionnel . . . . 44-3 de la création d’un composant 45-1
Gestion des ressources . . . . . . . . . . . . . . 44-4 Bibliothèques de classes . . . . . . . . . . . . . 45-1
Accès au contexte d’un objet . . . . . . . . . 44-4 Composants et classes . . . . . . . . . . . . . . 45-2
Activation juste-à-temps . . . . . . . . . . . 44-5 Comment créer un composant ? . . . . . . . . 45-3
xxiv
Modification de contrôles existants . . . . . 45-3 Définition de l’interface d’exécution . . . . 46-7
Création de contrôles fenêtrés . . . . . . . . 45-4 Définition de l’interface de conception. . . 46-8
Création de contrôles graphiques . . . . . . 45-4 Répartition des méthodes . . . . . . . . . . . . 46-9
Sous-classement de contrôles Windows. . . 45-5 Méthodes standard . . . . . . . . . . . . . . 46-9
Création de composants non visuels . . . . 45-5 Méthodes virtuelles . . . . . . . . . . . . . 46-10
Contenu d’un composant ? . . . . . . . . . . . . 45-5 Surcharge des méthodes . . . . . . . . 46-10
Suppression des dépendances . . . . . . . . 45-6 Membres abstraits d’une classe . . . . . . . . .46-11
Définition des propriétés, méthodes Classes et pointeurs . . . . . . . . . . . . . . .46-11
et événements. . . . . . . . . . . . . . . . . 45-6
Propriétés . . . . . . . . . . . . . . . . . . 45-6 Chapitre 47
Evénements . . . . . . . . . . . . . . . . . 45-7 Création de propriétés 47-1
Méthodes . . . . . . . . . . . . . . . . . . 45-7 Pourquoi créer des propriétés ? . . . . . . . . . 47-1
Encapsulation des graphiques . . . . . . . . 45-8 Types de propriétés. . . . . . . . . . . . . . . . 47-2
Recensement des composants . . . . . . . . 45-9 Publication des propriétés héritées . . . . . . . 47-3
Création d’un nouveau composant . . . . . . . 45-9 Définition des propriétés . . . . . . . . . . . . 47-4
Création d’un composant Déclaration des propriétés . . . . . . . . . . 47-4
avec l’expert composant . . . . . . . . . . 45-10 Stockage interne des données . . . . . . . . 47-4
Création manuelle d’un composant . . . . 45-12 Accès direct . . . . . . . . . . . . . . . . . . 47-5
Création d’un fichier unité . . . . . . . 45-13 Méthodes d’accès . . . . . . . . . . . . . . . 47-5
Dérivation du composant . . . . . . . . 45-13 Méthode read . . . . . . . . . . . . . . . 47-7
Déclaration d’un nouveau Méthode write . . . . . . . . . . . . . . . 47-7
constructeur . . . . . . . . . . . . . . . 45-14 Valeurs par défaut d’une propriété . . . . . 47-8
Recensement du composant. . . . . . . 45-14 Spécification d’aucune
Création de bitmaps pour les composants 45-16 valeur par défaut . . . . . . . . . . . . 47-8
Test des composants non installés. . . . . . . 45-17 Création de propriétés tableau . . . . . . . . . 47-9
Test des composants installés . . . . . . . . . 45-19 Création de propriétés
Installation d’un composant pour les sous-composants . . . . . . . . . . 47-10
dans la palette de composants . . . . . . . . 45-20 Stockage et chargement des propriétés . . . .47-11
Emplacement des fichiers du composant . 45-20 Utilisation du mécanisme de stockage
Ajout du composant . . . . . . . . . . . . . 45-21 et de chargement . . . . . . . . . . . . . 47-12
Spécification des valeurs par défaut . . . 47-12
Chapitre 46 Détermination du stockage . . . . . . . . 47-13
Programmation orientée objet Initialisation après chargement . . . . . . 47-14
et écriture des composants 46-1 Stockage et chargement des propriétés
Définition de nouvelles classes . . . . . . . . . 46-1 non publiées . . . . . . . . . . . . . . . . 47-14
Dérivation de nouvelles classes . . . . . . . 46-2 Création de méthodes pour le stockage et le
Modifier les valeurs par défaut chargement de valeurs de propriétés 47-15
d’une classe pour éviter Redéfinition de la méthode
les répétitions . . . . . . . . . . . . . . . 46-2 DefineProperties . . . . . . . . . . . . 47-15
Ajout de nouvelles capacités
à une classe . . . . . . . . . . . . . . . . 46-3 Chapitre 48
Déclaration d’une nouvelle classe Création d’événements 48-1
de composant . . . . . . . . . . . . . . . . . 46-3 Qu’est-ce qu’un événement ? . . . . . . . . . . 48-1
Ancêtres, descendants et hiérarchies Les événements sont des closures . . . . . 48-2
des classes. . . . . . . . . . . . . . . . . . . . . 46-4 Les événements sont des propriétés . . . . 48-2
Contrôle des accès . . . . . . . . . . . . . . . . . 46-4 Les types d’événements
Masquer les détails d’implémentation . . . 46-5 sont des types de closures . . . . . . . . . 48-3
Définition de l’interface avec le concepteur Le type de renvoi des gestionnaires
des composants . . . . . . . . . . . . . . . . 46-7 d’événements est void . . . . . . . . . 48-3
xxv
Les gestionnaires d’événements Spécification d’une palette
sont facultatifs . . . . . . . . . . . . . . . . 48-4 pour un contrôle . . . . . . . . . . . . . 50-6
Implémentation des événements standard . . . 48-4 Réponse aux changements de palette. . 50-6
Identification des événements standard. . . 48-5 Bitmaps hors écran . . . . . . . . . . . . . . . . 50-6
Evénements standard Création et gestion des bitmaps hors écran 50-7
pour tous les contrôles . . . . . . . . . . 48-5 Copie des images bitmap . . . . . . . . . . 50-7
Evénements standard Réponse aux changements . . . . . . . . . . . 50-7
pour les contrôles standard . . . . . . . 48-5
Rendre visibles des événements . . . . . . . 48-5 Chapitre 51
Changement de la gestion Gestion des messages
des événements standard . . . . . . . . . . 48-6
Définition de vos propres événements . . . . . 48-7
et des notifications système 51-1
Compréhension du système
Déclenchement de l’événement . . . . . . . 48-7
de gestion des messages . . . . . . . . . . . . 51-1
Deux sortes d’événements. . . . . . . . . 48-7
Que contient un message Windows ? . . . 51-2
Définition du type de gestionnaire . . . . . 48-8
Répartition des messages . . . . . . . . . . 51-3
Notifications simples . . . . . . . . . . . . 48-8
Suivi du flux des messages . . . . . . . 51-3
Gestionnaires d’événements spécifiques. 48-8
Modification de la gestion des messages . . . 51-4
Renvoi d’informations
Surcharge de la méthode du gestionnaire . 51-4
à partir du gestionnaire . . . . . . . . . 48-8
Utilisation des paramètres d’un message . 51-5
Déclaration de l’événement . . . . . . . . . . 48-9
Interception des messages . . . . . . . . . . 51-5
Les noms d’événement débutent
Création de nouveaux gestionnaires
par “On” . . . . . . . . . . . . . . . . . . 48-9
de messages . . . . . . . . . . . . . . . . . . . 51-6
Appel de l’événement . . . . . . . . . . . . . 48-9
Définition de vos propres messages . . . . 51-6
Les gestionnaires vides
Déclaration d’un identificateur
doivent être valides. . . . . . . . . . . . 48-9
de message . . . . . . . . . . . . . . . . 51-6
Les utilisateurs peuvent surcharger
Déclaration d’un type
la gestion par défaut . . . . . . . . . . 48-10
structure de message . . . . . . . . . . 51-7
Déclaration d’une nouvelle méthode
Chapitre 49 de gestion d’un message . . . . . . . . . . 51-8
Création de méthodes 49-1 Envoi des messages . . . . . . . . . . . . . . 51-8
Eviter les interdépendances . . . . . . . . . . . 49-1 Diffusion d’un message
Noms des méthodes. . . . . . . . . . . . . . . . 49-2 à tous les contrôles d’une fiche . . . . 51-9
Protection des méthodes . . . . . . . . . . . . . 49-3 Appel direct du gestionnaire
Méthodes qui doivent être publiques . . . . 49-3 de message d’un contrôle. . . . . . . . 51-9
Méthodes qui doivent être protégées . . . . 49-3 Envoi d’un message à l’aide de la file
Rendre virtuelles des méthodes . . . . . . . . . 49-4 d’attente des messages Windows . . 51-10
Déclaration des méthodes . . . . . . . . . . . . 49-4 Envoi d’un message qui ne s’exécute pas
immédiatement. . . . . . . . . . . . . 51-10
Chapitre 50 Réponse aux notifications du système
Graphiques et composants 50-1 à l’aide de CLX . . . . . . . . . . . . . . . . .51-11
Présentation des graphiques . . . . . . . . . . . 50-1 Réponse aux signaux . . . . . . . . . . . . .51-11
Utilisation du canevas . . . . . . . . . . . . . . 50-3 Affectation de gestionnaires
Travail sur les images . . . . . . . . . . . . . . . 50-3 de signaux personnalisés . . . . . . . 51-12
Utilisation d’une image, d’un graphique Réponse aux événements système . . . . 51-13
ou d’un canevas . . . . . . . . . . . . . . . 50-4 Evénements couramment utilisés . . . 51-14
Chargement et stockage des graphiques . . 50-4 Surcharge de la méthode EventFilter . 51-15
Gestion des palettes . . . . . . . . . . . . . . 50-5 Génération des événements Qt . . . . 51-16
xxvi
Chapitre 52 Chapitre 53
Accessibilité des composants Modification
au moment de la conception 52-1 d’un composant existant 53-1
Recensement des composants . . . . . . . . . . 52-1 Création et recensement du composant . . . . 53-1
Déclaration de la fonction Register . . . . . 52-2 Modification de la classe composant. . . . . . 53-3
Ecriture de la fonctionRegister . . . . . . . . 52-2 Surcharge du constructeur . . . . . . . . . . 53-3
Spécification des composants . . . . . . . 52-2 Spécification de la nouvelle valeur
Spécification de la page de palette . . . . 52-3 par défaut de la propriété . . . . . . . . . 53-4
Utilisation de la fonction
RegisterComponents . . . . . . . . . . . 52-3 Chapitre 54
Ajout de bitmaps à la palette . . . . . . . . . . 52-4 Création d’un contrôle graphique 54-1
Fournir l’aide pour vos composants . . . . . . 52-5 Création et recensement du composant . . . . 54-1
Création du fichier d’aide. . . . . . . . . . . 52-5 Publication des propriétés héritées . . . . . . . 54-3
Création des entrées . . . . . . . . . . . . 52-5 Ajout de fonctionnalités graphiques . . . . . . 54-3
Aide contextuelle des composants . . . . 52-7 Détermination de ce qui doit être dessiné . 54-4
Ajout des fichiers d’aide Déclaration du type de la propriété. . . 54-4
des composants . . . . . . . . . . . . . . 52-7 Déclaration de la propriété . . . . . . . . 54-4
Ajout d’éditeurs de propriétés . . . . . . . . . . 52-8 Ecriture de la méthode
Dérivation d’une classe d’implémentation . . . . . . . . . . . . 54-5
éditeur de propriétés. . . . . . . . . . . . . 52-8 Surcharge du constructeur
Modification de la propriété et du destructeur . . . . . . . . . . . . . . 54-5
sous une forme textuelle . . . . . . . . . . 52-9 Modification des valeurs par défaut
Affichage de la valeur de la propriété . 52-10 des propriétés . . . . . . . . . . . . . . 54-5
Définition de la valeur de la propriété 52-10 Publication du crayon et du pinceau . . . . 54-6
Modification globale de la propriété . . . 52-10 Déclaration des données membres . . . 54-6
Spécification des attributs de l’éditeur . . 52-11 Déclaration des propriétés d’accès . . . 54-7
Recensement de l’éditeur de propriétés. . 52-12 Initialisation des classes
Catégories de propriété . . . . . . . . . . . . . 52-13 ayant un propriétaire . . . . . . . . . . 54-8
Recensement d’une propriété à la fois . . 52-14 Définition des propriétés des classes
Recensement de plusieurs propriétés ayant un propriétaire . . . . . . . . . . 54-8
en une seule fois . . . . . . . . . . . . . . 52-14 Dessin de l’image du composant . . . . . . 54-9
Spécification de catégories de propriétés . 52-15 Adaptation du dessin de la forme . . . . 54-10
Utilisation de la fonction
IsPropertyInCategory . . . . . . . . . . . 52-16 Chapitre 55
Ajout d’éditeurs de composants . . . . . . . . 52-17 Personnalisation d’une grille 55-1
Ajout d’éléments au menu contextuel. . . 52-17 Création et recensement du composant . . . . 55-1
Spécification d’éléments de menu . . . 52-17 Publication des propriétés héritées . . . . . . . 55-3
Implémentation des commandes . . . . 52-18 Modification des valeurs initiales . . . . . . . 55-4
Modification du comportement suite Redimensionnement des cellules . . . . . . . . 55-5
à un double-clic. . . . . . . . . . . . . . . 52-18 Remplissage des cellules. . . . . . . . . . . . . 55-6
Ajout de formats de Presse-papiers . . . . 52-19 Suivi de la date . . . . . . . . . . . . . . . . 55-6
Recensement d’un éditeur de composants 52-20 Stockage interne de la date. . . . . . . . 55-7
Compilation des composants en paquets. . . 52-20 Accès au jour, au mois et à l’année . . . 55-8
Problèmes d’installation Génération des numéros de jours . . . . 55-9
de composants personnalisés. . . . . . . . . 52-21 Sélection du jour en cours . . . . . . . .55-11
Navigation de mois en mois
et d’année en année . . . . . . . . . . . . . 55-12
xxvii
Navigation de jour en jour . . . . . . . . . . . 55-13 Chapitre 58
Déplacement de la sélection . . . . . . . . 55-13
Fourniture d’un événement OnChange . . 55-13
Extensions de l’EDI 58-1
Présentation de l’API Tools . . . . . . . . . . . 58-2
Exclusion des cellules vides . . . . . . . . 55-14
Conception d’une classe expert . . . . . . . . . 58-3
Implémentation des interfaces de l’expert . 58-4
Chapitre 56 Simplification de l’implémentation
Contrôles orientés données 56-1 d’interfaces . . . . . . . . . . . . . . . . . . 58-6
Création d’un contrôle Installation du paquet de l’expert. . . . . . 58-7
pour scruter les données . . . . . . . . . . . . 56-2 Accès aux services de l’API Tools . . . . . . . 58-8
Création et recensement du composant . . . 56-2 Utilisation d’objets natifs de l’EDI . . . . . 58-9
Fonctionnement du contrôle Utilisation de l’interface INTAServices . 58-9
en lecture seulement . . . . . . . . . . . . . 56-3 Ajout d’une image à la liste d’images . 58-9
Ajout de la propriété ReadOnly . . . . . 56-3 Ajout d’une action à la liste d’actions 58-10
Autorisation des mises à jour Suppression de boutons
nécessaires . . . . . . . . . . . . . . . . . 56-4 de barres d’outils . . . . . . . . . . . .58-11
Ajout du lien aux données . . . . . . . . . . 56-5 Débogage d’un expert . . . . . . . . . . . 58-12
Déclaration de la donnée membre . . . . 56-6 Numéros de version de l’interface . . . . 58-12
Déclaration des propriétés d’accès . . . . 56-6 Utilisation des fichiers et des éditeurs . . . . 58-13
Exemple de déclaration Utilisation des interfaces de module . . . 58-14
des propriétés d’accès . . . . . . . . . . 56-6 Utilisation des interfaces d’éditeur . . . . 58-14
Initialisation du lien de données . . . . . 56-7 Création de fiches et de projets . . . . . . . . 58-15
Réponse aux changements de données . . . 56-8 Création de modules . . . . . . . . . . . . 58-15
Création d’un contrôle de modification Notification d’un expert
de données . . . . . . . . . . . . . . . . . . . . 56-9 des événements de l’EDI. . . . . . . . . . . 58-19
Modification de la valeur par défaut Installation d’une DLL expert. . . . . . . . . 58-23
de FReadOnly. . . . . . . . . . . . . . . . . 56-9 Utilisation d’une DLL
Gestion des messages liés à la souris sans paquets d’exécution . . . . . . . . . 58-25
ou au clavier . . . . . . . . . . . . . . . . . 56-9
Réponse aux messages indiquant Annexe A
la manipulation de la souris. . . . . . 56-10 Implémentations spécifiques
Réponse aux messages indiquant
la manipulation du clavier . . . . . . 56-11 de la norme ANSI A-1
Mise à jour de la classe lien de données
sur un champ . . . . . . . . . . . . . . . . 56-12
Annexe B
Modification de la méthode Change . . . 56-12 Référence de scripts
Mise à jour de l’ensemble de données . . 56-13 côté serveur WebSnap B-1
Types d’objets . . . . . . . . . . . . . . . . . . . . B-2
Chapitre 57 Type Adapter . . . . . . . . . . . . . . . . . . B-2
Transformation d’une boîte Propriétés . . . . . . . . . . . . . . . . . . . B-3
de dialogue en composant 57-1 Type AdapterAction . . . . . . . . . . . . . . B-4
Propriétés . . . . . . . . . . . . . . . . . . . B-5
Définition de l’interface du composant . . . . . 57-2
Méthodes . . . . . . . . . . . . . . . . . . . B-6
Création et recensement du composant . . . . 57-2
Type AdapterErrors . . . . . . . . . . . . . . . B-6
Création de l’interface du composant. . . . . . 57-3
Propriétés . . . . . . . . . . . . . . . . . . . B-6
Inclusion des fichiers de l’unité de la fiche. 57-4
Type AdapterField . . . . . . . . . . . . . . . B-7
Ajout des propriétés de l’interface . . . . . . 57-4
Propriétés . . . . . . . . . . . . . . . . . . . B-7
Ajout de la méthode Execute . . . . . . . . . 57-5
Méthodes . . . . . . . . . . . . . . . . . . B-10
Test du composant. . . . . . . . . . . . . . . . . 57-7
Type AdapterFieldValues . . . . . . . . . . B-10
Propriétés . . . . . . . . . . . . . . . . . . B-10
xxviii
Méthodes . . . . . . . . . . . . . . . . . .B-11 Propriétés . . . . . . . . . . . . . . . . . . B-19
Type AdapterFieldValuesList . . . . . . . . .B-11 Méthodes . . . . . . . . . . . . . . . . . . B-19
Propriétés . . . . . . . . . . . . . . . . . .B-11 Objet Session. . . . . . . . . . . . . . . . . . B-19
Méthodes . . . . . . . . . . . . . . . . . .B-12 Propriétés . . . . . . . . . . . . . . . . . . B-19
Type AdapterHiddenFields . . . . . . . . . .B-12 Exemples JScript . . . . . . . . . . . . . . . . . B-20
Propriétés . . . . . . . . . . . . . . . . . .B-12 Exemple 1 . . . . . . . . . . . . . . . . . . . B-21
Méthodes . . . . . . . . . . . . . . . . . .B-12 Exemple 2 . . . . . . . . . . . . . . . . . . . B-21
Type AdapterImage . . . . . . . . . . . . . .B-12 Exemple 3 . . . . . . . . . . . . . . . . . . . B-22
Propriétés . . . . . . . . . . . . . . . . . .B-12 Exemple 4 . . . . . . . . . . . . . . . . . . . B-22
Type Module . . . . . . . . . . . . . . . . . .B-13 Exemple 5 . . . . . . . . . . . . . . . . . . . B-22
Propriétés . . . . . . . . . . . . . . . . . .B-13 Exemple 6 . . . . . . . . . . . . . . . . . . . B-23
Type Page . . . . . . . . . . . . . . . . . . . .B-13 Exemple 7 . . . . . . . . . . . . . . . . . . . B-23
Propriétés . . . . . . . . . . . . . . . . . .B-13 Exemple 8 . . . . . . . . . . . . . . . . . . . B-24
Objets globaux . . . . . . . . . . . . . . . . . . .B-14 Exemple 9 . . . . . . . . . . . . . . . . . . . B-24
Objet Application . . . . . . . . . . . . . . .B-15 Exemple 10 . . . . . . . . . . . . . . . . . . . B-25
Propriétés . . . . . . . . . . . . . . . . . .B-15 Exemple 11 . . . . . . . . . . . . . . . . . . . B-27
Méthodes . . . . . . . . . . . . . . . . . .B-16 Exemple 12 . . . . . . . . . . . . . . . . . . . B-28
Objet EndUser . . . . . . . . . . . . . . . . .B-16 Exemple 13 . . . . . . . . . . . . . . . . . . . B-29
Propriétés . . . . . . . . . . . . . . . . . .B-16 Exemple 14 . . . . . . . . . . . . . . . . . . . B-30
Objet Modules . . . . . . . . . . . . . . . . .B-17 Exemple 15 . . . . . . . . . . . . . . . . . . . B-32
Objet page. . . . . . . . . . . . . . . . . . . .B-17 Exemple 16 . . . . . . . . . . . . . . . . . . . B-33
Objet pages . . . . . . . . . . . . . . . . . . .B-17 Exemple 17 . . . . . . . . . . . . . . . . . . . B-34
Objet Producer . . . . . . . . . . . . . . . . .B-17 Exemple 18 . . . . . . . . . . . . . . . . . . . B-35
Propriétés . . . . . . . . . . . . . . . . . .B-18 Exemple 19 . . . . . . . . . . . . . . . . . . . B-36
Méthodes . . . . . . . . . . . . . . . . . .B-18 Exemple 20 . . . . . . . . . . . . . . . . . . . B-36
Objet Request . . . . . . . . . . . . . . . . . .B-18 Exemple 21 . . . . . . . . . . . . . . . . . . . B-37
Propriétés . . . . . . . . . . . . . . . . . .B-18 Exemple 22 . . . . . . . . . . . . . . . . . . . B-38
Objet Response . . . . . . . . . . . . . . . . .B-19
xxix
xxx
Chapitre
1
Introduction
Chapitre 1
Contenu de ce manuel
Ce manuel est composé des cinq parties suivantes :
• La partie I, “Programmation C++Builder”, décrit la manière de concevoir des
applications C++Builder généralistes. Cette partie donne des détails sur les
techniques de programmation utilisables dans toute application C++Builder.
Elle décrit, par exemple, la manière d’utiliser les objets courants de la
bibliothèque de composants visuels (VCL) ou de la bibliothèque de
composants Borland multiplate-forme (CLX) qui simplifient le développement
de l’interface utilisateur : gestion des chaînes, manipulation du texte,
implémentation des dialogues communs, manipulation des graphiques, gestion
des erreurs et des exceptions, utilisation des DLL, automation OLE et écriture
d’applications internationales.
En général, il est rarement important que la VCL de C++Builder soit écrite en
Pascal Objet. Mais, dans un petit nombre de cas, cela peut affecter vos
programmes C++Builder. Un chapitre concernant le langage C++ et la VCL
Introduction 1-1
Contenu de ce manuel
Conventions typographiques
Ce manuel utilise les polices et les symboles décrits dans le tableau suivant pour
mettre en évidence des parties particulières du texte :
Support technique
Borland propose diverses options de support, notamment des services gratuits
sur Internet vous permettant de faire des recherches dans notre base
documentaire et de contacter d’autres utilisateurs de produits Borland.
Vous disposez aussi de différents services de support technique et d’un support
payant de type Consulting.
Pour plus d’informations sur les services de support développeur proposés
par Borland, visitez notre site Web à l’adresse http://www.borland.com/
devsupport/bcppbuilder. Si vous résidez en France, consultez www.borland.fr
ou http://www.borland.com/bww/intlcust.html si vous êtes situé dans un
autre pays.
Quand vous contactez le support, soyez prêt à fournir des informations
complètes sur l’environnement, la version et l’édition du produit que vous
utilisez, ainsi qu’une description détaillée du problème.
Introduction 1-3
1-4 Guide du développeur
Partie
I
Programmation C++Builder
Partie I
Programmation C++Builder
Chapitre
Développement d’applications
Chapitre 2
2
avec C++Builder
Borland C++Builder est un environnement de programmation visuelle orienté
objet permettant le développement d’applications 32 bits en vue de leur
déploiement sous Windows et sous Linux. En utilisant C++Builder, vous pouvez
créer de puissantes applications avec un minimum de programmation.
C++Builder propose un ensemble d’outils de conception pour le développement
rapide d’applications (RAD), dont des experts programmateur et des modèles
d’applications ou de fiches, et gère la programmation orientée objet avec deux
bibliothèques étendues de classes :
• La bibliothèque de classes VCL comprend des objets qui encapsulent l’API
Windows ainsi que d’autres techniques de programmation utiles (Windows).
• La bibliothèque de composants Borland multiplate-forme (CLX), qui contient des
objets encapsulant la bibliothèque Qt (Windows ou Linux).
Ce chapitre décrit brièvement l’environnement de développement C++Builder et
comment il s’inscrit dans le cycle de développement. Le reste de ce manuel
donne des détails techniques sur le développement d’applications, la gestion des
bases de données et les applications Internet ou Intranet, la création de contrôles
ActiveX ou COM, et sur l’écriture de composants personnalisés.
L’EDI dispose de tous les outils nécessaires pour commencer à concevoir une
application :
• Le concepteur de fiche, une fenêtre vide, appelée une fiche, dans laquelle
concevoir l’interface utilisateur, de l’application.
• La palette des composants qui affiche des composants visuels ou non visuels
que vous pouvez utiliser pour concevoir votre interface utilisateur.
• L’inspecteur d’objets pour connaître ou modifier les propriétés et événements
d’un objet.
• L’arborescence d’objets pour afficher ou modifier les relations logiques d’un
objet.
• L’éditeur de code pour écrire ou modifier la logique sous-jacente d’un
programme.
• Le gestionnaire de projet qui permet de gérer les fichiers constituant un ou
plusieurs projets.
• Le débogueur intégré pour rechercher et corriger les erreurs dans votre code.
• De nombreux outils, comme les éditeurs de propriété qui permettent de
modifier la valeur des propriétés d’un objet.
• Des outils en ligne de commande, y compris des compilateurs, des éditeurs de
liens.
• Des bibliothèques de classes contenant de nombreux objets réutilisables. De
nombreux objets fournis dans la bibliothèque des classes sont accessibles dans
la palette des composants de l’EDI. Par convention, les noms des objets de la
bibliothèque des classes commencent par un T, comme TStatusBar.
Certains d’entre eux ne font pas partie de toutes les éditions du produit.
Une présentation plus complète de l’environnement de développement est
proposée dans le manuel Prise en main, livré avec le produit. En outre, le système
d’aide en ligne offre de l’aide sur tous les menus, boîtes de dialogues et fenêtres.
Conception d’applications
Vous pouvez utiliser C++Builder pour concevoir tout type d’application 32 bits,
que ce soit un utilitaire de portée générale ou un programme complexe de
gestion de données ou des applications distribuées.
Alors même que vous concevez visuellement l’interface utilisateur d’une
application, C++Builder génère le code C++ sous-jacent pour gérer l’application.
Dès que vous sélectionnez et modifiez les propriétés des composants et des
fiches, le résultat de ces modifications apparaît automatiquement dans le code
source, et vice-versa. Vous pouvez modifier directement les fichiers source avec
tout éditeur de texte, y compris l’éditeur de code intégré. Les modifications
effectuées dans le code sont immédiatement reflétées dans l’environnement
visuel.
Dans C++Builder vous pouvez créer vos propres composants. La plupart des
composants fournis sont écrits en Pascal Objet. Vous pouvez ajouter à la palette
les composants que vous avez écrits et la personnaliser à votre convenance en
insérant de nouveaux onglets.
Modification du code
L’éditeur de code C++Builder est un éditeur ASCII complet. Si vous utilisez
l’environnement de programmation visuel, une fiche est automatiquement
affichée dans un nouveau projet. Vous pouvez commencer la conception de
l’interface de votre application en plaçant des objets sur la fiche et en modifiant
leur fonctionnement dans l’inspecteur d’objets. Mais d’autres tâches de
programmation, comme l’écriture des gestionnaires d’événements pour les objets,
doivent se faire en tapant directement le code.
Le contenu d’une fiche et toutes ses propriétés ainsi que ses composants et leurs
propriétés peuvent être modifiés sous forme de texte dans l’éditeur de code.
Vous pouvez ajuster le code généré dans l’éditeur de code et ajouter d’autres
composants en tapant du code dans l’éditeur. Au fur et à mesure que vous tapez
du code dans l’éditeur, le compilateur l’analyse constamment afin de changer la
disposition de la fiche. Vous pouvez revenir à la fiche, voir et tester les
changements apportés dans l’éditeur, puis continuer à modifier la fiche elle-
même.
La génération de code C++Builder et le système de flux des propriétés est
entièrement ouvert à l’examen. Le code source de tout ce qui se trouve dans le
fichier exécutable final (tous les objets VCL, les objets CLX, les sources RTL et
les fichiers projet) peut être visualisé et modifié dans l’éditeur de code.
CLX Pour déployer une application CLX sous Linux, une application Borland C++
n’est pas encore disponible, mais vous pouvez déjà développer l’application dans
C++Builder.
Pour davantage d’informations sur le déploiement, voir chapitre 17,
“Déploiement des applications”.
Les composants visuels, comme TForm ou TSpeedButton sont appelés des contrôles
et dérivent de TControl. TControl propose des propriétés qui spécifient les
attributs visuels des contrôles comme la hauteur ou la largeur.
Les composants non visuels sont utilisés pour diverses tâches. Si, par exemple,
vous écrivez une application qui se connecte à une base de données, vous
pouvez placer un composant TDataSource dans une fiche pour connecter un
contrôle et l’ensemble de données utilisé par le contrôle. Cette connection est
invisible pour l’utilisateur, TDataSource est donc non visuel. A la conception,
les composants non visuels sont représentés par une icône. Cela vous permet
de manipuler leurs propriétés et événements comme pour un contrôle visuel.
Vous pouvez accéder à des informations détaillées sur tous les objets VCL ou
CLX, en utilisant l’aide en ligne pendant que vous programmez. Dans l’éditeur
de code, placez le curseur en un endroit quelconque de l’objet et appuyez sur F1
pour afficher de l’aide. Les objets, propriétés, méthodes et événements qui font
partie de la VCL sont marqués “Référence VCL” et ceux faisant partie de CLX
sont marqués “Référence CLX”.
Propriétés
Les Propriétés sont les caractéristiques d’un objet, relatives à son comportement
visible ou aux opérations qu’il effectue. Par exemple, la propriété Visible
détermine si un objet doit être vu ou non dans l’interface d’une application.
Des propriétés bien conçues simplifient l’utilisation de vos composants par
d’autres programmeurs et en facilite la maintenance.
Voici quelques fonctionnalités utiles des propriétés :
• Alors que les méthodes ne sont disponibles qu’à l’exécution, vous pouvez
accéder aux propriétés et les modifier au cours de la conception et obtenir une
réponse immédiate des composants dans l’EDI.
• Les propriétés peuvent être accédées via l’inspecteur d’objets dans lequel vous
pouvez changer les valeurs visuellement. Définir les propriétés au moment de
la conception est plus simple qu’écrire directement le code, et ce dernier est
plus facile à maintenir.
• Comme les données sont encapsulées, elles sont protégées et privées pour
l’objet réel.
• Les appels effectués pour obtenir ou définir des valeurs sont des méthodes, et
donc le traitement reste invisible pour l’utilisateur de l’objet. Par exemple, les
données peuvent résider dans une table, mais apparaître au programmeur
comme des données membres normales.
• Vous pouvez implémenter la logique qui déclenche des événements ou
modifier d’autres données pendant l’accès à la propriété. Par exemple, changer
la valeur d’une propriété peut nécessiter la modification d’une autre. Vous
pouvez modifier les méthodes créées pour la propriété.
• Les propriétés peuvent être virtuelles.
• Une propriété n’est pas limitée à un seul objet. Changer une propriété d’un
objet peut affecter plusieurs autres objets. Par exemple, définir la propriété
Checked d’un bouton radio affecte tous les autres boutons radio du groupe.
Méthodes
Une méthode est une fonction qui est un membre d’une classe. Les méthodes
définissent le comportement d’un objet. Les méthodes de classe peuvent accéder
à toutes les propriétés publiques, protégées et privées et aux données membres de la
classe, on les désigne fréquemment par le terme fonctions membres.
Voir “Contrôle des accès” à la page 46-4.
Evénements
Un événement est une action ou une occurrence détectée par un programme.
La plupart des applications modernes sont dites pilotées par événements, car
elles sont conçues pour répondre à des événements. Dans un programme, le
programmeur n’a aucun moyen de prévoir la séquence exacte des actions que
va entreprendre l’utilisateur. Il peut, par exemple, choisir un élément de menu,
cliquer sur un bouton ou sélectionner du texte. Vous allez donc écrire le code
qui gère chacun des événements qui vous intéressent au lieu d’écrire du code
s’exécutant toujours selon le même ordre.
Quelle que soit la façon dont un événement a été appelé, C++Builder recherche
si du code a été écrit pour gérer cet événement. Si c’est le cas, ce code est
exécuté, sinon, le comportement par défaut se produit.
Les types d’événements qui peuvent survenir se divisent en deux grandes
catégories :
• Evénements utilisateur
• Evénements système
Evénements utilisateur
Les événements utilisateur sont des actions initiées par l’utilisateur.
Les événements utilisateur sont, par exemple, OnClick (l’utilisateur a cliqué avec
la souris), OnKeyPress (l’utilisateur a appuyé sur une touche du clavier)
et OnDblClick (l’utilisateur a double-cliqué sur un bouton de la souris).
Evénements système
Ce sont des événements que le système d’exploitation déclenche pour vous.
Par exemple, l’événement OnTimer (le composant Timer déclenche l’un de ces
événements lorsqu’un intervalle prédéfini s’est écoulé), l’événement OnCreate (le
composant est en train d’être créé), l’événement OnPaint (un composant ou une
fenêtre a besoin d’être redessiné), etc. En règle générale, ces événements ne sont
pas directement déclenchés par des actions de l’utilisateur.
TObject
TComponent
TControl
[Objets]
[Objets] [Objets] TGraphicControl [Objets]
[Objets]
Exception [Objets]
Plusieurs importantes classes de base montrées dans la figure sont décrites dans
le tableau suivant :
Les quelques sections suivantes présentent une description générale des types de
classes que contient chaque branche. Pour avoir une présentation complète de la
hiérarchie des objets VCL et CLX, reportez-vous aux posters VCL et CLX fournis
avec ce produit.
Branche TObject
La branche TObject comprend tous les objets VCL et CLX qui dérivent de TObject
mais non de TPersistent. L’essentiel des capacités des objets VCL et CLX est basé
sur les méthodes définies dans TObject. TObject encapsule le comportement
fondamental commun à tous les objets VCL ou CLX, en introduisant des
méthodes qui permettent :
• De répondre à la création ou à la destruction d’objets.
• De donner des informations sur le type de classe et d’instance d’un objet et
des informations de type à l’exécution (RTTI) sur ses propriétés publiées.
• De gérer le traitement des messages (VCL) ou les événements système (CLX).
TObject est l’ancêtre immédiat de nombreuses classes simples. Les classes
contenues dans la branche de TObject ont une caractéristique commune
importante : elles sont transitoires. Cela signifie que ces classes ne disposent pas
d’une méthode pour enregistrer leur état avant leur destruction ; elles ne sont
pas persistantes.
Le groupe de classes le plus important de cette branche est constitué par la
classe Exception. Cette classe propose un grand nombre de classes d’exceptions
prédéfinies pour gérer automatiquement de nombreuses conditions d’exception
comme les erreurs de division par zéro, les erreurs d’entrées/sorties ou les
transtypages incorrects.
La branche TObject contient également un autre groupe de classes qui
encapsulent des structures de données, comme :
• TBits, une classe qui stocke un “tableau” de valeur booléennes.
• TList, une classe liste liée.
• TStack, une classe qui gère un tableau de pointeurs du type dernier entré,
premier sorti.
• TQueue, une classe qui gère un tableau de pointeurs du type premier entré,
premier sorti.
Dans la VCL, vous trouverez aussi des enveloppes pour les objets externes
comme TPrinter, qui encapsulent l’interface imprimante Windows, et TRegistry,
une enveloppe de bas niveau pour le registre du système et les fonctions qui
opèrent sur le registre. Elles sont spécifiques à l’environnement Windows.
TStream est un bon exemple du type de classes contenues dans cette branche.
TStream est la classe de base des objets flux qui permettent de lire ou d’écrire sur
divers types de support de données, comme les fichiers disque ou la mémoire
vive.
Globalement, cette branche contient un grand nombre de différents types de
classes particulièrement utiles pour le développeur.
Branche TPersistent
La branche TPersistent comprend tous les objets VCL et CLX qui dérivent de
TPersistent mais pas de TComponent. La persistance détermine ce qui est
enregistré dans un fichier fiche ou un module de données et ce qui est chargé
dans la fiche ou le module de données lorsqu’il est extrait de la mémoire.
Les objets de cette branche implémentent des propriétés pour les composants.
Les propriétés sont uniquement chargés et enregistrés avec une fiche si elles ont
un propriétaire. Le propriétaire doit être un composant. Cette branche introduit
la fonction GetOwner qui vous permet de déterminer le propriétaire de la
propriété.
Les objets de cette branche sont également les premiers à inclure une section
publiée dans laquelle les propriétés peuvent être automatiquement chargées et
enregistrées. Un méthode DefineProperties vous permet aussi d’indiquer la façon
de charger et d’enregistrer les propriétés.
Voici quelques autres classes de la branche TPersistent de la hiérarchie :
• TGraphicsObject, une classe de base abstraite pour les objets graphiques, par
exemple : TBrush, TFont et TPen.
• TGraphic, une classe de base abstraite pour les objets comme TBitmap et TIcon,
qui peuvent stocker et afficher des images visuelles.
• TStrings, une classe de base pour les objets qui représentent une liste de
chaînes.
• TClipboard, une classe contenant du texte ou des graphiques qui ont été
coupés ou copiés d’une application.
• TCollection, TOwnedCollection et TCollectionItem, classes qui maintiennent les
collections indexées d’éléments spécialement définis.
Branche TComponent
La branche TComponent contient des objets qui dérivent de TComponent mais pas
de TControl. Les objets de cette branche sont des composants que vous pouvez
manipuler sur des fiches au cours de la conception. Ce sont des objets persistants
aux capacités suivantes :
• Ils apparaissent dans la palette des composants et peuvent être modifiés dans
le concepteur de fiche.
• Ils peuvent posséder et gérer d’autres composants.
• Ils se chargent et s’enregistrent eux-mêmes.
Plusieurs méthodes de TComponent dictent la façon dont agissent les composants
durant la conception et les informations qui sont enregistrées avec le composant.
La gestion des flux est introduite dans cette branche de la VCL et de CLX.
C++Builder gère automatiquement la plupart des opérations principales relatives
aux flux. Les propriétés sont persistantes si elles sont publiées et les propriétés
publiées sont automatiquement mises en flux.
Branche TControl
La branche TControl est constituée de composants qui dérivent de TControl mais
pas de TWinControl (TWidgetControl dans CLX). Les objets de cette branche sont
des contrôles, c’est-à-dire des objets visuels que l’utilisateur de l’application peut
voir et manipuler à l’exécution. Tous les contrôles ont des propriétés, méthodes
et événements communs qui sont propres à l’aspect visuel des contrôles, comme
la position du contrôle, le curseur associé à la fenêtre (au widget dans CLX) du
contrôle, des méthodes pour dessiner ou déplacer le contrôle et des événements
permettant de répondre aux actions de la souris. Ils ne peuvent jamais recevoir
la saisie du clavier.
Si TComponent définit des comportements communs à tous les composants,
TControl définit ceux communs à tous les contrôles visuels. Il s’agit de routines
de dessin, des événements standard et de la notion de conteneur.
Tous les contrôles visuels partagent certaines propriétés. Ces propriétés sont
héritées de TControl mais elles ne sont publiées (elles apparaissent dans
l’inspecteur d’objets) que pour les composants où elles sont applicables. Ainsi,
TImage ne publie pas la propriété Color car sa couleur est déterminée par l’image
qu’il affiche.
Il y a deux types de contrôles :
• Ceux qui ont leur propre fenêtre (ou widget).
• Ceux qui utilisent la fenêtre (ou le widget) de leur parent.
Les contrôles qui ont leur propre fenêtre sont appelés contrôles “fenêtrés” (VCL)
ou “basés sur des widgets” (CLX) et dérivent de TWinControl (TWidgetControl
dans CLX). Les boutons et les cases à cocher en font partie.
Les contrôles qui utilisent une fenêtre (ou un widget) parent sont appelés
contrôles graphiques et dérivent de TGraphicControl. Les contrôles image et forme
en font partie. Les contrôles graphique ne possèdent pas de handle et ne peuvent
pas recevoir la focalisation de saisie. Comme un contrôle graphique n’a pas
besoin d’un handle, il utilise moins de ressources système. Les contrôles
graphique doivent se dessiner eux-mêmes et ne peuvent pas servir de parent
à d’autres contrôles.
Voir “Contrôles graphiques” à la page 9-20 pour davantage d’informations sur
les autres contrôles graphiques et le chapitre 9, “Types de contrôles”, pour
davantage d’informations sur les différents types de contrôles. Voir le chapitre 6,
“Manipulation des contrôles”, pour davantage d’informations sur la manière
d’interagir sur les contrôles à l’exécution.
Branche TWinControl/TWidgetControl
Dans la VCL, la branche TWinControl contient tous les contrôles qui dérivent de
TWinControl. TWinControl est la classe de base de tous les contrôles fenêtrés, qui
sont des éléments que vous utilisez dans l’interface utilisateur d’une application,
comme les boutons, les étiquettes ou les barres de défilement. Les contrôles
fenêtrés encapsulent un contrôle de Windows.
Dans CLX, TWidgetControl, qui remplace TWinControl, est la classe de base de
tous les contrôles widget qui encapsulent des widgets.
Les contrôles fenêtrés et widgets :
• Peuvent recevoir la focalisation lors de l’exécution de l’application, ce qui
signifie qu’ils peuvent recevoir les saisies clavier effectuées par l’utilisateur de
l’application. Par comparaison, d’autres contrôles peuvent seulement afficher
des données.
• Peuvent être le parent d’un ou de plusieurs contrôles enfant.
• Ont un handle ou un identificateur unique.
La branche TWinControl/TWidgetControl contient des contrôles dessinés
automatiquement (comme TEdit, TListBox, TComboBox, TPageControl, etc) et des
contrôles personnalisés que C++Builder doit dessiner, comme TDBNavigator,
TMediaPlayer (VCL uniquement) ou TGauge (VCL uniquement). Les descendants
directs de TWinControl /TWidgetControl implémentent typiquement des contrôles
standard, comme un champ d’édition, une boîte à option ou un contrôle page, et
savent donc déjà comment se dessiner eux-mêmes.
La classe TCustomControl est fournie pour les composants qui nécessitent un
handle mais n’encapsulent pas de contrôle standard ayant la capacité de se
redessiner lui-même. Vous n’avez jamais à vous soucier de la façon dont les
contrôles s’affichent ou répondent aux événements — C++Builder encapsule
complètement ce comportement pour vous.
Utilisation de BaseCLX
Chapitre 4
4
De nombreuses unités communes à la VCL et à CLX fournissent la prise en
charge sous-jacente des deux bibliothèques de composants. Ces unités sont
collectivement dénommées BaseCLX. BaseCLX n’inclut aucun des composants
qui apparaissent sur la palette des composants. Elle inclut à la place un certain
nombre de classes et de routines globales utilisées par les composants qui
apparaissent sur la palette des composants. Ces classes et routines sont
également disponibles pour une utilisation dans du code d’application ou pour
l’écriture de vos propres classes.
Remarque Les routines globales constituant BaseCLX sont souvent appelées la bibliothèque
d’exécution. Il ne faut pas confondre ces routines avec la bibliothèque
d’exécution C++. Un grand nombre de ces routines ont des fonctions similaires
à celles de la bibliothèque d’exécution C++, mais elles peuvent se distinguer à
cause de leurs noms de fonctions qui commencent par une lettre capitale, et elles
sont déclarées dans l’en-tête d’une unité.
Les rubriques suivantes traitent de bon nombre des classes et routines qui
constituent BaseCLX, et elles montrent la manière de les utiliser. Ces utilisations
incluent :
• Utilisation des flux
• Utilisation des fichiers
• Utilisation des fichiers ini et du registre
• Utilisation des listes
• Utilisation des listes de chaînes
• Utilisation des chaînes
• Conversion de mesures
• Création d’espaces de dessin
Remarque Cette liste de tâches n’est pas exhaustive. La bibliothèque d’exécution de
BaseCLX contient de nombreuses routines pour l’exécution de tâches qui ne sont
pas mentionnées ici. Ces routines incluent ainsi un ensemble de fonctions
mathématiques (définies dans l’unité Math), des routines pour la manipulation
des valeurs date/heure (définies dans les unités SysUtils et DateUtils) et des
routines pour la manipulation des Variants Pascal Objet (définies dans l’unité
Variants).
Valeur Signification
soFromBeginning Offset part du début de la ressource. Seek se déplace vers la position
Offset. Offset doit être >= 0.
soFromCurrent Offset part de la position en cours dans la ressource. Seek se déplace
vers Position + Offset.
soFromEnd Offset part de la fin de la ressource. Offset doit être <= 0 afin d’indiquer
le nombre d’octets avant la fin du fichier.
modifiée, une exception est déclenchée. Ainsi, tenter de modifier la taille d’un
flux de fichier ouvert en lecture seule déclenche une exception.
Le mode de partage peut prendre l’une des valeurs suivantes, avec les
restrictions énumérées ci-dessous :
Manipulation de fichiers
Plusieurs opérations courantes portant sur les fichiers sont prédéfinies dans la
bibliothèque d’exécution BaseCLX. Les procédures et fonctions manipulant les
fichiers agissent à un niveau élevé. Pour la plupart des routines, il vous suffit de
spécifier le nom du fichier, et la routine effectue alors pour vous les appels
nécessaires au système d’exploitation. Dans certains cas, vous utiliserez à la place
des handles de fichiers.
Attention Au contraire du langage Pascal Objet, le système d’exploitation Linux distingue
majuscules et minuscules. Faites attention à la casse des caractères lorsque vous
travaillez avec des fichiers dans des applications multi-plates-formes.
pas déjà, il est créé automatiquement. Vous êtes alors libre de lire les valeurs en
utilisant différentes méthodes de lecture, comme ReadString, ReadDate, ReadInteger
ou ReadBool. Par ailleurs, si vous souhaitez lire une section entière du fichier ini,
vous pouvez utiliser la méthode ReadSection. De même, vous pouvez écrire des
valeurs en utilisant WriteBool, WriteInteger, WriteDate ou WriteString.
L’exemple suivant lit des informations de configuration d’un fichier ini dans le
constructeur d’une fiche et écrit des valeurs dans le gestionnaire d’événement
OnClose.
__fastcall TForm1::TForm1(TComponent *Owner) : TForm(Owner)
{
TIniFile *ini;
ini = new TIniFile( ChangeFileExt( Application->ExeName, ".INI" ) );
delete ini;
}
delete ini;
}
Chacune des routines Read attend trois paramètres. Le premier identifie la
section du fichier ini. Le deuxième paramètre identifie la valeur à lire et le
troisième est une valeur par défaut à utiliser si la section ou la valeur n’existe
pas dans le fichier ini. De même que les méthodes Read gèrent de manière
élégante la non existence d’une section ou d’une valeur, les routines Write
crééent la section et/ou la valeur si elle n’existe pas. L’exemple précédent crée
un fichier ini la première fois qu’il est exécuté, et ce fichier est de la forme :
[Form]
Top=185
Left=280
Caption=Default Caption
InitMax=0
Lors des exécutions ultérieures de cette application, les valeurs ini sont lues lors
de la création de la fiche et réécrites dans l’événement OnClose.
Utilisation de TRegistryIniFile
De nombreuses applications Windows 32 bits stockent leurs informations dans la
base de registres plutôt que dans des fichiers ini, car cette base est hiérarchique
et ne souffre pas des limitations de taille inhérentes aux fichiers ini. Si vous êtes
habitué à utiliser des fichiers ini et souhaitez transférer vos informations de
configuration dans la base de registres, vous pouvez utiliser la classe
TRegistryIniFile. Vous pouvez également utiliser TRegistryIniFile dans des
applications multi-plates-formes si vous voulez utiliser la base de registres sous
Windows et un fichier ini sous Linux. Vous pouvez écrire la plus grande partie
de votre application de façon à ce qu’elle utilise le type TCustomIniFile. Vous
devez uniquement introduire des conditions dans le code qui crée une instance
de TRegistryIniFile (sous Windows) ou TMemIniFile (sous Linux) et l’affecter à
l’objet TCustomIniFile utilisé par votre application.
TRegistryIniFile crée une similitude entre les entrées de la base de registres et
celles du fichier ini. Toutes les méthodes de TIniFile et TMemIniFile (lecture et
écriture) existent dans TRegistryIniFile.
Quand vous créez un objet TRegistryIniFile, le paramètre que vous transmettez au
constructeur (correspondant au nom du fichier pour un objet IniFile ou
TMemIniFile) devient une valeur de clé sous la clé de l’utilisateur dans la base de
registres. Toutes les sections et valeurs commencent à partir de la clé ainsi
transmise. TRegistryIniFile simplifie considérablement l’interfaçage avec la base de
registres, de sorte que vous pourriez vouloir l’utiliser à la place du composant
TRegistry, même si vous ne migrez pas un code existant ou si vous n’écrivez pas
une application multi-plates-formes.
Utilisation de TRegistry
Si vous écrivez une application uniquement sous Windows et si vous connaissez
bien la structure de la base de registres, vous pouvez utiliser TRegistry. A la
différence de TRegistryIniFile, qui utilise les mêmes propriétés et méthodes des
autres composants du fichier ini, les propriétés et les méthodes de TRegistry
correspondent plus directement à la structure de la base de registres. Par
exemple, TRegistry vous permet de spécifier la clé racine et la sous-clé, alors que
TRegistry adopte HKEY_CURRENT_USER comme clé racine. En plus des
méthodes pour l’ouverture, la fermeture, l’enregistrement, le déplacement et la
suppression des clés, TRegistry vous permet de spécifier le niveau d’accès que
vous voulez utiliser.
Remarque TRegistry ne peut pas être utilisé en programmation multiplates-formes.
L’exemple suivant lit une valeur dans une entrée de registre :
#include <Registry.hpp>
Listes persistantes
Les listes persistantes peuvent être enregistrées dans un fichier de fiche. C’est la
raison pour laquelle elles sont souvent utilisées comme type d’une propriété
publiée sur un composant. Vous pouvez ajouter des éléments à la liste lors de la
conception, et ces éléments sont enregistrés avec l’objet afin d’être présents
lorsque le composant qui les utilise est chargé en mémoire à l’exécution. Il existe
deux types principaux de listes persistantes : les listes de chaînes et les
collections.
Parmi les listes de chaînes figurent TStringList et THashedStringList. Comme leur
nom l’indique, les listes de chaînes contiennent des chaînes. Elles fournissent une
prise en charge particulière des chaînes de la forme Nom=Valeur, pour vous
permettre de rechercher la valeur associée à un nom. De plus, la plupart des
listes de chaînes vous permettent d’associer un objet à chaque chaîne de la liste.
Les listes de chaînes sont décrites plus en détail dans “Utilisation des listes de
chaînes” à la page 4-17.
Les collections dérivent de la classe TCollection. Chaque descendant de TCollection
est spécialement conçu pour gérer une classe particulière d’éléments, où cette
classe dérive de TCollectionItem. Les collections prennent en charge de
nombreuses opérations de listes courantes. Toutes les collections sont conçues
pour être le type d’une propriété publiée, et un grand nombre ne peuvent pas
fonctionner indépendamment de l’objet qui les utilise pour une implémentation
sur la base de ses propriétés. Lors de la conception, la propriété dont la valeur
est une collection peut utiliser l’éditeur de collection pour vous permettre
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
ClickList = new TStringList;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
ClickList->SaveToFile(ChangeFileExt(Application->ExeName, ".LOG"));//enregistre la liste
delete ClickList;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
TVarRec v[] = {X,Y};
ClickList->Add(Format("Clic à (%d, %d)",v,ARRAYSIZE(v) - 1));// ajoute une chaîne
// à la liste
}
}
Clear et Move agissent à la fois sur les chaînes et les objets ; ainsi, la suppression
d’une chaîne supprime également l’éventuel objet correspondant.
Pour associer un objet à une chaîne existante, affectez l’objet à la propriété
Objects pour le même indice. Vous ne pouvez pas ajouter d’objet sans ajouter
une chaîne correspondante.
Remarque Les routines utilisées pour les noms de fichiers sous forme de chaîne,
AnsiCompareFileName, AnsiLowerCaseFileName et AnsiUpperCaseFileName, utilisent
la localisation Windows. Vous devez toujours utiliser des noms de fichiers
portables, car la localisation (le jeu de caractères) utilisée pour les noms de
fichiers peut différer de celle de l’interface utilisateur par défaut.
Tableau 4.11 Routines de conversion majuscules/minuscules pour les chaînes à zéro terminal
Utilisation
des paramètres
Routine de localisation Gestion MBCS
AnsiStrLower Oui Oui
AnsiStrUpper Oui Oui
StrLower Non Non
StrUpper Non Non
Impression
Techniquement parlant, la classe TPrinter n’appartient pas à BaseCLX car il
existe deux versions séparées, une pour la VCL (dans l’unité Printers) et une
pour CLX (dans l’unité QPrinters). L’objet VCL TPrinter encapsule les détails de
l’impression sous Windows. L’objet CLX TPrinter est un dispositif de peinture
qui opère sur une imprimante. Il génère du code postscript et l’envoie à lpr, lp
ou à toute autre commande d’impression. Les deux versions de TPrinter sont
toutefois très similaires.
Pour obtenir une liste des imprimantes installées et disponibles, utilisez la
propriété Printers. Les deux objets imprimante utilisent un TCanvas (similaire au
TCanvas de la fiche), ce qui signifie que tout ce qui peut être dessiné sur une
fiche peut également être imprimé. Pour imprimer une image, appelez d’abord la
méthode BeginDoc, puis les routines des dessins de canevas à imprimer (y
compris du texte en utilisant la méthode TextOut), et envoyez la tâche à
l’imprimante en appelant la méthode EndDoc.
Cet exemple utilise un bouton et un mémo sur une fiche. Quand l’utilisateur
clique sur le bouton, le contenu du mémo s’imprime avec une marge de
200 pixels autour de la page.
Pour exécuter cet exemple, vous devez inclure <Printers.hpp> dans votre fichier
d’unité.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TPrinter *Prntr = Printer();
TRect r = Rect(200,200,Prntr->PageWidth - 200,Prntr->PageHeight- 200);
Prntr->BeginDoc();
for( int i = 0; i < Memo1->Lines->Count; i++)
Prntr->Canvas->TextOut(200,200 + (i *
Prntr->Canvas->TextHeight(Memo1->Lines->Strings[i])),
Memo1->Lines->Strings[i]);
Prntr->Canvas->Brush->Color = clBlack;
Prntr->Canvas->FrameRect(r);
Prntr->EndDoc();
}
Pour davantage d’informations sur l’utilisation de l’objet TPrinter, voir dans
l’aide en ligne la rubrique TPrinter.
Conversion de mesures
L’unité ConvUtils déclare une fonction Convert que vous pouvez utiliser pour
convertir des mesures entre plusieurs unités. Vous pouvez effectuer des
conversions entre unités compatibles, par exemple des pouces et des pieds ou
des jours et des semaines. Les unités mesurant les mêmes types d’éléments sont
dites appartenir à la même famille de conversion. Les unités que vous convertissez
doivent appartenir à la même famille de conversion. Pour plus d’informations
sur les conversions, reportez-vous à la section suivante “Exécution des
conversions” et à Convert dans l’aide en ligne.
L’unité StdConvs définit plusieurs familles de conversion et les unités de mesure
de chacune de ces familles. De plus, vous pouvez créer vos propres familles de
conversion et leurs unités associées en utilisant les fonctions
RegisterConversionType et RegisterConversionFamily. Pour savoir comment étendre
les conversions et les unités de conversion, reportez-vous à la section “Ajout de
nouveaux types de mesure” à la page 4-29 et à Convert dans l’aide en ligne.
conversion entre jours et mois, jours et années, etc. n’est pas exacte. Les mois ont
différentes longueurs, les années ont des facteurs de correction pour les années
bissextiles, les secondes supplémentaires, etc.
Si vous utilisez uniquement des unités de mesure égales ou supérieures au mois,
vous pouvez créer une famille de conversion plus précise en prenant l’année
comme unité de base. Cet exemple crée une nouvelle famille de conversion
nommée cbLongTime.
Appel de méthodes
Une méthode s’appelle comme une procédure ou une fonction ordinaire. Par
exemple, les contrôles visuels disposent de la méthode Repaint qui rafraîchit
l’image du contrôle à l’écran. Vous pouvez appeler la méthode Repaint d’un objet
grille de dessin de la manière suivante :
DrawGrid1->Repaint;
Comme pour les propriétés, c’est la portée d’une méthode qui impose ou pas
l’utilisation de qualificateurs. Par exemple, pour redessiner une fiche depuis le
gestionnaire d’événement de l’un des contrôles enfant de la fiche, il n’est pas
nécessaire de préfixer l’appel de méthode avec le nom de la fiche :
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Repaint;
}
Les sites d’ancrage peuvent réagir lorsque les contrôles enfant sont retirés, et
même empêcher le désancrage, dans un gestionnaire d’événement OnUnDock :
__property TUnDockEvent OnUnDock = {read=FOnUnDock, write=FOnUnDock};
typedef void __fastcall (__closure *TUnDockEvent)(System::TObject* Sender, TControl*
Client, TWinControl* NewTarget, bool &Allow);
Le paramètre Client indique le contrôle enfant qui tente un désancrage et le
paramètre Allow permet au site d’ancrage (Sender) de rejeter le désancrage.
Lorsque vous implémentez un gestionnaire d’événement OnUnDock, il peut être
utile de connaître les autres enfants éventuellement ancrés. Ces informations
figurent dans la propriété en lecture seule DockClients, qui est un tableau indexé
de TControl. Le nombre de clients ancrés est donné par la propriété en lecture
seule DockClientCount.
Sélection de texte
Pour transférer du texte d’un contrôle de saisie dans le presse-papiers, il faut
d’abord sélectionner ce texte. La possibilité de mettre en surbrillance le texte
sélectionné est intégrée aux composants éditeur. Lorsque l’utilisateur sélectionne
un texte, celui-ci apparaît en surbrillance.
Le tableau suivant dresse la liste des propriétés fréquemment utilisées pour la
manipulation du texte sélectionné.
texte des éléments. Pour des informations sur l’utilisation du style “dessiné par
le propriétaire” pour ajouter des images aux menus, voir “Ajout d’images à des
éléments de menu” à la page 8-39.
Les contrôles dessinés par le propriétaire ont un point commun : ils contiennent
tous des listes d’éléments. Généralement, il s’agit de listes de chaînes qui sont
affichées sous forme de texte ou de liste d’objets contenant des chaînes qui sont
affichées sous forme de texte. Il est possible d’associer un objet à chaque élément
de ces listes et d’utiliser l’objet lorsque vous dessinez un élément.
Dans C++Builder, la création d’un contrôle dessiné par le propriétaire se fait
généralement en trois étapes :
1 Spécification du style dessiné par le propriétaire
2 Ajout d’objets graphiques à une liste de chaînes
3 Dessiner des éléments dessinés par le propriétaire
Floppy->Picture->Graphic);
DriveName[1] = ’:’ // Remplacer le deux points
break;
case DRIVE_FIXED:// Ajouter un élément à la liste
DriveName[1] = ’\0’; // convertir la lettre du lecteur en chaîne
AddedIndex = DriveList->Items->AddObject(DriveName,
Fixed->Picture->Graphic);
DriveName[1] = ’:’ // Remplacer le deux points
break;
case DRIVE_REMOTE:// Ajouter un élément à la liste
DriveName[1] = ’\0’; // convertir la lettre du lecteur en chaîne
AddedIndex = DriveList->Items->AddObject(DriveName,
Network->Picture->Graphic);
DriveName[1] = ’:’ // Remplacer le deux points
break;
}
if ((int)(Drive - ’A’) == getdisk()) // lecteur en cours?
DriveList->ItemIndex = AddedIndex; // en faire l’élément en cours de la liste
}
}
Pour dessiner chaque élément d’un contrôle dessiné par le propriétaire, attachez
un gestionnaire à l’événement draw-item de ce contrôle.
Les noms des événements relatifs aux objets dessinés par le propriétaire
commencent généralement par :
• OnDraw, comme OnDrawItem ou OnDrawCell
• OnCustomDraw, comme OnCustomDrawItem
• OnAdvancedCustomDraw, comme OnAdvancedCustomDrawItem
L’événement draw-item contient des paramètres identifiant l’élément à dessiner, le
rectangle dans lequel il s’inscrit et, habituellement, des informations sur son état
(actif, par exemple). L’application gère chaque événement en plaçant l’élément
approprié dans le rectangle transmis.
Par exemple, le code suivant montre comment dessiner des éléments dans une
boîte liste ayant un bitmap associé à chaque chaîne. Il attache ce gestionnaire à
l’événement OnDrawItem :
void __fastcall TForm1::ListBox1DrawItem(TWinControl *Control, int Index,
TRect &Rect, TOwnerDrawState State)
Création d’applications,
Chapitre 7
7
de composants et de bibliothèques
Ce chapitre donne un aperçu de la manière d’utiliser C++Builder pour créer des
applications, des bibliothèques et des composants.
Création d’applications
L’utilisation principale de C++Builder est la conception et la génération des types
d’applications suivants :
• Les applications d’interface utilisateur graphique
• Les applications console
• Les applications service (pour les applications Windows seulement)
• Paquets et DLL
Les applications d’interface utilisateur graphique (GUI) ont en général une
interface qui facilite leur utilisation. Les applications console s’exécutent dans
une fenêtre console. Les applications service s’exécutent en tant que services
Windows. Ces applications sont compilées en tant qu’exécutables, avec du code
de démarrage.
Vous pouvez créer d’autres types de projets, comme les paquets et les DLL,
bibliothèques de liaison dynamique. Ces applications produisent du code
exécutable sans code de démarrage. Reportez-vous à “Création de paquets et de
DLL” à la page 7-10.
Applications SDI
Pour créer une nouvelle application SDI :
1 Sélectionnez Fichier|Nouveau|Autre pour afficher la boîte de dialogue
Nouveaux éléments.
2 Cliquez sur l’onglet Projets et double-cliquez sur Application SDI.
3 Cliquez sur OK.
Par défaut, la propriété FormStyle de l’objet Form a la valeur fsNormal,
C++Builder suppose que toute nouvelle application est une application SDI.
Applications MDI
Pour créer une nouvelle application MDI :
1 Sélectionnez Fichier|Nouveau|Autre pour afficher la boîte de dialogue
Nouveaux éléments.
2 Cliquez sur l’onglet Projets et double-cliquez sur Application MDI.
3 Cliquez sur OK.
Les applications MDI nécessitent plus de réflexion et sont plus complexes à
concevoir que les applications SDI. Les applications MDI contiennent des fenêtres
enfant qui se trouvent dans la fenêtre client ; la fiche principale contient des
fiches enfant. Affectez la propriété FormStyle de l’objet TForm pour spécifier si la
fiche est un enfant (fsMDIForm) ou si c’est la fiche principale (fsMDIChild). Pour
éviter d’avoir à redéfinir à plusieurs reprises les propriétés des fenêtres enfant,
vous avez intérêt à définir une classe de base pour les fiches enfant et à dériver
chaque fiche enfant de cette classe.
Les applications MDI proposent souvent des options du menu principal comme
Cascade et Mosaïque pour afficher plusieurs fenêtres de diverses manières.
Quand une fenêtre enfant est réduite, son icône est placée dans la fenêtre parent
MDI.
Pour résumer, pour créer les fenêtres d’une application MDI :
1 Créez la fenêtre principale, ou fenêtre parent MDI. Initialisez sa propriété
FormStyle à fsMDIForm.
2 Créez un menu pour la fenêtre principale proposant les options Fichier|
Ouvrir, Fichier|Enregistrer et un menu Fenêtre proposant les options Cascade,
Mosaïque et Réorganiser.
3 Créez les fiches enfant MDI et initialisez leur propriété FormStyle à fsMDIChild.
Modèles de programmation
Les modèles de programmation sont des structures communément appelées
squelettes que vous pouvez ajouter au code source puis remplir. Certains modèles
de code standard, comme les déclarations de tableaux, de classes ou de fonction,
ainsi que de nombreuses instructions, sont livrés avec C++Builder.
Vous pouvez aussi écrire vos propres modèles de code pour les structures que
vous utilisez souvent. Par exemple, si vous voulez utiliser une boucle for dans
votre code, insérez le modèle suivant :
for (; ;)
{
}
Pour insérer un modèle de code dans l’éditeur de code, appuyez sur Ctrl-j et
sélectionnez le modèle que vous voulez utiliser. Vous pouvez ajouter vos propres
modèles à cette collection.
Applications console
Les applications console sont des programmes 32 bits exécutés sans interface
graphique, généralement dans une fenêtre console. Habituellement, ces
applications ne nécessitent pas une saisie utilisateur importante et accomplissent
un jeu limité de fonctions.
Pour créer une nouvelle application console :
1 Choisissez Fichier|Nouveau|Autre puis double-cliquez sur Expert Console
dans la boîte de dialogue Nouveaux éléments.
2 Dans la boîte de dialogue Expert console, cochez l’option Application console,
choisissez le type de source (C ou C++) de la fiche principale du projet ou
spécifiez un fichier préexistant contenant une fonction main ou winmain, puis
choisissez le bouton OK.
C++Builder crée alors un fichier projet pour le type de fichier source spécifié et
affiche l’éditeur de code.
Applications service
Les applications service reçoivent les requêtes des applications client, traitent ces
requêtes et renvoient les informations aux applications client. Habituellement,
elles s’exécutent en arrière-plan, sans nécessiter de saisie utilisateur importante.
Threads de service
Chaque service dispose de son propre thread (TServiceThread), donc si votre
application service implémente plusieurs services, vous devez vous assurer que
l’implémentation de vos services est compatible avec l’utilisation de threads. La
classe TServiceThread est ainsi conçue de façon à implémenter le service dans le
gestionnaire d’événement OnExecutede TService. Le thread du service dispose de
sa propre méthode Execute qui contient une boucle appelant les gestionnaires
OnStart et OnExecute du service avant de traiter de nouvelles requêtes.
Comme le traitement des requêtes de service peut prendre longtemps et que
l’application service peut recevoir simultanément plusieurs requêtes d’un ou de
plusieurs clients, il est plus efficace de lancer un nouveau thread (dérivé de
TThread et non de TServiceThread) pour chaque requête et de déplacer
l’implémentation du service dans la méthode Execute du nouveau thread. Cela
permet à la boucle Execute du thread du service de traiter continuellement de
nouvelles requêtes sans avoir à attendre la fin du gestionnaire OnExecute du
service. L’exemple suivant en est une illustration.
Exemple Ce service sonne tous les 500 millisecondes depuis le thread standard. Il gère la
pause, la reprise et l’arrêt du thread quand on indique au service de se
suspendre, de reprendre ou de s’arrêter.
1 Choisissez Fichier|Nouveau|Autre et double-cliquez sur Application Service
dans la boîte de dialogue Nouveaux éléments. La fenêtre Service1 apparaît.
Propriétés de TDependency
La propriété DisplayName de TDependency est à la fois le nom d’affichage et le
nom réel du service. Elle est presque toujours identique à la propriété Name
TDependency.
fonctionnalités à une application. Vous pouvez créer des DLL dans des
programmes multiplates-formes. Cependant, sous Linux, les DLL et les paquets
sont recompilés en tant qu’objets partagés.
Les paquets sont des DLL spéciales utilisées par les applications C++Builder, par
l’EDI ou les deux à la fois. Il y a deux sortes de paquets : les paquets d’exécution
et les paquets de conception. Les paquets d’exécution fournissent des
fonctionnalités à un programme lors de son exécution. Les paquets de conception
permettent d’étendre les fonctionnalités de l’EDI.
Les DLL et les bibliothèques doivent gérer toutes les exceptions pour empêcher
l’affichage d’erreurs ou d’avertissements dans des boîtes de dialogue Windows.
Les directives du compilateur suivantes peuvent être placées dans les fichiers
projet bibliothèque :
Pour davantage d’informations sur les paquets, voir chapitre 15, “Utilisation des
paquets et des composants”.
Par exemple, vous voulez créer une DLL afin d’afficher une simple boîte de
dialogue :
//---------------------------------------------------------------------
extern TYesNoDialog *YesNoDialog;
//---------------------------------------------------------------------
#endif
// DLLMAIN.CPP
//---------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop
#include "dllMain.h"
//---------------------------------------------------------------------
#pragma resource "*.dfm"
TYesNoDialog *YesNoDialog;
//---------------------------------------------------------------------
Liaison de DLL
Vous pouvez définir les options du lieur pour votre DLL sur la page Lieur de la
boîte de dialogue Options du projet. La case à cocher par défaut de cette page
permet également de créer une bibliothèque d’importation pour votre DLL. Si la
compilation est effectuée à partir de la ligne de commande, appelez le lieur,
ILINK32.EXE, avec le commutateur -Tpd. Par exemple :
ilink32 /c /aa /Tpd c0d32.obj mydll.obj, mydll.dll, mydll.map, import32.lib cw32mt.lib
Si vous avez besoin d’une bibliothèque d’importation, utilisez aussi le
commutateur -Gi, qui permet de la générer.
Vous pouvez, si vous le souhaitez, créer une bibliothèque d’importation avec
l’utilitaire de ligne de commande IMPLIB.EXE. Par exemple :
implib mydll.lib mydll.dll
Pour plus d’informations sur les différentes options de liaison de DLL et leur
utilisation avec d’autres modules statiquement ou dynamiquement liés à la
bibliothèque d’exécution, voir l’aide en ligne.
Lorsque vous concevez une application de base de données, vous devez choisir
le mécanisme d’accès aux données à utiliser. Chaque mécanisme d’accès aux
données diffère par l’éventail des fonctions prises en charge, la facilité de
déploiement et la capacité des pilotes à gérer divers serveurs de bases de
données.
Voir la partie II, “Développement d’applications de bases de données”, dans ce
manuel, pour plus de détails sur la façon d’utiliser C++Builder pour créer des
applications de bases de données client ou serveur. Reportez-vous à
“Déploiement d’applications de bases de données” à la page 17-7 pour avoir des
informations sur le déploiement.
Remarque Les éditions de C++Builder n’offrent pas toutes le support des bases de données.
Utilisation de WebBroker
Vous pouvez utiliser WebBroker (appelé aussi architecture NetCLX) pour créer
des applications serveur Web comme les applications CGI ou les bibliothèques
de liaison dynamiques (DLL). Ces applications serveur web peuvent ne contenir
aucun composant visuel. Les composants de la page Internet de la palette de
composants vous permettent de créer des gestionnaires d’événements, de
construire par programme des documents HTML ou XML et de les transférer
au client.
Pour créer une nouvelle application serveur Web en utilisant l’architecture
WebBroker, choisissez Fichier|Nouveau|Autre et double-cliquez sur Application
serveur Web dans la boîte de dialogue Nouveaux éléments. Choisissez ensuite le
type d’application serveur Web :
Utilisation d’InternetExpress
InternetExpress est un ensemble de composants permettant d’étendre
l’architecture d’application serveur Web de base pour qu’elle agisse en tant que
client d’une application serveur. Vous utilisez InternetExpress pour les
applications dans lesquelles les clients dans un navigateur peuvent accéder aux
données d’un fournisseur, résoudre les mises à jour du fournisseur tout en
s’exécutant sur un client.
Les applications InternetExpress génèrent des pages HTML qui associent HTML,
XML et javascript. HTML régit la disposition et l’aspect des pages affichées dans
le navigateur des utilisateurs finals. XML code les paquets de données et les
paquets delta qui représentent les informations base de données. Javascript
permet aux contrôles HTML d’interpréter et de manipuler les données des
paquets XML sur la machine client.
Pour plus d’informations sur InternetExpress, voir chapitre “Construction des
applications Web avec InternetExpress” à la page 29-35.
une machine différente. Vous pouvez aussi utiliser COM+, ActiveX et les pages
Active Server.
COM est un modèle de composant logiciel indépendant du langage qui permet
l’interaction entre des composants logiciels et des applications s’exécutant sous
Windows. L’aspect fondamental de COM est de permettre la communication
entre composants, entre applications et entre clients et serveurs, par le biais
d’interfaces clairement définies. Les interfaces offrent aux clients un moyen de
demander à un composant COM quelles fonctionnalités il supporte à l’exécution.
Pour fournir d’autres fonctionnalités à votre composant, il suffit d’ajouter une
autre interface pour ces fonctionnalités.
Pour davantage d’informations sur les modules de données, voir l’aide en ligne.
L’option Utiliser est disponible pour les fiches, les boîtes de dialogue et les
modules de données.
Implémentation de ICustomHelpViewer
L’interface ICustomHelpViewer contient trois types de méthodes : les méthodes
servant à communiquer au gestionnaire d’aide les informations du niveau
système (par exemple, des informations non liées à une requête d’aide
particulière) ; les méthodes servant à afficher l’aide en fonction du mot clé fourni
par le gestionnaire d’aide ; les méthodes servant à afficher le sommaire.
pages Man (Linux), la liste de chaînes contient plusieurs chaînes, une pour
chaque section du manuel contenant une page pour ce mot clé.
void__fastcall ICustomHelpViewer::ShowHelp(const AnsiString HelpString)
est appelée par le gestionnaire d’aide s’il a besoin que le visualiseur d’aide
affiche de l’aide sur un mot clé particulier. C’est le dernier appel de méthode de
l’opération ; elle n’est jamais appelée sauf si UnderstandsKeyword a été invoquée
au préalable.
Implémentation de IExtendedHelpViewer
ICustomHelpViewer est seule à fournir un support direct de l’aide par mot clé.
Certains systèmes d’aide (spécialement WinHelp) opèrent en associant un
nombre (appelé ID de contexte) aux mots clés, de manière interne au système
d’aide et donc de manière invisible pour l’application. De tels systèmes
nécessitent que l’application supporte l’aide par contexte, où l’application
invoque le système d’aide avec un nombre plutôt qu’une chaîne, et que le
système d’aide effectue la traduction du nombre.
Les applications écrites en CLX ou VCL peuvent communiquer avec les systèmes
utilisant l’aide contextuel, en étendant l’objet qui implémente ICustomHelpViewer
afin qu’il implémente également IExtendedHelpViewer. IExtendedHelpViewer prend
aussi en charge la communication avec les systèmes d’aide vous permettant
d’aller directement aux rubriques de haut niveau au lieu d’utiliser les recherches
par mot clé. Le visualiseur intégré WinHelp le fait automatiquement.
IExtendedHelpViewer expose quatre fonctions. Deux d’entre elles,
UnderstandsContext et DisplayHelpByContext, sont utilisées pour supporter l’aide
par contexte ; les deux autres, UnderstandsTopic et DisplayTopic, sont utilisées pour
supporter les rubriques.
Lorsque l’utilisateur d’une application appuie sur F1, le gestionnaire d’aide
appelle
int__fastcall IExtendedHelpViewer::UnderstandsContext(const int ContextID, AnsiString
HelpFileName)
et le contrôle actif prend en charge l’aide par contexte et non l’aide par mot clé.
Comme poure ICustomHelpViewer::UnderstandsKeyword(), le gestionnaire d’aide
interroge successivement tous les visualiseurs d’aide recensés. Mais, au contraire
de ICustomHelpViewer::UnderstandsKeyword(), si plusieurs visualiseurs gèrent un
contexte spécifié, c’est le premier visualiseur recensé et gérant le contexte qui est
invoqué.
Le gestionnaire d’aide appelle
void__fastcall IExtendedHelpViewer::DisplayHelpByContext(const int ContextID, AnsiString
HelpFileName)
après avoir consulté les visualiseurs d’aide recensés.
Les fonctions de support des rubriques se comportent de la même façon :
bool__fastcall IExtendedHelpViewer::UnderstandsTopic(const AnsiString Topic)
est utilisée pour demander aux visualiseurs d’aide s’ils supportent une rubrique ;
void__fastcall IExtendedHelpViewer::DisplayTopic(const AnsiString Topic)
est utilisée pour invoquer le premier visualiseur recensé indiquant qu’il peut
fournir de l’aide sur cette rubrique.
Implémentation de IHelpSelector
IHelpSelector est un compagnon de ICustomHelpViewer. Lorsque plusieurs
visualiseurs recensés peuvent assurer le support du mot clé, du contexte ou de la
rubrique spécifié, ou peuvent fournir un sommaire, le gestionnaire d’aide doit
faire un choix entre eux. Dans le cas des contextes ou des rubriques, le
gestionnaire d’aide sélectionne toujours le premier visualiseur d’aide prétendant
assurer le support. Dans le cas des mots clés ou des sommaires, le gestionnaire
d’aide, par défaut, sélectionne le premier visualiseur d’aide. Ce comportement
peut être redéfini par une application.
Pour supplanter la décision du gestionnaire d’aide, une application doit recenser
une classe fournissant une implémentation de l’interface IHelpSelector.
IHelpSelector exporte deux fonctions : SelectKeyword et TableOfContents. Les deux
acceptent comme argument un TStrings contenant, l’un à la suite de l’autre, soit
les correspondances possibles des mots clés, soit les noms des visualiseurs
pouvant fournir un sommaire. L’implémenteur est nécessaire pour renvoyer
l’indice (dans le TStringList) représentant la chaîne sélectionnée, puis le
TStringList est libéré par le gestionnaire d’aide
Remarque Le gestionnaire d’aide risque de se tromper si les chaînes sont réarrangées ; il est
conseillé que les implémenteurs de IHelpSelector ne le fassent pas. Le système
Les quatre fonctions prennent les données qui leurs sont transmises et les font
suivre via une donnée membre de TApplication qui représente le système d’aide.
Cette donnée membre est directement accessible via la propriété HelpSystem.
Utilisation de IHelpSystem
IHelpSystem permet à l’application VCL ou CLX de réaliser trois choses :
• Fournit au gestionnaire d’aide les informations de chemin d’accès.
• Fournit un nouveau sélecteur d’aide.
• Demande au gestionnaire d’aide d’afficher l’aide.
Assigner un sélecteur d’aide permet au gestionnaire d’aide de déléguer la prise
de décision au cas où plusieurs systèmes d’aide externes peuvent apporter l’aide
pour le même mot clé. Pour plus d’informations, voir la section “Implémentation
de IHelpSelector” à la page 7-35.
IHelpSystem exporte quatre procédure et une fonction utilisées pour demander au
gestionnaire d’aide d’afficher l’aide :
• ShowHelp
• ShowContextHelp
• ShowTopicHelp
• ShowTableOfContents
• Hook
Hook est entièrement destinée à la compatibilité WinHelp et ne doit pas être
utilisée dans une application CLX ; elle permet le traitement des messages
WM_HELP qui ne peuvent pas être directement traduits en requêtes d’aide basée
sur un mot clé, un contexte ou une rubrique. Les autres méthodes prennent
chacune deux arguments : le mot clé, l’ID de contexte ou la rubrique pour lequel
l’aide est demandée, et le fichier d’aide dans lequel on s’attend à la trouver.
En général, sauf si vous demandez une aide par rubrique, il est aussi efficace et
plus clair de transmettre les requêtes au gestionnaire d’aide via la méthode
InvokeHelp de votre contrôle.
Manipulation de l’application
La variable globale Application de type TApplication se trouve dans chaque
application utilisant la VCL ou la CLX. Application encapsule l’application et
propose de nombreux services fonctionnant en arrière-plan du programme. Ainsi,
Application gère la manière d’appeler un fichier d’aide depuis les menus de votre
programme. La compréhension du fonctionnement de TApplication est plus
importante pour le concepteur de composants que pour le développeur
d’applications autonomes, mais vous devez définir les options gérées par
Application dans la page Application de la boîte de dialogue Options de projet
(Projet|Options) quand vous créez un projet.
De plus, Application reçoit de nombreux événements qui s’appliquent à
l’application dans son ensemble. Par exemple, l’événement OnActivate vous
permet de réaliser des actions au démarrage de l’application, l’événement OnIdle
vous permet d’exécuter des traitements en arrière-plan lorsque l’application n’est
pas occupée, l’événement OnMessage vous permet d’intercepter les messages
Windows (sous Windows uniquement), l’événement OnEvent vous permet
d’intercepter des événements, etc. Bien que vous ne puissiez pas utiliser l’EDI
pour examiner les propriétés et les événements de la variable globale Application,
un autre composant, TApplicationEvents, intercepte les événements et vous permet
de fournir les gestionnaires d’événements à l’aide de l’EDI.
Gestion de l’écran
Une variable globale de type TScreen, appelée Screen, est créée lors de la création
d’un projet. Screen encapsule l’état de l’écran dans lequel l’application s’exécute.
Parmi les fonctions imparties à Screen, il y a
• La gestion de l’aspect du curseur.
• La taille de la fenêtre dans laquelle s’exécute l’application.
• La liste des fontes disponibles pour le périphérique écran.
• Divers aspects de l’écran (Windows uniquement).
Si votre application Windows s’exécute sur plusieurs moniteurs, Screen gère une
liste des moniteurs et leurs dimensions afin que vous puissiez effectivement
gérer la disposition de l’interface utilisateur.
Lors de l’utilisation de la CLX pour la programmation multiplate-forme, le
comportement par défaut est le suivant : les applications créent un composant
écran en fonction des informations concernant le périphérique d’écran en cours
et l’assigne à Screen.
Ajout de fiches
Pour ajouter une fiche à votre projet, sélectionnez Fichier|Nouveau|Fiche.
Toutes les fiches d’un projet ainsi que les unités correspondantes sont affichées
dans le gestionnaire de projet (Voir|Gestionnaire de projet) et vous pouvez
afficher la liste des fiches en choisissant Voir|Fiches.
Liaison de fiches
L’ajout d’une fiche au projet ajoute au fichier projet une référence à cette fiche
mais pas aux autres unités du projet. Avant d’écrire du code faisant référence à
la nouvelle fiche, vous devez ajouter une référence à cette fiche dans les fichiers
unité des fiches y faisant référence. Cela s’appelle la liaison de fiche.
La liaison de fiche est fréquemment utilisée pour donner accès aux composants
contenus dans une autre fiche. Par exemple, la liaison de fiche est souvent
employée pour permettre à une fiche contenant des composants orientés données
de se connecter aux composants d’accès aux données d’un module de données.
Pour lier une fiche à une autre fiche :
1 Sélectionnez la fiche qui fait référence à une autre.
2 Choisissez Fichier|Inclure l’en-tête d’unité.
3 Sélectionnez le nom de l’unité de la fiche qui doit être référencée.
4 Choisissez OK.
La liaison d’une fiche à une autre se traduit simplement par le fait qu’une fiche
contient l’en-tête de l’unité de l’autre fiche. Par conséquent, la fiche liée et ses
composants se trouvent maintenant dans la portée de l’autre fiche.
Gestion de la disposition
A son niveau le plus élémentaire, vous contrôlez l’organisation de votre interface
utilisateur par la manière de disposer les contrôles dans les fiches. Le choix des
emplacements est reflété par les propriétés Top, Left, Width et Height des
contrôles. Vous pouvez modifier ces valeurs à l’exécution afin de modifier la
position ou la taille des contrôles dans les fiches.
Les contrôles disposent de nombreuses autres propriétés qui leur permettent de
s’adapter automatiquement à leur contenu ou à leur conteneur. Cela vous permet
d’organiser les fiches de telle manière que les différents éléments forment un
tout unifié.
Deux propriétés contrôlent la position et la taille d’un contrôle relativement à
celle de son parent. La propriété Align vous permet d’obliger un contrôle à
s’adapter exactement à un côté spécifié de son parent ou à occuper toute la place
disponible de la zone client du parent une fois les autres contrôles alignés.
Quand le parent est redimensionné, les contrôles alignés sont automatiquement
redimensionnés et restent positionnés le long d’un côté donné du parent.
Si vous voulez qu’un contrôle reste positionné relativement à un côté particulier
de son parent sans toucher ce bord ou être redimensionné pour occuper la
totalité du côté, vous pouvez utiliser la propriété Anchors.
Pour vous assurer qu’un contrôle ne devient ni trop grand ni trop petit, vous
pouvez utiliser la propriété Constraints. Constraints vous permet de spécifier la
hauteur maximum, la hauteur minimum, la largeur maximum et la largeur
minimum du contrôle. Initialisez ces valeurs afin de limiter la taille (en pixels)
de la hauteur et de la largeur du contrôle. Ainsi, en initialisant les contraintes
MinWidth et MinHeight d’un objet conteneur, vous êtes certain que ses objets
enfant sont toujours visibles.
La valeur de Constraints se propage le long de la hiérarchie parent/enfant de
telle manière que la taille d’un objet peut être restreinte car il contient des
enfants alignés qui ont des contraintes de taille. Constraints peut également
empêcher un contrôle d’être mis à l’échelle dans une dimension particulière lors
de l’appel de sa méthode ChangeScale.
fichier en-tête (.h) de la fiche peut accéder à la fiche par l’intermédiaire de cette
variable.
Comme la fiche est ajoutée au point d’entrée principal de l’application, elle
apparaît lorsque le programme est exécuté et existe en mémoire pour la durée de
l’application.
Bien entendu, vous ne pouvez pas utiliser de variables locales pour les fiches
non modales dans les gestionnaires d’événements car elles doivent avoir une
portée globale pour garantir que la fiche existe aussi longtemps qu’elle est
utilisée. Show rend la main dès que la fiche est ouverte, donc si vous utilisez une
variable locale, la variable locale sort de portée immédiatement.
Par exemple, le gestionnaire OnClick suivant d’un bouton de la fiche crée une
instance de TResultsForm en utilisant le paramètre supplémentaire :
void __fastcall TMainMForm::SecondButtonClick(TObject *Sender)
{
TResultsForm *rf = new TResultsForm(2, this);
rf->ShowModal();
delete rf;
}
il est possible de l’interroger via ses propriétés et ses fonctions membres tout
comme les fiches non modales de l’exemple précédent. Mais comment faire si la
fiche B est retirée de la mémoire une fois fermée ? Comme une fiche ne renvoie
pas explicitement de valeur, il est nécessaire de préserver les informations
importantes de la fiche avant de la détruire.
Pour illustrer cette manière de procéder, considérez une version modifiée de la
fiche ColorForm conçue comme une fiche modale. Sa classe est déclarée de la
manière suivante :
class TColorForm : public TForm
{
__published: // Composants gérés par l’EDI
TListBox *ColorListBox;
TButton *SelectButton;
TButton *CancelButton;
void __fastcall CancelButtonClick(TObject *Sender);
void __fastcall SelectButtonClick(TObject *Sender);
private: // Déclarations de l’utilisateur
String* curColor;
public: // Déclarations de l’utilisateur
virtual __fastcall TColorForm(TComponent* Owner);
virtual __fastcall TColorForm(String* s, TComponent* Owner);
};
La fiche contient une boîte liste nommée ColorListBox contenant une liste de
noms de couleur. Quand il est choisi, le bouton nommé SelectButton mémorise le
nom de la couleur sélectionnée dans ColorListBox puis ferme la fiche.
CancelButton est un bouton qui ferme simplement la fiche.
Remarquez l’ajout à la déclaration de la classe d’un constructeur défini par
l’utilisateur qui attend un argument String*. Normalement, ce paramètre String*
pointe sur une chaîne gérée par la fiche qui déclenche ColorForm. Ce constructeur
a l’implémentation suivante :
void__fastcall TColorForm::TColorForm(String* s, TComponent* Owner)
: TForm(Owner)
{
curColor = s;
*curColor = "";
}
Le constructeur enregistre le pointeur dans une donnée membre privée curColor
et initialise la chaîne avec une chaîne vide.
Remarque Pour utiliser ce constructeur défini par l’utilisateur, la fiche doit être créée
explicitement. Ce ne peut pas être une fiche auto-créée au démarrage de
l’application. Pour davantage d’informations, voir “Contrôle du stockage en
mémoire des fiches” à la page 8-5.
Dans l’application, l’utilisateur sélectionne une couleur dans la boîte liste puis
clique sur le bouton SelectButton pour enregistrer son choix et fermer la fiche.
Création de cadres
Pour créer un cadre vide, choisissez Fichier|Nouveau|Cadre, ou Fichier|
Nouveau|Autre et double-cliquez sur Cadre. Vous pouvez alors déposer des
composants (y compris d’autres cadres) sur le nouveau cadre.
Il est généralement préférable, bien que non nécessaire, d’enregistrer les cadres
en tant que partie d’un projet. Si vous souhaitez créer un projet ne contenant
que des cadres et aucune fiche, choisissez Fichier|Nouveau|Application, fermez
la nouvelle fiche et la nouvelle unité sans les enregistrer, puis choisissez Fichier|
Nouveau|Cadre et enregistrez le projet.
Remarque Lorsque vous enregistrez des cadres, évitez d’utiliser les noms par défaut Unit1,
Project1 etc., car ils peuvent être à la source de conflits au moment de
l’utilisation ultérieure des cadres.
A la conception, vous pouvez afficher n’importe quel cadre contenu dans le
projet en cours en choisissant Voir|Fiches et en sélectionnant le cadre. Comme
dans le cas des fiches et des modules de données, vous pouvez passer du
concepteur de fiche au fichier fiche du cadre en cliquant avec le bouton droit et
en choisissant Voir comme fiche ou Voir comme texte.
cadre incorporé, mais que les modifications apportées au cadre incorporé ne sont
pas répercutées sur le cadre ancêtre.
Supposons que vous souhaitiez regrouper des composants d’accès aux données
et des contrôles orientés données en vue d’une utilisation fréquente,
éventuellement dans plusieurs applications. Pour ce faire, vous pourriez
rassembler les composants dans un modèle de composant ; mais si vous
commencez à utiliser le modèle et changez d’avis ultérieurement sur
l’organisation des contrôles, vous devez faire marche arrière et modifier
manuellement dans chaque projet la partie sur laquelle le modèle a été placé.
Par contre, si vous placez vos composants base de données dans un cadre, les
modifications ultérieures ne doivent être apportées que dans un seul endroit ; les
modifications apportées à un cadre d’origine sont automatiquement répercutées
sur ses descendants incorporés lors de la recompilation des projets.
Parallèlement, vous pouvez modifier n’importe quel cadre incorporé sans affecter
le cadre d’origine ni aucun de ses descendants incorporés. La seule restriction à
la modification des cadres incorporés est que vous ne pouvez pas leur ajouter
des composants.
Figure 8.1 Cadre avec des contrôles orientés données et un composant source de données
L’exemple de code suivant peut être placé dans une Action et lié à la propriété
Action du sous-élément d’un menu TMainMenu ou placé dans l’événement
OnClick du sous-élément :
if(OpenDialog1->Execute()){
filename = OpenDialog1->FileName;
};
Ce code affiche la boîte de dialogue et si l’utilisateur choisit le bouton OK, le
nom du fichier sélectionné est copié dans la variable filename de type AnsiString
préalablement déclarée.
Pour ajouter des actions définies par l’utilisateur, créez une nouvelle TAction en
cliquant sur le bouton Nouvelle action et en écrivant le gestionnaire d’événement
qui définit la réponse qu’elle donnera à son déclenchement. Voir “Que se passe-
t-il lors du déclenchement d’une action ?” à la page 8-27 pour plus de détails.
Lorsque vous avez défini les actions, vous pouvez les placer dans les menus ou
les barres d’outils par glisser-déplacer comme les actions standard.
4 Terminez l’application.
Lorsque vous compilez et exécutez l’application, les utilisateurs ont accès à une
commande Personnaliser qui affiche une boîte de dialogue de personnalisation
semblable à l’éditeur du gestionnaire d’actions. Ils peuvent “glisser-déplacer” des
éléments de menu et créer des barres d’outils en utilisant les actions que vous
avez fournies dans le gestionnaire d’actions.
Cacher les éléments et les catégories inutilisés dans les bandes d’actions
Un des avantages de l’utilisation des ActionBands est que les éléments et les
catégories inutilisés peuvent être cachés à l’utilisateur. Avec le temps, les bandes
d’actions s’adaptent aux utilisateurs de l’application en montrant les éléments
qu’ils utilisent et en cachant les autres. Les éléments cachés peuvent redevenir
visibles : il suffit que l’utilisateur appuie sur un bouton déroulant. De plus,
l’utilisateur peut restaurer la visibilité de tous les éléments d’une bande d’action
en réinitialisant les statistiques d’usage dans la boîte de dialogue de
personnalisation. Le masquage des éléments fait partie du comportement par
défaut des bandes d’actions, mais ce comportement peut être modifié afin
d’inhiber le masquage d’éléments particuliers, de tous les éléments d’une
collection particulière (par exemple, le menu Fichier), ou de tous les éléments
d’une bande d’action particulière.
Le gestionnaire d’actions mémorise le nombre de fois qu’une action a été
invoquée par l’utilisateur en l’enregistrant dans le champ UsageCount du
TActionClientItem correspondant. Le gestionnaire d’actions enregistre également le
nombre de fois que l’application a été exécutée (ce qui correspond au numéro de
la dernière session), ainsi que le numéro de la session où une action a été utilisée
pour la dernière fois. La valeur de UsageCount sert à rechercher le nombre
maximal de sessions pendant lesquelles un élément est inutilisé avant d’être
masqué, il ensuite est comparé avec la différence entre le numéro de session
actuel et le numéro de session de la dernière utilisation de l’élément. Si cette
différence est supérieure au nombre défini dans PrioritySchedule, l’élément est
caché. Les valeurs par défaut de PrioritySchedule sont indiquées dans le tableau
suivant :
ou
3 Créez une nouvelle action qui vous sera propre : cliquez avec le bouton
droit et choisissez Nouvelle action.
3 Définissez les propriétés de chaque action dans l’inspecteur d’objets. Les
propriétés que vous définissez affectent chaque client de l’action.
La propriété Name identifie l’action, les autres propriétés et événements
(Caption, Checked, Enabled, HelpContext, Hint, ImageIndex, ShortCut, Visible et
Execute) correspondent aux propriétés et événements de ses contrôles client.
Elles portent généralement, mais pas obligatoirement, le même nom que la
propriété du client. Par exemple, la propriété Enabled d’une action correspond
à la propriété Enabled d’un TToolButton. Mais, la propriété Checked d’une action
correspond à la propriété Down d’un TToolButton.
4 Si vous utilisez les actions prédéfinies, l’action inclut une réponse standard qui
intervient automatiquement. Si vous créez votre propre action, vous devez
écrire un gestionnaire d’événement définissant comment l’action répond
lorsqu’elle est déclenchée. Voir “Que se passe-t-il lors du déclenchement d’une
action ?” à la page 8-27 pour plus de détails.
5 Attachez les actions de la liste d’actions aux clients qui le nécessitent :
• Cliquez sur le contrôle (par exemple, le bouton ou l’élément de menu) dans
la fiche ou le module de données. Dans l’inspecteur d’objets, la propriété
Action est la liste des actions disponibles.
• Sélectionnez celle que vous souhaitez.
Les actions standard, comme TEditDelete ou TDataSetPost, accomplissent l’action
attendue. L’aide en ligne de référence peut vous donner tous les détails sur le
fonctionnement de chacune des actions standard. Si vous écrivez vos propres
actions, vous aurez besoin de mieux comprendre ce qui se passe lorsqu’une
action est déclenchée.
Vous pouvez fournir un gestionnaire d’événement qui réponde à l’un des trois
différents niveaux : action, liste d’actions ou application. Cela ne vous concerne
que si vous utilisez une nouvelle action générique et non une action standard
prédéfinie. En effet, les actions standard ont un comportement intégré qui
s’exécute automatiquement lorsque ces événements se produisent.
L’ordre dans lequel les gestionnaires d’événements répondront aux événements
est le suivant :
• Liste d’actions
• Application
• Action
Lorsque l’utilisateur clique sur un contrôle client, C++Builder appelle la méthode
Execute de l’action qui s’adresse d’abord à la liste d’actions, puis à l’objet
Application, enfin à l’action elle-même lorsque ni la liste d’actions ni
l’application ne la gère. C++Builder suit cette séquence de répartition lors de la
recherche d’une façon de répondre à l’action de l’utilisateur :
1 Si vous fournissez un gestionnaire d’événement OnExecute pour la liste
d’actions et qu’il gère l’action, l’application se poursuit.
Le gestionnaire d’événement de la liste d’actions dispose d’un paramètre
Handled qui renvoie false par défaut. Si le gestionnaire est défini et gère
l’événement, il renvoie true et la séquence de traitement s’arrête là. Par
exemple :
void __fastcall TForm1::ActionList1ExecuteAction(TBasicAction *Action, bool &Handled)
{
Handled = true;
}
Si vous ne définissez pas Handled par true dans le gestionnaire d’événement
de la liste d’actions, le traitement se poursuit.
2 Si vous n’avez pas écrit de gestionnaire d’événement OnExecute pour la liste
d’actions ou si le gestionnaire ne gère pas l’action, le gestionnaire d’événement
OnActionExecute de l’application est déclenché. S’il gère l’action, l’application
continue.
L’objet Application global reçoit un événement OnActionExecute si l’une des
listes d’actions de l’application échoue en gérant un événement. Comme le
gestionnaire d’événement OnExecute de la liste d’actions, le gestionnaire
OnActionExecute dispose d’un paramètre Handled qui renvoie false par défaut.
Si un gestionnaire d’événement est défini et gère l’événement, il renvoie true
et la séquence de traitement s’arrête ici. Par exemple :
void __fastcall TForm1::ApplicationExecuteAction(TBasicAction *Action, bool &Handled)
{
// Empêche l’exécution de toutes les actions de Application
Handled = true;
}
3 Si le gestionnaire d’événement OnExecute de l’application ne gère pas l’action,
le gestionnaire d’événement OnExecute de l’action est déclenché.
Vous pouvez utiliser des actions intégrées ou créer vos propres classes d’actions
qui savent comment opérer sur des classes cibles spécifiques (telles que les
contrôles de saisie). Quand aucun gestionnaire d’événement n’est trouvé à
n’importe quel niveau, l’application essaie ensuite de trouver une cible sur
laquelle exécuter l’action. Quand l’application trouve une cible pour laquelle
l’action sait quoi faire, elle déclenche l’action. Voir la section suivante pour
davantage d’informations sur la manière dont l’application trouve une cible
pouvant correspondre à une classe d’actions prédéfinie.
Attention Ne placez pas de code nécessitant une exécution longue dans le gestionnaire
d’événement OnUpdate. En effet, il est exécuté à chaque fois que l’application est
inactive. Si l’exécution de ce gestionnaire d’événement est trop longue, les
performances de toute l’application s’en trouvent affectées.
Tous les objets action sont décrits sous leur nom dans l’aide en ligne de
référence. Reportez-vous à l’aide pour avoir des détails sur leur fonctionnement.
Méthode Description
HandlesTarget Automatiquement appelée lorsque l’utilisateur invoque un objet (comme
un bouton de barre d’outils ou un élément de menu) lié à l’action. La
méthode HandlesTarget laisse l’objet action indiquer s’il convient de
l’exécuter à ce moment avec comme “cible” l’objet spécifié par le
paramètre Target. Voir “Comment les actions trouvent leurs cibles” à la
page 8-29 pour plus de détails.
Méthode Description
UpdateTarget Automatiquement appelée lorsque l’application est inactive pour que les
actions puissent se mettre à jour elles-mêmes en fonction des conditions
en cours. Utilisez à la place de OnUpdateAction. Voir “Actualisation des
actions” à la page 8-29 pour plus de détails.
ExecuteTarget Automatiquement appelée lorsque l’action est déclenchée en réponse à
une action de l’utilisateur à la place de OnExecute (par exemple, quand
l’utilisateur sélectionne un élément de menu ou appuie sur un bouton de
barre d’outils qui est lié à cette action). Voir “Que se passe-t-il lors du
déclenchement d’une action ?” à la page 8-27 pour plus de détails.
Recensement d’actions
Si vous écrivez vos propres actions, il est possible de les recenser pour les faire
apparaître dans l’éditeur de liste d’actions. Vous les recensez ou vous en annulez
le recensement en utilisant les routines globales de l’unité ActnList :
extern PACKAGE void __fastcall RegisterActions(const AnsiString CategoryName, TMetaClass*
const * AClasses, const int AClasses_Size, TMetaClass* Resource);
extern PACKAGE void __fastcall UnRegisterActions(TMetaClass* const * AClasses, const int
AClasses_Size);
Quand vous appelez RegisterActions, les actions recensées apparaissent dans
l’éditeur de liste d’actions afin d’être utilisées dans vos applications. Vous
pouvez spécifier un nom de catégorie afin d’organiser vos actions, ainsi qu’un
paramètre Resource permettant de fournir des valeurs de propriété par défaut.
Par exemple, le code suivant recense dans l’EDI les actions de l’unité MyAction :
namespace MyAction
{
void __fastcall PACKAGE Register()
{
// du code vient ici pour recenser des composants et des éditeurs
TMetaClass classes[2] = {__classid(TMyAction1), __classid(TMyAction2)};
RegisterActions("MySpecialActions", classes, 1, NULL);
}
}
Quand vous appelez UnRegisterActions, les actions n’apparaissent plus dans
l’éditeur de liste d’actions.
Ligne de
séparation Raccourci clavier
ou
• Dans la page Propriétés de l’inspecteur d’objets, sélectionnez la propriété Items
puis double-cliquez sur [Menu] dans la colonne des valeurs ou cliquez sur le
bouton points de suspension (...).
Le concepteur de menus apparaît, le premier élément de menu (vide) est
sélectionné dans le concepteur et la propriété Caption est sélectionnée dans
l’inspecteur d’objets.
Figure 8.5 Concepteur pour un menu surgissant
Emplacement pour le
premier élément de menu
Si, par exemple, vous spécifiez Fichier comme valeur de la propriété Caption,
C++Builder affecte la valeur Fichier1 à la propriété Name de l’élément de
menu. Si vous renseignez d’abord la propriété Name avant de renseigner la
propriété Caption, C++Builder laisse la propriété Caption vide jusqu’à ce que
vous saisissiez une valeur.
Remarque Si vous saisissez dans la propriété Caption des caractères qui ne sont pas
autorisés dans un identificateur C++, C++Builder modifie la propriété Name en
conséquence. Si par exemple, l’intitulé commence par un chiffre, C++Builder
fait précéder le chiffre d’un caractère pour en dériver la valeur de la propriété
Name.
Le tableau suivant donne des exemples de ce processus en supposant que tous
ces éléments sont placés dans la même barre de menu.