打印方式(纵向、横向)(100分)

  • 主题发起人 主题发起人 benxiaohai1978
  • 开始时间 开始时间
你没能完全读懂程序
程序是按照你说的完成的
举个数据的例子:
数据如下
1,2,3,4,5,6,7....28
每页有10行,一行有两列
第一页打印效果如下:
1 11
2 12
3 13
4 14
5 15
6 16
7 17
8 18
9 19
10 20
第二页打印效果如下:
21 25
22 26
23 27
24 28
空白
 
那没办法,
你这样打印不行吗?
1 2
3 4
5 6
7 8
9 10
11 12
13 14
15 16
17 18
19 20
第二页
21 22
23 24
25 26
27 28
这样不行吗?
 
To DeiDei: 我要的就是你这种效果,而不是Cjzhou的效果。但是你的程序不能实现。
你们看看D:/Program Files/Borland/Delphi7/Demos/Quickrpt/Qr3下的例子中
ExprMemo example 就明白了。
我是把QuickRep1的Page的Columns的值设置成3,然后加一个TQRBand(BandType是rbDetail),
在TQRBand中添加TQRExprMemo,把QuickRep1和AdoTable1关联。
总之,你们呢看看D:/Program Files/Borland/Delphi7/Demos/Quickrpt/Qr3下的例子中
ExprMemo example 就明白了。
 
不要设者Page的Columns的值并且不要与AdoTable1关联,如果设置了你将永远得不到预想结果
使用下面方法代替
比如要设计两列
第一列 第二列
QRLbl_TypeCode1 QRLbl_TypeName1 QRLbl_TypeCode2 QRLbl_TypeName2

设置全局变量或设置在窗体的public中
printcontinue:boolean;
CurrentIndex:integer;
procedure TFrm_FloorInfo.QR_FloorInfoBeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
printcontinue:=true;
CurrentIndex:=1
end;

procedure TFrm_FloorInfo.QR_FloorInfoNeedData(Sender: TObject;
var MoreData: Boolean);
var
rowsperpage:integer;
begin
MoreData:=true;
rowsperpage:=38;
if printcontinue=false then
MoreData:=false;
if MoreData then
if not Qry_FloorInfo.Eof then
begin
QRLbl_TypeCode1.Caption:=Qry_FloorInfo.FieldByName('FloorCode').AsString;
QRLbl_TypeName1.Caption:=Qry_FloorInfo.FieldByName('FloorName').AsString;
Qry_FloorInfo.Next;
if not Qry_FloorInfo.Eof then
begin
QRLbl_TypeCode2.Caption:=Qry_FloorInfo.FieldByName('FloorCode').AsString;
QRLbl_TypeName2.Caption:=Qry_FloorInfo.FieldByName('FloorName').AsString;
end
else
begin
QRLbl_TypeCode2.Caption:='';
QRLbl_TypeName2.Caption:='';
end;
Qry_FloorInfo.Next;
Inc(CurrentIndex);
MoreData :=true;
end
else
begin
MoreData :=false;
end;


end;

 
//我的思路是你在DetailBand1BeforePrint的时候记录会自动下移一条,
//我的QuickRep1的Page的Columns的值设置成1
//用两个QRLabel来显示两条记录前一条记录自动下移不需要控件,然后在打印完前一条后我把记录
//下移一条这样就在右显示也就是用QRLABEL2显示。分析以下这段代码看看能否明白
//你在用两个QRLABEL就可以了,先将QRLABEL赋空。再将表往下移一笔记录就可以了。
procedure TForm1.DetailBand1BeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
begin
QRLabel2.caption := '';
if not ADOTable1.Eof then
begin
QRLabel1.Caption := ADOTable1.Fields[0].AsString ;
ADOTable1.next;
end;
if not ADOTable1.Eof then
begin
QRLabel2.Caption := ADOTable1.Fields[0].AsString ;
end
 
你们俩的意思我明白,但是没有控制QuickRep1的语句,QuickRep1会自动向下移动打印吗?
我试试。
 
quickreport的打印方式为
repeat
调用OnNeedData
until MoreData返回false
 
谢谢。
我要打印的是一个价签,每行应该是6个,每列应该是11个,示意图如下:
__________________________________________________________________________
| 品名 | 品名 | 品名
| 号码 | 号码 | 号码
| 价格 | 价格 | 价格
|_________________|_______________|_________________________________________
| 品名 |
| 号码 |
| 价格 |
|_________________|__________________________________________________________
| 品名 |
| 号码 |
| 价格 |
|_________________|___________________________________________________________
|
|
|
每个价签周围都带边框,并且大小是固定的,一点都不能差,
每个价签对应的品名、号码、价格都是从数据库中取出来的。
 
DeiDei的方法我接收了。谢谢各位。
 
后退
顶部