Tdbgrid avec ajustement automatique de la largeur des colonnes

Contenu du snippet

J'en avais marre de devoir ajuster les colonnes d'une dbgrid à chaque connection avec des données.
Voici donc ce que j'ai fait et qui marche bien dans mon appli (Delphi 7).

Source / Exemple :


TFitDBGrid = class(TDBGrid)
  protected
    procedure LinkActive(Value: Boolean); override;
  end;

...

procedure TFitDBGrid.LinkActive(Value: Boolean);
var
  W : array[0..256] of integer; // Limite à 256 colonnes, on peut faire plus ou un tableau dynamique
  l,c : Integer;
begin
  inherited;
  if Value then // Ajustement des colonnes
    with Datasource.DataSet do
      try
        DisableControls;
        for c := 0 to Columns.Count-1 do
          W[c] := Canvas.TextWidth(Columns[c].Title.Caption +'W'); // Largeur des titres avec un espace supplementaire
        First;
        while not EOF do begin
          for c := 0 to Columns.Count-1 do
            if assigned(Columns[c].Field) then begin
              l := Canvas.TextWidth(Columns[c].Field.asString+'W'); // Largeur des données
              if W[c] < l then W[c] := l;
            end;
          Next;
        end;
        for c := 0 to Columns.Count-1 do
          Columns[c].Width := W[c];
      finally
        EnableControls;
      end;
end;

Conclusion :


Ca met un peut de temps, car il faut parcourir tous les enregistrements de la table mais c'est toujours plus rapide et plus pratique pour l'utilisateur que de faire ça à la main.
J'attends vos remarques et suggestions.

A voir également

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.