求定位打印程序源码,单位要一个抵押证打印,谁能给出类似源码?200分 (200分)

  • 主题发起人 主题发起人 niceboy911
  • 开始时间 开始时间
N

niceboy911

Unregistered / Unconfirmed
GUEST, unregistred user!
单位要一个动产抵押证打印程序,怎么才能达到精确打印?我用access数据库作,daoquery
来连接,请给出方法最好有源码
 
天啊,同志们,真的没有人管吗?
 
用print.canvas 自己画啦。
procedure TfrmSale.btnPrnClick(Sender: TObject);
var
y,r : integer;
fpe : Boolean;
//发票额是否已记入明细中
begin

fpe := False;
if not InitPrinter then
begin
Application.MessageBox('未安装打印机或打印机驱动程序丢失,请与系统管理员联系!', '出错', mb_IconError + mb_OK);
Exit;
end;
SetPaperSize(1200,1400);
//打印文本
try
Printer.begin
Doc;
with Printer.Canvas do
begin
DM.ADSlsd.First;
Font.Name := '宋体';
Font.Size := 16;
TextOut(TX(100),TY(1),' . ');
TextOut(TX(350),TY(20),lsdname);
Font.Size := 10;
TextOut(TX(140),TY(130),'票号:' + edtxpbh.Text );
TextOut(TX(450),TY(130),formatdatetime('yyyy/mm/dd hh:mm',Now));
TextOut(TX(780),TY(130),'操作员:' + czy);
TextOut(TX(100),TY(170),'━━━━━━━━━━━━━━━━━━━━━━━━━━');
TextOut(TX(120),TY(220),'商品编号 商品名称 尺码 颜色 数量 金额');
TextOut(TX(100),TY(260),'--------------------------------------------------');
r := 1;
y := 60;
while sgsp.Cells[0,r] <> ''do
begin
TextOut(TX(100),TY(250 + y),sgsp.Cells[0,r]);
TextOut(TX(340),TY(250 + y),sgsp.Cells[1,r]);
TextOut(TX(620),TY(250 + y),sgsp.Cells[3,r]);
TextOut(TX(710),TY(250 + y),sgsp.Cells[2,r]);
TextOut(TX(830),TY(250 + y),sgsp.Cells[10,r]);
TextOut(TX(910),TY(250 + y),sgsp.Cells[12,r]);
inc(r);
inc(y,60);
end;
// TextOut(TX(140),TY(220),'');
// TextOut(TX(140),TY(220),'');
// TextOut(TX(140),TY(220),'');
// TextOut(TX(140),TY(220),'');
// TextOut(TX(140),TY(220),'');
TextOut(TX(100),TY(760),'━━━━━━━━━━━━━━━━━━━━━━━━━━');
TextOut(TX(100),TY(800),'应收:' + FormatCurr('0.00',ysk));
TextOut(TX(350),TY(800),'实收:' + FormatCurr('0.00',edtss.Value));
TextOut(TX(580),TY(800),'现金:' + FormatCurr('0.00',edtxj.Value));
TextOut(TX(820),TY(800),'回找:' + FormatCurr('0.00',edtZl.Value));
TextOut(TX(120),TY(900),DM.ADSlsd.Fieldbyname('Fend1').AsString);
TextOut(TX(120),TY(950),DM.ADSlsd.Fieldbyname('Fend2').AsString);
TextOut(TX(100),TY(1000),'━━━━━━━━━━━━━━━━━━━━━━━━━━');
TextOut(TX(120),TY(1030),'让您满意是我们最大的心愿');
end;
Printer.EndDoc;
DM.ADOConnection1.begin
Trans ;
if edtbh.Text <> '' then
begin
with DM.ADShydo
begin
if Locate('Fbh',edtbh.Text,[]) then
begin
Edit;
FieldValues['Fjf'] := FieldValues['Fjf'] + fz;
FieldValues['Fxfje'] := FieldValues['Fxfje'] + edtss.Value;
FieldValues['Flastxfd'] := DM.ADSlsd.Fieldbyname('Fname').AsString;
FieldValues['Flastxfr'] := date;
FieldValues['Flastxfe'] := edtss.Value;
Post;
end;
end;
end;

