delphi打印小票源码

合集下载

进销存(delphi)源码分析

进销存(delphi)源码分析

进销存(delphi)源码分析一、数据字段.TXT报价报价内容、报价员、编号、标题、日期仓库结算包干项目、保险、备注、编号、仓库名称、仓租、产地、出仓单号、出仓数量、出仓重量、出库费、船名航次、到港、合同号、货名、计划费、结算单位、进仓单号、进仓数量、进仓重量、进库费、经营单位、日期、生效、是否清空、输单日期、输单员、数量、数量箱型、套包费、提单号、委托单号、委托单位、物流方式、箱型、型号、运费、重量、总单合计仓库名称编号、操作人、创建日期、名称仓库统计包装、包装要求、保险要求、备注、编号、仓库名、产地、车号、出仓单号、出仓数量、出仓重量、代理传真、代理电话、代理人、到达港、到站到港、合同号、货名、结余数量、结余重量、进仓单号、进仓数量、进仓重量、经营单位、联系传真、、联系电话、联系人、破损记录、日期、生效、实收数量、实收重量、是否清空、收货人资料、输单日期、输单员、送达资料、送货单位、提单号、委托单号、委托单位、物流方式、箱型、型号车队名称编号、名称车辆资料车牌号码、电话号码、工作单位、联系地址、身份证号码、手机号码、所属车队、姓名、序号、邮政编码出仓单包干项目、包装、包装要求、保险要求、备注、编号、财务确认、仓库名称、仓租、产地、车号、出仓单号、出仓数量、出仓重量、出库费、船名航次、代理传真、代理电话、代理人、到港、到站到港、合同号、货名、计划费、结算单位、结余数量、结余重量、进仓编号、进仓单号、进仓数量、进仓重量、进库费、经营单位、联系传真、联系电话、联系人、破损记录、日期、生效、实收数量、实收重量、是否清空、收货人资料、输单日期、输单员、数量、数量箱型、送达资料、送货单位、提单号、委托单号、委托单位、物流方式、箱型、型号、运费、重量、总单合计传真编号、传真号码、单据类型、电话号码、公司、内容、收件人到港名称编号、操作人、创建日期、名称费用统计保险费、报关费、报验费、备注、编号、仓租1、仓租2、仓租3、拆箱费、产地、出库费、船名航次、到达日期、到港、短途运输1、短途运2、短途运输3、费用总额、关税增值税、过磅费、海运费、合同号、换单费、货名、计划费、检验费、经营单位、劳务费、日期、码头费、期入库费、商检费、数量箱型、套包费提单号、铁路运费、铁路杂费、委托单号、箱体费、型号、制单人、滞报金、滞箱费、重量公司名称Logo、编号、别名、传真、地址、电话、名称、名称1货运明细备注、编号、财务确认、车号、车主姓名、到达港口、合同号、货名、结算运价、经营单位、日期、数量、数量箱型、送达地点、所属车队、提单号、委托单号、委托单位、物流方式、箱号、型号、运价、重量、总单编号货运作业总表包装、报关日期、备注、编号、财务确认、产地、出口、船名航次、单证齐备日期、到达港口、发运港、海关输单期、合同号、还箱地点、货名、件重、结算总运价、进口、经营单位、内贸日期、、输单日期、输单员、数量、数量箱型、送达地点、提单号、提货时间、委托单号、委托单位、物流方式、箱号、卸船日期、型号、运价、装卡资料、总运价、总重量、租箱期结算分单a1、a10、a11、a12、a13、a14、a15、a16、a17、a18、a19、a2、a20、a21、a3、a4、a5、a6、a7、a8、a9、包干项目、备注、编号、财务确认、船名航次、催收款项、到达日期、到港、费用总额、分单号、合同号、货名、结算单位、结算确定、经营单位、开户银行、款项汇至、日期、数量箱型、委托单号、型号、银行帐号、应收款项、、预付款项、制单人、重量结算总单保险费、报关费、报验费、备注、、编号、仓租1、仓租2、仓租3、拆箱费、产地、出库费、船名航次、到达日期、到港、短途运输1、短途运输2、短途运输3、费用总额、关税增值税、过磅费、海运费、合同号、换单费、货名、计划费、检验费、经营单位、劳务费、码头费、日期、入库费、商检费、数量箱型、套包费、提单号、铁路运费、铁路杂费、委托单号、箱体费、型号、制单人、滞报金、滞箱费、重量进仓单包干项目、包装、包装要求、保险要求、备注、编号、仓库名称、仓租、产地、车号、出仓单号、出仓数量、出仓重量、出库费、船名航、代理传真、代理电话、代理人、到港、到站到港、合同号、货名、结算单、、结余数量结余重量、进仓单号、进仓数量、进仓重量、进库费、经营单位、联系传真、联系电话、联系人、破损记录、日期、生效、实收数量、实收重量、供货人资料、输单日期、输单员、数量、数量箱型、送达资料、送货单位、单号、委托单号、托单位、流方式、箱型、型号运费、重量、总单合计经营单位编号、操作人、创建日期、名称客户明细资料编号、传真号码、电话号码、公司地址、公司名称、联系人临时结算分单c1、c10、c11、c12、c13、c14、c15、c16、c17、c18、c19、c2、c20、c21、c22、c23、c24、、c25、c26、c27、c28、c3、、c4、c5、c6、c7、c8、c9、编号、结算单位、委托单号委托单位编号、操作员、创建日期、单位简称、单位全称、电话、联系地址、联系人物流方式编号、操作人、名称、日期用户登陆登陆日期、登陆时间、退出日期、退出时间、用户编号、用户名称用户权限CX110、CX120、CX210、CX220、CX310、CX320、FW110、FW120、FW210、FW220、Help110、JS110、JS210、JS220、JS230、JS240、JS310、JS320、JS410、JS420、、JS510、WH110、、WH120、WH210、WH310、WH320、WH330、、WH340、WH350、WH360、WH410、WH420、ZY110、ZY120、ZY130、ZY210、ZY220、ZY310、部门、创建日期、创建时间、密码、用户编号、用户名称二、数据库组件.TXTName connconn T ADOConnection ConnectionString'Provider=Microsoft.Jet.OLEDB.4.0;Da ta Source=E:\写书\程序\货物配送物流系统-modify\data\HY.mdb;Persist Security Info=False'Mode cmShareDenyNone Provider 'Microsoft.Jet.OLEDB.4.0' Name companycompany TADOQuery Connection connParameters <>SQL.Strings ('select * from 公司名称') Name dscompanydscompany TDataSourceDataSet companyName UserUser TADOQueryConnection connParameters <>SQL.Strings ('select * from 用户权限') Name dsUserdsUser TDataSourceDataSet UserName UserLoginUserLogin TADOQuery Connection conn Parameters <>SQL.Strings ('select * from 用户登陆') Name dsUserLogindsUserLogin TDataSourceDataSet UserLoginName WLTypeWLType TADOTableConnection connTableName '物流方式'Name dsWLTypedsWLType TDataSourceDataSet WLTypeName WTDWWTDW TADOTableConnection conn T ableName '委托单位' Name dsWTDWdsWTDW TDataSourceDataSet WTDWName JYDWJYDW TADOTableConnection connTableName '经营单位'Name dsJYDWdsJYDW TDataSourceDataSet JYDWName DGMCDGMC TADOTableConnection connTableName '到港名称'Name dsDGMCdsDGMC TDataSourceDataSet DGMCName CKMCCKMC TADOTableConnection connTableName '仓库名称'Name dsCKMCdsCKMC TDataSourceDataSet CKMCName CLZLCLZL TADOQueryConnection connParameters <>SQL.Strings ('select * from 车辆资料') Name dsCLZLdsCLZL TDataSourceDataSet CLZLName CDMCCDMC TADOTable Connection connTableName '车队名称'Name dsCDMCdsCDMC TDataSourceDataSet CDMCName CZCZ TADOQueryConnection connParameters <>SQL.Strings ('select * from 传真')Name dsCZdsCZ TDataSourceDataSet CZName BJDBJD TADOQueryConnection connParameters <>SQL.Strings ('select * from 报价')Name dsBJDdsBJD TDataSourceDataSet BJDName HYZYHYZY TADOQuery Connection connParameters <> SQL.Strings ('select * from 货运作业总表') Name dsHYZYdsHYZY TDataSourceDataSet HYZYName JCDJCD TADOQueryConnection connParameters <>SQL.Strings ('select * from 进仓单') Name dsJCDdsJCD TDataSourceDataSet JCDName CCDCCD TADOQueryConnection connParameters <>SQL.Strings ('select * from 出仓单') Name dsCCDdsCCD TDataSourceDataSet CCDName CKTJCKTJ TADOTableConnection connTableName '仓库统计'Name dsCKTJdsCKTJ TDataSourceDataSet CKTJName JSFDJSFD TADOQueryConnection connParameters <>SQL.Strings ('select * from 结算分单') Name dsJSFDdsJSFD TDataSourceDataSet JSFDJSZD TADOQueryConnection connParameters <>SQL.Strings ('select * from 结算总单')Name dsJSZDdsJSZD TDataSourceDataSet JSZDName TempJSTempJS TADOQueryConnection connParameters <>SQL.Strings ('select * from 临时结算分单')Name dsTempJSdsTempJS TDataSourceDataSet TempJSName FYTJFYTJ TADOQueryConnection connParameters <> SQL.Strings ('select * from 费用统计') Name dsFYTJdsFYTJ TDataSourceDataSet FYTJName CKJSCKJS TADOQueryConnection connParameters <>SQL.Strings ('select * from 仓库结算')Name dsCKJSdsCKJS TDataSourceQryTemp TADODataSetConnection connParameters <>Name dsQryTempdsQryTemp TDataSourceDataSet QryTempName QueryTempQueryTemp TADOQuery Connection conn Parameters <>Name dsQueryTemp dsQueryTemp TDataSource DataSet QueryTempName QueryTemp1QueryTemp1 TADOQuery Connection conn Parameters <>Name dsQueryTemp1dsQueryTemp1 TDataSourceDataSet QueryTemp1Name KHZLKHZL TADOQueryConnection connParameters <>SQL.Strings ('select * from 客户明细资料') Name dsKHZLdsKHZL TDataSourceDataSet KHZLName HYMXHYMX TADOQueryConnection connParameters <>SQL.Strings ('select * from 货运明细') Name dsHYMXdsHYMX T DataSourceDataSet HYMXName ImportTableImportTable TADOQuery Connection connParameters <>Name dsImportTable dsImportTable TDataSource第6章货物配送/物流系统1 报价编号自动编号 4标题文本20报价内容备注16报价员文本10图片文件文本60日期文本502 仓库结算编号自动编号 4日期日期/时间 4结算单位文本20委托单位文本20经营单位文本12到港文本12委托单号文本20提单号文本20合同号文本20数量箱型文本20船名航次文本20进仓单号文本20出仓单号文本20货名文本20型号文本20产地文本20箱型文本20包干项目文本20进仓数量数字9进仓重量数字9出仓数量数字9出仓重量数字 5仓库名称文本20备注备注16生效是/否 1输单员文本10输单日期日期/时间 4 物流方式文本20 是否清空是/否数量数字9重量数字9进库费数字9出库费数字9仓租数字9套包费数字9计划费数字9保险数字9运费数字9总单合计数字93 仓库名称编号自动编号 4名称文本20创建日期日期/时间 4 操作人文本104 仓库统计编号自动编号 4日期日期/时间 4委托单位文本20经营单位文本12送货单位文本12到达港文本12委托单号文本20提单号文本20合同号文本20进仓单号文本20出仓单号文本20货名文本20型号文本20产地文本20箱型文本20包装文本10进仓数量数字 5进仓重量数字 5出仓数量数字 5出仓重量数字 5结余数量数字 5 结余重量数字 5 车号文本20仓库名文本20破损记录文本254 备注文本254 代理人文本20代理电话文本20代理传真文本20联系人文本20联系电话文本20联系传真文本20生效是/否 1输单员文本10输单日期日期/时间 4 实收重量数字9实收数量数字9包装要求文本20保险要求文本20送达资料文本254 收货人资料文本254 到站到港文本20物流方式文本20是否清空是/否5 车队名称编号自动编号 4名称文本206 车辆资料序号自动编号 4姓名文本14车牌号码文本20电话号码文本30手机号码文本25联系地址文本51邮政编码文本 6身份证号码文本18工作单位文本26所属车队文本207 出仓单编号自动编号 4 进仓编号文本50 日期日期/时间 4 结算单位文本20 委托单位文本20 经营单位文本12 送货单位文本12 到港文本12委托单号文本20 提单号文本20合同号文本20数量箱型文本20 船名航次文本20 进仓单号文本20 出仓单号文本20 货名文本20型号文本20产地文本20箱型文本20包装文本10包干项目文本20 进仓数量数字9 进仓重量数字9 出仓数量数字 5 出仓重量数字 5 结余数量数字 5 结余重量数字 5 车号文本20 仓库名称文本20 破损记录备注16 备注备注16代理人文本20代理电话文本20 代理传真文本20 联系人文本20联系电话文本20 联系传真文本20 生效是/否 1输单员文本10输单日期日期/时间 4 实收重量数字9实收数量数字9包装要求文本20保险要求文本20送达资料备注16收货人资料备注16到站到港文本20物流方式文本20是否清空是/否数量数字9重量数字9进库费数字9出库费数字9仓租数字9计划费数字9运费数字9总单合计数字9财务确认是/否8 传真编号自动编号 4收件人文本20公司文本20传真号码文本15电话号码文本15单据类型文本50内容文本509 到港名称编号自动编号 4名称文本14创建日期日期/时间 4 操作人文本10 10 费用统计编号自动编号 4委托单号文本20经营单位文本12货名文本20型号文本20重量数字9合同号文本20提单号文本20产地文本20到港文本20到达日期日期/时间 4 数量箱型文本20 船名航次文本20关税增值税数字9商检费数字9报关费数字9报验费数字9滞报金数字9滞箱费数字9检验费数字9换单费数字9劳务费数字9码头费数字9过磅费数字9拆箱费数字9箱体费数字9入库费数字9出库费数字9仓租1 数字9仓租2 数字9仓租3 数字9铁路运费数字9铁路杂费数字9套包费数字9计划费数字9保险费数字9海运费数字9短途运输1 数字9短途运输2 数字9短途运输3 数字9 费用总额数字9 备注备注16 1 制单人文本10 日期日期/时间 411 公司名称编号自动编号 4 名称文本50名称1 文本14别名文本14电话文本254传真文本20地址文本254 Logo 文本10012 货运明细编号自动编号 4 总单编号文本50 日期日期/时间 4 委托单位文本21 经营单位文本12 委托单号文本21 提单号文本21合同号文本21箱号文本21货名文本21型号文本21数量数字 5重量数字 5数量箱型文本21 到达港口文本21 送达地点文本26 物流方式文本20 车号文本20车主姓名文本12 所属车队文本20 运价数字9结算运价数字9 财务确认是/否 1备注文本4013 货运作业总表编号自动编号 4委托单位文本20经营单位文本12委托单号文本20发运港文本50提单号文本20合同号文本20船名航次文本20日期日期/时间 4货名文本20型号文本51提货时间日期/时间 4数量箱型文本13箱号文本20到达港口文本20送达地点文本20还箱地点文本20租箱期文本20运价文本50产地文本20包装文本20件重文本50数量文本50总重量文本50物流方式文本24单证齐备日期日期/时间 4 报关日期日期/时间 4 海关输单期日期/时间 4卸船日期日期/时间 4备注备注16输单员文本10输单日期日期/时间 4装卡资料备注16进口是/否 1出口是/否 1内贸是/否 1 财务确认是/否 1总运价文本50结算总运价文本5014 结算分单编号自动编号 4委托单号文本20经营单位文本12货名文本20型号文本20重量数字9合同号文本20到港文本20到达日期日期/时间 4 数量箱型文本20 船名航次文本21包干项目文本251a1 数字9a2 数字9a3 数字9a4 数字9a5 数字9a6 数字9a7 数字9a8 数字9a9 数字9a10 数字9a11 数字9a12 数字9a13 数字9a14 数字9a15 数字9a16 数字9a17 数字9a18 数字9a19 数字9a20 数字9a21 数字9应收款项数字9预付款项数字9催收款项数字9备注备注16款项汇至备注16开户银行备注16银行帐号备注16结算单位文本20结算确定数字 5财务确认是/否 1制单人文本10日期日期/时间 4费用总额数字9分单号数字 515 结算总单编号自动编号 4委托单号文本20经营单位文本12货名文本21型号文本20重量数字9合同号文本20提单号文本20产地文本20到港文本20到达日期日期/时间 4 数量箱型文本20 船名航次文本20关税增值税数字9商检费数字9报关费数字9报验费数字9滞报金数字9滞箱费数字9检验费数字9换单费数字9劳务费数字9码头费数字9过磅费数字9 拆箱费数字9箱体费数字9入库费数字9出库费数字9仓租1 数字9仓租2 数字9仓租3 数字9铁路运费数字9 铁路杂费数字9 套包费数字9计划费数字9保险费数字9海运费数字9短途运输1 数字9 短途运输2 数字9 短途运输3 数字9 费用总额数字9 备注备注16制单人文本10日期日期/时间 416 进仓单编号自动编号 4 日期日期/时间 4 结算单位文本20 委托单位文本20 经营单位文本12 送货单位文本12 到港文本12委托单号文本20 提单号文本20合同号文本20数量箱型文本20 船名航次文本20 进仓单号文本20 出仓单号文本20 货名文本20型号文本20产地文本20箱型文本20包装文本10包干项目文本20进仓数量数字 5进仓重量数字 5出仓数量数字 5出仓重量数字 5结余数量数字 5结余重量数字 5车号文本20仓库名称文本20破损记录备注16备注备注16 1代理人文本20代理电话文本20代理传真文本20联系人文本20联系电话文本20联系传真文本20生效是/否 1输单员文本10输单日期日期/时间 4 实收重量数字9实收数量数字9包装要求文本20保险要求文本20送达资料备注16 1 收货人资料备注16 1 到站到港文本20 物流方式文本20数量数字9重量数字9进库费数字9出库费数字9仓租数字9运费数字9总单合计数字917 经营单位编号自动编号 4名称文本14创建日期日期/时间 4 操作人文本10 18 客户明细资料编号自动编号 4公司名称文本50联系人文本20电话号码文本20传真号码文本20公司地址文本5019 临时结算分单编号自动编号 4c1 文本40c2 文本40c3 文本40c4 文本40c5 文本40c6 文本40c7 文本40c8 文本40c9 文本40c10 文本40c11 文本40c12 文本40c13 文本40c14 文本40c15 文本40c16 文本40c17 文本40c18 文本40c19 文本40c20 文本40c21 文本40c22 文本40c23 文本40c24 文本40c25 文本40c26 文本40c27 文本40c28 文本40结算单位文本20委托单号文本2020 委托单位编号自动编号 4单位简称文本14单位全称文本50电话文本50联系人文本50联系地址文本50创建日期日期/时间 4 操作员文本10 物流方式编号自动编号 4名称文本14日期日期/时间 4操作人文本10用户登陆用户编号自动编号 4 用户名称文本12 登陆日期文本50登陆时间文本50退出日期文本50退出时间文本50用户权限用户编号自动编号 4 用户名称文本8 部门文本15密码文本15ZY110 是/否 1ZY120 是/否 1ZY130 是/否 1 ZY210 是/否 1ZY220 是/否 1ZY310 是/否 1CX110 是/否 1CX120 是/否 1CX210 是/否 1CX220 是/否 1CX310 是/否 1CX320 是/否 1JS110 是/否 1JS210 是/否 1JS220 是/否 1JS230 是/否 1JS240 是/否 1JS310 是/否 1JS320 是/否 1JS410 是/否 1JS420 是/否 1JS510 是/否 1WH110 是/否 1WH120 是/否 1WH210 是/否 1WH310 是/否 1WH320 是/否 1WH330 是/否 1WH340 是/否 1WH350 是/否 1WH360 是/否 1WH410 是/否 1WH420 是/否 1FW110 是/否 1FW120 是/否 1FW210 是/否 1FW220 是/否 1 Help110 是/否 1创建日期文本50 创建时间文本8 四、菜单货运作业货运作业总单托运明细记录查询物流统计进仓单出仓单仓库记录作业查询库存记录委托单位经营单位托运记录车辆托运查询托运明细记录查询财务结算货运作业结算总单结算分单费用统计表仓库结算单结算总单结算单位查询结算总目录托运记录查询所属车队车辆查询报价系统维护公司资料设置操作人员权限设置更改密码物流方式设置委托单位设置经营单位设置到港名称设置仓库名称设置车辆资料管理客户明细资料设置传真系统服务备份数据恢复数据导出数据导入数据货运物流管理系统(主菜单结构) ├─货运作业│├─货运作业总单│├─托运明细记录查询│├─物流统计│├─进仓单│├─出仓单│└─仓库记录│├─库存记录│├─委托单位│├─经营单位│├─托运记录│├─车辆托运查询│└─托运明细记录查询├─财务结算│├─货运作业结算总单│├─结算分单│├─费用统计表│├─仓库结算单│├─结算总单│├─结算单位查询│├─结算总目录│├─托运记录查询│├─所属车队车辆查询│└─报价├─系统维护│├─公司资料设置│├─操作人员权限设置│├─更改密码│├─物流方式设置│├─委托单位设置│├─经营单位设置│├─到港名称设置│├─仓库名称设置│├─车辆资料管理│├─客户明细资料设置│└─传真└─系统服务├─恢复数据├─导出数据└─导入数据货运作业总单ZY110托运明细记录查询ZY120 物流统计ZY130进仓单ZY210出仓单ZY220仓库记录ZY310库存记录CX110委托单位CX120经营单位CX210托运记录CX220车辆托运查询CX310托运明细记录查询CX320 货运作业结算总单JS110 结算分单JS210费用统计表JS220仓库结算单JS230结算总单JS240结算单位查询JS310结算总目录JS320托运记录查询JS410所属车队车辆查询JS420 报价JS510公司资料设置WH110操作人员权限设置WH120 更改密码WH210物流方式设置WH310委托单位设置WH320经营单位设置WH330到港名称设置WH340 仓库名称设置WH350车辆资料管理WH360客户明细资料设置WH410传真WH420备份数据FW110恢复数据FW120导出数据FW210导入数据FW220关于……Help110货运作业、作业查询、财务结算、系统维护、系统服务货运作业货运作业总单、托运明细记录查询、物流统计、进仓单、出仓单、仓库记录作业查询库存记录、委托单位、经营单位、托运记录、车辆托运查询、托运明细记录查询财务结算货运作业结算总单、结算分单、费用统计表、仓库结算单、结算总单、结算单位查询、结算总目录、托运记录查询、所属车队车辆查询、报价系统维护公司资料设置、操作人员权限设置、更改密码、物流方式设置、委托单位设置、经营单位设置、到港名称设置、仓库名称设置、车辆资料管理、客户明细资料设置、传真系统服务备份数据、恢复数据、导出数据、导入数据。

