Create Reports with Gambas

Brouillon non corrigé

Créer des états d'impression avec Gambas

Cela fait près de dix ans que j'ai commencé a programmer le composant gb.Report. Et comme beaucoup de développeur passionné j'ai bien entendu oublié de communiquer autour de celui-ci. Je vais donc essayer à partir d'aujourd'hui de combler ce vide.

Les états d'impression à la Gambas ?

Il faut commencer par bien se mettre en tête que on ne va pas concevoir un état d'impression avec gb.report comme avec les autres éditeurs d'état existants. En effet, gb.Report réutilise le principe d'arrangement automatique sous contrainte de l'éditeur de formulaire de l'IDE et l'étend à un environnement physique qu'est l'impression. Pour faire simple, on ne manipule pas des sections mais des objets (conteneurs, widgets) qui vont fournir un contexte grâce à un ensemble de propriétés.

Nous allons donc commencer par étudier les deux types d'objets de base qui sont les conteneurs (ReportContainer) et les contrôles (ReportControl) sachant bien sur qu'un conteneur est un contrôle aussi.

Les contrôles

Un contrôle ReportControl va fournir un ensemble de propriétés de placement comme suit :

Ainsi que des propriétés de comportement :

Et des propriétés d'espacement :

Les propriétés de placement

Il s'agit de valeurs dans certaines unités. Elles peuvent être définies dans la fenêtre de propriété ou bien dans le code.

MyReportLabel.Left = "1cm"
MyReportLabel.Top = "10mm"
MyReportLabel.Width = "50%"
MyReportLabel.Height = "1in"

Seules quelques unités sont supportées... on va dire les plus standards et donc pratiquement celles existantes en html. Soit : "m", "cm", "mm", "in", "pt", "px". Pour ce qui est de la définition des tailles ou placement, les valeurs relatives en % sont acceptées. Mais pour toutes autres tailles elle généreront une erreur.

Les valeurs Left et Top n'auront d'effet que si la propriété Ignore du contrôle est à True ou bien si son conteneur a une propriété arrangement à none. (Seule le container panel fournit cette propriété pour le moment). De plus ces valeurs sont relatives à la position du conteneur. Donc les valeurs de l'ensemble des conteneurs d'un contrôle vont se cumuler.

Si les valeurs Width et Height sont Null, alors le contrôle se comporte comme si sa propriété Autoresize = True.

Les propriétés de comportement

Elles sont essentielles.

Les propriétés d'espacement

Les Conteneurs

Ils hérites tous de la classe ReportContainer:

ReportPanel a une propriété Arrangement qui permet de définir la routine d'arrangement. En fait les autres conteneurs ne sont que des versions statiques de chacune des options mise à par la valeur None qui n'existe que dans ce conteneur.

Ces conteneurs fournissent la propriété Spacing qui permet de définir l'espacement entre les contrôles contenus dans ceux-ci. (Vous pouvez relire la partie concernant la propriété Margin pour en comprendre le fonctionnement).

La classe Report hérite du reportVBox.

Arrangement = None

Cette valeur indique au moteur de rendu que les éléments contenus dans ce conteneur ne seront pas organisés par celui-ci. Ceci permet le placement manuel d'élément dans ce conteneur à l'aide des propriétés de placement.

Cette fonction est très utile pour le remplissage de formulaires pré-imprimés par exemple.

Arrangement = Horizontal ou ReportHBox

Cette valeur indique au moteur de rendu que les contrôles contenus dans ce conteneur doivent être rangés horizontalement. La hauteur des contrôles sera alors celle du conteneur moins le Padding haut et bas moins le Margin haut et bas du contrôle.

Si un élément ne loge pas dans le conteneur alors il est ignoré.

Quel que soit le mode d'arrangement, l'ordre des éléments suit l'ordre hiérarchique des enfants du conteneur (zorder).

Arrangement = Vertical ou ReportVBox

Cette valeur indique au moteur de rendu que les contrôles contenus dans ce conteneur doivent être rangés verticalement. La largeur des contrôles contenus sera alors celle du conteneur moins le Padding droite et gauche moins le Margin Droite et Gauche du contrôle.

C'est le mode par défaut du Report.

Si un élément ne loge pas dans le conteneur alors le moteur génère une nouvelle page et répète le conteneur et ses parents puis continue à lister les éléments. Si vraiment il n'y a pas de solution alors l'élément est affiché tronqué.

Arrangement = Fill

Cette valeur indique au moteur de rendu que les contrôles doivent complètement couvrir le conteneur moins bien sur les Padding et Margin.

Arrangement = Row

Pas encore vraiment stable. Il permettra aux contrôles de s'organiser en lignes. La hauteur de chaque ligne est définie par l'élément le plus haut de celle-ci.