procedure TForm2.DB4Columns();
var
 i,j,S,S1,S2:Integer;
 m,n:String;
begin
 DBGRD4.DataSource.DataSet.RecNo:=1;
for i:=0 to DBGRD4.DataSource.DataSet.FieldCount-1 do
 begin
 S:=0;
 for j:=1 to ADOQUREY4.RecordCount do
 begin
  m:=DBGRD4.Fields[i].AsString;
  S1:=length(trim(m));
  m:=DBGRD4.Fields[i].FieldName;
  S2:=length(trim(m));
  if S1>S then
   S:=S1;
  if S2>S then
   S:=S2;
  DBGRD4.DataSource.DataSet.RecNo:=j+1;
 end;
 DBGRD4.Columns[i].Width:=S*8;
end;
end;
上面的程序段是我写的一个函数 是可以调节DBGRD4的列宽的 但是我想把它该为可以调节任何一个DBGRD的列宽,例如DB4Columns(DBGRD1);的话就设置DBGRD1的列宽度,DB4Columns(DBGRD2);的话就设置DBGRD2的列宽度,那请问DB4Columns();这括号里面的方法怎么调用呢 ?

解决方案 »

  1.   

    procedure TForm2.DBColumns(db:TDBGrid); //改成这样
    然后把程序段里所有的DBGRD4改成db,这个过程就改完了要调用这个过程的时候,这样写:  TForm2.DBColumns(DBGRD4);
      

  2.   

    procedure DB4Columns(ADBGrid:TDBGrid);
    var
      i,j,S,S1,S2:Integer;
      m,n:String;
    begin
      ADBGrid.DataSource.DataSet.RecNo:=1;
      for i:=0 to ADBGrid.DataSource.DataSet.FieldCount-1 do
      begin
        S:=0;
        for j:=1 to ADBGrid.DataSource.DataSet.RecordCount do
        begin
          m:=ADBGrid.Fields[i].AsString;
          S1:=length(trim(m));
          m:=ADBGrid.Fields[i].FieldName;
          S2:=length(trim(m));
          if S1>S then
          S:=S1;
          if S2>S then
          S:=S2;
          ADBGrid.DataSource.DataSet.RecNo:=j+1;
        end;
        ADBGrid.Columns[i].Width:=S*8;
      end;
    end;
    方在所有过程或函数的前面
    调用的时候传入对应的DBGrid实例名就可以了比如你要改变DBGRID4的列宽
    DB4Columns(DBGrid4);
      

  3.   

    DBGrid用TDBGrid调用 那ADOQuery4这个又是怎么调用呢?
      

  4.   

    如果你在这个过程里用到datasource,那么其他调用过程的时候,也只能是调用同一个datasource,否则就要重新编写了