r := 1;
try
while sgsp.Cells[0,r] <> ''do
begin
with DM.ADSsaledo
begin
Append;
FieldByName('Frq').AsDateTime := Date;
FieldByName('Fsj').AsDateTime := Time;
FieldByName('Ffph').AsString := edtxpbh.Text;
FieldByName('Fgroup').AsString := cbgz.Text;
FieldByName('Flsj').AsCurrency := strtocurr(sgsp.Cells[13,r]);
if stxm.Caption <> '' then
FieldByName('Fhybh').AsString := edtbh.Text;
FieldByName('Fspbh').AsString := sgsp.Cells[0,r];
FieldByName('Fsl').AsInteger := strtoint(sgsp.Cells[10,r]);
FieldByName('Fdj').AsCurrency := strtocurr(sgsp.Cells[8,r]);
FieldByName('Fkh').AsString := sgsp.Cells[5,r];
if sgsp.Cells[11,r] <> '' then
FieldByName('Fzk').AsInteger := strtoint(sgsp.Cells[11,r]);
FieldByName('Fje').AsCurrency := strtocurr(sgsp.Cells[12,r]);
if Not fpe then
begin
FieldByName('Ffpe').AsCurrency := edtss.Value;
fpe := True;
end
else
begin
FieldByName('Ffpe').AsCurrency := 0;
end;
FieldByName('Fczy').AsString := '';
Post;
end;
inc(r);
end;
DM.ADOConnection1.CommitTrans;
clrall;
except
DM.ADOConnection1.RollbackTrans;
Application.MessageBox('入库错误,请清除后重新打印本销售单。','警告',MB_OK);
raise;
end;
except
Application.MessageBox('打印出错,请清除后重新打印本销售单。','警告',MB_OK);
end;
end;
 
老大,关健是我不知道怎么弄,我用d6,QQ:28279656
 
你可以先定义一个textfile
然后再用printfile的方法弄出来
这应该是最简单的了
 
有没有例子呀?注:就像营业执照那样的动产抵押,谢谢,如果200分不够可以再加。
 
uses prints
Procedure printit;
var
mytextfile: textfile;
begin
//1.设置打印机属性
printer.printindex:=-1;
//默认的打印机
printer.canvas.font.name:='宋体';
printer.canvas.font.size:=12;//中间可以随时调整
//2.assign file
assignprn(mytextfile);
Rewrite(mytextfile);
//3.现在就可以开始了
writeln(mytextfile,'你要打印的字符串');
。。。
。。。
。。。
//4.结束前close
closefile(mytextfile);

end;

中间随时可以用1的部分调整字体,注意用try..finally保护
 
各位大哥,帮帮我,QQ上聊:28279656,谢谢要多少分给多少了……只要给得起
 
看看delphi里面memo qr2,qr3里面的演示,
或者查找一下自定义纸张
 
to niceboy911
大哥, 你不会吧,人家已经把源码写成那样,你还不会弄啊?
要不帮你的详细内容说一下!!!
 
用Delphi4的QReport部件生成报表

---- 用户在使用数据库应用程序时经常要生成报表,利用Delphi 4的QReport 部件,可以帮助我们快速方便地生成报表。这里以一个设备管理报表为例说明如何用QReport部件与Query部件设计从多个数据表中生成报表。

---- 一、 所用数据库

---- 这里用到三个Foxpro数据表,DLBMK(设备大类编码)、SBXHK(设备型号及配置)、BMSBK(设备所在部门),存放在D:/SB目录下。其库结构如下:

---- (一) DLBMK

字段名称 字段类型 解释
1. DLBH N3 设备大类的编号
2. DLMC C20 设备大类的名称
(二)SBXHK
字段名称 字段类型 解释
1. XHBM N3 设备型号的编码
2. DLBH N3 同DLBMK中的DLBH字段
3. SBXH C30 设备型号
4. SBPZ C30 设备配置
5. SBSL N3 设备数量
(三)BMSBK
字段名称 字段类型 解释
1. BMMC C20 部门名称
2. XHBM N3 同SBXHK中的XHBM字段
3. SL N3 数量

---- 利用这三个数据表,要生成一个只有电脑部有而其他部门没有的设备型号的情况。

---- 二、 程序中的部件及属性

---- 程序中有两个窗体:主窗体mainForm与报表窗体repForm。

---- 主窗体mainForm中有两个TButton部件,设置如下:

部件 属性及属性值
PreviewBtn:TButton Caption:预览
PrintBtn: TButton Caption:打印

---- 报表窗体repForm中的部件及属性设置如下:

