ClapPrint - Utilisation

De Wiki de Lapalys
Aller à la navigation Aller à la recherche

Ce composant propose essentiellement deux éléments :

  • La fonction d'impression de table : nImprimeTable()
  • Une interface utilisateur permettant de gérer toutes les options de la fonction.

La fonction nImprimeTable

L'impression de la table se fait par une unique fonction : nImprimeTable. Une série de paramètres, donc certains peuvent être laissés par défaut, permettent de jouer sur les couleurs, sur l'existence ou pas des lignes (cadre, séparations), sur les formats (date, heure, monétaire, booléen), ...

L'interface utilisateur d'impression de table

Cette interface propose non seulement de gérer l'ensemble des paramètres reconnus par la fonction nImprimeTable() mais aussi de sauver le tout dans des "profils", de sorte à pouvoir rappeler un profil pour une autre impression.

L'appel de cette fenêtre FEN_ParamPrint accepte deux paramètres principaux :

  • Le nom de la table à imprimer (obligatoire, avec ou sans guillemets)
  • Le chemin complet d'un fichier INI pour sauvegarder les profils (optionnel)

Le contenu des onglets représente les mêmes options que celles utilisées dans l'appel de la fonction. Veuillez vous reporter à cette page pour plus de détails de ladite fonction.

Le fichier INI

Le fichier ini est exclusivement géré par l'interface utilisateur. Chaque profil enregistré (avec le bouton "disquette") doit avoir un nom unique et correspondra à une section du fichier INI. Pour éviter toute confusion dans le fichier INI déjà existant dans votre application (au cas où le nom d'un profil correspondrait à une section déjà existante), préférez avoir un fichier INI à l'usage unique de ce composant.

Pour information, voici les mots clés gérés reconnus dans le fichier INI. Il est déconseillé de les modifier en dehors de cette fenêtre.


[NomDuProfil]

