Soyez le premier à donner votre avis sur cette source.
Snippet vu 14 345 fois - Téléchargée 33 fois
procedure TForm1.DBGrid1DblClick(Sender: TObject); begin case RadioGroup1.ItemIndex of 0: ResizeAllColumns(Sender as TDbGrid); 1: ResizeColumn(Sender as TDbGrid); end; end; procedure TForm1.ResizeColumn(Grid: TDbGrid); var MaxWidth, //Largeur maximale de la colonne MinWidth, //Largeur minimale de la colonne CurrentWidth: integer; //Largeur actuelle FieldSize: integer; //Taille du champ d'après son contenu DS: TDataSet; BookMark: TBookmark; begin //Pour alléger l'écriture !... DS := Grid.DataSource.DataSet; with Grid do begin //Mémoriser la ligne actuellement sélectionnée BookMark := DS.GetBookmark; //Pour ne pas voir toutes les lignes défiler Ds.DisableControls; //Parcours de toutes les lignes de l'ensemble de données DS.First; MaxWidth := Canvas.TextWidth(Columns[SelectedIndex].Title.Caption) + 5; MinWidth := 0; while not DS.Eof do begin //Déterminer la largeur en pixels du contenu de l'enregistrement lu FieldSize := Canvas.TextWidth(DS.FieldByName(SelectedField.FieldName).AsString) + 5; //Réajuster la largeur maximale ? if MaxWidth < FieldSize then MaxWidth := FieldSize; //Réajuster la largeur minimale ? if MinWidth > FieldSize then MinWidth := FieldSize; DS.Next; end; //Largeur de la colonne cliquée CurrentWidth := Columns[SelectedIndex].Width; if CurrentWidth <> MaxWidth then CurrentWidth := MaxWidth; if CurrentWidth < MinWidth then CurrentWidth := MinWidth; //Affectation de la nouvelle largeur à la colonne Columns[SelectedIndex].Width := CurrentWidth; //repositionner le curseur de l'ensemble de données DS.GotoBookmark(BookMark); DS.FreeBookmark(BookMark); //Rétablir l'affichage du TDbGrid DS.EnableControls; end; end;
27 févr. 2007 à 12:53
19 juin 2005 à 12:39
4 févr. 2005 à 09:38
Je croyais que FieldSize récuperait la taille en pixels sur la valeur du champ de l'enregistrement.
Petite subtilité pour y remédier (vue dans un source VB) --> transmettre la valeur du champ à un objet comportant une propriété de type autosize (TLabel) et récupérer sa propriété "width" dans la variable "tailleInitiale".
Pour l'option ajuster toutes colonnes ->> on duplique ce fameux objet et la variable "tailleInitiale", et on ajoute une boucle "for" dans la boucle "while not eof".
Vous en pensez quoi ?
Cordialement.
3 févr. 2005 à 18:57
Ici il s'agit d'ajuster la largeur des colonnes à celles des données réellement présentes et non à la taille maximum de la colonne. Nuance...
Mais la remarque est bonne.
Par contre, dans le code que tu donnes, pourquoi parcourir les données si c'est pour ajuster à la taille de la colonne que l'on connait dès la conception ?
3 févr. 2005 à 14:15
var tailleInitiale:integer;
begin
tailleInitiale:=0
while not eof do
begin
if tailleInitiale<FieldSize then
tailleInitiale:=FieldSize;
next;
end;
Grid.Columns[Selected].width:=TailleInitiale;
end;
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.