各位高手:
我用frprintgrid做了打印的模块,添加了两个窗体,一个用来选择要打印的字段,另一个用来调整列宽,因为要打印的dbgrid较多,怎样才能在打印时调用这两个模块,设置要打印的dbgrid,有人告诉我用说用什么函数调用,我是一头雾水,不知道如何下手,眼看快到期限了,怎么办,各位高手指点一下吧,多谢了!!

解决方案 »

  1.   

    我做的是打印,用frprintgrid打印dbgrid,因为要打印多个窗体的dbgrid,所以需要动态设置frprintgrid的dbgrid,也就是说,不论哪一个dbgrid要打印,只需调用我的两个打印单元就行了,但是怎样才能将要打印的dbgrid传过去呢,也许还有别的思路,帮忙值点一下吧,明天就要交工了,谢谢!
      

  2.   

    不知你看过sreport报表控件没有?建议你可以看看。
      

  3.   

    我有本讲fastreaport的电子书,要吗?
      

  4.   

    要,呵呵,谢谢了
    [email protected]
      

  5.   

    不知道行不行,比如查询
      with adoquery1 do
       begin
         .......
       end;
    DataSource1.dataset:=adoquery
    在打印模块form1中的dbgrid1 使 form1.dbgrid1.DataSource:=DataSource1;
    就是动态的设置dbgrid的DataSource!(不知道符不符合你的要求)!
      

  6.   

    简单的函数调用1.在这两个模块中增加过程如下procedure TForm1.SetGrid(aGrid: TDBGrid);
    begin
      DBGrid1:=aGrid;//DBGrid1是本窗体的表格 aGrid是动态要设置的表格  
    end;2。其他模块要打印某个表格 如dbgGr时,这样做
      Form1.SetGrid(dbgGr);就行了~
      

  7.   

    明天交活,老大,救我一命吧,以下是我的两个打印模块的代码,unit_print_sel用来选择打印的字段,unit_print_change在选择完毕后用来调整列宽,运行时提示错误如下
    ---------------------------
    Debugger Exception Notification
    ---------------------------
    Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 0056F425 in module 'Project1.exe'. Read of address 000002F8'. Process stopped. Use Step or Run to continue.
    ---------------------------
    OK   Help   
    ---------------------------
    unit Unit_print_change;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Grids, DBGrids, FR_PTabl;type
      TForm_print_change = class(TForm)
        DBGrid1: TDBGrid;
        Button1: TButton;
        Button2: TButton;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        frPrintGrid1: TfrPrintGrid;
        procedure FormShow(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        //procedure Button3Click(Sender: TObject);
        //procedure Button4Click(Sender: TObject);
      private
        { Private declarations }
      public
        procedure setgrid(aGrid: TDBGrid);
        { Public declarations }
      end;var
      Form_print_change: TForm_print_change;implementation//需要声明的有dbgrid所在的单元文件
    //uses中的内容需要根据情况进行修改
    uses
      unit_client, Unit_print_sel;
    {$R *.dfm}procedure tform_print_change.setgrid(aGrid: TDBGrid);
    begin
      DBGrid1:=aGrid;
    end;procedure TForm_print_change.FormShow(Sender: TObject);
    var
      i:integer;
    begin
      form_print_change.Label3.Caption:=form_print_sel.Edit1.Text;    //报表题目
      form_print_change.Label4.Caption:=form_print_sel.Edit2.Text;    //打印时间
      form_print_change.DBGrid1.DataSource:=form_client.DBGrid1.DataSource;
      for i:=0 to form_client.DBGrid1.Columns.Count-1 do
        begin
          if form_print_sel.CheckListBox1.Checked[i]=true then     ////需要修改////
           form_print_change.dbgrid1.Columns[i].Visible:=true;
          form_print_change.DBGrid1.Columns[i].Title.Alignment:=tacenter;
          form_print_change.DBGrid1.Columns[i].Title.Font.Size:=10;
        end;
    end;procedure TForm_print_change.Button1Click(Sender: TObject);
    begin  with form_print_change.frPrintGrid1 do
      begin
        Title.Text:=form_print_sel.Edit1.Text;   //设置标题
        PageHeader.Text:= form_print_sel.edit2.Text;  //设置打印时间
        DBGrid:=form_print_change.dbgrid1;  //设置要打印的dbgrid
        PageFooter.Text := '[PAGE#]';  //设置页码
        autowidth:=false;
        BuildReport;
        ShowReport;
      end;
    end;procedure TForm_print_change.Button2Click(Sender: TObject);
    var
      i:integer;
    begin
      for i:=0 to form_print_sel.CheckListBox1.Items.Count-1 do
      begin
        form_print_change.DBGrid1.Columns[i].Visible:=false
      end;
      form_print_change.Close;
    end;end.
      

  8.   

    另一个模块:
    unit Unit_print_change;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Grids, DBGrids, FR_PTabl;type
      TForm_print_change = class(TForm)
        DBGrid1: TDBGrid;
        Button1: TButton;
        Button2: TButton;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        frPrintGrid1: TfrPrintGrid;
        procedure FormShow(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        //procedure Button3Click(Sender: TObject);
        //procedure Button4Click(Sender: TObject);
      private
        { Private declarations }
      public
        procedure setgrid(aGrid: TDBGrid);
        { Public declarations }
      end;var
      Form_print_change: TForm_print_change;implementation//需要声明的有dbgrid所在的单元文件
    //uses中的内容需要根据情况进行修改
    uses
      unit_client, Unit_print_sel;
    {$R *.dfm}procedure tform_print_change.setgrid(aGrid: TDBGrid);
    begin
      DBGrid1:=aGrid;
    end;procedure TForm_print_change.FormShow(Sender: TObject);
    var
      i:integer;
    begin
      form_print_change.Label3.Caption:=form_print_sel.Edit1.Text;    //报表题目
      form_print_change.Label4.Caption:=form_print_sel.Edit2.Text;    //打印时间
      form_print_change.DBGrid1.DataSource:=form_client.DBGrid1.DataSource;
      for i:=0 to form_client.DBGrid1.Columns.Count-1 do
        begin
          if form_print_sel.CheckListBox1.Checked[i]=true then     ////需要修改////
           form_print_change.dbgrid1.Columns[i].Visible:=true;
          form_print_change.DBGrid1.Columns[i].Title.Alignment:=tacenter;
          form_print_change.DBGrid1.Columns[i].Title.Font.Size:=10;
        end;
    end;procedure TForm_print_change.Button1Click(Sender: TObject);
    begin  with form_print_change.frPrintGrid1 do
      begin
        Title.Text:=form_print_sel.Edit1.Text;   //设置标题
        PageHeader.Text:= form_print_sel.edit2.Text;  //设置打印时间
        DBGrid:=form_print_change.dbgrid1;  //设置要打印的dbgrid
        PageFooter.Text := '[PAGE#]';  //设置页码
        autowidth:=false;
        BuildReport;
        ShowReport;
      end;
    end;procedure TForm_print_change.Button2Click(Sender: TObject);
    var
      i:integer;
    begin
      for i:=0 to form_print_sel.CheckListBox1.Items.Count-1 do
      begin
        form_print_change.DBGrid1.Columns[i].Visible:=false
      end;
      form_print_change.Close;
    end;end.