好久没有使用该语言了。关于按下按钮就直接打印(如发票)。特殊格式打印!解决方案
好久没有使用该语言了。关于按下按钮就直接打印(如发票)。特殊格式打印!
朋友让做一个打印标签(特殊纸大小,如发票类型),标签大小固定。字体大小以及位置也是设定的好的。
输入不同的信息,按下打印就可以直接输入到打印机(针打)即可
好久没有使用DELPHI了,对于这些打印也不擅长的。
希望大家提供实现方式。对于做过发票打印以及各种格式打印的人员来说不难的
100分赠与了!
谢谢大家
------解决方案--------------------
从2CCC中下的一个套打单元,作者杨振华,删除了一些功能
use后如下调用
_OutTxt(145,52,edtUsetype.Text,4,'宋体');
朋友让做一个打印标签(特殊纸大小,如发票类型),标签大小固定。字体大小以及位置也是设定的好的。
输入不同的信息,按下打印就可以直接输入到打印机(针打)即可
好久没有使用DELPHI了,对于这些打印也不擅长的。
希望大家提供实现方式。对于做过发票打印以及各种格式打印的人员来说不难的
100分赠与了!
谢谢大家
------解决方案--------------------
从2CCC中下的一个套打单元,作者杨振华,删除了一些功能
use后如下调用
_OutTxt(145,52,edtUsetype.Text,4,'宋体');
- Delphi(Pascal) code
unit Print; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,Printers, Grids, DBGrids, DB, ADODB,DateUtils, ExtCtrls; procedure SetPaperHeight(Value:integer); //设置纸张高度-单位:mm procedure SetPaperWidth(Value:integer); //设置纸张宽度:单位--mm function _init(PageSize:TPoint):Boolean; // function _outTxt(x,y:Real;Txt:String;FontSize:Real;FontName:String):Boolean; procedure PrintPage(); procedure PrintPageend(); procedure PrintNewPage(); var PhysicalWidth,PhysicalHeight,PageWidth,PageHeight,PageLeft,PageRight,PageTop,PageBottom:Integer; mm_H,mm_V:real; //毫米 implementation procedure SetPaperHeight(Value:integer); //设置纸张高度-单位:mm var Device : array[0..255] of char; Driver : array[0..255] of char; Port : array[0..255] of char; hDMode : THandle; PDMode : PDEVMODE; begin if Value < 127 then Value := 127; //自定义纸张最小高度127mm if Value > 432 then Value := 432; //自定义纸张最大高度432mm Printer.PrinterIndex := Printer.PrinterIndex; Printer.GetPrinter(Device, Driver, Port, hDMode); if hDMode <> 0 then begin pDMode := GlobalLock(hDMode); if pDMode <> nil then begin pDMode^.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; procedure SetPaperWidth(Value:integer); //设置纸张宽度:单位--mm var Device : array[0..255] of char; Driver : array[0..255] of char; Port : array[0..255] of char; hDMode : THandle; PDMode : PDEVMODE; begin if Value < 76 then Value := 76; //自定义纸张最小宽度76mm if Value > 216 then Value := 216; //自定义纸张最大宽度216mm Printer.PrinterIndex := Printer.PrinterIndex; Printer.GetPrinter(Device, Driver, Port, hDMode); if hDMode <> 0 then begin pDMode := GlobalLock(hDMode); if pDMode <> nil then begin pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE or DM_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; function _init(PageSize:TPoint):Boolean; // begin PhysicalWidth:=PageSize.x; //物理页宽 PhysicalHeight:=PageSize.Y; //物理页高 PageWidth:=printer.PageWidth; //逻辑页宽 PageHeight:=printer.PageHeight; //逻辑页高 PageLeft:=GetDeviceCaps(Printer.Handle,PHYSICALOFFSETX); //左边距 PageTop:=GetDeviceCaps(Printer.Handle,PHYSICALOFFSETY); //上边距 PageRight:=PhysicalWidth-PageLeft-PageWidth; //右边距 PageBottom:=PhysicalHeight-PageTop-PageHeight; //下边距 end; function _outTxt(x,y:Real;Txt:String;FontSize:Real;FontName:String):Boolean; var LogRec: TLOGFONT; OldFont, NewFont: HFONT; i: LongInt; begin with printer do begin GetObject(Canvas.Font.Handle, SizeOf(LogRec), @LogRec); LogRec.lfOutPrecision := OUT_TT_ONLY_PRECIS; LogRec.lfFaceName :='宋体'; LogRec.lfHeight:=round(FontSize*mm_V); LogRec.lfWeight:=0; NewFont := CreateFontIndirect(LogRec); OldFont := SelectObject(Canvas.Handle,NewFont); end; x:=Round(x*mm_H)-PageLeft; y:=Round(y*mm_V)-PageTop; Printer.Canvas.TextOut(round(x),round(y),txt); end; procedure PrintPage(); var PageSize:Tpoint; PointX,PointY:Integer; //英寸 begin Printer.Canvas.Brush.Style := bsclear; 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; Printer.BeginDoc; end; procedure PrintPageend; begin Printer.EndDoc; end; procedure PrintNewPage(); begin printer.NewPage; end; end.