ResizableColumnCount := 0; for i := 0 to -1 + DBGrid.Columns.Count do begin TotWidth := TotWidth + DBGrid.Columns[i].Width; if DBGrid.Columns[i].Field.Tag <> 0 then Inc(ResizableColumnCount); end;
//为每个列分隔线增加1PX
if dgColLines in DBGrid.Options then TotWidth := TotWidth + DBGrid.Columns.Count; if dgIndicator in DBGrid.Options then TotWidth := TotWidth + IndicatorWidth; VarWidth := DBGrid.ClientWidth - TotWidth;
//平均分配变化宽度的值
//给所有需要自动调整的列
if ResizableColumnCount > 0 then VarWidth := varWidth div ResizableColumnCount; for i := 0 to -1 + DBGrid.Columns.Count do begin AColumn := DBGrid.Columns[i]; if AColumn.Field.Tag <> 0 then begin AColumn.Width := AColumn.Width + VarWidth; if AColumn.Width < AColumn.Field.Tag then AColumn.Width := AColumn.Field.Tag; end; end; end;
最后,应用这一个函数:
Procedure TForm1.FormResize(Sender: TObject); begin FixDBGridColumnsWidth(DBGrid1); end;