刚接触delpji,麻烦老师们指点下 谢谢。VB是在哪个过程都可以使用CALL的,怎么这里就不行了。procedure TForm1.Button3Click(Sender: TObject);
begin
MakeDBGridColumnsAutoFixItsWidth(DBGrid1);
abc(DBGrid1);
end;
这个就可以通过,但是放在下面的过程就不行。请问为什么啊。procedure TForm1.Button1Click(Sender: TObject);
begin  ADOQuery1.Close;
  ADOQuery1.sql.text := 'select * from t_user';
  ADOQuery1.open;MakeDBGridColumnsAutoFixItsWidth(DBGrid1);  //怎么在这里就不可以呢?
abc(DBGrid1); //dbgrid1.readonly := true;
end;

解决方案 »

  1.   

    MakeDBGridColumnsAutoFixItsWidth(DBGrid1);
    abc(DBGrid1);
    这2个是一个函数过程,让DBGrid1自动列宽和居中的过程,我在按钮2呼用就可以通过,但是放在加载数据库到DBGrid1后呼用就不可以了?
      

  2.   

    用这份代码吧,自动调整DBGrid列宽:
    function DBGridAutoSize(mDBGrid: TDBGrid; mOffset: Integer = 15): Boolean;
    var
      I: Integer;
    begin
      Result := False;
      if not Assigned(mDBGrid) then
        Exit;
      if not Assigned(mDBGrid.DataSource) then
        Exit;
      if not Assigned(mDBGrid.DataSource.DataSet) then
        Exit;
      if not mDBGrid.DataSource.DataSet.Active then
        Exit;
      for I := 0 to mDBGrid.Columns.Count - 1 do
      begin
        if not mDBGrid.Columns[I].Visible then
          Continue;
        DBGridRecordSize(mdbgrid.Columns[i]);
        if Assigned(mDBGrid.Columns[I].Field) then
          mDBGrid.Columns[I].Width := Max(mDBGrid.Columns[I].Field.Tag,
            mDBGrid.Canvas.TextWidth(mDBGrid.Columns[I].Title.Caption)) + mOffset
        else
          mDBGrid.Columns[I].Width :=
            mDBGrid.Canvas.TextWidth(mDBGrid.Columns[I].Title.Caption) + mOffset;
        mDBGrid.Refresh;
        //  Application.ProcessMessages;
      end;
      Result := True;
    end; { DBGridAutoSize }
      

  3.   

    Button1Click中
    给MakeDBGridColumnsAutoFixItsWidth加个断点看一下执行了么.
    代码看不出错误, 估计是MakeDBGridColumnsAutoFixItsWidth有判断条件之类的
      

  4.   

    还有如何调用function函数啊,我直接写在复制楼上的老师函数后,这样也不行。。procedure TForm1.Button3Click(Sender: TObject);
    beginDBGridAutoSize(DBGrid1,15);
    //MakeDBGridColumnsAutoFixItsWidth(DBGrid1);
    abc(DBGrid1);
    end;