Hello!

Bon, j'ai d�j� vu les posts traitant du mutiligne dans les tring grid, mais comme cela ne correspond pas tout a fait � ce que je souhaite faire, je me permet de faire un nouveau thread.

Mon application remplit une StringGrid 30*3000 � partir d'un fichier .csv g�n�r� avec Excel. L'import de texte se passe tout bien et j'utilise les deux bouts de code suivants pour adapterla taille de mes cellules � ce qu'il y a dedans:

Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State)
{
        //Texte sur plsr lignes:
        AnsiString s = StringGrid1->Cells[ACol][ARow];
        div_t nbl;
 
        nbl = div (s.Length(),30);
 
        int hauteur = (Rect.Top - Rect.Bottom)/(nbl.quot + 1);
        TRect R = Rect;
 
        for(int i = 0; i<=nbl.quot; i++)
        {
                AnsiString t = s.SubString(1 + 30*i, 30);
                R.Top = Rect.Top - (i*hauteur);
                R.Bottom = R.Top - hauteur;
                StringGrid1->Canvas->TextRect(R, R.Left, (R.Top + R.Bottom - StringGrid1->Canvas->TextHeight(t)) / 2, t);
        }
}
et, dans le constructeur de la fiche:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
div_t nbl;
                int tmplig = 0, final = 0;
                for(int i = 0; i < StringGrid1->RowCount; i++)
                {
                        final=25;
                        for(int j = 0; j < StringGrid1->ColCount; j++)
                        {
                                nbl = div(StringGrid1->Cells[j][i].Length(),30);
                                if(nbl.quot >= 1)
                                {
                                        tmplig=StringGrid1->Canvas->TextHeight(StringGrid1->Cells[j][i])*(nbl.quot+1);
                                        if(final < tmplig)
                                                final = tmplig;
                                }
                                StringGrid1->RowHeights[i]=final;
 
                        }
                }
et la meme chose pour la largeur.

Ca marche tout bien, mais le probl�me c'est que je coupe mes chaines lorsqu'elles d�passent un certain nombre de caract�res (ici 30) et c'est un peu violent comme fa�on de faire... d'autant que ca ne tient pas compte de la largeur r�elle des caract�res donc des fois, ma chaine est coup�e alors qu'il y aurai eu la place de terminer sur la meme ligne...

Est-ce que qqun s'est d�j� pench� sur la question, et � trouver un moyen de faire du word wrap dans les cellules de la string grid, avec un traitement assez rapide (j'ai des solutions qui marchent plus ou moins, mais comme j'ai 3000 lignes, le traitement est tr�s long :/ )

Merci d'avance

Arnaud