entry>2;État\Créer des états;-

L'éditeur d'états

L'interface

L'éditeur d'états comprend un module embarqué, qui peut être appelé à l'exécution de LoGeAs directement par le menu “Éditer”. Il permet de modifier l'état depuis de simples changements de texte, jusqu'à une refonte complète de l'outil.

Note

Il n'est pas possible d'éditer les états livrés avec LoGeAs, il convient donc de les dupliquer avant de les modifier. Ainsi seuls les états du répertoire “Mes états” sont éditables.

L'éditeur permet à l'utilisateur de modifier l'ensemble de l'apparence de l'état.

Sur cette image on remarquera :

la zone d'édition de l'état

la barre de menu

la barre d'icônes

la barre d'objets

les différentes “pages” du rapport

la fenêtre d'arborescence de l'état

la fenêtre de l'inspecteur d'objet

la fenêtre des données (il est possible par glisser\coller) d'inclure directement des données dans votre état

les règles

la ligne de statuts

Raccourcis clavier

Raccourci	Description
Ctrl+O	Commande du menu “Fichier/Ouvrir…“
Ctrl+S	Commande du menu “Fichier/Enregistrer…“
Ctrl+P	Commande du menu “Fichier/Aperçu…“
Ctrl+Z	Commande du menu “Edition/Annuler…“
Ctrl+C	Commande du menu “Edition/Copier…“
Ctrl+V	Commande du menu “Edition/Coller…“
Ctrl+X	Commande du menu “Edition/Couper…“
Ctrl+A	Commande du menu “Edition/Sélectionner tout…“
Les flèches, Tab	Bouger entre les différents objets
Suppr	Supprime l'objet sélectionné
Entrée	Ouvre l'éditeur de l'objet sélectionné
Shift+flèches	Modifie la taille de l'objet sélectionné
Ctrl+flèches	Bouge l'objet sélectionné
Alt+flèches	L'objet sélectionné se conforme à celui le plus proche dans la direction spécifiée

Contrôle de la souris

Opération	Description
Bouton gauche	Sélectionner un objet, coller un nouvel objet, bouger et redimensionner les objets. Pour les objets sélectionnés, vous pouvez réaliser des zooms avant et arrière en tirant le carré rouge qui se trouve dans le coin en bas à gauche du groupe d'objets sélectionnés.
Bouton droit	Menu contextuel de l'objet sélectionné.
Double click	Ouvre l'éditeur d'objet. Double cliquer sur l'espace blanc d'une page ouvre la fenêtre des “paramètres de la page”.
La roulette de la souris	Fait défiler une page de rapport.
Shift+bouton gauche	Bascule la sélection de l'objet.
Ctrl+bouton droit	Si vous tenez le bouton gauche de la souris tout en la déplaçant, un cadre apparaît. Dès que vous lâchez le bouton de la souris, tous les objets capturés dans le cadre seront sélectionnés. Cette opération peut aussi être réalisée en cliquant sur l'espace vide de la page, et en bougeant le curseur de la souris dans la position voulue.
Alt+bouton gauche	Si l'objet “Texte” est sélectionné, cela édite son contenu en place.

Barre d'outils

Barre des modes du designer

La barre est intégrée dans la barre d'objets et possède les boutons suivants :

Icône	Nom	Description
sélectionneur d'objets	Le mode standard de toutes opérations, dans lequel un curseur permet de sélectionner des objets, de modifier leurs dimensions, etc.
main	Cliquer sur cette icône permet de tirer une page de rapport.
zoom	Cliquez sur le bouton de gauche pour doubler le zoom, sur le droit pour le diminuer
éditeur de texte	Cliquer sur l'objet “Texte” permet d'éditer son contenu correctement sur la page de rapport. Si vous tenez le bouton gauche de la souris lorsque vous bouger le curseur, l'objet “Texte” apparaît dans la place sélectionnée, cela lancera son éditeur.
copieur de mise en forme	Le bouton est disponible lorsque l'objet “Texte” est sélectionné. Quand on clique sur l'objet “Texte” avec le bouton gauche, il copie la mise en forme qu'il y avait dans l'objet “Texte” sélectionné auparavant, dans l'objet.

La barre d'outils "standard"

^Icône^Nom^Description|

Nouveau rapport	Créé un nouveau rapport vierge.
Ouvrir un rapport	Ouvre un rapport déjà existant d'un dossier. Raccourci clavier - “Ctrl+O”
Enregistrer le rapport	Enregistre le rapport dans le fichier. Raccourci clavier - “Ctrl+S”
Aperçu	Réalise la construction du rapport et son aperçu. Raccourci clavier - “Ctrl+P”
Nouvelle page	Ajoute une nouvelle page au rapport.
Nouvelle fenêtre	Ajoute une nouvelle fenêtre au rapport.
Supprimer une page	Supprime la page en cours.
Propriétés de la page	Ouvre la fenêtre des propriétés de la page.
Variables	Ouvre l'éditeur de variables du rapport.
Couper	Coupe les objets sélectionnés dans le presse papiers. Raccourci clavier - “Ctrl+X”
CopierNo Style	Copie les objets sélectionnés dans le presse papiers. Raccourci clavier - “Ctrl+C”
Coller	Colle les objets du presse papiers. Raccourci clavier - “Ctrl+V”
Annuler	Annule la dernière opération effectuée. Raccourci clavier - “Ctrl+Z”
Rétablir	Refait la dernière opération annulée. Raccourci clavier - “Ctrl+Y”
Afficher la grille	Affiche la grille sur la page. L'écartement de la grille peut être fixé dans les options du designer.
Alignement de la grille	Pendant que l'on tire ou que l'on modifie la taille des objets, les rapports coordonnées / taille sont modifiés pas par pas, selon l'écartement de la grille.
Situer dans la grille “crosspoints”	Modifie la taille / l'emplacement des objets sélectionnés de sorte qu'ils soient placés dans la grille “crosspoints”
Zoom	Définit le zoom

Barre d'outils "Texte"

^Icône^Nom^Description|

No Style	Style	Permet de sélectionner un style. Pour définir la liste des styles, ouvrir le menu “Rapport/Styles…“
Arial	Police	Permet de sélectionner la police dans la liste. Mémorise les cinq dernières polices utilisées.
10	Taille des polices	Permet de sélectionner la taille des polices dans la liste. Les tailles peuvent aussi être entrées manuellement.
Gras	Active/désactive la mise en forme “Gras”.
Italique	Active/désactive la mise en forme “Italique”.
Souligné	Active/désactive la mise en forme “Souligné”.
Police	Affiche la fenêtre pour définir la police.
Couleur des polices	Sélectionne la couleur de la police.
Surligné	Affiche la fenêtre avec les attributs de surlignement pour l'objet “Texte” sélectionné.
Rotation du texte	Permet de sélectionner la rotation du texte.
Alignement à gauche	Active l'alignement du texte à gauche.
Alignement au centre	Active le centrage du texte.
Alignement à droite	Active l'alignement du texte à droite.
Justifié	Active la justification du texte.
Alignement en haut.	Active l'alignement du texte en haut.
Alignement centré vertical	Active l'alignement du texte centré verticalement
Alignement en bas	Active l'alignement du texte en bas.

La barre d'outils "cadre"

^Icône^Nom^Description|

Bord haut	Active/désactive la bordure en haut.
Bord bas	Active/désactive la bordure en bas.
Bord gauche	Active/désactive la bordure à gauche.
Bord droit	Active/désactive la bordure à droite.
Tous les bords	Active toutes les bordures.
Pas de bords	Désactive toute les bordures du cadre.
Ombre	Active/désactive l'ombre
Couleur de fond	Sélectionne la couleur de fond.
Couleur des bords	Sélectionne la couleur des bords.
Style des bords	Sélectionne le style des bords.
10	Largeur des bords	Sélectionne la largeur des bords.

Barre d'outils "Alignement"

^Icône^Description|

Alignement bord gauche.
Centrage horizontal.
Alignement bord droit.
Alignement bord haut.
Centrage vertical.
Alignement bord bas.
Justifié sur la largeur.
Justifié sur la hauteur.
Centré horizontalement au milieu de la fenêtre.
Centré verticalement au milieu de la fenêtre.
Définit la même largeur que dans le premier objet sélectionné.
Définit la même hauteur que dans le premier objet sélectionné.

Options de l'éditeur

On définit les options de l'éditeur par la commande du menu “Voir/Options…”

Ici vous pouvez définir les unités désirées (centimètres, pouces, pixels), et préciser les pas de la grille pour chaque unité.

Note

Vous pouvez aussi changer les unités en double cliquant sur la partie gauche de la ligne de statut où l'unité courante est affichée.

Vous pouvez aussi préciser si la grille doit être affichée et alignée. Cela peut aussi se faire en utilisant les boutons de la barre d'outils standard de l'éditeur.

Vous pouvez définir une police pour la fenêtre du code de l'éditeur et pour l'éditeur de l'objet “texte”. Si l'option “Utiliser la police définie de l'objet” est activée, la police de la fenêtre de l'éditeur de texte correspondra avec la police de l'objet qui a été éditée.

Le fond blanc par défaut de l'éditeur et des fenêtres de service peut être modifié par les boutons “espace de travail” et “fenêtres d'outils”.

L'option “Grille de couleurs LCD” augmente un peu le contraste des lignes de la grille, et améliore leur visibilité sur les écrans LCD.

L'option “Montrer l'éditeur après insertion” contrôle ce qui se passe quand de nouveaux objets sont insérés. Si l'option est activée, l'éditeur sera affiché chaque fois qu'un objet sera inséré. Pour créer un grand nombre d'objets vides, il est recommandé de désactiver cette option.

En désactivant l'option “Voir le nom des bandes”, vous pouvez désactiver le nom des bandes dans le but de garder un peu de place dans une page. Ainsi le nom de la bande sera écrit à l'intérieur.

L'option “Voir la liste des champs déroulants” arrête l'affichage de la liste déroulante quand on pointe avec la souris un objet “texte” qui est connecté au champ de données. Cela peut être nécessaire s'il y a beaucoup d'objets textes courts dans une bande.

L'option “Positionnement libre des bandes” désactive la séparation des bandes à la suite les unes des autres dans la page. Cette option est désactivée par défaut et les bandes sont automatiquement regroupées dans la page selon leur fonction. Un espace entre les bandes peut être défini dans le champ “Espaces entre les bandes”.

Paramètres du rapport

Une fenêtre avec les paramètres du rapport est disponible par le menu “Rapport/Options…” Cette fenêtre a trois onglets.

Dans le premier onglet général vous pouvez voir les paramètres généraux du rapport.

Vous pouvez lier un rapport à une des imprimantes installées sur votre ordinateur. Cela signifie que l'impression du rapport sera faite par l'imprimante sélectionnée par défaut. Cela peut être très utile dans le cas où vous avez beaucoup d'imprimantes. Par exemple: des documents textes peuvent être reliés avec une imprimante monochrome, tandis que les documents comportant des graphiques peuvent être reliés à un imprimante couleur. Lorsque l'option imprimante par défaut est sélectionnée, le rapport ne sera pas lié avec une imprimante en particulier, et l'impression sera faite par l'imprimante par défaut.

Vous pouvez aussi régler le nombre de copies du rapport à imprimer et préciser, si c'est nécessaire, de réaliser un assemblage.

Si l'option “Double passe” est sélectionnée, la formation du rapport sera réalisée en deux étapes. Durant la première passe, le rapport est formé, et divisé ne pages, mais le résultat n'est enregistré nulle part. Lors de la seconde passe une formation d'un rapport standard avec une sauvegarde du résultat en continu est réalisée.

Pourquoi deux passes sont -elles nécessaires? Le plus souvent cette option est utilisée dans le cas où on a besoin de connaître le nombre total de pages du rapport (information du type “Page 1 à 15”). Le nombre total de pages est calculé durant la première passe et est disponible par le système de variable “Total de pages”. L'erreur la plus fréquente est la tentative d'utiliser cette variable dans un rapport à une passe; dans ce cas il retourne à “0”.

Une autre utilisation est de réaliser un calcul dans la première passe et d'afficher le résultat dans la seconde passe. Par exemple, lorsqu'il faut afficher une somme dans le groupe de tête, qui est habituellement calculée et affichée dans le groupe du bas. Les calculs de ce type son accomplis par l'écriture d'un code script du rapport dans l'événement OnBeforePrint d'un objet.

L'option “imprimer s'il est vide” permet la construction d'un rapport qui ne contient pas de ligne de données. Si cette option est désactivée, les rapports vides ne seront pas construits.

Le champ “Mot de passe” permet de fixer un mot de passe qui peut être entré avant l'ouverture d'un rapport.

Dans le second onglet “Héritage” vous pouvez paramétrer les options d'héritage du rapport.

Vous pourrez en apprendre plus sur l'héritage dans le chapitre “Héritage du rapport”. Dans cette fenêtre vous pouvez voir le nom de la base du rapport (si le rapport est hérité), détacher la base du rapport (dans le cas où le rapport sera autonome, non hérité) et hériter le rapport d'une des bases de rapports.

Les contrôles du troisième onglet “Description” de la fenêtre vous permettent de fixer les propriétés de la description du rapport.

Tous les champs de cette fenêtre ont seulement une fonction d'information.

Options de la page

Les paramètres de la page sont disponibles par le menu “Fichier/Mise en page…”, ou en double cliquant sur un espace vide de la page. Cette fenêtre a deux onglets.

Dans cette première fenêtre “Papier”, vous pouvez sélectionner la taille et l'alignement du papier, ainsi que la marge. Dans les listes déroulantes “Sources du papier” vous pouvez sélectionner le bac de l'imprimante pour la première page et pour le reste des pages du rapport.

Dans le second onglet “Autres options”, vous pouvez fixer le nombre de colonnes pour l'impression d'un rapport multi-colonnes. Les paramètres les plus courants sont affichés dans l'écran.

L'option “Imprimer sur la page précédente” vous permet d'imprimer des pages, en commençant par les espaces vides des pages précédentes. Cette option peut être utilisée dans le cas où un modèle de rapport est composé de nombreuses pages ou pour une impression par lot s (par éléments) de rapport.

L'option “Marges miroir (pour reliure)” permute les marges droite et gauche de la page pour les mêmes pages pendant l'aperçu ou l'impression d'un rapport.

L'option “Page de largeur infinie” ou de “hauteur infinie” augmente la taille de la page selon le nombre de données enregistrées sur la page (quand on exécute un rapport). Dans ce cas vous verrez une grande page dans la fenêtre d'aperçu au lieu de nombreuses pages de taille standard.

L'option “Grande hauteur en mode conception” augmente beaucoup plus la hauteur de la page. Cette caractéristique peut être très utile si plusieurs bandes sont situées dans la page, et doit être utilisée lorsque l'on travaille avec les bandes recouvrantes. Cela agit seulement sur la hauteur dans le mode création d'états.

Créer un état

Objets du rapport

Dans FastReport, un rapport vide est présenté comme une page de papier. Dans n'importe quel endroit de la page, l'utilisateur est capable d'ajouter des objets, qui peuvent afficher différentes informations (tels que des textes et/ou des graphiques), ainsi que définir l'apparence du rapport. Voici une rapide description de la fonction des objets de FastReport, qui sont inclus dans le logiciel standard.

L'objet “Bande” permet la création sur une page de dessin, d'une aire qui a un fonctionnement défini en accord avec son type.

L'objet “texte” affiche une ou plusieurs lignes de texte à l'intérieur d'une aire rectangulaire.

L'objet “Image” affiche un fichier graphique en format “BMP,” “JPEG,” “ICO,” “WMF,” ou “EMF”.

L'objet “Ligne” affiche des lignes verticales ou horizontales.

L'objet “Texte système” affiche des informations utiles (date, heure, numéro de la page, etc) ainsi que des valeurs assemblées.

L'objet “Sous rapport” permet d'insérer une page additionnelle de rapport dans le rapport de base.

