如何在程序里控制打印纸张大小(A3,A4)和打印方向?不想打开设置窗口

---------------------------------------------------------------

Uses     Printer;

.........

procedure     TForm1.Button1Click(Sender:     TObject);

var

ADevice,     ADriver,     APort:     array[0..255]     of     Char;

DeviceHandle:     THandle;

DevMode:     PDeviceMode;

begin

//初始化打印机

Printer.GetPrinter(ADevice,     ADriver,     APort,     DeviceHandle);

if     DeviceHandle     =     0     then

begin

Printer.PrinterIndex     :=     Printer.PrinterIndex;

Printer.GetPrinter(ADevice,     ADriver,     APort,     DeviceHandle);

end;

if     DeviceHandle     =     0     then

Raise     Exception.Create('不能初始化打印机!')

else

DevMode     :=     GlobalLock(DeviceHandle);

if     DeviceHandle     <>     0     then

begin

with     DevMode^     do

begin

dmFields     :=     dmFields     or     DM_ORIENTATION;

//在下面这里设置打印方向

dmOrientation     :=     DMORIENT_LANDSCAPE;     //DMORIENT_PORTRAIT

dmPaperSize     :=     DMPAPER_A3;

Printer.SetPrinter(ADevice,     ADriver,     APort,     DeviceHandle);

GlobalUnLock(DeviceHandle);

end;

end;

PrinterSetupDialog1.Execute;     //验证一下设置是否成功了

end;

*************

printer.pagewidth是只读属性

---------------------------------------------------------------

参考这个

var

hDMode:     THandle;

PDMode:     PDEVMODE;

Printer.GetPrinter(Device,     Driver,     Port,     hDMode);

if     hDMode     <>     0     then

begin

pDMode     :=     GlobalLock(hDMode);

if     pDMode     <>     nil     then

begin

pDMode^.dmFields     :=     DM_PAPERSIZE     or     DM_PAPERWIDTH     or     DM_PAPERLENGTH;

pDMode^.dmPaperSize     :=     DMPAPER_USER;

pDMode^.dmPaperWidth     :=     APaperWidth;

pDMode^.dmPaperLength     :=     APaperHeight;

pDMode^.dmFields:=pDMode^.dmFields     or     DM_ORIENTATION;

pDMode^.DMORIENTATION:=     Direct;

end;

end;

//打印机设置的纸张大小

---------------------------------------------------------------

在执行打印前调用以下函数:

procedure     SetPaperSize(X,     Y:     Integer);

//     单位是0.1mm

//     A4时     Printer.Pagewidth:=1440;         A5时     Printer.Pagewidth:=1049;

//     B5时     Printer.Pagewidth:=1290;         16K时     Printer.Pagewidth:=1035;

//     lq1600宽行打印机这个值宽度最大为42cm左右,     长度大约2m。

//改变devicemode结构

var

Device:     array[0..255]     of     char;

Driver:     array[0..255]     of     char;

Port:     array[0..255]     of     char;

hDMode:     THandle;

PDMode:     PDEVMODE;

begin

Printer.PrinterIndex     :=     Printer.PrinterIndex;

Printer.GetPrinter(Device,     Driver,     Port,     hDMode);

if     hDMode     <>     0     then

begin

pDMode     :=     GlobalLock(hDMode);

if     pDMode     <>     nil     then

begin

if     (x     =     0)     or     (y     =     0)     then

begin

{Set     to     legal}

pDMode^.dmFields     :=     pDMode^.dmFields     or     dm_PaperSize;

{pDMode^.dmPaperSize     :=     DMPAPER_LEGAL;     changed     by     wulianmin}

pDMode^.dmPaperSize     :=     DMPAPER_FANFOLD_US;

end

else

begin

{Set     to     custom     size}

pDMode^.dmFields     :=     pDMode^.dmFields     or

DM_PAPERSIZE     or

DM_PAPERWIDTH     or

DM_PAPERLENGTH;

pDMode^.dmPaperSize     :=     DMPAPER_USER;

pDMode^.dmPaperWidth     :=     x     {SomeValueInTenthsOfAMillimeter};

pDMode^.dmPaperLength     :=     y     {SomeValueInTenthsOfAMillimeter};

end;

{设定纸张来源}

pDMode^.dmFields     :=     pDMode^.dmFields     or     DMBIN_MANUAL;

pDMode^.dmDefaultSource     :=     DMBIN_MANUAL;

GlobalUnlock(hDMode);

end;

end;

Printer.PrinterIndex     :=     Printer.PrinterIndex;

//以下开始打印

Printer.BeginDoc;

Printer.Canvas.TextOut(100,100,     'Test     1');

