Procedure FixDBGridColumnsWidth(const DBGrid: TDBGrid); var i : integer; TotWidth : integer;//定义整个宽度 VarWidth : integer;//定义变化的宽度 ResizableColumnCount : integer;//定义变化宽度列的总数 AColumn : TColumn; begin //在重新调整前所有列的宽度 TotWidth := 0; VarWidth := 0; //有多少列需要自动调整 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; |