4D Write Pro: Hauteur du contenu d'une cellule d'un tableau

En laissant l’attribut wk height sur “Auto” la hauteur d’un paragraphe se gère seul pour UNE cellule sauf que pour les paragraphes des autres cellules adjacentes les paragraphes ne sont PAS redimensionnés de la même façon automatiquement. Ce qui implique que si on définit l’alignement vertical d’un texte au sein d’une cellule celui-ci ne donne pas le résultat escompté car la hauteur du paragraphe qui contient le texte n’est pas équivalente dans toutes les cellules.

Pas de soucis, je vais lire la hauteur de mon paragraphe dans ma cellule : ah ben non, j’obtiens le résultat “Auto” en lisant wk height de mon paragraphe…:twisted:

Bonjour,

il ne faut pas confondre le fait d’attribuer un attribut (ex wk height) à un paragraphe ou a une cellule ou une ligne d’une table…

Si vous exécutez le code suivant, la 1ere ligne fera 2 cm de haut et la derniere cellule fera 3cm.
De fait, étant donné que toutes les cellules d’une ligne ont la même hauteur, la dernière ligne fera 3cm de haut…

<code 4D>
$table:=WP Get elements(WP Get body([SAMPLE]WP);wk type table)[0]

$firstRow:=WP Table get rows($table;1;1)
WP SET ATTRIBUTES($firstRow;wk height;“2cm”;wk vertical align;wk middle) // 1er ligne 2cm

$lastCell:=WP Table get cells($table;$table.columnCount;$table.rowCount;1;1)
WP SET ATTRIBUTES($lastCell;wk height;“3cm”;wk vertical align;wk middle) // 1er ligne 2cm

</code 4D>
Cependant, si vous lisez la hauteur de la 1ere cellule de la 1ere ligne vous obtiendrez “auto” ce qui est NORMAL (cet attribut n’a pas été affecté à cette cellule mais à la ligne entière)

De la même façon si vous demandez la hauteur de la dernière lignen vous obtiendrez aussi “auto”, et ce pour la même raison.

<code 4D>
$firstCell:=WP Table get cells($table;1;1;1;1)
WP GET ATTRIBUTES($firstCell;wk height;$height) // --> “Auto”

$lastRow:=WP Table get rows($table;$table.rowCount;1)
WP GET ATTRIBUTES($lastRow;wk height;$height) //-> “Auto”
</code 4D>


Pour un paragraphe, c’est peut-être “wk min height” que vous devriez fixer non ? ça permet par exemple de centrer verticalement un paragraphe

<code 4D>
$paragraph:=WP Get elements(WP Get body([SAMPLE]WP);wk type paragraph)[0]
WP SET ATTRIBUTES($paragraph;wk min height;“5cm”;wk vertical align;wk middle)

</code 4D>


