childband中的数据是在quiickrep1的onprint事件中动态创建的.

解决方案 »

  1.   

    onprien事件如下
    procedure TFsfygzhz.QuickRep1BeforePrint(Sender: TCustomQuickRep;
      var PrintReport: Boolean);
      var i,j,num1,num2:integer ;
      lab:tqrlabel;
      tpid,cdfp,cd,cdnum,fyname,fymoney,username,user_sfmoney:array of tqrlabel;
    begin
        query1.DatabaseName:='mzsf';
        query1.open;
        query2.DatabaseName:='mzsf';
        query2.Open;
        ChildBand1.Enabled:=true;
        childband1.Height:=17;
        setlength(fyname,query1.RecordCount);
        setlength(fymoney,query1.RecordCount);    query1.First;
        for i:=0 to query1.RecordCount-1  do
        begin
          fyname[i]:=tqrlabel.Create(ChildBand1);
          fyname[i].Parent:=ChildBand1;
          fyname[i].Height:=17;
          fyname[i].Width:=18;
          fymoney[i]:=tqrlabel.Create(ChildBand1);
          fymoney[i].Parent:=ChildBand1;
          fymoney[i].Height:=17;
          fymoney[i].Width:=28;
          if i mod 3 =0 then       //Ò»Ðдò3¸ö   ÊǵÚÒ»ÁÐ
          begin
            fyname[i].Left:=10;
            if i=0 then            //Èç¹ûÊǵÚÒ»¸ö£¬Ôò
              fyname[i].Top:=0
            else
              fyname[i].top:=fyname[i-2].Top+fyname[i-2].Height+5;
          end
          else         //Èç¹û²»ÊǵÚÒ»ÁУ¬Ôò
          begin
            fyname[i].Left:=fyname[i-1].Left+240;
            fyname[i].Top:=fyname[i-1].Top;
          end;
          fymoney[i].Left:=fyname[i].left+fyname[i].Width+170;
          fymoney[i].Top:=fyname[i].Top;
          fymoney[i].Caption:=ing(query1['fymoney']);
          fyname[i].Caption:='¡¾'+query1['fyname']+'¡¿';
          num1:=fymoney[i].top;
          num2:=fymoney[i].height;
          query1.Next;
          childband1.Height:=childband1.Height+17;
        end;//end for
        setlength(username,query2.RecordCount);
        setlength(user_sfmoney,query2.RecordCount);
        query2.First;
        for j :=0  to query2.RecordCount-1  do
        begin
          username[j]:=tqrlabel.Create(ChildBand1);
          username[j].Parent:=ChildBand1;
          username[j].Height:=17;
          username[j].Width:=18;
          user_sfmoney[j]:=tqrlabel.Create(ChildBand1);
          user_sfmoney[j].Parent:=ChildBand1;
          user_sfmoney[j].Height:=17;
          user_sfmoney[j].Width:=28;
          if j mod 3 =0 then       //Ò»Ðдò3¸ö   ÊǵÚÒ»ÁÐ
          begin
            username[j].Left:=10;
            if j=0 then            //Èç¹ûÊǵÚÒ»¸ö£¬Ôò
              username[j].Top:=num1+num2+9
            else
              username[j].top:=username[j-2].Top+username[j-2].Height+5;
          end
          else         //Èç¹û²»ÊǵÚÒ»ÁУ¬Ôò
          begin
            username[j].Left:=username[j-1].Left+240;
            username[j].Top:=username[j-1].Top;
          end;
          user_sfmoney[j].Left:=username[j].left+username[j].Width+170;
          user_sfmoney[j].Top:=username[j].Top;
          user_sfmoney[j].Caption:=ing(query2['totalmoney']);
          username[j].Caption:=+query2['username'];
          query2.Next;
          childband1.Height:=childband1.Height+17;
        end;
    end;
    打印按钮
     if dm.sfysrhz.Active=true then
        if dm.sfysrhz.RecordCount>0 then
        quickrep1.PreviewModal;
      

  2.   

    我一点打印按钮比如说在chileband中就显示
    住院费 100
    张三    100
    稍后就消失了而且也不预览
      

  3.   

    大家都是怎么用quickreport预览的
      

  4.   

    老大,  这是动态显示出来的,我也不想这么做可是客户提出来的无奈之举,query1的意思就是把所收总费用显示出来每行三列, query2是把每个收费员所收总金额j显示出来我保证onprint事件中的代码没有任何错误而且显示内容正确帮助了不够分再加
      

  5.   

    既然是这样,那就用不着用QuickRep了嘛,自己做,对上述代码改不了太多,无非就是向Printer.Canvas上Textout字符串。配合BeginDoc和EndDoc,注意判断一下换页。
      

  6.   

    东北人都是活雷锋先谢了东北人请问用printercanvas能预览吗
      

  7.   

    预览时可以用一个Form,在其Canvas上进行TextOut