CouleurTable = 0 ou 1 (0[défaut]=couleur personnalisée dans clapPrint, 1=récupère les couleurs de la table d'origine), voir remarque ci-dessous

Orientation = 1 ou 2 (1[défaut]=portrait, 2=paysage)

Assemblage = 1 ou 2 (1[défaut]=assemblé, 2=non-assemblé), voir remarque ci-dessous

Exemplaire = Nombre d'exemplaires identique à imprimer (1[défaut], maximum 999.999.999)

Portrait = 0 ou 1 (0[défaut]=portrait non forcé, 1=portrait forcé)

Titre = Valeur du titre du rapport (par défaut=vide). Pour les titres multi-lignes, utiliser les mots clés "Titre_1","Titre_2", ... dans ce cas "Titre" est alors ignoré.

RepeteTitre = 0 ou 1 (0[défaut]=le titre s'imprime sur la première page uniquement, 1=imprime le titre sur chaque page)

Logo = Chemin complet de l'image à afficher dans le coin supérieur gauche (par défaut pas de logo), voir remarque ci-dessous

TitreColonne = 0 ou 1 (0[défaut]=n'imprime pas le titre des colonnes, 1=imprime le titre des colonnes)

CalculeColonne = 0 ou 1 (0[défaut]=imprime la table sans exécuter le code "affichage d'une ligne dans la table", 1=sélectionne chaque ligne de la table pour que les colonnes calculées s'affichent correctement)

RepeteTitreColonne = 0 ou 1 (0[défaut]=le titre des colonne s'affiche sur la première page uniquement, 1=répète le titre des colonnes sur chaque page si TitreColonne = 1)

TitreColonneMultiligne = 0 ou 1 (0[défaut]=un seule ligne, 1=le titre des colonnes s'imprime sur plusieurs lignes même si le titre est sur une ligne dans la table d'origine)

LigneSelectionne = 0 ou 1 (0[défaut]=imprime toutes les lignes de la table, 1=n'imprime que les lignes sélectionnées), voir remarque ci-dessous

NumPage = 0 ou 1 (0[défaut]=n'imprime pas la # de page, 1=imprime le # de page en bas à droite de chaque page)

Date = 0 ou 1 (0[défaut]=n'imprime pas la date, 1=imprime la date en bas à gauche de chaque page)

Heure = 0 ou 1 (0[défaut]=n'imprime pas l'heure, 1=imprime l'heure en bas à gauche de chaque page)

Booleen = 0 ou 1 (0[défaut]=imprime les booléens comme des chiffres, 1=imprime les booléens comme des coches)

ContenuMultiligne = 0 ou 1 (0[défaut]=contenu de chaque case sur une seule ligne, 1=contenu des cases sur plusieurs ligne)

Image = 0 ou 1 (0[défaut]=n'imprime pas les mémos images, 1=imprime les mémos images)

EcritureDaG = 0 ou 1 (0[défaut]=écrit dans le sens par défaut déterminé par la table, 1=force l'écriture de droite à gauche)

Gris = 0 ou 1 (0[défaut]=imprime en couleur, 1=imprime en tons de gris)

Cadre = 0 ou 1 (0[défaut]=pas de cadre, 1=imprime le cadre)

SeparateurV = 0,iContinu,iPointillé,iMixte,iTiret (0[défaut]=pas de trait)

SeparateurH = 0,iContinu,iPointillé,iMixte,iTiret (0[défaut]=pas de trait)

Police = Nom de la police de caractère à utiliser (par défaut=Arial)

PoliceTaille = numérique (par défaut=10 pour tous les textes sauf la première ligne de titre en 12)

RepeteCalcul = 0 ou 1 (0[défaut]=calculs visibles uniquement sur la dernière page, 1=calculs visibles sur toutes les pages comme des valeurs intermédiaires)

DateFormat = voir la documentation PC SOFT de DateVersChaine

HeureFormat = voir la documentation PC SOFT de HeureVersChaine

MonetaireFormat = voir la documentation PC SOFT de NumériqueVersChaine

MagentaTransparent = 0 ou 1 (0[défaut]=pas de transparence des mémos images et de l'image de titre s'ils contiennent du magenta, 1=le magenta des images sera transparent)

Champ_x (x est le numéro de la colonne) = NomDeLaColonne~Compteur~Moyenne~Total (Compteur, Moyenne, Total prennent la valeur 0 ou 1 selon qu'ils sont activés ou pas pour la colonne; exemple COL_Nom~1~0~0)

Image_x (x est le numéro de la colonne) = NomDeLaColonne~Valeur~CheminImage (valeur = valeur de la "rubrique", CheminImage = chemin complet de l'image correspondante à la valeur; exemple COL_Genre~H~C:\Temp\Homme_16_1.png)

Premiere = Numéro de la première page (1[défaut], n'est utile que si le numéro de page est imprimé > voir cette option)

Ancre = Nom de la colonne qui doit être ancrée (cette colonne s'élargira au maximum pour respecter la largeur de la page)

HauteurLigne = Hauteur d'une ligne de la table (0[défaut]=hauteur de la police utilisée, en millimètres)

MargeH = Marge en haut (0[défaut]=la marge haute minimum de l'imprimante, en millimètre, marge depuis le bord haut de la page qui sera ignorée si inférieure à la marge haute minimum de l'imprimante)

MargeB = Marge en bas (0[défaut]=la marge haute basse de l'imprimante, en millimètre, marge depuis le bord bas de la page qui sera ignorée si inférieure à la marge basse minimum de l'imprimante)

MargeG = Marge à gauche (0[défaut]=la marge gauche basse de l'imprimante, en millimètre, marge depuis le bord gauche de la page qui sera ignorée si inférieure à la marge gauche minimum de l'imprimante)

MargeD = Marge à droite (0[défaut]=la marge droite basse de l'imprimante, en millimètre, marge depuis le bord droit de la page qui sera ignorée si inférieure à la marge droite minimum de l'imprimante)

Pied = texte de pied de page (seule une seule ligne est pris en compte)

COULEURPAIRE = 0 a 16777216 (couleur de fond des lignes paires, voir la documentation PC SOFT)

COULEURIMPAIRE = 0 a 16777216 (couleur de fond des lignes impaires, voir la documentation PC SOFT)

COULEURDONNEEPAIRE = 0 a 16777216 (couleur de texte des données des lignes paires, voir la documentation PC SOFT)

COULEURDONNEEIMPAIRE = 0 a 16777216 (couleur de texte des données des lignes impaires, voir la documentation PC SOFT)

COULEURFONDPAGE = 0 a 16777216 (couleur de fond de page, voir la documentation PC SOFT)

COULEURVERTICAL = 0 a 16777216 (couleur des lignes verticales, voir la documentation PC SOFT)

COULEURHORIZONTAL = 0 a 16777216 (couleur des lignes horizontales, voir la documentation PC SOFT)

COULEURTITRE = 0 a 16777216 (couleur de texte du titre, voir la documentation PC SOFT)

COULEURFONDTITRE = 0 a 16777216 (couleur de fond du titre, voir la documentation PC SOFT)

COULEURTITRECOL = 0 a 16777216 (couleur du texte des titres de colonne, voir la documentation PC SOFT)

COULEURFONDTITRECOL = 0 a 16777216 (couleur de fond des titres de colonne, voir la documentation PC SOFT)

COULEURCADRE = 0 a 16777216 (couleur des lignes du cadre, voir la documentation PC SOFT)

COULEURPIED = 0 a 16777216 (couleur du texte de pied de page, voir la documentation PC SOFT)

COULEURFONDPIED = 0 a 16777216 (couleur de fond de pied de page, voir la documentation PC SOFT)

Impression utilisant un profil

La notion de profil n'est présente que dans l'interface utilisateur et non dans l'instruction nImprimeTable. Pour directement imprimer une table utilisant un profil, il suffit de mettre le paramètre gbImprimeDirect à vrai.

Exemple
//gsFichierIni est une variable chaine globale contenant le chemin du fichier INI dans lequel les profils sont sauvegardés
iAperçu(i100)
nNbPages est un entier = Ouvre(FEN_ParamPrint,TABLE_Client,gsFichierIni,Vrai)
SI nNbPages=0 ET clapPrint.sClapPrintErreur()>"" ALORS Erreur(clapPrint.sClapPrintErreur())   //une erreur est survenue

Contraintes techniques

  • La fonction nImprimeTable ne peut pas être appelée dans un état (comme pour imprimer un sous-état);
  • Le texte du titre et le texte du pied de page ne peuvent pas contenir de TAB si l'on utiliser un profil (le fichier ini n'accepte pas ces caractères);
  • L'option d'impression en tons de gris ne fonctionne que pour les textes, les lignes et les couleurs de fond; pas pour les images.
  • La fonction n'imprime que les colonnes visibles à l'écran, même si l'on insère le nom de la colonne dans le paramètre sCalculs. En effet, l'impression se base sur la largeur des colonnes à l'écran. Ces dernières doivent donc être visibles de l'utilisateur (qui pourrait alors les modifier pour modifier la présentation de son rapport).
  • Lors de l'utilisation de l'option CouleurTable (fichier INI) / _clapPrintCouleurTable, seules les couleurs de fond et de caractères des lignes paires, des lignes impaires et cases sont prises en compte. Les autres propriétés ne sont pas accessibles par programmation en WinDev.

Astuces

  • Le nom des colonnes à imprimer doit être sous forme NomDeFenêtre.NomDeTable.NomDeColonne, ceci pour garantir l'exacte correspondance entre ce qui est vu et ce qui est imprimé.
  • La fonction ne gère pas le paramètre iAperçu. Vous devez donc, dans le code, utiliser (ou pas) iAperçu avant d'appeler la fonction nImprimeTable.
  • Veillez, avant de lancer l'impression via la fonction ou la fenêtre FEN_ParamPrint, de désactiver les timers et les événements tels que spécifiés dans la documentation de PC SOFT.
  • Pour ne choisir que certaines colonnes d'une table, utilisez le paramètres sCalculs dans lequel il faut laisser l'option de calcul à 0. Exemple : NomColonne1+TAB+0+RC+NomColonne2+TAB+0+RC+... Dans ce cas, pour respecter la première astuce, utilisez dans votre code, pour le nom des colonnes MaTable.MaColonne..NomComplet+TAB+0+...
  • Lors d'un aperçu avant impression, si l'on utilise nImprimeTable et ensuite un iImprimeEtat() standard, il faut mettre un iAperçuavant chacune des deux instructions.
  • Malgré que le composant n'imprime que les colonnes "visibles" (celles dont la propriété ..visible = vrai), il n'est pas interdit d'avoir la table invisible ou cachée dans une partie non visible de l'écran. Cela permet de "préparer" le contenu à imprimer dans une table non visible de l'utilisateur et d'ensuite lancer une impression dessus. Cette astuce peut être utilisée notamment lors de l'impression de table trop complexes ou contenant des fond de lignes images, ...

Adaptation de l'impression à la largeur de la page

La fonction est construite de telle sorte à adapter la taille des caractères (et donc la hauteur et largeur des colonnes) automatiquement. En effet, lorsque la largeur de la table dépasse la largeur d'une page (selon l'orientation demandée dans un autre paramètre), la procédure commence par diminuer la taille de caractères pour voir si la table peut finir par entrer dans la page (la taille minimale est de 3). Si ce n'est pas possible, et que l'orientation portrait avait été choisie, la procédure passe automatiquement en paysage et refait le même calcul. Pour éviter ce passage automatique en mode paysage, il faut explicitement cocher "Force orientation portrait" ou utiliser la constante _ClapPrintForcePortrait. Si finalement la ligne de table ne rentre pas dans la largeur de page, plusieurs pages seront prévues en largeur. Dans ce cas, il faut être attentif aux options d'assemblage.

Dans l'autre sens, si une impression de table ne rempli pas la largeur de la page, et pour éviter que la dernière colonne soit plus large qu'elle n’apparaît, il est possible de sélectionner une colonne "ancrée" dont la largeur va s'adapter et gardera ainsi la proportion des autres colonnes. Habituellement, l'on ancre la première colonne.

Option d'assemblage

Grâce à ces fonctions, il est donc possible d'imprimer soit toutes les pages en largeur et ensuite les prochains enregistrements, soit les premières colonnes sur tous les enregistrements et ensuite les colonnes suivantes sur tous les enregistrements. Exemple : l'impression a besoin de 3 pages en largeur (pour contenir toutes les colonnes), soit a,b,c et 10 pages en hauteur (pour les 847 enregistrements) soit 1,2,3,4,..10. Chaque page est alors identifiée comme 1a, 1b, 1c, 2a, 2b, 2c, 3a, 3b, 3c ... 10a, 10b et 10c.

- L'option "Assemblé" ou l'absence de constante _ClapPrintNonAssemblée imprimera les pages dans l'ordre suivant : 1a, 2a, 3a, 4a, ... 10a, 1b, 2b, 3b, 4b ... 10b, 1c, 2c, 3c, 4c ... 10c

- L'option "Non assemblée" ou l'utilisation de la constante _clapPrintNonAssemblée imprimera les pages dans l'ordre suivant : 1a, 1b, 1c, 2a, 2b, 2c, ... 10a, 10b, 10c

Attention, si l'on choisi un nombre de pages limité (différent de 0 qui imprime toutes les page), l'on imprime évidemment la table selon l'ordre précité.

Impression des lignes sélectionnées

Depuis la version 1.03, la fonction nImprimeTable() permet de n'imprimer que les lignes sélectionnées. Pour faire cela, il faut d'une part ajouter l'option _clapPrintLigneSélectionnée et il faut ensuite être dans un des cas suivant : soit la table est multi-sélection (propriété ..MultiSélection) et l'impression se basera sur la propriété ..Sélectionnée de chaque ligne de la table, soit la première colonne est de type "coche" et elle sera utilisé comme élément de sélection. Dans ce dernier cas, la première colonne est soit la première visible de la table (si le paramètre sCalcul n'est pas utilisé pour décrire les colonnes à imprimer), soit c'est la première colonne décrite dans le paramètre sCalcul utilisé dans la fonction nImprimeTable().

Impression d'un logo (image)

Depuis la version 1.03, la fonction nImprimeTable() permet d'imprimer un logo dans le coin supérieur gauche. Il faut, pour cela, que l'image soit sous forme de fichier (les images issues d'un mémo image doivent d'abord est sauvegardées sous forme de fichier). Ensuite, il suffit juste de mettre le chemin de l'image dans le paramètre Titre séparé par un retour chariot : "Le titre de mon rapport"+RC+"D:\Images\LogoCompagnie.png".

Attention, le logo s'imprimera sans "marges" programmées. Si le logo est au bord de l'image, le cadre s'imprimera à raz de l'image. Pour éviter cet effet visuel indésirable, ajoutez quelques pixels (grâce un logiciel de traitement d'image comme Paint livré en standard dans Windows) de chaque côté de l'image pour qu'il puisse, visuellement, se distancier du reste des éléments qui seront imprimés.

La taille de l'image imprimée est basée sur les deux instructions standards : iHauteurImage() et iLargeurImage(). Si l'image semble trop petite ou trop grande, merci de vérifier, grâce à ces instructions, combien de mm l'image prend en hauteur et largeur. Pour changer la taille du logo, utilisez un logiciel de traitement d'image (comme Paint livré en standard dans Windows).

Le logo s'imprime dans la zone de titre et en avant plan de la couleur de fond de titre.

Attention, la zone de titre peut s'agrandir si la hauteur du logo dépasse celle des lignes de titre. Les titres imprimés dans cette zone seront alors centrés verticalement sur la hauteur de la zone (et donc de l'image).

Liens utiles

Les entrées/sorties du composant

Détail de la fenêtre FEN_ParamPrint

Téléchargement et licence