部件 属性及属性值
Query1: TQuery DatabaseName:d:/sb
Active: True
Qrep1: TQuickrep Dataset:query1
TitleBand1: TQRBand BandType:rbTitle
HeadBand1: TQRBand BandType:rbColumnHeader
DrawLeft : True
DrawRight : True
DrawTop : True
DrawBottom : True
DetailBand1: TQRBand BandType:rbDetail
DrawLeft : True
DrawRight : True
DrawTop : True
DrawBottom : True
ChildBand1: TQRChildBand ParentBand:DetailBand1
DrawLeft : True
DrawRight : True
DrawTop : True
DrawBottom : True
TitleLabel: TQRLabel Caption:设备统计表
DlmcLabel: TQRLabel Caption:类别
SbxhLabel: TQRLabel Caption:型号
SbpzLabel: TQRLabel Caption:配置
SbslLabel: TQRLabel Caption:数量
DlmcDBText: TQRDBText Dataset:Query1
Datafield: dlmc
SbxhDBText: TQRDBText Dataset:Query1
Datafield: sbxh
SbpzDBText: TQRDBText Dataset:Query1
Datafield: sbpz
SbslDBText: TQRDBtext Dataset:Query1
Datafield: sbsl
Shape1~9: TQRShape Shape:qrsVertline
Top:0
Width:1
Query1的SQL属性设置为:
select a.dlbh
a.dlmc
b.sbxh
b.sbpz
b.sbsl
from dlbmk a
sbxhk b
where a.dlbh=b.dlbh and b.xhbm not in
(select xhbm from bmsbk where trim(bmmc)<>’电脑部’)
order by a.dlbh

---- 设置几个TQRband部件的DrawLeft、DrawRight、DrawTop、DrawBottom属性值为True
是为了打印表格边框及横线。利用TQRShape部件,是为了打印出表格竖线。DlmcDBText放置在DetailBand1上,其它几个TQRDBText部件放置在ChildBand1上,Shape1~3放置在HeadBand1上,Shape4~6放置在DetailBand1上
Shape7~9放置在ChildBand1上。

---- 三、 为程序增加代码

---- 1.mainForm窗体中的两个按钮事件

procedure TmainForm.PreviewBtnClick(Sender : TObject)
begin

repForm.Qrep1.Preview;
end;

procedure TmainFormPrintBtnClick(Sender : TObject)
begin

repForm.Qrep1.Print;
end;

---- 2.HeadBand1、DetailBand1及ChildBand1的BeforePrint事件

procedure TrepForm.HeadBand1Before
Print(Sender : TQRCustomBand;
Var PrintBand : Boolean)
begin

Shape1.Height:=HeadBand1.Height;
Shape2.Height:=HeadBand1.Height;
Shape3.Height:=HeadBand1.Height;
end;

procedure TrepForm.DetailBand1Before
Print(Sender : TQRCustomBand;
Var PrintBand : Boolean)
begin

PrintBand:=bh< >Query1[‘dlbh’];
if PrintBand then

begin

bh:=Query1[‘dlbh’];
Shape4.Height:=DetailBand1.Height;
Shape5.Height:=DetailBand1.Height;
Shape6.Height:=DetailBand1.Height;
end
end;

procedure TrepForm.ChildBand1Before
Print(Sender : TQRCustomBand;
Var PrintBand : Boolean)
begin

Shape7.Height:=ChildBand1.Height;
Shape8.Height:=ChildBand1.Height;
Shape9.Height:=ChildBand1.Height;
end;

bh应在变量定义部分定义:
Var bh : shortint=0;

---- 几个TQRShape部件的高度(Height)与所在TQRBand 部件保持一致,使竖线打印得整齐。如果在设计阶段调整了TQRBand部件的高度,也不会出现竖线断线或过长的情况。

---- 在DetailBand1的BeforePrint事件中用PrintBand进行控制,可使每个设备大类名称只需打印一次,而不是每个型号都对应打印一次大类名称。因为dlbh字段的值都大于0,bh初值设为0使它与任一记录的dlbh字段的值都不同,以确保第一个大类名称被打印。这样就生成了一个从多个数据表中提取数据,并带有表格线的数据报表。

---- 注:本例工程文件为sbgl.dpr,原程序文件为main.pas和sbrep.pas,若要测试请将dlbmk.dbf、 sbxhk.dbf、bmsbk.dbf三个文件放在d:/sb目录下。
 
好的,谢谢
 
后退
顶部