如果一些或它们是静态的,我如何计算dbgrid
中列的宽度。例如,前三个需要有静态宽度,剩下五个需要调整大小。
目标是使复选框打开或关闭可见性并更改列宽以适应网格。
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
i:integer;
column1: integer;
width2 : integer;
width1: integer;
begin
width1 := 1;
column1:=-3;
for i := 0 to DBGrid1.Columns.Count - 1 do
begin
width1 := width1 + DBGrid1.Columns[i].Width + 1;
if DBGrid1.Columns[i].Visible then
column1:=column1 +1;
end;
width2:=(80 div column1);
if ((width1 < DBGrid1.ClientWidth - width2) or (width1 > DBGrid1.ClientWidth +width2)) then
begin
DBGrid1.Columns[0].Width:=(DBGrid1.ClientWidth)*10 div 100;
DBGrid1.Columns[1].Width:=(DBGrid1.ClientWidth)*5 div 100;
DBGrid1.Columns[2].Width:=(DBGrid1.ClientWidth)*(100-colum1n*width2-15) div 100;
DBGrid1.Columns[3].Width:=(DBGrid1.ClientWidth)*width2 div 100;
DBGrid1.Columns[4].Width:=(DBGrid1.ClientWidth)*width2 div 100;
DBGrid1.Columns[5].Width:=(DBGrid1.ClientWidth)*width2 div 100;
DBGrid1.Columns[6].Width:=(DBGrid1.ClientWidth)*width2 div 100;
DBGrid1.Columns[7].Width:=(DBGrid1.ClientWidth)*width2 div 100;
end;
这是我目前使用的代码,但它的工作有点慢。
提前致谢。