begin process at 2012 05 29 02:23:05
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

[CPP] calcul de la longueur du texte en fonction de la largeur du label


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[CPP] calcul de la longueur du texte en fonction de la largeur du label

vendredi 20 octobre 2006 à 15:31:38 | [CPP] calcul de la longueur du texte en fonction de la largeur du label

Titi035

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.
 
Avez-vous des suggestions?





vendredi 20 octobre 2006 à 16:35:53 | Re : [CPP] calcul de la longueur du texte en fonction de la largeur du label

SnOOpss

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.
vendredi 20 octobre 2006 à 16:56:17 | Re : [CPP] calcul de la longueur du texte en fonction de la largeur du label

Titi035

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.

des idées?




vendredi 20 octobre 2006 à 16:59:43 | Re : [CPP] calcul de la longueur du texte en fonction de la largeur du label

aardman

Membre Club
Salut,
Pour afficher du texte tronqué, on peut directement utiliser DrawText avec le flag DT_END_ELLIPSIS.
Si c'est dans un label (static), on peut mettre le label en ownerdraw et dessiner avec DrawText().
vendredi 20 octobre 2006 à 17:08:06 | Re : [CPP] calcul de la longueur du texte en fonction de la largeur du label

Titi035


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..

vendredi 20 octobre 2006 à 17:46:06 | Re : [CPP] calcul de la longueur du texte en fonction de la largeur du label

SnOOpss

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.
vendredi 20 octobre 2006 à 18:17:26 | Re : [CPP] calcul de la longueur du texte en fonction de la largeur du label

Titi035

Merci pour votre aide. elle a l'air pas mal cette fonction.

 maheureusment le police est propriétaire. Je n'ai qu'un tableau dans lequel on m'a fourni la largeur des caractères pour chaque code ascii.

vendredi 20 octobre 2006 à 18:39:45 | Re : [CPP] calcul de la longueur du texte en fonction de la largeur du label

SnOOpss

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,"...");
vendredi 20 octobre 2006 à 18:41:12 | Re : [CPP] calcul de la longueur du texte en fonction de la largeur du label

SnOOpss

While ((curlong < longeur du label - nbre de pixel de "...") && (i < Strlen(chaine)) plutot sinon boucle sans fin
vendredi 20 octobre 2006 à 18:47:46 | Re : [CPP] calcul de la longueur du texte en fonction de la largeur du label

Titi035

Oui, je suis parti sur une solution comme ça.



Cette discussion est classée dans : label, texte, cpp, calcul, largeur


Répondre à ce message

Sujets en rapport avec ce message

traitement de texte source [ par flamel ] Bonjour.Je cherche une source de traitement de texte simple en Cpp du genre "Bloc-Note", pour pouvoir le modifier avec Visual Cpp.Je voudrais avoir ac hauteur et largeur de texte [ par salim_samir ] salut à tous comment je peut modifie la taille d'une texte affiché sur l'ecran en langage c,par exemple printf("salut"); comment je peut modifie le mo Calcul numérique avec Dev cpp [ par ffnajia ] Bonjour à tous,Est ce que c'est possible de faire du calcul numérique avec dev cpp? on peut trouver des solveur pour résoudre des équations différenti creation de fichier en cpp [ par bissmillah ] J'aimerai avoir de l'aide grace aux menbres inscrits,pour créer un fichier texte en cpp,moi j'ai essayer de le créer en c ,c'est un fichier texte dans choix de la taille de la police [ par mogwai93 ] Bonjour J'ai un static d'une largeur définie A l'intérieur de celui-ci, je place un texte dans une police de mon choix (on va faire simple, on va dir largeur du texte unicode à imprimer [ par wissis_19 ] Bonjour,Comment précalculer la largeur (en mm) d'un chaîne de carctères à imprimer pour un alphabet donné ?Détails :Je veux imprimer une liste de noms Qu'est ce que le CPP ? [ par Anthotill ] BonjourJe souhaiterais savoir comment on fait pour exécuter les *.cpp je trouve des trucs interessant que j'aimerais voir fonctionner mais comme c'est Calcul du squelette d'une forme 2D ou 3D [ par FiReTiTi ] Bonjour, je souhaiterai savoir si quelqu'un saurait où trouver du code qui calcule le squelette d'une forme 2D ou 3D. De préférence, des méthodes autr plusieurs fichiers CPP dans un exe ? [ par papi2 ] Bonjour,Est-il possible de mettre plusieurs fichiers cpp (qui en fait sont des fenêtres) dans un seul exe, plutôt que d'avoir un exe pour chaque fichi Creer un label multiligne ressource [ par sebastienmz ] Bonjour Voila mon code qui est dans mon fichier .rc:  LTEXT           "salu\n sava",IDC_LBLDES,7,7,80,80,SS_CENTERIMAGE,                    WS_EX_CLIE


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,889 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales