哪位能给个打印发票的例子程序,能下载的连接也可以。[email protected]
解决方案 »
- 请求高手把我的代码优化下!关于图片拉伸的代码!
- OleContainer1中调用的Word激活后,工具条上的复制、保存、打印、打印预览等按钮怎么设置也可用
- 跪谢高手指教
- 常见问题,程序窗体和控件 如何适应不同 屏幕分辨率?
- VC的函数: SMGPAPI_EXPORTS InitAPI(const char *sINIFile)在Delphi里应该怎么样写?
- 使用tcontrol创建的按钮如何实现onclick事件?等等.
- Form的继承问题
- 大虾请进----------为什么这种字符串处理有问题?如何处理
- 我在Form上自己画了个Button,请问如何给这个Button添加OnClick事件,并响应OnClick事件?
- 在数据库中查找是否有重复的记录?
- 如这样一个查询,怎样在程序中得出所选的一个字段的表名
- 急救:如果取得每个汉字的五笔打法的第一个字母?
控件白提供了吗..........
.............抗议................
2、以前做HIS项目中的部分发票打印代码,用Printer.Canvas.TextOut;procedure TUserDM.PrintInvoice(aDanJuID:string);
var
vYear,vMonth,vDay:Word;
PDevice,PDriver,pPort:Array[0..255] of Char;
hDMode:THandle;
PDMode:PDeviceMode;
vDate,vHeJi,vPrintHeJi:string;
X,Y,vX,vY,xh,vOffsetx,vOffsetY:integer;
i:integer;
IntHeJi:string;
vDocID,vHosTiTle,vSignTiTle:string;
vGeRenZH,vZhangHuYE,vXiangJinZF,vZiFeiFY:String;
begin
//发票汇总信息
QryPrint1.Close;
QryPrint1.ParamByName('DanJuID').AsString:=aDanJuID;
QryPrint1.Open; //发票药品及费用明细
QryPrint3.Close;
QryPrint3.ParamByName('DanJuID').AsString:=aDanJuID;
QryPrint3.Open; //取得医生编码
with SysDM.qryfree do
begin
close;
sql.clear;
sql.add(' select a.YiShengBM ');
sql.add(' from Out_Recipe a,Out_RecipeDetail b ');
sql.add(' where a.JiuZhenID=b.JiuZhenID and
a.ChuFangLH=b.ChuFangLH ');
sql.add(' and b.DanJuID=:DanJuID');
parambyname('DanJuID').asstring:=aDanJuID;
open;
vDocID:=FieldByName('YiShengBM').asstring; Close;
Sql.Clear;
Sql.Add('SELECT XianJinZF, DangNianZF + LiNianZF AS ZhangHuZF,');
Sql.Add(' Temp11+Temp12-abs(DangNianZF + LiNianZF) AS ZhangHuYE,ZiFeiFY');
Sql.Add(' FROM Z_Out_Charge where DanJuID=:DanJuID');
parambyname('DanJuID').asstring:=aDanJuID;
open;
if IsEmpty then Raise Exception.Create('没有相关的结算信息,请通知管理员');
vGeRenZH:=FieldByName('ZhangHuZF').AsString;
vZhangHuYE:=FieldByName('ZhangHuYE').AsString;
vXiangJinZF:=FieldByName('XianJinZF').AsString;
vZiFeiFY:=FieldByName('ZiFeiFY').AsString;
end; if SysDM.GetSysParam(pkSys_BillVersion)=1 then //浙江省
begin
VOffsetx:=SysDM.GetSysParam(pkOut_InvoiceOffset_x); //取发票水平偏移量
VOffsetY:=SysDM.GetSysParam(pkOut_InvoiceOffset_y); //取发票垂直偏移量
vHosTiTle:=SysDM.GetSysParam(pkSys_HospName); //取医院名称 vchangHua
vSignTiTle:=SysDM.GetSysParam(pkOut_InvoiceSignTiTle);//取公章标题 vchangHua
//浙江核算项目
QryPrint4.Close;
QryPrint4.ParamByName('DanJuID').AsString:=aDanJuID;
QryPrint4.Open;
//获得打印机的DeviceMode结构句柄
Printer.GetPrinter(pDevice,pDriver,pPort,hDMode);
//如果句柄为0,表示打印机没有装载
if hDMode=0 then
begin
Printer.PrinterIndex :=Printer.PrinterIndex ;
Printer.GetPrinter(pDevice,pDriver,pPort,hDMode);
end;
if hDMode<>0 then
begin
//根据TDeviceMode的句柄获得指向该结构的指针变量
PDMode:=GlobalLock(hDMode);
if PDMode<>Nil then
with PDMode^ do
begin
DMFields:=DMFields Or DM_PAPERLENGTH;
dmPaperLength:=1520;//设置打印页长 152
dmFields:=dmFields or DM_PAPERWIDTH;
dmPaperWidth:=1920;//设置打印页宽
end;
GlobalUnLock(hDMode);//解锁,释放内存
Printer.PrinterIndex :=Printer.PrinterIndex ;
end;
Printer.Canvas.font.name:='宋体';
Printer.BeginDoc;//开始打印
Printer.Canvas.font.size:=11;
DecodeDate(QryPrint1.FieldByName('DanJuRQ').AsDateTime, vYear, vMonth, vDay);
vDate:=' '+IntToStr(vYear)+' '+IntToStr(vMonth)+' '+IntToStr(vDay);
//打印病人姓名
Printer.Canvas.TextOut(VOffsetx+170,VOffsety+160,QryPrint1.FieldByName('XingMing').AsString); //打印发票号
Printer.Canvas.TextOut(VOffsetx+350,VOffsety+840,'No. '+QryPrint1.FieldByName('DanJuID').AsString);
//打印病人类别
Printer.Canvas.TextOut(VOffsetx+170,VOffsety+115,QryPrint1.FieldByName('LeiBieMC').AsString);
Printer.Canvas.TextOut(VOffsetx+120,VOffsety+460,SysDM.GetSysParam(pkOut_InvoiceEmptyFormat1));
Printer.Canvas.TextOut(VOffsetx+105,VOffsety+560,SysDM.GetSysParam(pkOut_InvoiceEmptyFormat2)); //打印单据日期
Printer.Canvas.Pen.Width:=2;
Printer.Canvas.Ellipse(VOffsetx+500,VOffsety+10,VOffsetx+700,VOffsety+110);
Printer.Canvas.Font.Size:=8; Printer.Canvas.TextOut(VOffsetx+510,VOffsety+40,vHosTiTle);//'临安市昌化人民医院');
Printer.Canvas.TextOut(VOffsetx+510,VOffsety+60,' '+vSignTiTle);//' 门诊收费专用章 ');
Printer.Canvas.Font.Size:=11;
Printer.Canvas.TextOut(VOffsetx+350,VOffsety+160,vDate); vHeJi:=FormatFloat('0.00',QryPrint1.FieldByName('yingShouJE').AsFloat);
ShareFunc.CapitalizeMoney(abs(StrToFloat(vHeJi)),false,vPrintHeJi);
IntHeJi:=IntToStr(trunc(abs(StrToFloat(vHeJi))));
for i:=0 to 3-Length(IntHeJi) do
vPrintHeJi:='零 '+vPrintHeJi;
//打印大写合计金额
if StrToFloat(vHeJi)<0 then Printer.Canvas.TextOut(VOffsetx+255,VOffsety+600,'负'+vPrintHeJi)
else Printer.Canvas.TextOut(VOffsetx+225,VOffsety+600,vPrintHeJi); //4打印备注信息 modified by sunly 2002-11-7
// Printer.Canvas.TextOut(600,680,SysDM.GetSysParam(pkOut_InvoiceMemoInfo));
Printer.Canvas.TextOut(VOffsetx+800,VOffsety+950,SysDM.GetSysParam(pkOut_InvoiceMemoInfo));
//1打印收款人
//Printer.Canvas.TextOut(110,730,QryPrint1.FieldByName('ShouKuanYBM').AsString);
Printer.Canvas.TextOut(VOffsetx+200,VOffsety+840,QryPrint1.FieldByName('ShouKuanYBM').AsString);
//打印医保费用分类
Printer.Canvas.TextOut(VOffsetx+450,VOffsety+660,vGeRenZH);
Printer.Canvas.TextOut(VOffsetx+450,VOffsety+710,vZhangHuYE);
Printer.Canvas.TextOut(VOffsetx+450,VOffsety+760,vXiangJinZF);
Printer.Canvas.TextOut(VOffsetx+450,VOffsety+810,vZiFeiFY); //3打印开单医生编码
Printer.Canvas.font.size:=9;
Printer.Canvas.TextOut(VOffsetx+340,VOffsety+870,'医生编码: '+vDocID);
Printer.Canvas.font.size:=11;
//5打印小写合计金额
Printer.Canvas.TextOut(VOffsetx+800,VOffsety+840,vHeJi); //打印核算项目
with QryPrint4 do
begin
while not Eof do
begin
vX:=FieldByName('ZuoBiaoX').AsInteger;
vY:=FieldByName('ZuoBiaoY').AsInteger;
if FieldByName('JinE').AsFloat=0 then
Printer.Canvas.TextOut(VOffsetx+vX,VOffsety+vY,'')
else
Printer.Canvas.TextOut(VOffsetx+vX,VOffsety+vY,FormatFloat('0.00',FieldByName('JinE').AsFloat));
QryPrint4.Next;
end;
end;
Printer.Canvas.font.size:=9;
//打印药品及费用明细
//Printer.Canvas.TextOut(580,170,'收费项目 数量 单价 金额 收费项目 数量 金额');
Printer.Canvas.TextOut(VOffsetx+1050,VOffsety+75,'单价');
// Printer.Canvas.TextOut(580,190,'--------------------------------------------');
Y := 110;
xh:=1;
while not QryPrint3.Eof do
begin
//打印序号
printer.canvas.textout(VOffsetx+655,VOffsety+Y,InttoStr(xh));
//打印药名
Printer.Canvas.TextOut(VOffsetx+680,VOffsety+Y,QryPrint3.FieldByName('YaoMing').AsString);
//打印规格
Printer.canvas.Textout(VOffsetx+820,VOffsety+Y,QryPrint3.FieldByName('GuiGe').AsString);
//打印单位
Printer.Canvas.TextOut(VOffsetx+870,VOffsety+Y,QryPrint3.FieldByName('danwei').AsString);
Printer.Canvas.TextOut(VOffsetx+1050,VOffsety+Y,QryPrint3.FieldByName('danjia').AsString);
//打印数量
Printer.Canvas.TextOut(VOffsetx+1100,VOffsety+Y,FormatFloat('0',QryPrint3.FieldByName('ShuLiang').AsFloat));//+Copy(QryPrint3.FieldByName('DanWei').AsString,0,2));
//Printer.Canvas.TextOut(850,Y,FormatFloat('0.00',QryPrint3.FieldByName('ShuLiang').AsFloat));
//打印单价
// Printer.Canvas.TextOut(VOffsetx+1050,VOffsety+Y,QryPrint3.FieldByName('danjia').AsString);
//打印金额
Printer.Canvas.TextOut(VOffsetx+1170,VOffsety+Y,FormatFloat('0.00',QryPrint3.FieldByName('JinE').AsFloat));
//打印比例
Printer.Canvas.TextOut(VOffsetx+1250,VOffsety+Y,FormatFloat('0.00',QryPrint3.FieldByName('ZiLiBL').AsFloat));
QryPrint3.Next ;
Y := Y + 25;
xh:= xh + 1;
end; Printer.EndDoc;
end;end;