⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmprinters.pas

📁 安徽省货物销售统一发票管理系统 操作说明 1、开票 F7或双击可 查询
💻 PAS
字号:
unit MMprinters;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls,printers,Forms, Dialogs;

type
  TGridRect = record
    left,top,width,height:integer;
    text:string;
    fx:string;
  end;
  procedure SetPaperSize(x,y:integer);
  procedure MMTextOut(myRect:TGridRect);
  procedure MMMoveto(Aleft,ATop:integer);
  procedure MMLineto(ALeft,ATop:integer);
  function getpix(x:integer):integer;
  function getpiy(y:integer):integer;
  function getSPagewidth:integer;
  function getSpageHeight:integer;
  function getscreenMMtopix(mm:integer):integer;

implementation

procedure SetPaperSize(X, Y: Integer);
var
  Device, Driver, Port: PChar;
  HDMode: THandle;
  PDMode: PDevMode;
begin
  Device := StrAlloc(cchDeviceName);
  Driver := StrAlloc(MAX_PATH);
  Port   := StrAlloc(32);
  try
    Printer.PrinterIndex := Printer.PrinterIndex;
    Printer.GetPrinter(Device, Driver, Port, HDMode);
    if HDMode <> 0 then begin
      PDMode := GlobalLock(HDMode);
      if PDMode <> nil then begin
        with PDMode^ do begin
          dmPaperSize := 256;
          dmPaperWidth := X;
          dmPaperLength := Y;
          dmFields := dmFields or DM_PAPERSIZE or DM_PAPERWIDTH or DM_PAPERLENGTH;
          GlobalUnlock(HDMode);
        end;
        Printer.PrinterIndex := Printer.PrinterIndex;
      end;
    end;
  finally
    StrDispose(Device);
    StrDispose(Driver);
    StrDispose(Port);
  end;
end;


function getpix(x:integer):integer;
begin
  Result:=round(x*getdevicecaps(printer.Handle,LOGPIXELSX) DIV 254);
end;

function getpiy(y:integer):integer;
begin
  Result:=round(y*getdevicecaps(printer.Handle,LOGPIXELSY) DIV 254);
end;

function getspagewidth:integer;
begin
  result:=round(printer.PageWidth/getdevicecaps(printer.Handle,LOGPIXELSX)*SCREEN.PixelsPerInch);
end;

function getspageheight:integer;
begin
  result:=round(printer.PageWidth/getdevicecaps(printer.Handle,LOGPIXELSY)*SCREEN.PixelsPerInch);
end;

function getscreenMMtopix(mm:integer):integer;
begin
  result:=round(mm/254*screen.PixelsPerInch);
end;

procedure MMMoveto(Aleft,ATop:integer);
begin
  printer.Canvas.MoveTo(getpix(Aleft),getpiy(ATop));
end;

procedure MMLineto(Aleft,Atop:integer);
begin
  printer.Canvas.LineTo(getpix(Aleft),getpiy(Atop));
end;

procedure MMTextOut(myRect:TGridRect);
var len,high,x,y:integer;
    Fontsize:integer;
begin
  //转换成像素单位;
  myrect.left:=getpix(myrect.left);
  myrect.top:=getpiy(myrect.top);
  myrect.width:=getpix(myrect.width);
  myrect.height:=getpiy(myrect.height);
  //设置打印字体
  fontsize:=9;
  printer.Canvas.Font.Name:='宋体';
  printer.Canvas.Font.Size:=Fontsize;
  //计算文字打印位置
  len:=printer.Canvas.TextWidth(myrect.text);
  high:=printer.Canvas.TextHeight(myrect.text);
  while (len>myrect.width) and (fontsize>=5) do
  begin
    fontsize:=fontsize-1;
    printer.Canvas.Font.Size:=Fontsize;
    len:=printer.Canvas.TextWidth(myrect.text);
    high:=printer.Canvas.TextHeight(myrect.text);
  end;
  x:=myrect.left;
  y:=myrect.top+((myrect.height-high) div 2);
  if pos('<',myrect.fx)>0 then x:=myrect.left;
  if pos('|',myRect.fx)>0 then x:=myRect.left+((myRect.width-len) div 2);
  if pos('>',myRect.fx)>0 then x:=myrect.left+(myrect.width-len);
  printer.Canvas.TextOut(x,y,myrect.text);
end;



end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -