窗体1,窗体2,均有控件Dbgrid1,
窗体3有一过程如下:procedure TtoExcel_w.BitBtn21Click(Sender: TObject);
var
  eclApp,WorkBook:olevariant;
  xlsFileName:string;
  i,j:integer;
begin
if trim(Edit1.text)<>'' then
  begin
     try
      eclApp:=CreateOleObject('Excel.Application');
      WorkBook:=CreateOleObject('Excel.Sheet');
     except
      Application.MessageBox('系统没有安装Microsoft Excel','Microsoft Excel',MB_OK+MB_ICONWarning);
      Exit;
     end;
     try
       WorkBook:=eclApp.workbooks.Add;
     for i:=0 to DBGrid1.Columns.Count-1 do
      begin
        ....
....
end;问如何让Dbgrid1随窗体调用改变而改变,就是说:当窗体1调用窗体3时,
     for i:=0 to DBGrid1.Columns.Count-1 do
变成
     for i:=0 to t1.DBGrid1.Columns.Count-1 do当窗体2调用窗体3时,
     for i:=0 to DBGrid1.Columns.Count-1 do
变成
     for i:=0 to t2.DBGrid1.Columns.Count-1 do

解决方案 »

  1.   

    在窗体3的单元上设置一个变量tmpDBGrid:TDBGrid
    调用窗体3时设置这个变量的值。 然后在代码里用tmpDBGrid代替相应的t1.DBGrid1 或 t2.DBGrid1
      

  2.   

    如ZCZB所说的可以解决此问题,
    另外,你还可以写一个过程,在过程定义中定义一个TDBGrid的参数,调用时给TDBGrid赋相应的对象名称就可以了
      

  3.   

    晕,你既然要写通用函数的话,直接可以传dataset或dbgrid做为参数过去啊,代码里做下修改就行了.你也不一定要加窗体3,一个unit就可以了.