____________________
|_____________|______________
|             |清波派出所
|上城分局      | -------------
|             |湖滨派出所
|_____________|_______________
|             |小营派出所
|下城分局      |--------
|             |城站分局
|             |---------
|             |战前派出所
|_____________|________________
这个侧边拦是动态可变的,大虾们怎么设计,有200分的

解决方案 »

  1.   

    我做过与这个类似的!
    用动态创建控件的方法,标签的位置和高度都是可以调节的!
    当然要在ONMANUAL***那个事件里边写
    可以定制任意复杂的报表,
    不过标签得放细项头里!
      

  2.   

    我刚做过,很难,因为这是一个主从结构的报表,而看你的设计,必须要把从BAND放到主BAND上面,呵呵,这是不行的。我是最后用子报表解决的。就是从表数据都放进一个子报表里面
      

  3.   

    C:\Program Files\Borland\Delphi7\Demos\Quickrpt\Qr3看这里的例子, 其中的 主细打印可以满足你的要求  借鉴一下,大同小异
      

  4.   

    以前做过类似,而且比这复杂,主要采用的是动态创建的方式进行的
    在fastreport开发指南里面有讲到怎么处理啊,在fastreport里面也应该有类似的例子
      

  5.   

    你可以用tms的grid实现,
    见图
    http://blog.codelphi.com/nil/gallery/image/240.aspx
      

  6.   

    没那么复杂的!不用什么主从表的!我做过一个厂的产品清单就这样的!
    --大类是产品分类,明细是产品清单整体思想是根据循环来'画'报表!
    用两个个循环在MANUALBUILD里自定义报表。
    显示大类---显示明细---(都在细项头里赋值)
      大类显示是这样的|``````|(开始,虚线代表横线(不知道怎么画横))
                      |``````|(中间循环部分,可根据记录条数调整-XX派出所-显示的位置)
                      ________
                      |______|  (结束)
      明细显示照常显示带边框的。我这里有实际的项目代码!
      

  7.   

    jacklost(半岛孤树) ,把你的代码发给我look一下,我的qq是104506515
      

  8.   

    原代码:
    ocedure Tfrm_SLS_XSTHCXDV.fr_sl_expdlManualBuild(Page: TfrPage);
    var
      i:integer;
    begin
      inherited;
      //手工设置打印数据项
     with  qry_dy1 do
     begin
      close;
      sql.Clear;
      sql.Add('select sum(number) as num,sum(amount) as amount  from sl_expdl where itemname='''+wwdblc_pm.Text+'''');
      sql.Add(' and billid in (select billid from sl_exp  where year(sldate)=:nf and month(sldate)=:yf   )  ');
      parambyname('nf').asinteger:=strtoint(cb_nf.text);
      parambyname('yf').asinteger:=strtoint(cb_yf.text);
      open;
     end;
     //添加报表头
      fr_sl_expdl.FindObject('memo4').Memo.text:=wwdblc_pm.Text;
      fr_sl_expdl.FindObject('memo8').Memo.text:=cb_nf.Text;
      fr_sl_expdl.FindObject('memo7').Memo.text:=cb_yf.Text;
      fr_sl_expdl.FindObject('memo26').Memo.text:=qry_dy1.fieldbyname('num').asstring;
      fr_sl_expdl.FindObject('memo27').Memo.text:=qry_dy1.fieldbyname('amount').asstring;
      fr_sl_expdl.FindObject('memo30').Memo.text:=floattostr(around(qry_dy1.fieldbyname('amount').asfloat/qry_dy1.fieldbyname('num').asfloat,3));
      Page.showbandbyname('band');
     with  qry_dy1 do
     begin
      close;
      sql.Clear;
      sql.Add('select distinct itemtypename  from sl_expdl where itemname='''+wwdblc_pm.Text+'''');
      sql.Add(' and billid in (select billid from sl_exp  where year(sldate)=:nf and month(sldate)=:yf   )  ');
      parambyname('nf').asinteger:=strtoint(cb_nf.text);
      parambyname('yf').asinteger:=strtoint(cb_yf.text);
      open;
     end;
      qry_dy1.First;
      while not qry_dy1.Eof do    //开始大循环显示规格型号
      begin
       with  qry_dy2 do
       begin
         close;
         sql.clear;
         sql.Add(' select price,number ,amount from sl_expdl   ');
         sql.Add(' where  itemtypename='''+qry_dy1.fieldbyname('itemtypename').asstring +''' and itemname='''+wwdblc_pm.Text+'''');
         sql.Add(' and billid in (select billid from sl_exp  where year(sldate)=:nf and month(sldate)=:yf   )  ');
         parambyname('nf').asinteger:=strtoint(cb_nf.text);
         parambyname('yf').asinteger:=strtoint(cb_yf.text);
         open;
       end;
        i:=0;
        qry_dy2.First;
        while not qry_dy2.Eof do //小循环显示各个规格型号对应的明细项
        begin
         if i=0 then
         begin
          fr_sl_expdl.FindObject('Memo14').memo.Text:=qry_dy1.fieldbyname('itemtypename').asstring;
          fr_sl_expdl.FindObject('Memo15').memo.Text:=qry_dy2.fieldbyname('price').asstring;
          fr_sl_expdl.FindObject('Memo16').memo.Text:=qry_dy2.fieldbyname('number').asstring;
          fr_sl_expdl.FindObject('Memo17').memo.Text:=qry_dy2.fieldbyname('amount').asstring;
          fr_sl_expdl.FindObject('Memo18').memo.Text:='———';
          Page.showbandbyname('band1');
        end else
         begin
           fr_sl_expdl.FindObject('Memo19').memo.Text:='';
           fr_sl_expdl.FindObject('Memo20').memo.Text:=qry_dy2.fieldbyname('price').asstring;
           fr_sl_expdl.FindObject('Memo21').memo.Text:=qry_dy2.fieldbyname('number').asstring;
           fr_sl_expdl.FindObject('Memo22').memo.Text:=qry_dy2.fieldbyname('amount').asstring;
           fr_sl_expdl.FindObject('Memo23').memo.Text:='———';
           Page.showbandbyname('band2');
         end;
          qry_dy2.Next;
          i:=i+1;
        end;
       qry_dy1.Next;
      end;
       Page.showbandbyname('band3'); //显示合计
       //Page.showbandbyname('band4');
    end;不过要注意里边MEMO的设置----边框一类的!!!!!!!!!
    要不不会有结果.
    我在上海,单位不能用QQ,
    太忙了,刚上来,所以现在才发,不好意思,呵呵.我做的项目显示是这样的:
    |`````|1*2|$12.3|...
    |半轴A|2*4|$23.5|...(其他项)
    |_____|3*8|$34  |...
    应该是你的要求吧?
      

  9.   

    houyongdong (dongdong) :
      兄弟,搞定了吗?
      我这里不让用QQ,所以只能通过次方式交流啊!