begin process at 2012 02 08 09:54:34
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de registre

 > TDBGRID AVEC AJUSTEMENT AUTOMATIQUE DE LA LARGEUR DES COLONNES

TDBGRID AVEC AJUSTEMENT AUTOMATIQUE DE LA LARGEUR DES COLONNES


 Information sur la source

 Description

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

  • 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;
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.


 Sources du même auteur

Source avec Zip Source avec une capture RÉCUPÉRER LA MÉTEO DU SITE WEATHER.COM ET L'AFFICHER SUR SON...

 Sources de la même categorie

Source avec Zip USER ASSIST DECODER par f0xi
Source avec Zip SOURCE QUI PERMET DE RÉCUPÉRER @IP ET LE NOM DE LA CARTE RÉS... par yosthegost
Source avec Zip SAUVEGARDE DES PARAMETRES DE VOTRE APPLICATION par elguevel
Source avec Zip ACTIVATION D'UNE APPLICATION par KoolFree2005
Source avec Zip Source avec une capture CONFIGURATION DE WINDOWS® XP AVEC L'APPLICATION XP-CONF (UTI... par freetai

Commentaires et avis

Commentaire de Delphiprog le 18/10/2004 18:18:44 administrateur CS

Voici un code similaire avec le redimensionnement automatique des colonnes appelable depuis n'importe où dans l'application :
http://www.delphifr.com/code.aspx?id=21485
et sans limite de colonnes et qui s'applique à tout descendant de TCustomDbGrid, ce qui est moins restrictif quand on veut l'utiliser avec des composants tiers héritant de cette classe.
Faites votre choix !

Commentaire de Delphiprog le 18/10/2004 23:07:25 administrateur CS

W : array[0..256] of integer; // Limite à 256 colonnes
Euh...ça fait 257 colonnes ou je n'y connais plus rien ! ;o)

Puisque tu parles de tableaux dynamiques, pourquoi ne pas les utiliser au lieu de déclarer un tableau statique ?
W : array of integer;
Ensuite, tu dimensionnes précisément :

if Value then // Ajustement des colonnes
    With Datasource.DataSet do
        try
        DisableControls;
        SetLength(W, Columns.Count);
        for c := 0 to Columns.Count-1 do
...

Si je ne m'abuse, ton code uniformise la largeur de toutes les colonnes avec la plus grande largeur nécessaire, c'est bien cela ?

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales