tableau a imprimer hauteur des cellules

tableau a imprimer hauteur des cellules - C#/.NET managed - Programmation

Marsh Posté le 20-02-2008 à 13:50:11    

Bonjour,
 
Je fait de l'impression d'un tableau de 3 colonnes , je mesure la taille de mon text pour calculer la hauteur de ma cellule ou plutot de la ligne.

Code :
  1. float largeur_co;
  2. for (int i = 0; i < listViewCarr.Items.Count; i++)
  3. {
  4. // taille des chaine a mettre ds les 3 cellules
  5. float tailleDomaine = e.Graphics.MeasureString(listViewCarr.Items[i].SubItems[0].Text ,imprFont).Width;
  6. float tailleProfession = e.Graphics.MeasureString(listViewCarr.Items[i].SubItems[1].Text, imprFont).Width;
  7. float tailleSecteur = e.Graphics.MeasureString(listViewCarr.Items[i].SubItems[2].Text , imprFont).Width;
  8. // taille du text le plus grand
  9. float tailleMax = Math.Max(Math.Max(tailleDomaine, tailleProfession), tailleSecteur);
  10. //largeur des colonnes
  11. largeur_col =  e.MarginBounds.Width/3
  12. // taille d'une ligne text
  13. int hauteur = (int)MyGr.MeasureString("X", imprFont).Height;
  14. // nombre de lignes text
  15. int nb_lignes_txt = (int) (tailleMax / largeur_col) + 1;
  16. //hauteut de ma ligne
  17. hauteur = hauteur * nb_lignes_txt
  18. tableCase = new Rectangle(0, Ypos, largeur_col, hauteur);
  19. e.Graphics.DrawString(listViewCarr.Items[i].SubItems[0].Text, imprFont, imprBrush, tableCase, imprFormat);
  20. e.Graphics.DrawRectangle(stylo, tableCase);
  21. tableCase = new Rectangle(xBase + largeur_col, Ypos, largeur_col, hauteur);
  22. e.Graphics.DrawString(listViewCarr.Items[i].SubItems[1].Text, imprFont, imprBrush, tableCase, imprFormat); e.Graphics.DrawRectangle(stylo, tableCase);
  23. tableCase = new Rectangle(xBase + largeur_col*2, Ypos, t largeur_col, hauteur);
  24. e.Graphics.DrawString(listViewCarr.Items[i].SubItems[2].Text, imprFont, imprBrush, tableCase, imprFormat);
  25. e.Graphics.DrawRectangle(stylo, tableCase);
  26. Ypos += hauteur;
  27. }


 
le probleme c'est que dans certain cas ma varaible "nb_lignes_txt" n'est pas exacte 1.9... au lieu 2.0124. et il me manque donc une ligne et il coupe, je ne vois pas ou est l'erreur de calcul.
 
peut etre a cause des blanc qu'il rajoute dans la mise en forme:
 
"il fait beau ce matin" :21 caractere
 
il fait beau ce __
matin_________ : 32 caractere.
 
mais si c est ca comment mesurer la taille du text mise en forme a la fin.  :heink:  
 
 
 
 
 
 
 

Reply

Marsh Posté le 20-02-2008 à 13:50:11   

Reply

Marsh Posté le 20-02-2008 à 13:56:17    

e.Graphics.MeasureString() ;)


---------------
VA APPRENDRE ET REVIENS QUAND TU SAIS, SINON ABSTIENT TOI C'EST UN GRAND CONSEIL QUE JE TE DONNE... TU ES INCOMPÉTENT ET C'EST UNE RÉALITÉ, TU N'AS RIEN A FAIRE ICI FAUT S'Y CONNAITRE ... -Jojo1998 - RIP - http://tinyurl.com/qc47ftk
Reply

Marsh Posté le 20-02-2008 à 14:10:45    

??????????

Reply

Marsh Posté le 20-02-2008 à 14:18:07    

JulienOrion666 a écrit :


mais si c est ca comment mesurer la taille du text mise en forme a la fin.  :heink:  


 
 
la fonction e.Graphics.MeasureString(...) te permet de connaitre les dimension de ta chaîne de caractère formatée dans ton contexte GDI.
 
-> MSDN


---------------
VA APPRENDRE ET REVIENS QUAND TU SAIS, SINON ABSTIENT TOI C'EST UN GRAND CONSEIL QUE JE TE DONNE... TU ES INCOMPÉTENT ET C'EST UNE RÉALITÉ, TU N'AS RIEN A FAIRE ICI FAUT S'Y CONNAITRE ... -Jojo1998 - RIP - http://tinyurl.com/qc47ftk
Reply

Marsh Posté le 20-02-2008 à 14:58:31    

heu ta lu mon post ?

Reply

Marsh Posté le 20-02-2008 à 15:43:17    

Oups, je suis allé un peu vite :D
 
Ton pb semble venir de ton calcul nb_Lignes.
 
essaye plutot
 

Code :
  1. int nb_lignes_txt = (int) ((int)tailleMax) /((int) tailleMax_col)) + 1;


 
ou encore :

Code :
  1. int nb_lignes_txt = (int)Math.Ceiling(tailleMax / tailleMax_col) +1


---------------
VA APPRENDRE ET REVIENS QUAND TU SAIS, SINON ABSTIENT TOI C'EST UN GRAND CONSEIL QUE JE TE DONNE... TU ES INCOMPÉTENT ET C'EST UNE RÉALITÉ, TU N'AS RIEN A FAIRE ICI FAUT S'Y CONNAITRE ... -Jojo1998 - RIP - http://tinyurl.com/qc47ftk
Reply

Marsh Posté le 20-02-2008 à 15:44:09    

Tu devrais plustot aditionner la taille de chacune de tes lignes plus tot que de prendre la taille d'une ligne que tu multiplies par le nombre de lignes car si tu as une ligne bcp plus grandes que les autres cela ne peut pas marcher.


---------------
The secret of happiness is not in doing what one likes but in liking what one has to do Sir James M. Barrie
Reply

Marsh Posté le 20-02-2008 à 16:47:33    

c est bon j'ai trouve dans un tutoriel.
 
c'est pas un pb de cast c est bien les espace qu il rajoute apres ds la cellule
 
je mesure une chaine elle a une taille x.
quand je la met ds une cellule a cause des saut de lignes qui cree des blanc sa taille va augmenter.
 
il faut faire comme ceci :

Code :
  1. hauteur = (int)e.Graphics.MeasureString(strMax, imprFont, largeur_col).Height;


strMax : chaine la plus grande des 3.
 
 
tout simplement lol la il cacul tout seul la hauteur de la celule en prennant en compte les espace et tout et tout  :D  
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed