谁知:发票,票据格式定记录条数(如每页五条)的主从表打印的实现?(150分)

  • 主题发起人 主题发起人 人云
  • 开始时间 开始时间

人云

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在有一个主从表需要打印,主表对应从表中多条记录,在打印时,需要按正规发票的格式,如一个客户,买了十个商品,需打印两张发票,发票的表头(如时间,客户名称都等一样)但发票的细目不一样,
请问怎样自动分页打印?
请各位大虾帮助
liuyay@163.net
 
我现在也有一个这样的问题,我有一个想法,把第一
张发票记录取出生成临时表,打印是取临时表中的数据
打印,第二张的再取出生成临时表,打印。
这只是我的一个想法,你可以试一试,成功后将具体过程
告知
 
请看http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=191249
可能会对你有帮助。
 
给你出个“嫂”主意:

动态把纸张定义“小一点”

再通过设定Top值 bottom值

预览直到只有 X 条记录。定下来。

自动会帮你分页。
 
??我现在有一个主从表需要打印,主表对应从表中多条记录,在打印时,需要按正规发
票的格式,如一个客户,买了十个商品,需打印两张发票,发票的表头(如时间,客户
名称都等一样)但发票的细目不一样,
请问怎样自动分页打印?
能具体一些?
 
1 设好纸张大小。
2 设好pagehead尺寸(放单位名称)。
3 调整detail尺寸来控制每页行数。
4 在pagefoot或底页中放汇总,并调整好尺寸。
 
计算好后,直接在 Printers.Canvas 上画图
 
可以看以下本分类中的“关于纸张大小问题”
我已经做了解释
 
以前我用过LQ300K打印机的票据打印:
试试看
procedure PrintData(hLpt: THandle;
szData: string);
var
PRIn, iNum, endtime: DWORD;
tOut: TCommTimeouts;
lapped: TOverlapped;
begin

FillChar(tOut, SizeOf(tOut), 0);
tOut.WriteTotalTimeoutMultiplier := 15;
tOut.WriteTotalTimeoutConstant := 1000;
SetCommTimeouts(hLpt, tOut);
FillChar(lapped, SizeOf(lapped), 0);
lapped.hEvent := CreateEvent(nil, True, False, nil);

while Truedo

begin

if not WriteFile(hLpt, (PChar(szData))^, Length(szData), iNum, nil) then

begin

iNum := 0;
if GetLastError() = ERROR_IO_PENDING then

begin

endtime := GetTickCount() + 1000;
while not GetOverlappedResult(hLpt, lapped, iNum, False)do

begin

if GetTickCount() > endtime then

begin

Application.MessageBox( '超时错误!', '打印出错!',
mb_Ok or mb_ICONEXCLAMATION);
break;
end
end;

// break;
end
else

begin

PRIn:=Application.MessageBox('请检查打印机连线是否正确, 电源是否打开,'
+Chr(13)+Chr(10)+'打印纸是否准备好! 重试吗?', '打印出错!',
mb_RETRYCANCEL or mb_ICONQUESTION);
if PRIn=IDCancel then

begin

Application.MessageBox('您将丢失此票据打印, 请打印此票据!',
'打印出错!',mb_Ok or mb_ICONINFORMATION);
Break;
end;

//清除打印机内存数据
end;

end
else

begin

ResetEvent(lapped.hEvent);
Break;
end;

end;

ResetEvent(lapped.hEvent);
end;



procedure AllTjPrint(lp1:string);
var
hPrintFile: THandle;
szPrint: string;
begin

hPrintFile := CreateFile(
'LPT1',
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,
0);
if hPrintFile = INVALID_HANDLE_VALUE then

begin

ShowMessage('访问打印设备出错!');
Exit;
end;

szPrint := '';//打印控制码+打印内容+#12
PrintData(hPrintFile, szPrint);
CloseHandle(hPrintFile);
end;



具体打印机的打印控制码不一样!根据控制码调试
 
对不起大家的解答,很久没上网了,最终用了CARB与EAST的方法
 
多人接受答案了。
 

Similar threads

回复
0
查看
978
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部