Et si enfin votre paragraphe se trouve être dans une cellule, vous pouvez toujours fixer sa hauteur mini.
De facto, la hauteur (min) de la cellule sera la même (mais restera “auto” si vous faites un GET…ce qui est normal (voir plus haut)

<code 4D>
$paragraph:=WP Paragraph range(WP Table get cells($table;1;1;1;1))
WP SET ATTRIBUTES($paragraph;wk min height;“5cm”;wk vertical align;wk middle)

</code 4D>

Voila, j’espère que c’est plus clair maintenant !

Roland Lannuzel

Y a t’il un moyen de gérer l’alignement vertical du texte contenu dans une cellule ?

Je n’arrive pas à redéfinir la hauteur du texte/paragraphe contenu dans une cellule… :cry:

: Manuel PIQUET

Y a t’il un moyen de gérer l’alignement vertical du texte contenu
dans une cellule ?

Oui bien sur…

<code 4D>
$table:=WP Get elements(WP Get body([SAMPLE]WP);wk type table)[0]

$firstCell:=WP Table get cells($table;1;1;1;1)
WP SET ATTRIBUTES($firstCell;wk vertical align;wk middle)

$secondCell:=WP Table get cells($table;2;1;1;1)
WP SET ATTRIBUTES($secondCell;wk vertical align;wk top)

$thirdCell:=WP Table get cells($table;3;1;1;1)
WP SET ATTRIBUTES($thirdCell;wk vertical align;wk bottom)

</code 4D>

: Manuel PIQUET

Je n’arrive pas à redéfinir la hauteur du texte/paragraphe contenu
dans une cellule…

Soit vous fixez la hauteur (wk height) de la cellule soit la hauteur min (wk min height) du paragraphe
(voir exemple précédent)

R.L.

Je m’explique mal:

Soit un tableau avec 2 colonnes

1ere colonne contient un texte de designation
2eme colone un montant

Je veux pouvoir aligner le montant comme je le souhaite par rapport au texte de designation.

L’alignement vertical est bien pris en compte dans mon modele dans ma 2eme colonne, càd pas besoin de le réappliquer.

Le paragraphe de la designation est bien redimensionné automatiquement pas de soucis.

Le problème, c’est que le paragraphe du montant n’est PAS redimensionné comme l’est le paragraphe de la première cellule.

Du coup, pour gérer cela, on est obligé de lire la hauteur du paragraphe designation, malheureusement, on n’obtient rien de concluant puisque le résultat c’est “Auto” et non pas la hauteur du paragraphe. OK donc j’utilise WP Lire position et j’utilise l’attribut rangeHeight obtenu sauf que c’est un numérique !

Or pour ensuite réattribuer cette hauteur à mon paragraphe Montant c’est l’enfer car il faut passer un texte avec un unité et cela ne fonctionne pas !!! :evil:

En fait, voilà ce qu’il faut SIMPLEMENT :roll: :evil: faire:

<code 4D>
$Hauteur:=remplacer chaine(Chaîne(num($HauteurDesignation.rangeHeight));",";".")+“cm”
WP FIXER ATTRIBUTS($paragraph;wk min height;$Hauteur)

</code 4D>

encore faut-il savoir/comprendre qu’il faut passer du texte avec une unité et que les virgules doivent être des points :twisted: :twisted: :twisted:

C’est d’une simplicité tout cela… :roll:

Bonjour,

Vous pouvez écrire plus simplement :

<code 4D>
$h:=String($num;"&xml")+“cm”
</code 4D>

“&xml” renvoie systématiquement un point comme séparateur décimal.
La doc de String le précise https://doc.4d.com/4Dv18/4D/18/String.301-4505677.en.html ici>.

(par ailleurs, il est inutile de crier, ça ne motive personne pour répondre…)

Roland Lannuzel

La programmation est déjà compliquée de par la complexité de l’architecture entre les différentes strates : document, paragraphe, section, tableau, cellule, etc. Certains attributs ne sont utilisables que sur certains éléments, etc.
Donc, pour s’auto-débuger ce n’est déjà pas facile ; mais, si en plus, on perd INUTILEMENT du temps à comprendre que son erreur vient simplement d’un mauvais passage de paramètre, parce que celui-ci doit être “encodé” d’une façon bien particulière, il y a de quoi être un peu énervé. Désolé.

: Manuel PIQUET

parce que celui-ci doit être “encodé” d’une façon bien particulière

Il est précisé ceci dans la https://doc.4d.com/4Dv18/4D/18/4D-Write-Pro-Attributes.300-4523004.en.htmldoc> des attributs 4DWP concernés:

String: CSS string with value and unit concatenated. (e.g.: “12pt” for 12 points, or “1.5cm” for 1.5 centimeters)


Ce sont des strings CSS, on n’a pas inventé cette norme.
On l’utilise car c’est un standard, c’est tout.

RL

Le problème c’est le manque d’uniformité dans la lecture et l’écriture des différents attributs.

Je lis une taille en numérique (en plus je ne sais pas dans quelle unité je reçois le résultat :roll:)
Ensuite pour réappliquer ce même résultat à l’attribut, je dois le réencoder avec l’unité que je ne connais pas bref c’est un peu compliqué à ce niveau. Il faudrait prévoir une wrappante pour au minimum encoder l’attribut en utilisant par défaut l’unité de la zone au moment de l’execution, ce qui n’est même pas sûr car on peut avoir lu le numérique à un autre moment avec une autre unité…

Rajouter à cela que l’on peut passer l’attribut de 2 façons différentes :
Code :
Defined size: size expressed using real or string value:
Real: Size in wk layout unit.
String: CSS string with value and unit concatenated. (e.g.: “12pt” for 12 points, or “1.5cm” for 1.5 centimeters) Minimum value: 0pt, maximum value: 10,000pt.

et que :
The wk height attribute is overridden by wk min height (if defined).
BUT Note: This attribute(wk min height ) is not supported by rows, columns, and cells.

Mais qu’en fait lorsque je passe wk height au paragraphe contenu dans la cellule, il me dit qu’il n’est pas attendu ici…

Bref, y a de quoi tourner en rond un moment…

J’ai subitement un doute le passage de parametre en Real: Size in wk layout unit.
Il accepte les chiffres avec une virgule :?: (pour que cela fonctionne, j’ai quasiment été obligé d’utiliser la notation CSS.)