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=21485et 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 colonnesEuh...ç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 598 645 membres 647 nouveaux aujourd'hui 15 440 membres club