Les objets de la catégorie “Dessiner” représente différentes figures géométriques (ligne diagonale, rectangle, rectangle arrondi, ellipse, triangle et losange.

L'objet “Graphique” affiche des données dans différentes formes de graphiques (diagramme en cercle, histogramme, etc..)

L'objet “texte mise en forme” affiche un texte mit en forme en Rich Text Format (RTF)

L'objet “Case à cocher” affiche des cases à cocher avec une coche ou une croix.

L'objet “Code barre” affiche des données en forme de code barre (beaucoup de différents types de codes barres sont disponibles).

Les objets “OLE” (Objects Linking and Embedding) sont capables d'utiliser la technologie OLE

Les objets de base dont vous allez avoir le plus besoin pour travailler sont les objets “Bande” et “Texte”. Vous en apprendrez plus sur leur capacités dans la suite du chapitre.

Le rapport exemple "Hello, World!"

Le rapport va contenir une seule inscription (“Hello, World!). Ouvrez l'éditeur du rapport, puis, cliquez le bouton “Texte” dans le tableau des objets de l'éditeur. Bougez le curseur de la souris à la place désirée sur la page, et cliquez encore. L'objet a été inséré.

La fenêtre de l'éditeur de textes s'affichera immédiatement; si elle n'apparaît pas (cela peut être réglé dans les paramètres des options), puis double cliquez sur l'objet. Entrez le texte “Hello, World!”, et ensuite cliquez sur le bouton “OK”.

Le rapport est créé. Pour avoir un aperçu, sélectionnez le menu “Fichier/Aperçu avant impression” ou cliquez sur le bouton correspondant dans la boîte d'outils. La fenêtre d'aperçu contient une page de rapport où le texte “Hello, World!” apparaîtra. Ce rapport peut être imprimé, enregistré dans un fichier (*.fp3), ou exporté à l'un des formats supporté d'exportation.

L'objet "Texte"

L'objet texte a beaucoup de caractéristiques. Nous savons déjà qu'il permet d'afficher du texte, un cadre, et mettre de la couleur. Le texte peut être affiché en utilisant n'importe quelle police de n'importe quelle taille, et de n'importe quel style. Tous les paramètres peuvent être visualisés, à l'aide des barres d'outils.

Voici quelques exemples de motifsde texte:

Maintenant regardons les autres caractéristiques de cet objet de base. Pour l'exemple, nous allons créer un nouvel objet texte et y mettre deux lignes:

Tjis is a very, very, very long text line.

And this is another line, the shorter one.

Activez l'objet cadre, et ensuite redimensionner cet objet au-dessus de 9×3 cm à l'aide de la souris. Nous voyons que cet objet peut afficher non seulement une ligne de texte, mais plusieurs lignes. Maintenant réduisons l'objet à une largeur supérieure à 5 cm. Il est évident que les longues lignes n'avaient pas la place dans l'objet et ont donc subi un retour à la ligne. Cela est dû à la propriété “Word Wrap” de l'objet. S'il est désactivé (ou dans l'inspecteur ou dans le menu du contexte de l'objet), les lignes longues seront tout simplement tronquées.

Maintenant vérifions comment l'alignement du texte à l'intérieur de l'objet se fait. Les boutons d'alignement sont situés dans la barre d'outils “Texte” et permettent tout d'abord de fixer l'alignement du texte horizontal ou vertical. Attention : le bouton “Alignement des blocs” vous permet d'aligner le paragraphe sur les bords de chaque objet. Pour faire cela, l'option de la propriété “Word Wrap” doit être activée.

Tout le texte dans le mémo peut être tourné dans n'importe quel angle allant de 0 à 360 degrés. Le bouton ab dans la barre d'outils “texte” permet de faire pivoter rapidement le texte à 45, 90, 180 et 270 degrés. Si vous souhaitez faire pivoter le texte d'un angle d'une autre valeur, utilisez l'objet inspecteur. Les propriétés de rotation fixent l'angle voulu. Quand vous pivotez un texte, fixant des valeurs autres que 90, 180, 270, le texte peut excéder des limites de l'objet, comme dans notre cas (regardez l'image ci dessous). Augmentons un peu la hauteur de l'objet, ainsi le texte correspond à l'objet.

Maintenant examinons brièvement d'autres propriétés de l'objet “Texte”, qui influencent son apparence. Plusieurs de ces propriétés sont disponibles uniquement dans l'examinateur d'objets :

BrushStyle - type de l'objet rempli

CharSpacing - espace entre les symbole en pixels

GapX,GapY - alinéa du texte par apport à la gauche de l'objet et les limites du haut

LineSpacing - Espace entre les lignes (en pixels)

ParagraphGap - alinéa du premier paragraphe (en pixels)

Les balises HTML dans l'objet texte

Cet objet peut comprendre quelques simples balises HTML. Les balises peuvent être situées à l'intérieur du texte d'un objet. Les balises sont désactivées par défaut ; pour les activer, sélectionnez l'objet “Autorisez les balises HTML” dans le menu du contexte de l'objet, ou activez la propriété “Allow HTML Tags” dans l'examinateur d'objet. Ci-dessous, la liste des balises qui peuvent être supportées:

<b> - texte en gras

<i> - texte en italique

<u> - texte souligné

<sub> - texte en indice

<sup> - texte en exposant

<font color> - couleur de la police

Note

Peu de balises sont disponibles, mais c'est assez pour la majorité des applications. Il est impossible de modifier la taille et le nom du fond, sinon l'unité du rendement du texte dans FastReport deviendrait très complexe

L'exemple suivant montre comment ces balises peuvent être utilisées :

texte<b>texte en gras</b> <i>texte en italique</i> <b><i>texte gras et en italique</i></b>
E=mc<sup>2</sup>
A<sub>1</sub>=B<sup>2</sup>
Ceci est un texte normal, <font color=red> et ceci en est un en rouge</font>
Ceci est un texte normal, <font color="#FF8030"> et ceci en est un en orange</font>

Afficher des expressions à l'aide de l'objet "Texte"

L'une des caractéristiques les plus importantes de cet objet universel est sa capacité à afficher tant un texte statique que des expressions. Les expressions peuvent être situées dans l'objet avec le texte. Examinons un exemple simple : mettez la ligne suivante dans l'objet.

Hello World! Today is [DATE].

Maintenant quand vous ouvrez le rapport on peut avoir quelque chose comme :

Hello, World! Today is 01.01.2004.

Qu'est ce qui mène à un tel résultat? Pendant la construction du rapport de FastReport, si une expression entre crochets est rencontrée, la machine calcule sa valeur et insère la valeur dans le texte (à la place de l'expression). L'objet “Texte” peut contenir n'importe quel nombre d'expressions dans le texte normal. Les variables seules, tout comme les expressions, peuvent être mises entre crochets (par exemple [1+2*(3+4)]). N'importe quels constante, variable, fonction, et champ de base de données peuvent être utilisés dans des expressions. Nous en apprendrons plus sur ces caractéristiques plus loin dans le chapitre.

FastReport reconnaît automatiquement les expressions entre crochets dans le texte. Mais que devez-vous faire si votre objet contient des crochets et que vous ne voulez pas qu'ils soient considérés comme des expressions? Par exemple, si vous avez besoin d'afficher un texte comme :

a[1] :=10

FastReport considère [1]comme une expression et affiche:

a1 :=10

Ceci n'est pas ce que nous voulons. Pour éviter une telle situation, on peut désactiver l'expression. Si on désactive simplement la propriété “Allow Expressions” (dans le menu du contexte), toutes les expressions du texte seront ignorées. Dans notre exemple FastReport afficherait exactement ce dont nous avons besoin :

a[1] :=10

Mais parfois le texte contient à la fois des expressions et un texte entre crochets, par exemple:

a[1] := <myVar]

Désactiver les expressions nous permet d'afficher les crochets à l'endroit voulu, mais cela désactive également le traitement des expressions. La propriété “Expressions Delimiters”, qui est aussi égale au ”[,]” par défaut, est responsable de cela. Dans ce cas, l'utilisateur peut utiliser les crochets angulaires pour les expressions au lieu des crochets carrés:

a[1] :=<myVar>

Les valeurs de ”<,>” peuvent être fixées dans la propriété “Expressions Delimiters”. Comme vous pouvez voir, la virgule sépare les symboles d'ouverture et de fermeture. Cependant il y a une limite : les symboles d'ouverture et de fermeture ne peuvent pas être similaires, donc ”%,%” ne marchera pas. On peut fixer de nombreux symboles, par exemple ”<%,%>”. Ainsi, notre exemple ressemblera à ceci:

a[1] :=<%myVar%>

Les bandes dans FastReport

