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