Bonjour,
J'aimerais savoir s'il existe une fonction qui me permettrais d'ajuster la taille de mes colonnes de mon StringGrid en fonction de la longueur des données inscrites dans les différents champs....
Merci par avance
Bonjour,
J'aimerais savoir s'il existe une fonction qui me permettrais d'ajuster la taille de mes colonnes de mon StringGrid en fonction de la longueur des données inscrites dans les différents champs....
Merci par avance
Aide les autres...
Et les autres t'aideront....
Mon site DVP
N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint
N'oubliez pas de voter pour les messages dont la réponse est pertinente
Pour changer la largeur d'une colone il y a la propriété ColWidths.
ex: mettre la largeur à 200 px de la colone 1 :
Pour la taille d'une chaine il y a la fonction membre TextWidth de canvas
Code : Sélectionner tout - Visualiser dans une fenêtre à part StringGrid1->ColWidths[1] = 200;
ou st est une AnsiString.
Code : Sélectionner tout - Visualiser dans une fenêtre à part StringGrid1->Canvas->TextWidth(st);
Tu peux aussi utiliser, il me semble, length() ...
de façon à ajusté automatiquement la colone au contenu...
Cordialement.
En effet je connait le principe de Lenght()
Mon problème c'est que j'aimerai que en appuyant sur un bouton je puisse parcourir l'ensemble de la colonne et trouver la chaine la plus longue pour pouvoir modifier la taille de ma colonne....
J'ai été clair??
Aide les autres...
Et les autres t'aideront....
Mon site DVP
N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint
N'oubliez pas de voter pour les messages dont la réponse est pertinente
Voila ce que j'ai essayé de construire mais ce n'est pas encore ça...
une idée?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 AnsiString S; for(int i = 0; i<StringGrid1->RowCount; i++) { if(StringGrid1->Cells[StringGrid1->Selection.Left][i].Lenght() > StringGrid1->Cells[StringGrid1->Selection.Left][i+1].Lenght()) S = StringGrid1->Cells[StringGrid1->Selection.Left][i]; else S = StringGrid1->Cells[StringGrid1->Selection.Left][i+1]; }
Aide les autres...
Et les autres t'aideront....
Mon site DVP
N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint
N'oubliez pas de voter pour les messages dont la réponse est pertinente
Tu lis les réponses des fois ?Envoyé par ludojojo
voila ou j'en suis :
Mon soucis c'est que lorsque je fait appel à cette fonction, ma colonne devient minuscule!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 AnsiString S; for(int i = 0; i<StringGrid1->RowCount; i++) { if(StringGrid1->Cells[StringGrid1->Selection.Left][i].Length() > StringGrid1->Cells[StringGrid1->Selection.Left][i+1].Length()) S = StringGrid1->Cells[StringGrid1->Selection.Left][i]; else S = StringGrid1->Cells[StringGrid1->Selection.Left][i+1]; } StringGrid1->ColWidths[StringGrid1->Selection.Left] = S.Length();
Faut il rajouter un coefficient multiplicateur?
Aide les autres...
Et les autres t'aideront....
Mon site DVP
N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint
N'oubliez pas de voter pour les messages dont la réponse est pertinente
Un monologue !
je ne comprend pas pourquoi vous dites ça...
J'ai bien lu ce que vous m'avez écrit! mais je n'ai pas la solution...
Aide les autres...
Et les autres t'aideront....
Mon site DVP
N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint
N'oubliez pas de voter pour les messages dont la réponse est pertinente
Je l'ai retravailler pour incorporer l'ensemble de vos informations, mais mon problème reste identique, je perd ma colonne...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 AnsiString S; for(int i = 0; i<StringGrid1->RowCount; i++) { if(StringGrid1->Canvas->TextWidth(StringGrid1->Cells[StringGrid1->Selection.Left][i]) > StringGrid1->Canvas->TextWidth(StringGrid1->Cells[StringGrid1->Selection.Left][i+1])) S = StringGrid1->Cells[StringGrid1->Selection.Left][i]; else S = StringGrid1->Cells[StringGrid1->Selection.Left][i+1]; } StringGrid1->ColWidths[StringGrid1->Selection.Left] = StringGrid1->Canvas->TextWidth(S);
Aide les autres...
Et les autres t'aideront....
Mon site DVP
N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint
N'oubliez pas de voter pour les messages dont la réponse est pertinente
Et bien la largeur d'une chaine en pixel ce n'est pas Lenght maisje ne comprend pas pourquoi vous dites ça...
Lenght pour une AnsiString renvoie son nombre de caractères.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Canvas->TextWidth(Chaine);
justement je pensait calculer le nombre de caratères puis les multiplier par le nombre de pixels qu'il fallait...
Mais votre solution me convient parfaitement, à savoir passer par :
C'est comme cela que je l'ai adapter dans mon dernier exemple de mon code ici en gras :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Canvas->TextWidth(Chaine);
mais cela ne fonctionne pas, J'ai une largeur de colonne qui se modifie mais elle reste toujours inférieur à la longueur de la chaine maximal....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 void __fastcall TForm_agenda::BitBtn1Click(TObject *Sender) { AnsiString S; for(int i = 0; i<StringGrid1->RowCount; i++) { if(StringGrid1->Canvas->TextWidth(StringGrid1->Cells[StringGrid1->Selection.Left][i]) > StringGrid1->Canvas->TextWidth(StringGrid1->Cells[StringGrid1->Selection.Left][i+1])) S = StringGrid1->Cells[StringGrid1->Selection.Left][i]; else S = StringGrid1->Cells[StringGrid1->Selection.Left][i+1]; } StringGrid1->ColWidths[StringGrid1->Selection.Left] = StringGrid1->Canvas->TextWidth(S); }
mais cela est sur la bonne voi merci...![]()
Aide les autres...
Et les autres t'aideront....
Mon site DVP
N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint
N'oubliez pas de voter pour les messages dont la réponse est pertinente
Déjà ta methode pour chercher le texte le plus large ne va pas du tout.
Quand tu arrive en fin de boucle tu pointe sur Cell[colonne][i+1] c'est à dire une ligne qui n'existe pas.
Je ferais plustôt comme cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 AnsiString S; int WidthCol = 20; // largeur 20 mini ça evite d'avoir des colonnes de largeur 0 for(int i = 0; i<StringGrid1->RowCount; i++) { if(StringGrid1->Canvas->TextWidth(StringGrid1->Cells[StringGrid1->Selection.Left][i]) > WidthCol ) WidthCol = StringGrid1->Canvas->TextWidth(StringGrid1->Cells[StringGrid1->Selection.Left][i]); } StringGrid1->ColWidths[StringGrid1->Selection.Left] = WidthCol;
Je rectifie et je m'excuse auprès de Lucien63...
Cela fonctionne très bien, à l'exception du fait qu'il vaut mieux rajouter quelque pixels pour ne pas se faire aspirer le dernier caractère.
Mon problème de perte de caractères est du au fait que mon tableau n'était pas plein!
une idée pour éviter ce problème???
Aide les autres...
Et les autres t'aideront....
Mon site DVP
N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint
N'oubliez pas de voter pour les messages dont la réponse est pertinente
Effectivement j'ai du confondre avec Lenght() . Le principe était la![]()
Merci bcp cela est vraiment parfait!!
![]()
Aide les autres...
Et les autres t'aideront....
Mon site DVP
N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint
N'oubliez pas de voter pour les messages dont la réponse est pertinente
Partager