[CPP] calcul de la longueur du texte en fonction de la largeur du label
titi035
Messages postés173Date d'inscriptionvendredi 13 janvier 2006StatutMembreDernière intervention10 mai 2010
-
20 oct. 2006 à 15:31
titi035
Messages postés173Date d'inscriptionvendredi 13 janvier 2006StatutMembreDernière intervention10 mai 2010
-
20 oct. 2006 à 18:47
Salut,
J'ai un texte que je souhaite afficher dans un label. Si le texte est trop
grand, j'aimerais qu'il soit tronqué et qu'il se termine par "...".
Est-ce qu'un algorithme pour faire cette opération existe (en c++)?
Le type de police et la taille ne changeront pas. Pour facilité l'opération, je
me suis fait un tableau avec, pour chaque caractère ascii, la largeur en pixel.
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 20 oct. 2006 à 16:35
Je ne voit pas trop la difficulté !
Il existe des fonctions permettant de savoir la longeur d'un texte
En caractere : strlen()
En pixel DrawText() avec DT_CALCRECT
Apres je me servirais par exemple de strncpy() pour "couper ma chaine" et Strcat() pour rajouter des "..." mais je suis sur qu'il ya aussi des fonctions pouvant faire les deux a la fois.
titi035
Messages postés173Date d'inscriptionvendredi 13 janvier 2006StatutMembreDernière intervention10 mai 2010 20 oct. 2006 à 16:56
Ce n'est pas aussi simple que ça : strlen renvoie le nb de caratères. Mais tous les caractères n'ont pas la même largeur!
J'ai une appli (IHM) avec des labels. Dans ces labels, je doit mettre des textes qui sont dans une base de données. Il faut que je développe une lib qui calcule si le texte rentre dans la label. Pour ça, je dois parser le texte et calculer sa largeur en fonction de la largeur de chaque lettre. Je tronque si besoin à la fin d'un mot.
Le label peut être éventuellement multi-lignes, la police a une taille de 12 ou 16.
La lib doit être indépendante de l'appli IHM (que je ne développe pas). Par contre, j'ai les infos de largeur des labels et je sais pour chaque label si le texte est en 12 ou en 16, si il est multi ligne ou single ligne.
titi035
Messages postés173Date d'inscriptionvendredi 13 janvier 2006StatutMembreDernière intervention10 mai 2010 20 oct. 2006 à 17:08
Je ne cherche pas des fonction pour afficher ou dessiner, mais un algo intelligent pour tronquer un texte.
Je cherche un algo pour développer une librairie.. voir mon précédent post..
Vous n’avez pas trouvé la réponse que vous recherchez ?
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 20 oct. 2006 à 17:46
En pixel DrawText() avec DT_CALCRECT
Si tu connait exactement la police (sinon il te fut la recuperer) tu peux avoir exactement les dimensions de ton texte au pixel pres (ca te retourne un RECT) et ca marche aussi pour le multiligne.
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 20 oct. 2006 à 18:39
Lol, pourquoi faire simple quand on peut faire compliqué. Moi perso je passerais tout les caractere de mon texte ( Chaine[0] chaine[1] chaine [2] etc ... ) en additionnant la valeur en pixel de ton tableau et je m'arrete a longueur du label - "..."
un truc du style
int curlong=0;
int i = 0;
chaine = "texte de mon label";
While ((curlong < longeur du label - nbre de pixel de "...") || (i >= Strlen(chaine))
{
curlong+=valeur en pixel de chaine[i];
i+=1;
}
strncpy(label_a_afficher,chaine,i);
strncat(label_a_afficher,"...");