Printer.EndDoc;

end;

delphi 获取打印机默认纸张_Delphi中如何控制打印方向,纸张大小等 | 学步园相关推荐

  1. delphi 获取打印机默认纸张_Delphi 动态调整打印机纸张大小

    修 改与当前打印机相关的DevMode 结构中的成员.DocumentProperties 函数申明如下: Delphi代码 LONG DocumentProperties ( HWND hWnd, ...

  2. delphi 获取打印机默认纸张_在DELPHI中实现打印的预览

    在DELPHI中实现打印的预览 PCPOP.COM 2005年10月18日 类型:转载 作者:<电脑报> 编辑:王琛 ----------------------------------- ...

  3. Delphi中如何控制打印方向,纸张大小等

    如何在程序里控制打印纸张大小(A3,A4)和打印方向?不想打开设置窗口        --------------------------------------------------------- ...

  4. delphi 获取打印机默认纸张_如何设置一台打印机打印不同尺寸的纸张

    Delphi(Pascal) codevar PrtInfo2: PPrinterInfo2;//具体的内容 查查MSDN DeviceMode: PDeviceMode;//具体的内容 查查MSDN ...

  5. js 中控制打印方向横向还是纵向。

    打印方向控制 @page { size: landscape; }//横向 @page { size: portrait; }//纵向 但是写在Css 中无法切换还是要写在js中. //切换打印方向 ...

  6. Delphi 获取打印机,打印队列中任务数量

    项目中使用标签打印机打印标签,由于客户是"自由爱好者",处理两次"无法打印"的技术咨询后,写了个函数: 虽然CSDN语法中都没有了Delphi,但是WEBURL ...

  7. jquery 获取系统默认年份_js中获得当前时间是年份和月份

    js中获得当前时间是年份和月份,形如:201208 //获取完整的日期 var date=new Date; var year=date.getFullYear(); var month=date.g ...

  8. abap视图字段限制_MM03物料主数据视图中某些视图或者某些字段的控制方法 | 学步园...

    公司里面业务方面需要控制MM03会计视图中的 标准价不显示,由于博主本身是学ABAP的,所以对于这种问题首先想到的是做个增强, 根据用户与数据库中自定义可以访问"标准价"的用户组进 ...

  9. unityplayerpre存档_Unity3D 中PlayerPrefs保存或读取数组的方法 | 学步园

    Unity本身有PlayerPrefs来做一些数据的保存和读取,也可以通过循环来做批量的读取或者保存,下面这个脚本可以方便的调用用来做上面批量的工作,比如读取一组文本数组数据和保存一组文本数组数据. ...

最新文章

  1. vim 自定义命令 自定义快捷键(转)
  2. 安徽关节式焊接机器人_上下料机器人的重要性体现在哪里?它有哪些优势?
  3. mysql tnsnames.ora_tnsnames.ora配置注意(连接新的数据库)
  4. 用openbabel将pdbqt文件转成pdb
  5. DeepStream输出插件Gst-nvmsgconv和Gst-nvmsgbroker
  6. 【java笔记】IO流(1):IO流概述,字节输出/输入流读写文件
  7. (0)图像处理界面——C#调用C++图像处理的DLL
  8. 易语言 修改易语自身言皮肤方法
  9. 使用.net做微信公众号后台
  10. PS2游戏Android模拟器,安卓PS2游戏大全|安卓PS2模拟器游戏_小鸡模拟器
  11. 智能人物画像综合分析系统——Day8
  12. 360校招真题——最强大脑
  13. Maven的几个常用Plugin
  14. 职场历练【管理学之三】
  15. Teredo tunneling pseudo-interface前面有个黄色感叹号
  16. 论文阅读《A Multi-State Constraint Kalman Filter for Vision-aided Inertial Navigation》1
  17. 这样定义通用人工智能
  18. C语言实现求n的阶乘(n!),阶乘的和。
  19. 网络爬虫python实例视频-Python网络爬虫实例教程 视频讲解版
  20. 团队软件库_if 我是前端团队 Leader,怎么制定前端协作规范?

热门文章

  1. Fermat theorem (stationary points)
  2. SAS(二)SAS基本数据类型及SAS基本模块的介绍
  3. 一个对付小孩便秘的指南,让麻麻不再当催屎员
  4. 四维空间的二维线框投影可视化(附matlab代码)
  5. 【微信小程序模板】可以用微信小程序模板制作小程序吗?
  6. R语言 cor与lm
  7. SSL,HTTPS,数字证书 是什么?
  8. 2020款苹果iPad Pro将搭载3D感应后置摄像头
  9. 分布式对象存储服务器minio
  10. 打怪小游戏(快做完了)