Les bandes sont utilisées pour organiser les objets et ainsi définir leur place dans la page de sortie. Lorsqu'on place un objet dans la bande, comme l'entête de la page”, nous disons à la base du rapport que l'objet donné doit être affiché en haut de chaque page du rapport terminé. De la même façon, la bande “bas de page” est affichée en bas de chaque page avec les objets qu'il contient. Voyons avec un exemple : nous allons créer un rapport qui contient le texte “Hello!” en haut de la page, la date du jour à la droite de celle ci, et le numéro de la page en bas à droite.

Ouvrez l'éditeur de FastReport et cliquez sur le bouton “Nouveau Rapport” dans la barre d'outils. Vous allez voir un modèle de rapport qui contient déjà trois bandes: “Title Report”, “Master Data”, et “Page Footer”.

Supprimons la bande “Master Data” pour l'instant (cliquez sur n'importe quel espace dans la bande, ou en haut de celle ci, et ensuite supprimez en pressant la touche “Suppr” du clavier ou utilisez la section correspondante dans le menu du contexte). Maintenant ajoutons une nouvelle bande (“Page Header”). Pour réaliser ceci, cliquez sur le bouton 'Ajouter une bande” et sélectionner 'Page Header” dans la liste déroulante. Nous voyons qu'une nouvelle bande a été ajoutée à la page. Au même moment, les bandes existantes bougent vers le bas. L'éditeur de FastReport positionne automatiquement les bandes sur la page, et ainsi, les bandes d'en haut sont positionnées en haut, les bandes de données sont au milieu, et les bandes du bas sont en bas.

Maintenant ajoutons quelques objets. Ajoutez un objet “Système texte” dans la bande “Page Header” et sélectionnez “Système de Variable” dans son éditeur ”[DATE]” (vous devez vous souvenir que la date peut être affichée dans un objet “Texte” en tapant ”[DATE]” dans l'éditeur). Vous ajoutez un objet “Texte”, qui contiendra le texte “Hello!” dans la bande “Titre du rapport”. Notez que vous pouvez voir l'objet texte qui affiche le numéro de page et qui est déjà ajouté à la bande de “Pied de page”.

En exécutant le rapport, vous allez voir que les objets du rapport fini sont placés dans la page dans la position appropriée.

Les bandes sont responsables du bon positionnement des objets sur la page. En fonction du type de la bande, vous pouvez ajouter des objets, en haut ou en bas de la page, sur la première ou sur la dernière. Les bandes basiques, qui seront nécessaires dans beaucoup de rapports, fonctionnent de la manière suivante :

La bande “Page Header” est affichée tout en haut de chaque page

La bande “Page Footer” est affichée tout en bas de chaque page

La bande “Titre du rapport” est affichée en haut de la page, mais sous la bande “Entête de page” (Cela dépend de la propriété “Titre avant Entête” de l'examinateur d'objet)

La bande “Sommaire du rapport” est affichée à la fin du rapport, comme espace blanc

Les bandes de données

Maintenant nous allons apprendre comment imprimer les données de tables ou de requêtes. Comment est considérée une table de données dans ce cas? C'est un nombre requis de lignes (enregistrement/rangées), chacune d'elle a un certain nombre de colonnes (champs). Pour imprimer des information de ce genre, FastReport utilise un type spécial de bandes (bandes de données). Ce sont des bandes avec des noms de type “xxx niveau de donnés”. Pour imprimer une table complète ou certains de ses champs, vous devez ajouter cette bande au rapport, la connecter à la table, et lui ajouter les objets avec le champ que vous voulez imprimer. Quand FastReport construit ces bandes, elles vont être imprimées sur la page de sortie autant de fois qu'il y a d'enregistrements dans le tableau. S'il ne reste pas d'espace libre sur la page de sortie, de nouvelles pages de sortie seront formées.

Le composant TfrxDBDataSet

Les **DataSet** (ensemble de données) dans LoGeAs Le composant de connexion “TfrxDBDataSet”de la palette de composant FastReport, est utilisé dans le but de connecter une table de données ou n'importe quelle autre source de données. Ce composant joue le rôle de messager entre la source de données et la partie principale de FastReport. Ce composant est responsable de l'enregistrement de la navigation et des champs de références. Ceci permet à la partie centrale de FastReport d'être indépendant de n'importe quelle bibliothèque d'accès de donnés. FastReport peut simultanément travailler avec “BDE”, “IB_Objects” (avec leur exécution non-standard, incompatible avec TDataSet), et d'autres bibliothèques, ainsi que recevoir des données d'une source non connectée avec DB, par exemple d'un tableau ou d'un fichier. Le composant TfrxDBDataSet est fait pour travailler avec des sources de données compatibles avec TDataSet (comme BDE, ADO, IBX et une bon nombre d'autres bibliothèques). Le composant “TfrxIBODataSet” est fait pour travailler avec des IB_Objects. Le composant “TfrxUserDataSet” travaille avec les autres sources de données (tableau, Fichier, etc.).

C'est très facile d'utiliser le composant TfrxDBDataSet. Pour le connecter avec une source de données, vous devez fixer les propriétés du “DataSet” (qui connecte directement à un tableau ou à une requête), ou les propriétés du 'Source de données” (qui connecte à un composant de “TDataSource”). Les deux voies de connexion sont équivalentes, mais la première permet de manager sans le composant “TDataSource”.

Pour faire que le composant (et les données connectées à lui) soit disponible, les sources de données utilisées dans le rapport doivent être clairement spécifiées. Pour faire ceci, sélectionnez le menu objet “Rapport/Données…” dans le designer FastReport, ensuite sélectionnez la source requise dans la fenêtre.

Rapport de la "Liste des clients"

