Le forum est décidément riche pour trouver l'inspiration.
Cette fois-ci, je vous propose le code pour ajuster automatiquement la largeur d'une colonne d'un TDbGrid, simplement par un double clic sur cette colonne.
NB : je suis parti de l'hypothèse que le développeur n'utilisait pas de colonnes persistantes. Ainsi, même si l'on change l'ensemble de données rattaché au DbGrid au cours de l'exécution, ce code continuera de fonctionner comme de si rien n'était.
Source / Exemple :
procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
case RadioGroup1.ItemIndex of
0: ResizeAllColumns(Sender as TDbGrid);
1: ResizeColumn(Sender as TDbGrid);
end;
end;
procedure TForm1.ResizeColumn(Grid: TDbGrid);
var
MaxWidth, //Largeur maximale de la colonne
MinWidth, //Largeur minimale de la colonne
CurrentWidth: integer; //Largeur actuelle
FieldSize: integer; //Taille du champ d'après son contenu
DS: TDataSet;
BookMark: TBookmark;
begin
//Pour alléger l'écriture !...
DS := Grid.DataSource.DataSet;
with Grid do
begin
//Mémoriser la ligne actuellement sélectionnée
BookMark := DS.GetBookmark;
//Pour ne pas voir toutes les lignes défiler
Ds.DisableControls;
//Parcours de toutes les lignes de l'ensemble de données
DS.First;
MaxWidth := Canvas.TextWidth(Columns[SelectedIndex].Title.Caption) + 5;
MinWidth := 0;
while not DS.Eof do
begin
//Déterminer la largeur en pixels du contenu de l'enregistrement lu
FieldSize :=
Canvas.TextWidth(DS.FieldByName(SelectedField.FieldName).AsString) + 5;
//Réajuster la largeur maximale ?
if MaxWidth < FieldSize then
MaxWidth := FieldSize;
//Réajuster la largeur minimale ?
if MinWidth > FieldSize then
MinWidth := FieldSize;
DS.Next;
end;
//Largeur de la colonne cliquée
CurrentWidth := Columns[SelectedIndex].Width;
if CurrentWidth <> MaxWidth then
CurrentWidth := MaxWidth;
if CurrentWidth < MinWidth then
CurrentWidth := MinWidth;
//Affectation de la nouvelle largeur à la colonne
Columns[SelectedIndex].Width := CurrentWidth;
//repositionner le curseur de l'ensemble de données
DS.GotoBookmark(BookMark);
DS.FreeBookmark(BookMark);
//Rétablir l'affichage du TDbGrid
DS.EnableControls;
end;
end;
Conclusion :
Si cela peut vous servir, j'en serai ravi.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.