Delphi下POS机控制钱箱,客显,打印机,小票打印

Delphi下POS机控制钱箱,客显,打印机,小票打印

Delphi下POS机控制钱箱,客显,打印机,小票打印1、控制POS机的客户显示屏procedure TFrmMain.ShowMoney(Money_Port: String;Money_String:String); //Moneey_Port 顾显接口Com1 or Com2 Money_String 顾显显示的内容varPrnFileName:TextFile;beginAssignfile(PrnFileName,Money_Port);:='宋体';printer.Canvas.Font.Size:=8;printer.Canvas.Font.Charset:=GB2312_CHARSET;Rewrite(PrnFileName);write(PRNFileName,chr(12)); //清除顾显write(PRNFileName,chr(27)+chr(81)+chr(65)+Money_String+chR(13)); //显示信息CloseFile(PRNFileName);end;2、不换页走纸的打印procedure TFrmMain.AddPrintStrings(Strings: TStrings);varPrn: TextFile;i: word;beginAssignfile(Prn,'lpt1');:='宋体';printer.Canvas.Font.Size:=9;printer.Canvas.Font.Charset:=GB2312_CHARSET;tryRewrite(Prn);tryfor i := 0 to Strings.Count - 1 dowriteln(Prn, Strings.Strings[i]);finallyCloseFile(Prn);end;excepton EInOutError doMessageBox(Handle,PChar('文本打印出错!'),'警告',MB_ICONEXCLAMATIONor MB_OK);end;end;3、走纸换页的打印procedure TFrmMain.PrintStrings(Strings: TStrings);varPrn: TextFile;i: word;beginAssignPrn(Prn);tryRewrite(Prn);:='宋体';printer.Canvas.Font.Size:=9;printer.Canvas.Font.Charset:=GB2312_CHARSET;tryfor i := 0 to Strings.Count - 1 dowriteln(Prn, Strings.Strings[i]);finallyCloseFile(Prn);end;excepton EInOutError doMessageBox(Handle,PChar('文本打印出错!'),'警告',MB_ICONEXCLAMATION or MB_OK);end;end;4、打开钱箱procedure TFrmMain.OpenMoneyBox;Var F:TextFile;PDStr:string;begin//弹出钱箱功能PDStr:= Chr(27)+'p'+Chr(0)+Chr(60)+Chr(255);AssignFile(F, 'LPT1');Rewrite(F);Write(F, PDStr);CloseFile(F);end;。

