为何只打出27行?(100分)

  • 主题发起人 主题发起人 seagal
  • 开始时间 开始时间
S

seagal

Unregistered / Unconfirmed
GUEST, unregistred user!
我用stringGrid做了一个报表,用TPrinter打印(A4纸,纵向进纸),为何只能打印27行,
这时纸打不满,打28行(或以上行)则打印异常,27行以后就打两行,下面还没格,这是为什么?
 
代码贴出来,大家看看是怎么回事
 
to woolf
代码:
......
     For TmpI:=Num to sGrid.RowCount-1do
 
     begin
       Inc(Num1);
       Y1:=150*Num1+300;//TmpI
       Y2:=150*(Num1+1)+300;//TmpI
       TR:=Rect(X1, Y1, X2-10, Y2);
       Printer.Canvas.Rectangle(X1, Y1, X2-10, Y2);
       Printer.Canvas.TextRect(TR, X1+20, Y1+20, sGrid.Cells[F, TmpI]);
       If F = sGrid.ColCount-1 then
       begin
         Printer.Canvas.MoveTo(X2-10, Y1);
         Printer.Canvas.LineTo(X2-10, Y2);
       end;
       if TmpI mod 27=0 then
 ****把27改为大于27的数就不行,小于等于27的数则正常********
       begin
         bNewPage:=True;
         Printer.Canvas.MoveTo(X1, Y2);
 
         Printer.Canvas.LineTo(X2-10, Y2);
         Break;
       end;
       j:=TmpI;
     end;
.................
 
打印机的边距有没有设
 
if TmpI mod 27=0 then

这个时候 X1,X2,y1....是不是要重新设置一下。
 
在27行后,有些值可能出界了,你要跟踪一下才知道!
 
上面3位已经提醒你了,意思都是一个:根据纸张的高度判断什么时候换页,换页的时候重新设置Y1,Y2
 
应该是打印机不支持,换另一台试试
 
to wwolf:
我没做过做打印程序,只是应急做一个
你说的打印机的边距我不会设,是怎么回事?我用A4纸打印,至少能打30多行,横向进纸,
但就是打倒27行异常
 
后退
顶部