社区
C++ Builder
帖子详情
打印问题会逼死人的!
jianshen77
2002-09-30 09:34:52
我从数据库里面找到几条数据,每一条数据都有好多列!
用户要按规定格式打印
我用Quickrep上面放了个BAND ,然后把Qrlabel放上面,把数据放上面
我原来是一张A4纸打印一个次,用户认为太浪费纸张,
要可以在一张纸上多打印几个数据(按他规定的格式,可以放3个)
怎么用QUICKREP控制打印呢?
我用paintto方法,看起来,太麻烦,能否有更好的方法呢???
救命啊?
...全文
28
6
打赏
收藏
打印问题会逼死人的!
我从数据库里面找到几条数据,每一条数据都有好多列! 用户要按规定格式打印 我用Quickrep上面放了个BAND ,然后把Qrlabel放上面,把数据放上面 我原来是一张A4纸打印一个次,用户认为太浪费纸张, 要可以在一张纸上多打印几个数据(按他规定的格式,可以放3个) 怎么用QUICKREP控制打印呢? 我用paintto方法,看起来,太麻烦,能否有更好的方法呢??? 救命啊?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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自带的)
大龄码农是如何把自己
逼死
的
引子 小C由于学习成绩不好,高中毕业没有考上大学,找了一份业务员的工作匆匆开始了职业生涯。混了两年,业绩一直上不去,在家人的建议下,去了一家高职学习物流管理。两年后,小C顺利毕业,在当地一家物流公司当叉车司机。几个月后,小C觉得这份工作太苦太累、收入低,平时喜欢玩网游的他听说做游戏很赚钱,所以暗下决心要转行。很快,小C辞职了,并说服家人让他到一家培训机构学习游戏开发。本来计划的学习时间是一年,但小...
SDDC-SDK 库内存泄露导致ESP32收不到任何报文记录以及修复,附带cjson可能导致内存泄露的情况
项目场景: 之前为了方便 SDCC 协议使用,我自己写了一个 SDDC 的 SDK 具体详见:同人
逼死
官方系列!基于sddc 协议的SDK框架 sddc_sdk_lib 解析 和 同人
逼死
官方系列 从 DDC 嗅探器到 sddc_sdk_lib 的数据解析 ,但是当时对 cjson 的使用还不是很熟悉,导致出现了一个内存泄露的
问题
。
问题
描述 在频繁收到消息命令,调用 sddc_on_message_lib 函数后,大概半小时左右 EP32S 将
会
收不到任何报文,通过
打印
发现 select 一直返回 0
关于Logcat在真机调试时没有输出的
问题
关于这个真百度了很久,项目接近deadline早上就出了这个
问题
,写个看起来简单的界面也是有很大几率出现bug的,而这时候没有logcat是要
逼死
人啊。
问题
出现后我不得已用模拟器试了一下,logcat是在跑的,平常很烦这时候感觉很亲切。我就百度为什么logcat为这样,百度上有很多这样的提问,我都一一看过,大半天过去了,我都找到可能是adt和eclipse新旧版本冲突的
问题
,感觉要炸了。版本配
程序员如何把自己
逼死
?
小C由于学习成绩不好,高中毕业没有考上大学,找了一份业务员的工作匆匆开始了职业生涯。混了两年,业绩一直上不去,在家人的建议下,去了一家高职学习物流管理。两年后,小C顺利毕业,在当地一家物流公司当叉车司机。几个月后,小C觉得这份工作太苦太累、收入低,平时喜欢玩网游的他听说做游戏很赚钱,所以暗下决心要转行。很快,小C辞职了,并说服家人让他到一家培训机构学习游戏开发。本来计划的学习时间是一年,但小C的基...
2021爱智先行者—人体存在感传感器
【本文正在参与"2021爱智先行者-征文大赛"活动】https://mp.weixin.qq.com/s/I2s99dZpbP0QpMiKFneYJA 上次说了在 智能灯光开关 的我说了在憋大招,那肯定不
会
只有这点东西,那么今天我们就来继续!之前 智能灯光开关和光照传感器 已经简单的完成了一个小场景的设备搭建,但是这么好玩的点子怎么就只做这么简单的东西呢?那当然不行了啊,得搞事情!搞大事情! 之前的场景仅仅具备检查有没有关灯,并且远程关灯的功能,家里有没有其他人在家,是没办法感知到的,还是不够智能。摄像头
C++ Builder
13,825
社区成员
102,678
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章