当然有办法啦! procedure TSelectForm.AdjustMaxWidth; var i, vCount: Integer; vMaxWidth: array[0..30] of Integer; vTextLength: Integer; vNameLength: Integer; begin //初始化 for i := 0 to 20 do vMaxWidth[i] := 0; //取得最大宽度 with SysDM.dsSelect.DataSet do begin DisableControls; First; //取得数据宽度 while not Eof do begin for i := 0 to dbg.Columns.Count - 1 do begin vTextLength := Length(Trim(dbg.Fields[i].AsString)); vNameLength := Length(Trim(dbg.Fields[i].Fieldname)); if vTextLength > vMaxWidth[i] then vMaxWidth[i] := vTextLength + 3; if vTextLength < vNameLength then vMaxWidth[i] := vNameLength + 3; end; Next; end; First; //当记录为空时,取列名宽度 if IsEmpty then begin for i := 0 to dbg.Columns.Count - 1 do begin vNameLength := Length(Trim(dbg.Fields[i].Fieldname)); vMaxWidth[i] := vNameLength; end; end; EnableControls; end; //设置最大宽度,计算总长度 vCount := 0; for i := 0 to dbg.Columns.Count - 1 do begin dbg.Columns[i].Width := vMaxWidth[i] * 8; vCount := vCount + vMaxWidth[i] * 8; end; //设置DBG宽度 dbg.Width := vCount + 50; end;
procedure TSelectForm.AdjustMaxWidth;
var
i, vCount: Integer;
vMaxWidth: array[0..30] of Integer;
vTextLength: Integer;
vNameLength: Integer;
begin
//初始化
for i := 0 to 20 do vMaxWidth[i] := 0;
//取得最大宽度 with SysDM.dsSelect.DataSet do
begin
DisableControls;
First;
//取得数据宽度
while not Eof do
begin
for i := 0 to dbg.Columns.Count - 1 do
begin
vTextLength := Length(Trim(dbg.Fields[i].AsString));
vNameLength := Length(Trim(dbg.Fields[i].Fieldname));
if vTextLength > vMaxWidth[i] then vMaxWidth[i] := vTextLength + 3;
if vTextLength < vNameLength then vMaxWidth[i] := vNameLength + 3;
end;
Next;
end;
First;
//当记录为空时,取列名宽度
if IsEmpty then
begin
for i := 0 to dbg.Columns.Count - 1 do
begin
vNameLength := Length(Trim(dbg.Fields[i].Fieldname));
vMaxWidth[i] := vNameLength;
end;
end;
EnableControls;
end;
//设置最大宽度,计算总长度
vCount := 0;
for i := 0 to dbg.Columns.Count - 1 do
begin
dbg.Columns[i].Width := vMaxWidth[i] * 8;
vCount := vCount + vMaxWidth[i] * 8;
end;
//设置DBG宽度
dbg.Width := vCount + 50;
end;