打印问题会逼死人的!

jianshen77 2002-09-30 09:34:52
我从数据库里面找到几条数据,每一条数据都有好多列!
用户要按规定格式打印
我用Quickrep上面放了个BAND ,然后把Qrlabel放上面,把数据放上面
我原来是一张A4纸打印一个次,用户认为太浪费纸张,
要可以在一张纸上多打印几个数据(按他规定的格式,可以放3个)
怎么用QUICKREP控制打印呢?
我用paintto方法,看起来,太麻烦,能否有更好的方法呢???
救命啊?
...全文
28 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Libran 2002-10-01
  • 打赏
  • 举报
回复
用BandType=rdDetail类型的Band显示数据,高度设为一页纸的1/3
tinderman 2002-10-01
  • 打赏
  • 举报
回复
试试我的建议:
1、将报表大小设为自定义大小,在Quickrep上点击右键会找到。
2、在打印时自定义报表长度,程序示例如下:
FrmRep->QuickRep1->Page->Length=FrmRep->QRBand_Title->Height+FrmRep->QRBand_Summ->Height+Query->RecordCount*FrmRep->QRBand_Detail-Height;
FrmRep->Preview;
3、打印机纸张设为自定义。
jianshen77 2002-10-01
  • 打赏
  • 举报
回复
照上面的方法,我因该在 一个QuickRep1上面放三个BAND,让后分别赋值,
这样就可以一张纸,打印三个规定的发票格式!
还是还有其他的方法?可以在多指点一些吗?
jianshen77 2002-09-30
  • 打赏
  • 举报
回复
很感谢两位的指点! Cango(轻舟) 的方法,就相当于自己画上去,
这个方法我也想过,一是时间不应许我去做,因为,我打的有点象发票
要画,真的很麻烦,我怕时间不够!
还能不能给点简单一点的方法!
Cango 2002-09-30
  • 打赏
  • 举报
回复
我有一个打印程序,可以供你参考:
void TQPrint(TQuery *Q,TStringList *sf,String title,String stitle,String ttitle,TStringList *sc,int lc[15],String leg,int pageno)
{
int LStart=0;int TStart=0;int TotalLength=0;int tempcol;
TStart=100;

for(int n=0;n<sc->Count;n++)TotalLength+=lc[n];
TotalLength+=sc->Count;

if(TotalLength>110){ShowMessage("表宽设置过大!请重新设置");return;}
LStart=700-6.3636*TotalLength;

TPrinter *Prntr = Printer();
Prntr->BeginDoc() ;
//title
Prntr->Canvas->Font->Style=TFontStyles()<< fsBold ;
if(stitle!="NULL") Prntr->Canvas->Font->Style=TFontStyles()<< fsBold<< fsUnderline;
Prntr->Canvas->Font->Size =14;
Prntr->Canvas->TextOut(700-9* title.Length(),50,title);
Prntr->Canvas->Font->Style = TFontStyles();
Prntr->Canvas->Font->Style=TFontStyles()<< fsBold ;
Prntr->Canvas->Font->Size =10;
int isfirst=1; int recno=1;
//second title ,third title
if(stitle!="NULL")
{
Prntr->Canvas->TextOut(LStart,TStart+8,stitle); TStart+=35;
if(ttitle!="NULL")
{
Prntr->Canvas->TextOut(LStart,TStart+8,ttitle); TStart+=35;
}
}

//column name
Prntr->Canvas->Pen->Width = 2;
Prntr->Canvas->MoveTo(LStart,TStart);
Prntr->Canvas->LineTo(TotalLength*12.727+LStart-6.3636,TStart);
Prntr->Canvas->MoveTo(LStart,(recno-1)*35+TStart);
Prntr->Canvas->LineTo(LStart,35*recno+TStart);
tempcol=LStart;
Prntr->Canvas->Pen->Width = 1;
if(isfirst)
{
for(int fieldno=0;fieldno<sc->Count;fieldno++)
{
tempcol+=6.3636;
Prntr->Canvas->TextOut(tempcol,(recno-1)*35+TStart+8,sc->Strings[fieldno]);
tempcol+=lc[fieldno]*12.727;
tempcol+=6.3636;
if(fieldno==sc->Count-1) Prntr->Canvas->Pen->Width = 2;
Prntr->Canvas->MoveTo(tempcol,(recno-1)*35+TStart);
Prntr->Canvas->LineTo(tempcol,35*recno+TStart);
}
Prntr->Canvas->Pen->Width =1;
Prntr->Canvas->MoveTo(LStart,35*recno+TStart);
Prntr->Canvas->LineTo(tempcol,35*recno+TStart);
isfirst=0;
}
//data list
for(;!Q->Eof && recno<50;Q->Next())
{
recno++;
//print a record
Prntr->Canvas->Pen->Width = 2;
Prntr->Canvas->MoveTo(LStart,TStart);
Prntr->Canvas->LineTo(TotalLength*12.727,TStart);

Prntr->Canvas->MoveTo(LStart,(recno-1)*35+TStart);
Prntr->Canvas->LineTo(LStart,35*recno+TStart);
tempcol=LStart;
Prntr->Canvas->Pen->Width = 1;
for(int fieldno=0;fieldno<sc->Count;fieldno++)
{
tempcol+=6.3636;
if(sf->Strings[fieldno]=="NULL")
{Prntr->Canvas->TextOut(tempcol,(recno-1)*35+TStart+8," ");}
else
Prntr->Canvas->TextOut(tempcol,(recno-1)*35+TStart+8,Q->FieldByName(sf->Strings[fieldno])->AsString);
tempcol+=lc[fieldno]*12.727;
tempcol+=6.3636;
if(fieldno==sc->Count-1) Prntr->Canvas->Pen->Width = 2;
Prntr->Canvas->MoveTo(tempcol,(recno-1)*35+TStart);
Prntr->Canvas->LineTo(tempcol,35*recno+TStart);
}
Prntr->Canvas->Pen->Width =1;
Prntr->Canvas->MoveTo(LStart,35*recno+TStart);
Prntr->Canvas->LineTo(tempcol,35*recno+TStart);
}
if(leg!="NULL")
{
Prntr->Canvas->TextOut(LStart,recno*35+TStart+8,leg);
}
String pagenum;

pagenum=pageno;
pagenum+="/";
if(Q->RecordCount==(Q->RecordCount/50)*50)
{pagenum+=Q->RecordCount/50;}
else
pagenum+=Q->RecordCount/50+1;
Prntr->Canvas->TextOut(1350,recno*35+TStart+8,pagenum);
// if(!Q->Eof)Prntr->NewPage() ;
Prntr->EndDoc() ;


if(!Q->Eof){TQPrint(Q,sf,title,stitle,ttitle,sc,lc,leg,++pageno); }

}
上面的程序是直接从库中读取信息并进行打印的.
祝顺利!
我来看看CB 2002-09-30
  • 打赏
  • 举报
回复
看例子(BCB自带的)

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