VB2010. Peut être un peu difficile à comprendre mais j'ai une liste de classes et un champ est un message de chaîne. Je publie ces messages dans un document RTF, mais je souhaite optimiser l'utilisation de l'espace horizontal. Je tente donc de créer dynamiquement une table et d'insérer autant de messages sur une ligne que possible, puis sur une autre ligne. Ceci pendant que je maintiens une largeur maximum possible pour une rangée. Alors que je parcoure les listes, je veux créer des lignes qui ne dépassent pas 45 caractères. Quelque chose comme:Diviser les chaînes en cellules de table RTF et largeur totale maximale
---------------------------------------------
|"Message1 |"Message2 |"Much longer message |
| Trip1 "| Trip2" | with two lines" |
---------------------------------------------
|"message is even longer than the others" |
---------------------------------------------
|"trip is ok |"trip was cancelled due to CW |
| enroute" | must log to system" |
---------------------------------------------
|"Message3 |"Message4 |"Message5 |"Message6"|
| Trip3 "| Error" | Stop" | |
---------------------------------------------
* Notez que le message lui-même peut couvrir plus de 1 ligne avec LFS pour afficher un message sur plusieurs lignes
Je code zéro pour écrire le code RTF pour les tables et ont substitué faux messages avec plusieurs LF intégrés et la sortie semble bonne.
Dim sbTable As New StringBuilder
sbTable.Append("\pard \trowd\trql\trgaph108\trleft36\cellx1636\cellx3236\cellx4836\intbl R1C1\cell R1C2\cell R1C3\cell\row \pard")
sbTable.Append("\pard \trowd\trql\trgaph108\trleft36\cellx4642\intbl R1C1\cell\row \pard")
sbTable.Append("\pard \trowd\trql\trgaph0\trleft36\cellx4642\cellx5500\intbl R1C1\cell R1C2\cell\row \pard")
Cependant, je ne peux pas vraiment me demander comment commencer à le faire dynamiquement. Il semble que je devrais faire deux itérations. Un pour décomposer les messages en lignes puis un autre pour réellement écrire le code RTF. J'ai déjà un pseudo code mais j'ai besoin d'aide avec ma logique.
dim v as integer = 0 'total width of current row
For each t as TripInfo in myTrips1 and myTrips2
if (t.OutMessageWidth added to v) > 45 then
start new row and append
else
append to current row
endif
Next t
Laissez-moi prendre le temps de digérer cela. La seule chose que je vois est que peut-être je n'ai pas fait un si bon travail de relais de mon idée que chaque case ci-dessus est en réalité une cellule dans la table. Laissez-moi voir si je peux travailler avec votre échantillon et ajuster si nécessaire. – sinDizzy