> perdonamni, Daniele, ma non ho capito un saciccio...... :-((
Non preoccuparti ....
Comunque nel mio girovagare su internet sono riuscito a trovare una unit,
qui in calce, che automaticamente adatta la visualizzazione dei campi
all'area visiva della griglia, tenendo conto dello spazio della scrollbar
verticale.
Non era quello che cercavo, ma in mancanza di meglio, va bene cosi'.
Una nota, io ho usato questa procedura e fino a 4 campi sono riuscito a
visualizzarli piu' che bene senza che la scrollbar orizzontale venga
visualizzata.
Ecco la procedura in originale
procedure AdjustColumnWidths(DBGrid: TDBGrid);
var
TotalColumnWidth, ColumnCount, GridClientWidth, Filler, i: Integer;
begin
ColumnCount :=
DBGrid.Columns.Count;
if ColumnCount = 0 then
Exit;
// compute total width used by grid columns and vertical lines if any
TotalColumnWidth := 0;
for i := 0 to ColumnCount-1 do
TotalColumnWidth := TotalColumnWidth +
DBGrid.Columns[i].Width;
if dgColLines in DBGrid.Options then
// include vertical lines in total (one per column)
TotalColumnWidth := TotalColumnWidth + ColumnCount;
// compute grid client width by excluding vertical scroll bar, grid
indicator,
// and grid border
GridClientWidth := DBGrid.Width - GetSystemMetrics(SM_CXVSCROLL);
if dgIndicator in DBGrid.Options then begin
GridClientWidth := GridClientWidth - IndicatorWidth;
if dgColLines in DBGrid.Options then
Dec(GridClientWidth);
end;
if DBGrid.BorderStyle = bsSingle then begin
if DBGrid.Ctl3D then // border is sunken (vertical border is 2 pixels
wide)
GridClientWidth := GridClientWidth - 4
else // border is one-dimensional (vertical border is one pixel wide)
GridClientWidth := GridClientWidth - 2;
end;
// adjust column widths
if TotalColumnWidth < GridClientWidth then begin
Filler := (GridClientWidth - TotalColumnWidth) div ColumnCount;
for i := 0 to ColumnCount-1 do
DBGrid.Columns[i].Width :=
DBGrid.Columns[i].Width + Filler;
end
else if TotalColumnWidth > GridClientWidth then begin
Filler := (TotalColumnWidth - GridClientWidth) div ColumnCount;
if (TotalColumnWidth - GridClientWidth) mod ColumnCount <> 0 then
Inc(Filler);
for i := 0 to ColumnCount-1 do
DBGrid.Columns[i].Width :=
DBGrid.Columns[i].Width - Filler;
end;
end;
Basta prenderla cosi' com'e' metterla in un una unit e passargli la griglia.
Spero sia utile a qualcun altro oltre che a me.
Ciao a tutti,
Daniele