PRINT RECORD: impression d'une listbox tableau de hauteur variable

Je dois mettre à niveau l’impression d’un document faite via la commande PRINT RECORD - IMPRIMER ENREGISTREMENT.

Dans le formulaire d’impression, là où il y avait des tableaux groupés, je remplace avec une listbox et, là, commencent les difficultés.

  • Imprimée, ma listbox est automatiquement redimensionnée au nombre de lignes réelles. C’est bien, dans ce cas précis, mais si je veux conserver les lignes comme définies en mode design ?
  • Lors de l’événement On Printing Detail, je vérifie la hauteur de ma listbox et 4D me donne la hauteur définie en mode design et pas celle qui sera imprimée
  • Le développeur n’a aucun contrôle sur la listbox imprimée : comment faire pour que le rectangle sous ma listbox reste sous la listbox redimensionnée
  • Si je redimensionne la listbox par programmation, 4D n’en tient pas compte et continue de la retailler sans tenir compte de mon action.

Le cadre “normal” de la listbox sert à encadrer mon tableau, très bien :

  • On n’a pas la possibilité de contrôler son épaisseur
  • Le bas du cadre vient s’ajouter à la ligne horizontale de la listbox ce qui donne un trait très épais et pas élégant

Et pourquoi pas la fonction imprimer objet. ?
Ce serait l’idéal pour ce cas de figure.

Parce que le code pour imprimer le document est particulièrement lourdingue (c’est une mise à niveau) : il y a du code, des objets masqués, d’autres affichés, empilés. Donc imprimer objet, j’oublie.

Le reprendre de zéro m’embarquerai sur une galère.

J’avais écrit un bout de code dans lequel je dupliquais des variables afin de reproduire mon tableau : pas de chance car dans une impression on ne duplique pas les variables.

Finalement et ça marche, j’ai créé une grille de variables dynamiques invisibles par défaut que je déplace selon mon besoin :

Au passage, j’ai eu ce message, peut être étrange, sur l’allocation mémoire quand je dupliquais en imprimant :

Non, c’est normal, la doc dit que ça ne marche qu’au runtime et que pour une impression il faut utiliser Imprimer objet à la place :

Pour des raisons techniques et logiques, OBJET DUPLIQUER ne peut pas être appelée dans le cadre de certains événements formulaire, notamment :

  • Evénement Sur chargement généré dans une méthode objet
  • Evénement Sur libération.
  • Evénement lié à un contexte d’impression (Sur entête, Sur impression corps, etc.). Pour imprimer plusieurs fois un objet, vous devez utiliser la commande Imprimer objet.

Ma remarque ne portait que sur le message pour l’allocation mémoire :bomb: (enfin de nouveaux emoji)

Sachant que la doc dit que ça ne se fait pas et que l’erreur initiale -10601 est explicite, le reste ne sert probablement qu’à signaler à 4D qu’on a du mal à voir le rapport avec le cache.

Au demeurant, dans cette fenêtre d’erreur, je n’ai toujours pas compris pourquoi 4D a fait ce choix de masquer par défaut “détails”.

1 Like