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;
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 !
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 ?
Se souvenir du profil
Mot de passe oublié ? / Activation de compteCréer un compte
1 872 591 membres 33 nouveaux aujourd'hui 16 150 membres club