如何在程序里控制打印纸张大小(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中如何控制打印方向,纸张大小等相关推荐

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

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

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

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

  3. 弄了一整天,终于把打印自定义纸张大小搞定了(上)--IT man

    Csdn-Blog <script language="javascript" src="http://www.023rcsc.com/count/count2.a ...

  4. 水晶报表中如何创建自定义的纸张大小格式?

    问题 水晶报表中使用一个自定义的纸张类型格式(使用预先定义的纸张格式显示或者打印一个报表)? 解决方法 要创建一个自定义的纸张格式,来完成你工作中所使用的特殊纸张.在你开始工作之前,你必须确认你的打印 ...

  5. 弄了一整天,终于把打印自定义纸张大小搞定了

    长江支流说的办法保留太多了,结果不行,很多类都是他在程序集里自定义的,源码又没公开 不过还是要感谢他的提示 今天和小陈搞了一天,他在国外的论坛上看到了一篇文章得到了启示,最后我们在凌晨3点终于把自定义 ...

  6. odoo10 report自定义paperformat,就是自定义打印的纸张大小格式等

    在report.xml中添加 <record id="paperformat_euro_qingjia" model="report.paperformat&quo ...

  7. C#程序中如何控制播放音量的大小

    1.调用系统Api [DllImport("winmm.dll")]   //引用winmm.dll        public   static   extern   long ...

  8. Autocad经验 CAD2018怎么设置打印的纸张尺寸和方向?

    我们在进行图纸设计的时候,不仅要专业知识够硬,还要学会运用很多的小技巧,比如怎么修改图纸特性.选择打印纸张,调整打印边距离,还有,居中打印 勾选.修改图形方向.使CAD打印界面的设置纸张.图形方向一致 ...

  9. 计算机中怎么设置纸张大小,针式打印机设置,教您针式打印机怎么设置纸张大小...

    针式打印机是针对有复写功能的联单可以进行打印,针式打印机的功能还是很实用的,但是针式打印机的使用方法和设置方法是不一样的.用针式打印机打印票据时,有时候会找不到大小合适的格式,那针式打印机怎么设置纸张 ...

最新文章

  1. FPGA/IC Technology Exchange
  2. Codeforces Round #653 (Div. 3)
  3. (转)如何使用caffe的MATLAB接口
  4. 前端改变窗口大小内容不变形_10个前端灵魂拷问丨吃透这些就能摆脱初级前端工程师...
  5. 关于FD.io VPP的最新消息
  6. d).关于steal lock
  7. mysql清除旧版本_MYSQL使用INNODB时及时清理旧版本数据
  8. 4. Linux 高性能服务器编程 --- TCP/IP 通信
  9. php 入库验证,mayfish 数据入库验证代码
  10. 如何破解终端算力困局?PRCV这篇论文让机器人“算有余力”
  11. 嵌入式系统 - 任务管理
  12. Android学习笔记(二)
  13. aliases节点解析
  14. python正向索引 反向索引_理解正向索引
  15. Xcode Instruments之概述
  16. Linux系统的Web服务器的搭建
  17. 2-3 CAD基础 删除(erase)
  18. OpenCv初学者学习笔记(一):图像视频的加载与显示
  19. 【对接三方平台如何优雅的进行数据校验-validation/valid神器】
  20. Vim显示和隐藏行号的方法

热门文章

  1. 二本考南方科技大学计算机,南科大可破格到二本线录取特别有才考生
  2. ENVI5.3安装教程(含软件,仅用于学习试用)
  3. Windows逆向 微信是如何限制多开的
  4. 一对一聊天系统开发直播源码搭建方便你我他
  5. 关联规则挖掘技术——主流推荐算法评述
  6. 大数据技术之Shell
  7. Maya、3Dmax、Zb!次时代建模制作流程,小白必看!
  8. SQLi-labs(Less-1、Less-2、Less-3、Less-4)
  9. spring 项目下mvnw和mvnw.cmd的作用
  10. 月薪30K的软件测试简历怎么包装?