1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
// Résumé : permet de gérer l'affichage d'une chaine entre 2 champs multilignes (si la chaine est trop longue pour le chp_source, une partie sera basculée sur chp_cible)
// si la chaine est trop longue pour être affiché dans les champs alors la taille de la typo sera réduite
PROCEDURE DecoupageChaineMultiligne(chp_source,chp_cible,str_a_gerer={chp_source,indChamp})
str_origine est une chaîne =str_a_gerer
position_temp est une entier
str_temp est une chaîne
//on stocke dans mention_temp l'intégralité de la chaine
str_temp = str_a_gerer
//on force l'affichage de la chaine dans son intégralité dans le champ 1
{chp_source,indChamp}=str_a_gerer
//tant que la hauteur future du champ (après extension si chaine trop longue) est supérieur à la hauteur intiale du champ
WHILE {chp_source,indChamp}..HauteurFuture>{chp_source,indChamp}..Hauteur _AND_ str_temp<>EOT
//on repère le dernier espace
position_temp=Position(str_temp," ",Taille(str_temp),DepuisFin)
//si il y a un saut de ligne avant l'espace on prend le saut de ligne comme sépateur
IF Position(str_temp,RC,Taille(str_temp),DepuisFin)>position_temp THEN
position_temp=Position(str_temp,RC,Taille(str_temp),DepuisFin)
END
//on enlève le dernier mot de la chaine
str_temp=Gauche(str_temp,position_temp-1)
//on l'affecte au champ 1 avant de retester la hauteur future
{chp_source,indChamp}=str_temp
END
//quand on est sorti du WHILE mention_temp correspond au "reliquat" qui n'a pas pu être affiché
{chp_cible,indChamp}=Remplace(str_a_gerer,str_temp,"")
//si la chaine "reliquat" basculé dans le champ 2 est trop importante
IF {chp_cible,indChamp}..HauteurFuture>{chp_cible,indChamp}..Hauteur THEN
//on diminue la taille de la police de 2 champs
{chp_source,indChamp}..PoliceTaille--
{chp_cible,indChamp}..PoliceTaille--
//et on relance la procédure !
DecoupageChaineMultiligne(chp_source,chp_cible,str_origine)
END |
Partager