delphi源代码

delphi源代码

ExecuteReader方法提供了只向前的、顺序的快速读取数据库中数据的方法。该方法根据提供的SELECT语句,返回一个可以顺序读取的SqlDataReader对象,编程者可以使用Read方法循环依次读取每个记录中各字段(列)的内容。
3.ExecuteScaler()
该方法用于执行SELECT查询,得到的返回结果为一个值的情况,比如使用count函数求表中记录个数或者使用sum函数求和等。
原文地址:SqlConnection数据库连接的几种方式作者:len2009
连接字符串有几种表示形式,有些是意思是一样的,具体可以查帮助的"SqlConnection"看看。
1.做一个单独的类来放连接字符串
public static String conStr()
{
string conStr="连接字符串";
<connectionStrings>
<add name="conStr" connectionString="连接字符串"/>
</connectionStrings>
连接类里面放如下代码:
public static string conStr()
{
System.Configuration.ConnectionStringSettings setting =
erID = "帐号";
conBuilder.Password = "密码";
string conStr = conBuilder.ToString();
return conStr;

DELPHI编程经典源码总结

DELPHI编程经典源码总结

个人收集资料系列Delphi精典技艺问:如何让del+CTRL+ALT看不见程序运行?答:为了让程序用ALT+DEL+CTRL看不见,在implementation后添加声明:function RegisterServiceProcess(dwProcessID,dwType:Integer):Integer;stdcall;external'KERNEL32.DLL';再在上面的窗口Create事件加上一句:RegisterServiceProcess(GetCurrentProcessID,1);//隐藏也可以使用下面的函数:function My_SelfHide:Boolean;typeTRegisterServiceProcess=function(dwProcessID,dwType:DWord):DWORD;stdcall;varhNdl:THandle;RegisterServiceProcess:TRegisterServiceProcess;beginResult:=False;if Win32Platform<>VER_PLATFORM_WIN32_NT then//不是NTbeginhNdl:=LoadLibrary('KERNEL32.DLL');RegisterServiceProcess:=GetProcAddress(hNdl,'RegisterServiceProcess');RegisterServiceProcess(GetCurrentProcessID,1);FreeLibrary(hNdl);Result:=True;endelseExit;end;问:自我拷贝法怎么样使用?答:这种方法的原理是程序运行时先查看自己是不是在特定目录下,如果是就继续运行,如果不是就把自己拷贝到特定目录下,然后运行新程序,再退出旧程序.打开Delphi,新建一个工程,在窗口的Create事件中写代码:procedure TForm1.FormCreate(Sender:TObject);var myname:string;beginmyname:=ExtractFilename(Application.Exename);//获得文件名if application.Exename<>GetWindir+myname then//如果文件不是在Windows\System\那么..begincopyfile(pchar(application.Exename),pchar(GetWindir+myname),False);{将自己拷贝到Windows\System\下}Winexec(pchar(GetWindir+myname),sw_hide);//运行Windows\System\下的新文件application.Terminate;//退出end;end;其中GetWinDir是自定义函数,起功能是找出Windows\System\的路径.function GetWinDir:String;varBuf:array[0..MAX_PATH]of char;beginGetSystemDirectory(Buf,MAX_PATH);Result:=Buf;if Result[Length(Result)]<>'\'then Result:=Result+'\';end;问:如何避免同时运行多个相同程序?答:为了避免同时运行多个程序的副本(节约系统资源也),程序一般会弄成每次只能运行一个.这又有几种方法.一种方法是程序运行时先查找有没有相同的运行了,如果有,就立刻退出程序.修改dpr项目文件,修改begin和end之间的代码如下:beginApplication.Initialize;if FindWindow('TForm1','Form1')=0then begin//当没有找到Form1时执行下面代码Application.ShowMainForm:=False;//不显示主窗口Application.CreateForm(TForm1,Form1);Application.Run;end;end.另一种方法是启动时会先通过窗口名来确定是否已经在运行,如果是则关闭原先的再启动。

用Delphi_FastReport解决ERP系统开发中单据打印的实例探索

用Delphi_FastReport解决ERP系统开发中单据打印的实例探索

图1:单据管理示意图摘要:本文用Delphi+Fastreport 为例介绍了用数据库后台存储单据文件前台进行调用很好的解决了后台存储与用户本地自定义设置之间的矛 盾,还介绍了通过编写通用式主从结构的单据打印程序快速解决各种单据的打印输出以及用cross-tab 技术解决交叉表样式报表的输出。

这些方法的 实现很好的解决了ER P 系统中单据输出和报表打印问题,同时较方便的实现了用户对单据和报表样式自定义的需求。

关键词:ER P 系统;后台;套打;交叉表;单据 中图分类号:T P302.1 文献标识码:A 文章编号:1003-9767(2011)05-0054-03下载:将存于后台表中的单据字段通过流文件方式保存至本地相 1. 单据文件的存储与用户自定义FastReport 中报表默认是以文件形式存储于各客户端本地系统 中,以其调用速度快而获得程序的首选,但这种方式更新时必须在各 客户端站点之间进行手动同步操作,给后期的报表维护带来了极大的不便,因此往往适用于站点数量较少的系统应用场合,在ER P 系统应用中,一般采用将FastReport 报表文件以image 字段的形式存储于后台数据库中,再通过相应的下载和上传操作实现对数据库内image 字段(即相应报表文件)的修改。

应的报表文件。

try SetStream := TFileStream.Create(ReportFileName, fmC reate orfmShareExclusive);// 保存相应字段内容到文件流中 TBlobField(ADOQueryBill.FieldByName('xt_bill_attach')). SaveToStream(SetStream);MessageDlg('报表文件下载成功!', mtInformation, [mbOk], 0);exceptMessageDlg('报表文件下载过程中遇到了错误!', mtError,[mbOk], 0);end; 上传至服务器:将重新设置的本地报表文件上传至后台表xt_bill 相应记录。

Delphi程序实现打印功能

Delphi程序实现打印功能
assignprn(files); //通过assignprn函数将要打印的文件交给打印机
rewrite(files); //让打印机打开文件准备打印
files:system.text; //告诉系统说files是文本文件,是要打印机打印的文件
begin
if printdialog1.execute then //当printdialog1执行后
begin
begin
writeln(files,memo1.lines[line]); //打印每行内容 writeln(文件名,文本的某个行);
end;
Delphi程序实现打印功能
预备内容:
一、新建一个窗体(Form1)
二、在窗体上加memo1、Button1、Printdialog1这三个组件(都自带了的)。
思路过程:
一、在程序代码页,最上边部分,有个粗体字Users,你在它下面加一个printers(这个不是粗体的)。
二、双击button按钮,咱要在这里写代码了。
五、通过rewrite函数,打开要输出的文件(files)。 //这个就理解为:打印机很无奈的拿了文件过去,翻看着。
六、设置文件(files)在打印机上的字体。
七、通过writeln函数,打印文(files)件的每行内容
八、打印完了后,关闭要打印的文件。
简化过程(其Βιβλιοθήκη 就是思路): 一、在Users下写个printers
system.close(files); //打印完了就关闭要打印的文件
end;
end;
end;
二、定义两个变量。
三、通过assignprn函数把文件传到打印机上。

delphi报表打印讲稿

delphi报表打印讲稿

报表打印在数据库开发应用时,一般都离不开报表打印功能,Delphi 6.0提供了一种完善易用的打印组件---QReport,利用它可是非常方便的实现报表打印功能,这里不准备详细讨论实现报表的一切方法,具体问题已经有不少资料,不过一般的资料都是介绍的应用英美模式构造报表,这种报表格式和国内一般的习惯并不相同,下面,我们将通过一个实际的例子,说明如何构造一个符合我们习惯的报表。

有了这样的基础,实现其它样式的报表并不是太困难的事情。

一、QReport面板组件介绍QReport面板提供的组件可以分类以下几种类型:1,模板类:这类组件是作为快速构建报表的模板或容器,它实际上是QReport面板左边的前六个组件,包括QuickRep、QrsubDetall、QRStringBand、QRBand、QRChildBand、QRGroup。

其中,QuickRep是必用组件,它必须加入到一个空白的表单中,作为建立报表的基础,其它所有的组件都要放在这个组件之上。

QRBand也是一个必用组件,它用于显示具体内容,内容的类型由BandType 属性来决定。

其它几个组件的使用频率低一些,主要是构建特殊类型的报表。

2,显示一般内容的组件:这类组件主要是为了显示非数据库类型的内容,或者提供一些特定的功能,包括:QRLabel、QRExpr、QRSysData、QRMemo、QRExprMemo、QRRichText、QRShape、QRChart 等。

其中,QRExpr既可以显示一般数据,也可以显示数据库数据。

3,显示数据库内容的组件:该组件主要用于显示数据库中的数据,这些组件包括QRDBText、QRExpro、QRDBRichText、QRDBImage等。

4,其它组件:这些组件包括QRCompositeReport用于合并多个报表, QRPreview用于预览报表,至于 QRTextFilter、QRCSVFFilter、QRHTMLFilter等组件则用于输出报表内容,这些组件用的较少。

delphi打印实现(节选)

delphi打印实现(节选)

delphi打印实现(节选)................{$R *.dfm}procedure SetPaperHeight(V alue:integer); //设置纸张高度-单位:mmvarDevice : array[0..255] of char;Driver : array[0..255] of char;Port : array[0..255] of char;hDMode : THandle;PDMode : PDEVMODE;beginif Value < 127 then Value := 127; //自定义纸张最小高度127mmif Value > 432 then Value := 432; //自定义纸张最大高度432mmPrinter.PrinterIndex := Printer.PrinterIndex;Printer.GetPrinter(Device, Driver, Port, hDMode);if hDMode <> 0 thenbeginpDMode := GlobalLock(hDMode);if pDMode <> nil thenbeginpDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE orDM_PAPERLENGTH;pDMode^.dmPaperSize := DMPAPER_USER;pDMode^.dmPaperLength := Value * 10;pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL;pDMode^.dmDefaultSource := DMBIN_MANUAL;GlobalUnlock(hDMode);end;end;Printer.PrinterIndex := Printer.PrinterIndex;end;procedure SetPaperWidth(V alue:integer); //设置纸张宽度:单位--mmvarDevice : array[0..255] of char;Driver : array[0..255] of char;Port : array[0..255] of char;hDMode : THandle;PDMode : PDEVMODE;beginif Value < 76 then Value := 76; //自定义纸张最小宽度76mmif Value > 216 then Value := 216; //自定义纸张最大宽度216mmPrinter.PrinterIndex := Printer.PrinterIndex;Printer.GetPrinter(Device, Driver, Port, hDMode);if hDMode <> 0 thenbeginpDMode := GlobalLock(hDMode);if pDMode <> nil thenbeginpDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE orDM_PAPERWIDTH;pDMode^.dmPaperSize := DMPAPER_USER;pDMode^.dmPaperWidth := Value * 10; //将毫米单位转换为0.1mm单位pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL;pDMode^.dmDefaultSource := DMBIN_MANUAL;GlobalUnlock(hDMode);end;end;Printer.PrinterIndex := Printer.PrinterIndex;end;//======================================绘基础几何图型函数======================//--------------------圆--------------------------------------------------------procedure _Circle(x,y,r,N:real);varIntLineWidth:Integer;beginx:=x*mm_H;y:=y*mm_V;r:=r*mm_H;IntLineWidth:=Round(N*mm_H);MyCanvas.Pen.Width:=IntLineWidth;MyCanvas.Ellipse(round(x-r),round(y-r),round(x+r),round(y+r));end;function _outTxt(x,y:Real;Txt:String;FontSize:Real;FontName:String):Boolean;varLogRec: TLOGFONT;OldFont, NewFont: HFONT;i: LongInt;begin// case PrnMode of{ 1: beginwith printer dobeginGetObject(Canvas.Font.Handle, SizeOf(LogRec), @LogRec);LogRec.lfOutPrecision := OUT_TT_ONL Y_PRECIS;LogRec.lfFaceName :='宋体';LogRec.lfHeight:=round(FontSize*mm_V);LogRec.lfWeight:=0;NewFont := CreateFontIndirect(LogRec);OldFont := SelectObject(Canvas.Handle,NewFont);end;x:=Round((x+PageLeft)*mm_H);y:=Round((y+PageTop)*mm_V);MyCanvas.TextOut(round(x),round(y),txt);end; }// 2:beginx:=Round((x+PageLeft)*mm_H);y:=Round((y+PageTop)*mm_V);MyCanvas.Font.Height:=round(FontSize*mm_V);:=FontName;MyCanvas.TextOut(round(x),round(y),txt);end;// end;end;//移动坐标点procedure _Move(x,y:Real);beginPoint1.X:=point1.X+round(x*mm_H);point1.Y:=Point1.Y+round(y*mm_V);MyCanvas.MoveTo(point1.X,point1.Y);end;procedure _line(x1,y1,x2,y2,LineWidth:Real);varpoint2:TPoint;IntLineWidth:Integer;begin// if x1+y1<>0 then_move(x1,y1); //移动到起点坐标point2.X:=Point1.X+round(x2*mm_H);point2.Y:=Point1.Y+round(y2*mm_V);IntLineWidth:=Round(LineWidth*mm_H); //输出线宽MyCanvas.Pen.Width:=IntLineWidth; //设置线宽MyCanvas.LineTo(point2.X,point2.Y);point1:=point2;end;procedure TForm1.FormCreate(Sender: TObject);varTmpQry : TADOQuery;beginMyCanvas:=Image1.Canvas;ADOCOnnection1.Connected := false;ADOConnection1.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+GetCurrentDir()+'\data.mdb;Persist Security Info=False';ADOCOn:=ADOConnection1;ADOTable1.Active := true;TmpQry := OpenDB('select * from report order by ID',ADOCon);ComboBox1.Items.Clear;SetLength(TabIds,TmpQry.RecordCount);while not TmpQry.Eof dobeginComboBox1.Items.Add(VarToStr(TmpQry.FieldValues['Title']));TabIds[TmpQry.RecNo-1]:=TmpQry.FieldValues['id'];TmpQry.Next;end;if ComboBox1.Items.Count>0 then ComboBox1.ItemIndex :=0;TmpQry.Freeend;procedure recover;beginpoint1.X := round(PageLeft*mm_H);point1.Y := round(PageTop*mm_V);end;procedure _Grid(Id:Integer;Sql:String;Grid,Data:Boolean);varTmpQry,TmpQry1 : TADOQuery;x1,y1,x2,y2,r,w,FontSize:real;txt : String;classId : Integer;FontName : TFontName ; //显示使用的字体TmpColor:TColor;beginif Sql<>'' then TmpQry1 := OpenDB(sql,ADOCon);Sql := 'select * from TableLib where hidden=0 and tabId='+IntToStr(Id);if (not Grid) and (data) then sql:=sql+' and classId=4';if (grid) and (not data) then sql:=sql+' and classId<>4';TmpQry := OpenDB(Sql,ADOCon);while not TmpQry.Eof dobeginx1 := TmpQry.FieldValues['x1'];y1 := TmpQry.FieldValues['y1'];w := TmpQry.FieldValues['width'];if not TmpQry.FieldValues['relatively'] then recover; //若非相对坐村,恢复原点ClassId := TmpQry.FieldValues['ClassId'];case ClassId of1 : begin //标签txt := VarToStr(TmpQry.FieldValues['text']);if not TmpQry.FieldByName('FontSize').IsNull thenFontSize := TmpQry.FieldValues['FontSize']else FontSize := 2.5;if not TmpQry.FieldByName('FontName').IsNull thenFontName:=TmpQry.FieldValues['FontName']else FontName:='宋体';MyCanvas.Font.Style:=[];if TmpQry.FieldValues['FontBold'] thenMyCanvas.Font.Style:=[fsBold];_outTxt(x1,y1,txt,FontSize,FontName);end;2 : begin //直线x2 := TmpQry.FieldValues['x2'];y2 := TmpQry.FieldValues['y2'];_line(x1,y1,x2,y2,w);end;3 : begin //圆r := TmpQry.FieldValues['r'];_circle(x1,y1,r,w);end;4 : begin //字段if not TmpQry.FieldByName('text').IsNull thenbeginif not TmpQry1.FieldByName(TmpQry.FieldValues['text']).IsNull thenbegintxt := VarToStr(TmpQry1.FieldValues[TmpQry.FieldValues['text']]);if not TmpQry.FieldByName('FontSize').IsNull thenFontSize := TmpQry.FieldValues['FontSize']else FontSize := 2.5;if not TmpQry.FieldByName('FontName').IsNull thenFontName:=TmpQry.FieldValues['FontName']else FontName:='宋体';MyCanvas.Font.Style:=[];if TmpQry.FieldValues['FontBold'] thenMyCanvas.Font.Style:=[fsBold];TmpColor := MyCanvas.Font.Color;MyCanvas.Font.Color := clBlack;_outTxt(x1,y1,txt,FontSize,FontName);MyCanvas.Font.Color := TmpColor;end;end;end;end;TmpQry.Next;end;TmpQry.Free;end;procedure _init(PageSize:TPoint);begincase PrnMode of1: beginPhysicalWidth:=PageSize.x; //物理页宽PhysicalHeight:=PageSize.Y; //物理页高PageWidth:=printer.PageWidth; //逻辑页宽PageHeight:=printer.PageHeight; //逻辑页高end;2: beginPageWidth:=PhysicalHeight; //逻辑页宽PageHeight:=PhysicalHeight; //逻辑页高end;end;end;//---------------------------------------------------------------------------------procedure TForm1.OutPut(PrnMode:Integer;Grid,data:Boolean);varPaperW,PaperH:integer;PrintDialog1:TPrintDialog;LogRec: TLOGFONT;OldFont, NewFont: HFONT;PageSize:Tpoint;pw,ph,PointX,PointY:Integer; //纸张设置TabId : Integer;TmpQry :TADOQuery;Sql:String;beginTabId := ComboBox1.ItemIndex+1; //报表号Sql := 'select * from report where id='+IntToStr(TabId);TmpQry := OpenDb(Sql,ADOCon);if not TmpQry.Eof thenbeginPaperW := TmpQry.FieldValues['PaperWidth'];paperH := TmpQry.FieldValues['PaperHeight'];Sql := VarToStr(TmpQry.FieldValues['Sql']);if not ADOTable1.Eof thensql := _replace(sql,'@id@',VarToStr(ADOTable1.FieldValues['id']))else sql :='';PrintDialog1:=TPrintDialog.Create(nil);PageLeft := TmpQry.FieldValues['Left'];PageTop := TmpQry.FieldValues['Top'];case PrnMode of1: beginif PrintDialog1.Execute thenbeginSetPaperHeight(paperH);SetPaperWidth(PaperW);Escape(Printer.Handle, GETPHYSPAGESIZE, 0,nil,@PageSize); //取得物理页尺寸PointX:=GetDeviceCaps(Printer.Handle,LOGPIXELSX);PointY:=GetDeviceCaps(Printer.Handle,LOGPIXELSY);mm_H:=PointX/25.4;mm_V:=PointY/25.4;_Init(PageSize);Printer.Title:=VarToStr(TmpQry.FieldValues['title']);MyCanvas := Printer.Canvas;Printer.BeginDoc;MyCanvas.Brush.Color:=clBlue;MyCanvas.Brush.Style := bsclear;MyCanvas.Pen.Color:=clGreen;MyCanvas.Font.Color := clGreen;Zoom:=TmpQry.FieldValues['Zoom'];mm_H := mm_H*zoom;mm_V := mm_V*zoom;_Grid(TabId,Sql,Grid,data);Printer.EndDoc;end;end;2: beginmm_H:=2;mm_V:=2;Zoom := ComboBox2.ItemIndex+2 ; //全局缩放比例mm_H := mm_H*zoom;mm_V := mm_V*zoom;Image1.Picture.Graphic.Width := 1;Image1.Picture.Graphic.Height := 1;Image1.Width := Image1.Picture.Graphic.Width;Image1.Height := Image1.Picture.Graphic.Height;Image1.Picture.Graphic.Width := round(PaperW*mm_H);Image1.Picture.Graphic.Height := round(PaperH*mm_V);Image1.Width := Image1.Picture.Graphic.Width;Image1.Height := Image1.Picture.Graphic.Height;Image1.Top:=10-ScrollBox1.VertScrollBar.Position;if Image1.Width+10>ScrollBox1.Width thenImage1.Left:=0-ScrollBox1.HorzScrollBar.Position+2elseImage1.Left:=((ScrollBox1.Width-Image1.Width) div 2)-8-ScrollBox1.HorzScrollBar.Position;Image1.Canvas.Brush.Style := bsSolid;// ---------清除预览画布上的残像Image1.Canvas.Brush.Color:=clWhite;Image1.Canvas.Pen.Color:=clWhite;Image1.Canvas.Rectangle(0,0,PageWidth,PageHeight);Shape1.Top:=Image1.Top+10;Shape1.Left:=Image1.Left+10;Shape1.Width:=Image1.Width;Shape1.Height:=Image1.Height;Shape1.Visible:=True;Image1.Visible := true;MyCanvas.Brush.Color :=clWhite;MyCanvas.FillRect(MyCanvas.ClipRect); //清除残留影像MyCanvas:=Image1.Canvas;MyCanvas.Brush.Color:=clBlue;MyCanvas.Brush.Style := bsclear;MyCanvas.Pen.Color:=clGreen;MyCanvas.Font.Color := clGreen;Zoom:=TmpQry.FieldValues['Zoom'];mm_H := mm_H*zoom;mm_V := mm_V*zoom;_Grid(TabId,Sql,Grid,data);end;end;end;TmpQry.free;end;//-----------------------------------------------------------------------------------procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);beginStart_Point.X:=x;Start_Point.Y:=y;end;procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);beginScrollBox1.HorzScrollBar.Position:= ScrollBox1.HorzScrollBar.Position+(Start_Point.X-x); ScrollBox1.VertScrollBar.Position:= ScrollBox1.VertScrollBar.Position+(Start_Point.Y-y); end;procedure TForm1.ToolButton1Click(Sender: TObject);beginOutPut(1,checkBox1.Checked,checkBox2.Checked);end;procedure TForm1.ToolButton2Click(Sender: TObject);beginOutPut(2,checkBox1.Checked,checkBox2.Checked);end;procedure TForm1.DBEdit10Change(Sender: TObject);beginDBText1.caption := NumToChnStr(StrToFloat(DBEdit10.Text),false);end;procedure TForm1.DBEdit12Change(Sender: TObject);beginDBText2.caption := NumToChnStr(StrToFloat(DBEdit12.Text),false);end;procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet);beginADOTable1.FieldValues['cn_price'] := NumToChnStr(StrToFloat(DBEdit12.Text),false); ADOTable1.FieldValues['cn_rate'] := NumToChnStr(StrToFloat(DBEdit12.Text),false); end;procedure TForm1.PageControl1Change(Sender: TObject);beginif ADOTable1.State = dsEdit then ADOTable1.Post;ToolButton2.Click;end;procedure TForm1.Shape1ContextPopup(Sender: TObject; MousePos: TPoint;var Handled: Boolean);beginend;procedure TForm1.TabSheet2ContextPopup(Sender: TObject; MousePos: TPoint;var Handled: Boolean);beginend;end.procedure PrintDbGrid(DataSet:TDataSet;DbGrid:TDbGrid;Title:String);varPointX,PointY:integer;ScreenX:integer;i,lx,ly:integer;px1,py1,px2,py2:integer;RowPerPage,RowPrinted:integer;ScaleX:Real;THeight:integer;TitleWidth:integer;SumWidth:integer;PageCount:integer;SpaceX,SpaceY:integer;RowCount:integer;beginPointX:=Round(GetDeviceCaps(printer.Handle,LOGPIXELSX)/2.54);PointY:=Round(GetDeviceCaps(printer.Handle,LOGPIXELSY)/2.54);ScreenX:=Round(Screen.PixelsPerInch/2.54);ScaleX:=PointX/ScreenX;RowPrinted:=0;SumWidth:=0;printer.BeginDoc;With Printer.Canvas dobeginDataSet.DisableControls;DataSet.First;THeight:=Round(TextHeight('我')*2.5);//设定每行高度为字符高的1.5倍SpaceY:= Round(TextHeight('我')/4);SpaceX:=Round(TextWidth('我')/4);RowPerpage:=Round((printer.PageHeight-5*PointY)/THeight); //上下边缘各2厘米ly:=2*PointY;PageCount:=0;while not DataSet.Eof dobeginif (RowPrinted=RowPerPage) or (RowPrinted=0) thenbeginif RowPrinted<>0 thenPrinter.NewPage;RowPrinted:=0;PageCount:=PageCount+1;:='宋体';Font.size:=16;Font.Style:=Font.Style+[fsBold];lx:=Round((Printer.PageWidth-TextWidth(Title))/2);ly:=2*PointY;TextOut(lx,ly,Title);Font.Size:=11;Font.Style:=Font.Style-[fsBold];lx:=Printer.PageWidth-5*PointX;ly:=Round(2*PointY+0.2*PointY);if RowPerPage*PageCount>DataSet.RecordCount thenRowCount:=DataSet.RecordCountelseRowCount:=RowPerPage*PageCount;TextOut(lx,ly,'第'+IntToStr(RowPerPage*(PageCount-1)+1)+'-'+IntToStr(RowCount)+'条,共'+IntToStr (DataSet.RecordCount)+'条');lx:=2*PointX;ly:=ly+THeight*2;py1:=ly-SpaceY;if RowCount=DataSet.RecordCount thenpy2:=py1+THeight*(RowCount-RowPerPage*(PageCount。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//取得字符的高度function CharHeight:Word;varMetrics:TTextMetric;beginGetTextMetrics(Printer.Canvas.Handle, Metrics); Result := Metrics.tmHeight;end;//file://取得字符的平均宽度function AvgCharWidth:Word;varMetrics:TTextMetric;beginGetTextMetrics(Printer.Canvas.Handle, Metrics); Result := Metrics.tmAveCharWidth;end;//file://取得纸张的物理尺寸---单位:点function GetPhicalPaper:TPoint;varPageSize :TPoint;begin//file://PageSize.X;纸张物理宽度-单位:点//file://PageSize.Y;纸张物理高度-单位:点Escape(Printer.Handle, GETPHYSPAGESIZE, 0,nil,@PageSize);Result := PageSize;end;//file://2.取得纸张的逻辑宽度--可打印区域//file://取得纸张的逻辑尺寸function PaperLogicSize:TPoint;varAPoint:TPoint;beginAPoint.X := Printer.PageWidth;APoint.Y := Printer.PageHeight;Result := APoint;end;//file://纸张水平对垂直方向的纵横比例function HVLogincRatio: Extended;varAP:TPoint;beginAp := PaperLogicSize;Result := Ap.y/Ap.X;end;//file://取得纸张的横向偏移量-单位:点function GetOffSetX: Integer;beginResult := GetDeviceCaps(Printer.Handle, PhysicalOffSetX);end;//file://取得纸张的纵向偏移量-单位:点function GetOffSetY: Integer;beginResult := GetDeviceCaps(Printer.Handle, PhysicalOffSetY);end;//file://毫米单位转换为英寸单位function MmToInch(Length:Extended):Extended;beginResult := Length/25.4;end;//file://英寸单位转换为毫米单位function InchToMm(Length:Extended):Extended;beginResult := Length*25.4;end;//file://取得水平方向每英寸打印机的点数function HPointsPerInch:Integer;beginResult := GetDeviceCaps(Printer.Handle, LOGPIXELSX);end;//file://取得纵向方向每英寸打印机的光栅数function VPointsPerInch:Integer;beginResult := GetDeviceCaps(Printer.Handle, LOGPIXELSY) end;//file://横向点单位转换为毫米单位function XPointToMm(Pos:Integer):Extended;beginResult := Pos*25.4/HPointsPerInch;end;////file://纵向点单位转换为毫米单位function YPointToMm(Pos: Integer):Extended;beginResult := Pos*25.4/VPointsPerInch; end;//file://设置纸张高度-单位:mmprocedure SetPaperHeight(Value: integer);varDevice :array[0..255] of char;Driver :array[0..255] of char;Port :array[0..255] of char; hDMode :THandle;PDMode :PDEVMODE;begin//file://自定义纸张最小高度127mmif Value < 127 then Value := 127;//file://自定义纸张最大高度432mmif Value > 432 then Value := 432;Printer.PrinterIndex := Printer.PrinterIndex;Printer.GetPrinter(Device, Driver, Port, hDMode); if hDMode <> 0 thenbeginpDMode := GlobalLock(hDMode);if pDMode <> nil thenbeginpDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE or DM_PAPERLENGTH;pDMode^.dmPaperSize := DMPAPER_USER;pDMode^.dmPaperLength := Value * 10;pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL; pDMode^.dmDefaultSource := DMBIN_MANUAL;GlobalUnlock(hDMode);end;end;Printer.PrinterIndex := Printer.PrinterIndex;end;//file://设置纸张宽度:单位--mmProcedure SetPaperWidth(Value: integer);varDevice :array[0..255] of char;Driver :array[0..255] of char;Port :array[0..255] of char; hDMode :THandle;PDMode :PDEVMODE;begin//file://自定义纸张最小宽度76mm if Value < 76 then Value := 76;//file://自定义纸张最大宽度216mm if Value > 216 then Value := 216;Printer.PrinterIndex := Printer.PrinterIndex;Printer.GetPrinter(Device, Driver, Port, hDMode); if hDMode <> 0 thenbeginpDMode := GlobalLock(hDMode);if pDMode <> nil thenbeginpDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE orDM_PAPERWIDTH;pDMode^.dmPaperSize := DMPAPER_USER;//file://将毫米单位转换为0.1mm单位pDMode^.dmPaperWidth := Value * 10;pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL; pDMode^.dmDefaultSource := DMBIN_MANUAL;GlobalUnlock(hDMode);end;end;Printer.PrinterIndex := Printer.PrinterIndex;end;//file://在(Xmm, Ymm)处按指定配置文件信息和字体输出字符串procedure TFrmADDHYXF.PrintText(X,Y:Extended;Txt:string;ConfigFileName:string;FontSize:Integer=12);varOrX, OrY:Extended;Px, Py:Integer;AP:TPoint;Fn:TStrings;FileName:string;OffSetX, OffSetY:Integer;begin//file://打开配置文件,读出横向和纵向偏移量tryFn := TStringList.Create;FileName := ExtractFilePath(Application.ExeName) + ConfigFileName; if FileExists(FileName) thenbeginFn.LoadFromFile(FileName);//file://横向偏移量OffSetX := StrToInt(Fn.Values['X']);//file://纵向偏移量OffSetY := StrToInt(Fn.Values['Y']);endelsebegin//file://如果没有配置文件,则生成Fn.Values['X'] := '0';Fn.Values['Y'] := '0';Fn.SaveToFile(FileName); end;finallyFn.Free;end;X := X + OffSetX;Y := Y + OffSetY;// file://因为是绝对坐标,因此,不用换算成相对于Y轴坐标Py := Py - GetOffSetY;Px := Px + 2 * AvgCharWidth; := 'xx';Printer.Canvas.Font.Size := 8;//file://Printer.Canvas.Font.Color := clGreen;Printer.Canvas.TextOut(Px, Py, Txt);end;例子:writeln(F,'');PrintText(-3, kuang, trim(‘’), 'config.txt');PrintText(13, kuang, trim(‘’), 'config.txt');PrintText(20, kuang, trim(‘’), 'config.txt');PrintText(30, kuang, trim(‘’), 'config.txt');PrintText(37, kuang, trim(‘’), 'config.txt');。

相关文档
最新文档