Notre second rapport sera bien plus compliqué que le premier (il contiendra les données de tables et une liste de clients d'une firme). Pour le réaliser, nous allons utiliser la base de données DBDEMOS, qui est incluse dans le kit de distribution Delphi. Nous allons créer un nouveau projet dans Delphi. Mettez le composant “TTabe” dans le formulaire et fixer les propriétés.

Nom de la base de données = "DBDEMOS"

Nom de la table = "Client.db"

Pour faire que les données de la table soient disponibles dans FastReport, nous ajoutons un composant TfrxDBDataSet, puis fixons ses propriétés:

DataSet = Table1

Finalement, ajoutez un “TfrxReport” (le composant de base de FastReport) dans le formulaire, ouvrez l'éditeur, et cliquez sur le bouton “Nouveau Rapport”, de sorte que FastReport créée automatiquement un modèle de base avec trois bandes (“Titre du rapport”, “Donnée maître”, et “Pied de page”).Pour faire votre table utilisable dans FastReport, vous devez permettre qu'il soit utilisé. Pour faire ceci, sélectionnez le menu objet “Rapport/Données…” Et sélectionnez frxDBDataset1 (c'est le seul DataSet de la liste pour le moment), puis cliquez sur OK. Après avoir fermé la fenêtre, le Dataset et les champs du tableau auquel il est connecté deviennent visibles dans le panneau de service “Données” de la fenêtre. Maintenant créez le rapport. D'abord ajoutez un objet texte avec le texte “Liste des clients” à la bande “Titre du rapport”. Puis connectez la bande de “Donnée maître” à votre dataset. Ceci peut être fait de trois manières différentes :

Double cliquer sur la bande

Sélectionner l'objet “Éditer…” dans le menu du contexte de la bande

Cliquer sur les propriétés du dataset dans l'objet inspecteur

Maintenant nous allons placer quatre objets texte (qui afficheront le numéro d'un client, son nom, son téléphone et son fax) dans la bande. Nous allons le faire de plusieurs manières différentes afin de vous montrer les caractéristiques de FastReport. Mettez le premier objet texte dans la bande et entrez- y ”[frxDBDataSet.”CustNo”]“. C'est la possibilité la plus difficile, le lien doit être rentré manuellement et il y a des risques d'erreurs. Pour insérer le lien dans l'objet texte plus facilement, vous pouvez utiliser l'expression de l'éditeur (son bouton est situé dans la fenêtre de la barre d'outils de l'éditeur d'objet texte, cliquez dessus et la fenêtre de données apparaîtra). Pour insérer votre champ, double cliquez sur le champ requis dans la fenêtre. Puis cliquez sur le bouton “OK” pour fermer la fenêtre et voir le champ inséré dans le texte.

La deuxième possibilité pour ajouter le champ DB dans l'objet texte est de paramétrer les propriétés avec l'inspecteur d'objet. Mettez un second objet texte dans la bande, sans écrire quoique ce soit dans l'éditeur. Nous allons fixer ses propriétés en utilisant l'inspecteur.

DataSet = frxDBDataSet1

DataField = "Company"

Comme chacune des propriétés est présentée comme une liste, il nous suffit juste de sélectionner la valeur désirée en utilisant la souris.

La troisième possibilité consiste à “Glisser et déposer” le champ voulu de la fenêtre de service de “Données” dans le rapport. C'est la manière la plus simple. Avant de faire cela vous devriez désactiver l'option “Créé des entêtes” en bas de le fenêtre “Données” (Sinon vous allez créer un second objet texte, contenant le titre du champ, en ajout du champ désiré). En utilisant la souris, sélectionnez le champ “Téléphone”, puis faites le glisser dans la bande.

La quatrième possibilité requiert l'option de l'éditeur (“Vue/Options…”, L'option “Montrer la liste déroulant des champs” doit être paramétrée et la bande connectée au DataSet.) Placez un objet texte vide dans la bande et bougez le curseur sur l'objet. Dans la partie droite de l'objet, vous allez voir l'image d'un bouton avec une flèche vers le bas (comme pour ouvrir des listes). C'est la liste déroulante des champs DB. Cliquez sur le bouton et sélectionnez le champ “FAX” dans la liste.

La construction de votre rapport est finie.

Cliquez sur le bouton “Aperçu” pour voir le résultat.

Notez que l'alias de la source peut être modifié sans passer pas l'éditeur d'alias. Pour cela, modifiez la propriété “Nom d'utilisateur” du composant frxDBDataSet1.

Maintenant il est nécessaire de modifier le rapport, puisque les noms des champs ont été changés. Pour modifier les noms des champs dans les objets, il est plus simple d'utiliser la quatrième possibilité décrite dans le chapitre “Rapport de la liste des clients.” Bougez le curseur de la souris sur l'objet texte de sorte que le bouton dans la partie droite de l'objet apparaisse. Cliquez sur le bouton et sélectionnez le champ désiré dans la liste. Comme vous pouvez le voir, le nom de la source de données et de ses champs son plus compréhensibles.

Note

Il est préférable d'assigner un alias tout au début, avant de construire le rapport. Cela évite de renommer les champs par la suite.

Les variables

En plus de l'utilisation des alias, on peut attribuer des noms plus compréhensible aux champs DB (et pas seulement à eux). On peut associer un nom de champ DB, ainsi que n'importe quelle expression, à une variable. Pour créer et travailler avec des variables dans FastReport, sélectionnez le menu “Rapport/Variables…” et cliquez sur “Variables” dans la barre d'outils.

La liste des variables dans FastReport possède deux niveaux de structure. Le premier niveau contient des catégories, et le second contient les variables elles-mêmes. La catégorisation des variables est plus commode lorsque la liste des variables est trop longue. Une liste doit contenir au moins une catégorie. Cela signifie que la variable ne peut pas être située dans le niveau au-dessus. De plus, les catégories sont utiles seulement pour la classification logique des variables, elles ne sont pas incluses dans les rapports. C'est pourquoi, lorsque vous paramétrez un nom pour une variable, il ne faut pas oubliez qu'il doit être unique. Il est impossible de créer deux variables identiques dans différentes catégories.

Illustrons l'utilisation des variables par l'exemple suivant. Supposez que nous avons deux sources de données : la première est “frxDBDataSet1” avec les champs “CustNo” et “Nom”, la seconde est “frxDBDataSet2” avec les champs “OrderNo” et “Date”. Nous pouvons associer la liste de variables suivante au champs:

Clients Numéro du client Nom du client

Commandes Numéro de la commande Date de la commande

“Clients” et “Commandes” sont deux catégories. Ouvrez l'éditeur de variables et créez la structure requise à l'aide des boutons “Nouvelle Catégorie”, “Nouvelle Variable”, et “Éditer”. Pour associer les variables aux champs DB, sélectionnez une variable et double cliquez sur le champ DB requis dans la partie droite de la fenêtre. Le lien vers le champ va être bougé dans le panneau en bas de la fenêtre. La variable est maintenant associée avec cette expression, la valeur de la variable devient donc la valeur de l'expression. Si nécessaire, l'expression peut être éditée ou modifiée manuellement et n'importe quelle fonction FR ou autres variables peuvent être utilisées avec elle. Souvenez vous que les catégories ne peuvent pas être associées avec quoique ce soit.

Lorsque que la liste de variables est crée, fermez l'éditeur de variables. Maintenant nous pouvons insérer les variables dans le rapport. Contrairement à l'insertion de champs DB, il y a peu de variantes ici. Vous pouvez insérer une variable manuellement dans l'objet texte en tapant le texte ”[Numéro de client“], ou faire glisser une variable de la fenêtre de service “Données” à la place voulue dans le rapport. Dans le second cas, il est nécessaire de changer le touche “variable” dans la fenêtre.

Résumons un peu ce que nous avons appris jusqu'ici :

Un rapport est composé de pages

Les pages peuvent contenir des objets FR, placés sur la page ou dans une bande.

Les bandes ont des positions et des caractéristiques précises, c'est leur type qui décide de la place et la forme des objets qu'elles contiennent en sortie.

Les objets textes contiennent le texte désiré dans une position donnée, ils sont multi-lignes, et peuvent contenir du texte statique, des champs de données, des variables, des expressions, ou une combinaison de tout cela.

Quand les bandes de données types (Maître, Détail, sous détail, etc,) sont connectées au TfrxDbDataset, elles déterminent le nombre de fois où ces bandes apparaissent (lignes) et le nombre final de pages à l'impression. Note Si ces bandes sont de différents types, c'est seulement pour déterminer la position hiérarchique des bandes sur la page de sortie. La hiérarchie entre les données dépend de l'association de la table/requête aux frxDBDataSets . Chaque niveau de bandes de données requiert un TfrxDBDataSet ou une association équivalente…

L'objet "Image"

Le prochain objet à examiner est l'objet “Image”. Il est fréquemment utilisé dans un rapport. A l'aide de cet objet, vous pouvez insérer un logo, la photo d'un employé ou n'importe quelle autre information graphique. L'objet est capable d'afficher des graphiques en format “BMP”, “JPEG”, “ICO”, “WMF”, et “EMF”.

Examinons les capacités de cet objet. Créez un report vide et placez un objet “image” sur la page du rapport. Dans l'éditeur d'objets (s'il ne s'ouvre pas automatiquement double cliquez sur l'objet). Chargez n'importe quelle image désirée et cliquez sur “OK”. Vous pouvez charger une image de n'importe quel fichier ou supprimer une image existante.

Il y a de nombreuses options disponibles dans le menu du contexte de l'objet, qui correspondent au nom des propriétés de l'objet inspecteur :

AutoSize

Stretch -actif par défaut

Center

KeepAspectRatio - actif par défaut

Si l'option “AutoSize est activée, l'objet sera redimenionné en fonction de la taille de l'image qu'il contient. Une telle caractéristique peut être très utile si on a des images de tailles différentes. Cette option est désactivée par défaut.

L'option “Stretch” est activée par défaut. Cette option élargit l'image dans l'objet. Modifiez la taille de l'objet en utilisant la souris et vous verrez que l'image correspondra toujours à la taille de l'objet. Si cette option est désactivée, l'image sera affichée dans sa aille originale. Ce comportement dépend de l'option “AutoSize” si les dimensions de l'objet ne sont pas ajustées à la taille de l'image, l'objet peut être plus grand ou plus petit que l'image qu'il contient.

L'option “Center” permet d'aligner une image dans un objet.

L'option “KeppAspectRatio” est activée par défaut. Elle empêche l'image de se déformer lorsque la taille de l'objet est modifiée. Cette option fonctionne avec l'option “Stretch”. Ainsi en appliquant n'importe quelle dimension à un objet, un cercle restera un cercle, sans devenir un ovale. Une image élargie sera agrandie en utilisant des proportions correctes et ne se déformera pas. Si cette option est désactivée, une image sera élargie pour correspondre à la taille de l'objet, et si la taille de l'objet ne correspond pas à la dimension initiale de l'objet, il sera déformé.

“FileLink” est une autre propriété très utile, mais disponible seulement dans l'inspecteur d'objets. Vous pouvez mettre un nom de fichier (c:\picture.bmp) ou une variable contenant un nom de fichier ([picture_file]) à cette propriété. L'image sera chargée depuis le fichier donné lorsque vous construirez votre rapport.

Rapport avec des images

L'objet Image, comme beaucoup d'objets dans FastReport, peut afficher des données d'une DB. La connexion de cet objet au champ DB désiré se fait en paramétrant les propriétés “DataSet” et “Datafield” dans l'inspecteur d'objets. Contrairement à l'objet “Texte”, c'est le seul moyen de connecter un objet aux données.

Nous allons vous montrer cela avec un rapport, qui comportera des images de poissons, ainsi que leurs noms. Pour cela, nous aurons à nouveau besoin de la base démo de données “DBDEMOS”, qui est incluse dans le kit de distribution Delphi.

Nous allons créer un projet vierge dans Delphi, puis y mettre en forme le composant “TTable” et lui affecter des propriétés

DatabaseName = "DBDEMOS"

TableName = "Biolife.db"

Pour travailler avec le tableau de FastReport, ajoutez un composant “TfrxDBDataSet” et déterminer ses propriétés.

DataSet = Table 1

UserName = "Bio"

Pour finir, ajoutez un composant “TfrxDBDataSet” dans le formulaire. Ouvrez l'éditeurr et cliquez sur le bouton “Nouveau rapport”, afin que FastReport fasse une mise en page de base. Nous permettons ainsi l'utilisation dans le rapport du frxDBDataSet, et des données auxquelles il est connecté. Dans le Menu sélectionnez “Rapport/Données”, puis le dataset “Bio” et cliquez sur Ok.

Maintenant nous allons ajouter des objets dans le rapport. Placez un objet “Texte” avec le texte “Poisson” dans la bande “Titre du rapport”. Connectez la bande “MasterData” à la source de données (Double cliquez sur la bande et sélectionnez “Bio” dans la liste). Augmentez la hauteur de la bande de 5cm en tirant le bas de la bande vers le bas ou en utilisant l'inspecteur d'objets. Placez un objet “Texte” dans la bande et connectez-le au champ “NomCommun” en utilisant l'une des méthodes décrites précédemment. Faites ensuite glisser l'image à coté du texte, connectez-la au champ “Graphique” et paramétrez ses propriétés en utilisant l'inspecteur d'objets :

DataSet = Bio

DataField = “Graphique”

Notez que chacune de ces propriétés sont des “Listes”, et l'on peut sélectionner la valeur désirée en utilisant la souris. Pour faire de la place à l'image, étirez l'objet jusqu'à 4 x 2,5 cm.

C'est fait, le rapport est fini :

Afficher des textes sur plusieurs lignes

Nous allons ajouter à l'exemple précédent la table “Biolife”. Dans celle-ci il y a un champ “note” qui contient une description détaillée de chaque poisson. Mettez à jour votre rapport en ajoutant ce champ.

A première vue, tout semble facile : ajoutez l'objet “texte” à la “databand” entre les objets existants, connectez-le au champ “note” et affectez-lui une taille de 8 cm x 2.5 cm. Quand on fait l'aperçu du rapport, on voit que la sortie n'est pas exactement comme nous le voudrions :

FastReport fait exactement ce que nous lui avons demandé. Le champ “note” contient du texte sur plusieurs lignes, dont la taille varie. En même temps, l'objet “texte”, qui affiche l'information du champ a une taille fixe. C'est pourquoi certaines lignes apparaissent coupées. Que faut-il faire ?

On pourrait bien sûr augmenter la taille de l'objet ou diminuer la taille des caractères. Cependant cela peut laisser de vastes espaces blancs sur la page imprimée, dû au fait que certains poissons ont des de longues descriptions et d'autres en ont des courtes. FastReport, a des propriétés qui peuvent résoudre ce problème.

La bande et l'objet doivent pouvoir ajuster leur hauteur et créer l'espace suffisant dans la ligne. Pour cela, il suffit de autoriser la propriété “Stretch” à la fois sur la bande et le l'objet “texte”. Mais ce n'est pas suffisant, car un objet “texte” avec un très long texte devrait pouvoir s'étirer de lui-même, nous avons donc besoin d'affecter aussi ses propriétés propres.

L'objet “texte” peut ajuster automatiquement sa hauteur et sa largeur à son contenant. Pour cela, on peut utiliser les propriétés “AutoWidth” et “StretchMode”. “AutoWidth” permet à l'objet “texte” de s'agrandir pour que toutes les lignes soient affichées sans césure dans les mots. Ce mode est utile quand l'objet a une seule ligne de texte et que l'élargissement n'affecte pas d'autres objets. “Stretch” permet da'juster la hauteur sans changer la largeur des objets. Cette propriété a plusieurs modes et vous pouvez les sélectionner dans l'inspecteur d'objets.

smDontStretch : n'étire pas un objet, option par défaut

smActualHeight : étire un objet de manière à rentrer la totalité du texte

smMaxHeight : étire un objet de manière à ce que le bas coïncide avec le bas de la bande dans lequel l'objet est placé. Nous verrons ce mode ultérieurement.

Revenons à la propriété “Stretch” de l'objet “texte”. Sélectionnez-la dans le menu ou activez la propriété “StretchMode=smActualheight”. Sélectionnez également la propriété “Stretch” pour la bande. Faites un aperçu et assurez-vous que tout s'est passé comme prévu.

Comme vous pouvez voir, quand vous faites un rapport, Fastreport remplit des objets avec des données, les étire quand l'option “Stretch” est activée et ajuste la taille de la bande pour que chaque objet trouve sa place. Si l'option “Stretch” n'est pas sélectionnée, la hauteur n'est pas ajustée et la bande est affichée selon la hauteur spécifiée dans l'inspecteur d'objets. Si nous désactivions l'option, nous verrions que les objets qui contiennent des textes longs restent étirés, même si la bande ne l'est pas. Cela conduit à un chevauchement , puisque chaque bande est affichée l'une à la suite de l'autre.

Diviser les données

Regardons maintenant une particularité de ce rapport : il reste de grands espaces blancs au bas des pages. Pourquoi ? Quand on construit un rapport, FastReport remplit les espaces blancs de la page avec des bandes. Après l'affichage de chaque bande, la position courante est descendue. Quand FastReport constate qu'il n'y a pas assez de place pour afficher une bande (sa hauteur est plus grande que l'espace restant en bas de page), il fait une nouvelle page et l'affichage des bandes se poursuit sur celle-ci. Cette opération se répète tant qu'il reste des données dans le dataset.

Notre rapport contient un objet avec un grand texte et c'est pourquoi la bande qui le contient est assez grande. De plus, si une grande bande ne trouve pas de place dans la page, elle est transférée dans la page suivante et l'espace reste inutilisé en bas de page. En voici une illustration :

Pour limiter le gaspillage de papier, utilisons la propriété de FastReport qui scinde le contenu des bandes. Il suffit d'activer l'option “AllowSplit” dans la bande “First level data”. Ainsi le bas des pages n'est pas laissé vide :

Comment fonctionne la scission des bandes ? Il y a un certain nombre d'objets dans FastReport qui peuvent être scindés ainsi : les objets “Text”, “Line” et “RichEdit”. D'autres ne le peuvent pas. Quand FastReport a besoin de scinder une bande, il le fait de la manière suivante :

il affiche les objets qui ne peuvent pas être scindés et qui ont suffisamment de place pour s'afficher

il affiche une partie des objets qui peuvent être scindés (les textes sont affichés en sorte que toutes les lignes trouvent une place dans l'objet)

il fait une nouvelle page et continue l'affichage

si un objet qui ne peut être scindé n'a pas de place suffisante pour être affiché, il le transfère sur la page suivante, et les objets suivants à la suite

le procédé continue jusqu'à ce que tous les objets aient été affichés.

Cet algorithme de scission vous paraîtra plus clair avec l'illustration suivante :

BNotez que l'algorithme de scission n'est pas parfait et la qualité du rapport peut ne pas correspondre à vos attentes. Utilisez cette option avec précaution dans le cas d'objets de la bande scindée sont regroupés de manière complexe et/ou si la taille de leurs polices diffère. Voici ce qui pourrait arriver :

Habiller un objet

Il est parfois nécessaire dans un rapport de surligner un texte pour le mettre en valeur dans l'objet (en particulier quand on a des images). Voyons comment faire dans notre exemple.

Ajoutez un nouvel objet “Text” dans la databand après l'objet “Bio.”Notes””, comme dans l'exemple :

Nous désactivons l'option “Stretch” pour l'objet “Bio.”Notes“”. Nous activerons cette propriété pour l'objet de bas de page. Pour que le texte “coule” de l'objet “Bio.”Notes“” jusqu'à l'objet du bas, il faut sélectionner la propriété “FlowTo” de l'objet “Bio.”Notes“”. Cette propriété se sélectionne dans l'inspecteur d'objets, elle est de type “drop list”. Le nom de l'objet du bas doit être sélectionné depuis cette liste. Le résultat ressemblera à l'illustration suivante :

Si dans un rapport, le texte ne trouve pas de place pour l'objet du haut, la partie qui ne rentre pas dans l'objet sera transférée dans l'objet du bas. Puisque les objets sont autour de l'image, l'effet d'habillage sera obtenu.

Attention : il faut insérer l'objet principal avant l'objet lié, sinon la fonction d'habillage risque de ne pas fonctionner correctement. Si votre rapport n'est pas correct, sélectionnez l'objet lié and transférez-le au premier plan avec la commande “Edit/Bring to front”.

Afficher des données dans des tableaux

Il est parfois nécessaire de faire des tableaux avec une bordure. Prenons une liste de prix par exemple. Pour faire cela dans Fastreport, il faut sélectionner la fonction “framing” pour els onjets situés dans la bande “Data”. Voyons plusieurs variantes avec un exemple de test.

Créons un tableau du type suivant :

Placez les objets “texte” dans la bande côte à cote et minimisez la hauteur de la bande.

Le premier et le plus simple type de tableau est un tableau avec un encadrement complet. Pour cela, autorisez toutes les lignes de bordure dans tous les objets :

Le type suivant affiche seulement les lignes horizontales ou verticales. Pour cela, on procède de la même façon, en autorisant les bordures horizontales ou verticales dans les objets.

Enfin, pour montrer seulement des bordures extérieures, il faut modifier légèrement la procédure :

Comme vous voyez, on a ajouté deux objets “texte”, un dans la bande de tête de page et un dans la bande de bas de page et autorisé les bordures pour les objets situés le long des angles de la data-band. Voici le résultat :

Dans ces exemples, les bandes avaient une taille fixe. Comment peut-on afficher un tableau dans le cas où les bandes sont étirées ? Voyons-le avec l'exemple suivant. Ajoutez un nouveau champ au rapport (un texte multi lignes pris dans “Bio.”Notes“”). Comme on l'a déjà vu, la propriété “Stretch” doit être autorisée à la fois pour l'objet et la bande dans laquelle est située l'objet. Dans ce cas, la hauteur de la bande dépendra de la taille du texte de l'objet “texte”. Ainsi nous aurons une sortie qui ressemblera à cela :

Ce n'est pas tout fait ce que nous voulons. Nous préférerions que les bordures des objets voisins s'ajustent également. FastReport permet de résoudre ce problème facilement. il suffit d'autoriser la propriété StretchDownwards“ (ou “StretchMode=smHeight dans l'inspecteur d'objet) pour tous les objets à ajuster. Ainsi Fastreport calcule d'abord la hauteur de la plus grande bande, puis il “étire” les objets jusqu'à l'angle de la bande du bas. Le tableau devient :

Imprimer des labels

Contrairement aux tableaux, les données dans le rapport comme “label” sont ordonnées l'une sous l'autre. Voyons un exemple avec des données sur les poissons. Le rapport se présente sous la forme d'un label et a la structure suivante :

Si on fait un aperçu de ce rapport, on obtient la sortie suivante :

Vous remarquez beaucoup d'espace blanc à droite de la page. Pour remplir toute la page, le nombre de colonnes, dans lesquelles les données sont affichées, peut être décidé dans la page d'options du rapport Pour cela, il faut soit double-cliquer sur la zone blanche dans la page, soit passer par le menu “Fie Page/Options…”.

Dans cet écran, on peut sélectionner les paramètres des colonnes : leur nombre, leur largeur and leur position. Dans notre as, il suffit de spécifier le nombre de colonnes =2, puisque FastReport ajuste tous les paramètres automatiquement. Le cadre de la colonne s'affiche dans l'inspecteur d'objets sous la forme d'une fine ligne verticale :

L'impression va se faire comme suit : Fastreport affiche la bande “Firt level data” tant qu'il y a de l'espace dans la page. Ensuite, il forme une nouvelle colonne dans la même page (contrairement à de simples rapports, où une nouvelle page est créée) et affiche la suite de la bande en haut. Toutefois tous les objets sont alignés à droite, en respectant la largeur des colonnes. Ensuite Fastreport continuera à afficher les données de la première colonne sur une nouvelle page. Notre rapport avec deux colonnes ressemblera à :

La propriété “Columns” est disponible dans toutes les data-bands, c'est un autre moyen pour décider du nombre des colonnes. On peut y entrer le nombre de colonnes pour une bande seulement et non pour toute la page, comme dans l'exemple précédent. Ainsi, les données s'afficheront de gauche à droite, puis du haut en bas, au lieu de s'afficher de haut en bas, puis de gauche à droite.

Si nous supprimons les colonnes dans la page (en entrant nombre de colonnes =1) et entrons 2 dans la propriété “Columns” de la bande, FastReport affichera les lignes de cadre en pointillés. On peut modifier les dimensions des colonnes dans les propriétés “ColumnWidth” et “ColumnGap”.

Un rapport construit de cette manière sera très différent du précédent, simplement en affichant les données de gauche à droite puis de haut en bas.

Les bandes "filles"

Examinons le cas où une des lignes d'un rapport de type “label” a une taille variable. Dans notre exemple, réduisons la largeur de l'objet “Bio.”Common Name”” à 2.5 cm et autorisons l'option “Stretch”. Autorisons également l'étirement dans la bande “First level data”. Sélectionnons toutes les lignes de bordure dans tous les objets, de sorte sue le principe de la fonction “Stretch” soit bien clair. Nous obtenons le rapport :

Vous voyez que dans le premier cas, les premiers objets contiennent des textes plus longs et c'est pourquoi on a un affichage sur deux lignes. Ainsi l'objet situé en-dessous et lié au champ à Bio.“Length(cm)” a été décalé vers le bas. Ceci est dû au fait que tous les objets ont par défaut l'option “Shift” (shiftMode = smAlways dans l'inspecteur d'objets. Ils sont donc normalement décalés vers le bas s'il y a un objet étiré avant eux (un objet “texte” dont l'option “Stretch” est sélectionnée). Le décalage dépend de l'étirement de l'objet précédent.

Ce n'est pas acceptable dans notre exemple, il faudrait que le texte de l'objet “Length(cm)” soit décalé de la même manière. Pour cela, il existe un type de bande spécial dans Fastreport : la bande “fille”. Elle est liée à sa bande “parent” et s'affiche juste après. Ajoutons une bande “fille” à notre rapport et mettons-y les deux objets “texte”.

Lions le Masterdata et la Childband (a bande “fille”) en entrant la propriété “Child” dans l'inspecteur d'objets. Maintenant, chaque fois qu'on imprimera la bande “Masterdata”, la bande “Child” s'imprimera immédiatement à la suite.

f128.jpVous voyez que maintenant les cases sont exactement en face les unes des autres. Pour éviter que la bande “fille” se retrouve sur une nouvelle page (elle serait alors séparée de sa bande “parent”), autorisez la propriété “keepchild” pour la bande “parent” (dans l'inspecteur d'objets).

Changement d'objets

Vous avez vu comment fonctionne la propriété “Shift”, voyons maintenant un autre mode d'alignement : “Shift on overlapping”. Dans l'inspecteur d'objets, il faut sélectionner “ShiftMode = smWhenOverlaped”. C'est utile quand l'objet au-dessus chevauche l'objet donné lors d'un étirement. Voici trois cas illustrés ci-dessous.

Comme vous voyez, l'objet du bas avec l'option “Shift when overlapped” n'est décalé que dans le dernier cas, c'est-à-dire quand il y a suffisamment de texte dans l'objet au-dessus pour chevaucher l'objet du bas.

Si l'option “Shift” n'est as autorisée, l'objet du bas ne sera pas décalé de toutes façons

Cela permet de faire des rapports complexes en utilisant la logique des propriétés des objets, spécialement si un objet chevauche plusieurs autres objets à la fois. Dans l'exemple suivant, l'objet du haut contient un texte étirable et on a autorisé pour l'option “Shiiftting when blocking” pour l'objet du bas. L'objet du bas sera toujours affiché directement à la suite de l'objet du haut, qui contient plus de texte, quelque soit la taille de celui-ci.

Dans cet exemple, l'option “Shift” n'est pas autorisée pour cet objet, l'objet du bas se décalera deux fois, puisqu'il est situé après deux objets. On constate qu'il se forme un vide.

État avec deux niveaux de bandes (maître/détail)

Jusque là nos exemples n'ont comporté qu'une data-band “First level data” ou “Masterdata”, pour l'édition des données d'une table de data-band. Fast Report permet permet de faire des rapports avec six niveaux de données différents sur une même page. Il est possible d'avoir plus de niveaux en utilisant des objets “subreport” (ce sera abordé plus tard). Généralement, la plupart des rapports ont recours à 1, 2 ou 3 niveaux.

Voyons comment on doit procéder pour avoir deux niveaux de données. Prenons les tables “Customers” et “Orders” comme exemples pour nos deux groupes de données. La première table est une liste de clients, la seconde est la liste des ordres passés par les clients. Les tables contiennent des données dans les champs suivants :

Customer

CustNo Company 1221 Kauai Dive Shoppe 1231 Unisco 1351 Sight Diver …. Orders: OrderNo CustNo SaleDate 1003 1351 12.04.1988 1023 1221 01.07.1988 1052 1351 06.01.1989 1055 1351 04.02.1989 1060 1231 28.02.1989 1123 1221 24.08.1993 ….

Comme vous le voyez, la seconde table contient une liste de tous les ordres passes par toutes les entreprises. pour visualiser toutes les commandes de la table 2, passées par les entreprises sélectionnées dans la table 1, les tables sont liées dans le champ “CustNo”, qui est commun aux deux tables. La sortie de ces données sera :

1221 Kauai Dive Shoppe 1023 01.07.1988 1123 24.08.1993 1231 Unisco 1060 28.02.1989 1351 Sight Diver 1003 12.04.1988 1052 06.01.1989 1055 04.02.1989

Voyons comment présenter ce rapport. Créons un nouveau projet en Delphi, créez les composants suivants :deux “TTable”, une “TDataSource”, deux “TfrxDBDataSet” et un “TfrxReport” dans le formulaire et entrez les propriétés des composants comme suit :

Table1:
DatabaseName = 'DBDEMOS'
TableName = 'Customer.db'
Table2:
DatabaseName = 'DBDEMOS'
TableName = 'Orders.db'
DataSource1:
DataSet = Table1
frxDBDataSet1:
DataSet = Table1
UserName = 'Customers'
frxDBDataSet2:
DataSet = Table2
UserName = 'Orders'

Dans l'inspecteur d'objets, nous connectons nos sources de données dans la fenêtre “Report/Data”. Ajoutez maintenant une bande “Master data” et une bande “Detail data” dans la page :

Notez que la bande “Master data” doit être placée avant la bande “Detail data”. Si elle est placée après, Fastreport générera un message d'erreur quand vous demanderez un aperçu du rapport.

Si vous demandiez un aperçu maintenant, vous verriez que la liste des commandes reste la même pour chaque client et contient toutes les données de la table “Orders”, parce que nous n'avons pas sélectionné la propriété “maître” pour la table “Orders”. Sélectionnez la propriété “MasterSource = DataSource1” dans le composant Delphi pour la “Table2”. Nous avons ainsi établi une connexion “master-detail”. Sélectionnons ensuite les champs à lier ensemble. Allouons la propriété “MasterFields” au composant “Table2” :

Nous devons lier les champs de “CustNo” dans les deux sources. Pour cela, sélectionnez les champs désirés et cliquez sur le bouton “Add”. Le lien entre les champs va apparaître dans la fenêtre. Quand c'est fait, fermez l'éditeur en cliquant sur “OK”.

Si on demande un aperçu du document, FastReport exécute les opérations suivantes : il sélectionne un enregistrement dans la table maître (Customers), il initialise le filtre de la table détail (Orders). Seuls resteront dans la table les enregistrements qui répondent à la condition “Orders.CustNo = Customer.CustNo”, c'est-à-dire que pour chaque client ne seront affichés dans la bande détail que les commandes du client courant. Notez que c'est un concept important à saisir. Que les databands soient de type maître ou détail, elles ne font que contrôler l'endroit où s'affichent les données lors de l'édition d'une page. Les données affichées dépendent du champ que les objets contiennent et du lien entre les tables. Voici a quoi peut ressembler le nouvel aperçu :

En-tête et pied d'une bande de données

Chaque bande de données peut avoir une entête et un pied. L'entête doit être placée avant la bande de données, le pied doit être placé après que tous les enregistrements ont été listés. Voici un exemple dans un cas très simple :

Voyons un exemple plus complexe avec deux niveaux de données, maître-détail :

Vous voyez que l'entête est placée avant toutes les autres données. Ainsi l'entête de la bande maître est imprimée une fois au début du rapport, l'entête de la bande détail est placée avant chaque groupe de bandes détail contenues dans la bande maître courante. Le pied de la bande détail est placé après le groupe des bandes détail contenues dans la bande maître courante, le pied de la bande maître n'est pas placé qu'après tous les enregistrements de la bande maître.

En utilisant la propriété “FooterAfterEach” de la bande de données, on peut modifier cette règle. En choisissant cette propriété (ou en passant par le menu de la bande de données “Footer after each row”), le pied apparaîtra après chaque ligne de données. Cela peut être utile dans certains cas. L'exemple précédent se visualiserait comme suit avec cette option :

Rapport "multi-pages"

Les rapports avec FastrRport peuvent avoir plusieurs pages. Vous pouvez ajuster les paramètres de taille et orientation pour chaque page, ainsi qu'y placer différents objets et différentes bandes. Quand vous faites un tel rapport, toutes les bandes de la première page s'afficheront, puis celles de la seconde, etc…

Quand un utilisateur crée un nouveau rapport, celui-ci contient une page par défaut. On peut ajouter une nouvelle page en cliquant sur le bouton dan la barre d'outils ou en sélectionnant le menu “File/new page”. Une nouvelle page apparaîtra dans les tabulations en haut de l'écran :

On peut passer facilement d'une page à l'autre en cliquant sur la tabulation souhaitée. On peut bouger facilement les tabulations (“drag&drop”) pour modifier leur ordre. On peut supprimer une page inutile en utilisant le bouton dans la barre d'outils ou en sélectionnant le menu “Edit/Delete page”. On peut aussi appeler le menu contextuel en faisant un click droit sur la tabulation de la page :

Le nombre de pages pour un rapport n'est pas limité. Le plus souvent, on ajoute des pages pour avoir un aperçu soit des pages de titre, soit dans le cas de rapports plus complexes, des pages qui contiennent des données de plusieurs sources.

Un simple exemple de création de page de titre. Utilisons notre rapport précédent avec un seul niveau de données. Ajoutons une page, ce sera la seconde page. Pour la passer au début du rapport, faites glisser la tabulation avec la souris et ensuite placez-la à côté de la première page. L'ordre des pages sera modifié. Entrez dans la nouvelle page et placez un objet “text” (avec le texte “Our report” à l'intérieur) au milieu de la page. C'est tout ce qu'il y a à faire. Le rapport avec une page de titre est maintenant terminé :

Pour aller plus loin

Pour aller plus loin nous vous invitons à consulter l'aide en ligne de FastrReport (en anglais)

usermanual-en.pdf

developermanual-en.pdf

Les DataSet**(ensemble de données) dans LoGeAs