最近在做打印功能时遇到问题了,ReportMachine(以下简称RM)的客户在批量打印时,在ShowPrintDialog为True的情况下,如果第1个取消了,意味着客户是想要取消打印的,但是要逐个取消很麻烦,因此我们就要判断用户点了打印机窗口里的取消“按钮”。

从属性上看,目前没有发现有用的属性,只能在事件上下文章了。原理是定义一个全局变量为False,在RM产生打印事件后变更变量的属性为True,在PrintReport过程执行后判断这个变量,如果变量还是为False说明用户最终没有打印,就可以退出了,否则就继续打印。在XE10的RM有OnBeginPrintPage事件可以判断,但D7没有这个事件,有BeforePrintBand,PrintReportEvent可以试下,我发XE10的代码给大家参考,D7的原理也一样

procedure TPubData1.RMReport1BeginPrintPage(aCanvas: TCanvas; aPrintRect: TRect;
  aScaleX, aScaleY: Double);
begin
  GV_PrintDoc:=True;  //这个变量为True表示用户确定了打印
end;

procedure TForm_ExpressBill.ActionPrintExecute(Sender: TObject);
var
  vTmp:string;
begin
  inherited;
 PubData1.RMReport1.ShowPrintDialog:=True;    //每次打印前都要弹出打印机设置窗口
  try
    with QueryList do
    begin
      First;
      while not Eof do  //开始批量打印
      begin
        PubData1.RMReport1.LoadFromBlobField(TBlobField(QueryFormat.FieldByName('PFormat'))); //加载打印格式
        PubData1.RMReport1.DoublePass:=True;
        if PubData1.RMReport1.PrepareReport then  //生成
        begin

PubData1.RMReport1.PrintReport;  //开始打印,但会先弹出打印机设置窗口

if not GV_PrintDoc then  //这里是重点,这个变量判断如果用户没有点确定,没有打印就在这里退出
            Break;
          PubData1.RMReport1.ShowPrintDialog:=False;  //既然用户选择打印第一张,后面就不用再弹出设置窗口了
        end;
        Next;
      end;
    end;
    MessageDlg('快递单已经全部发送到打印机!',mtInformation,[mbOK],0);
  except
    on E:Exception do
    begin
      MessageDlg('快递单打印失败!原因是:'+#13#10+E.Message,mtWarning,[mbOK],0);
    end;
  end;
  GV_PrintDoc:=False;
end;

Delphi的ReportMachine 如何判断用户在打印对话框点了“确定”还是“取消”相关推荐

  1. java检测用户是否重复登录_Java web工程判断用户是否重复登录

    前几天,网上找了些朋友的资料,做了一个小功能,验证用户是否重复登录. 原理就是:每一个用户,登录前有一个验证,当第一次登录时,会把其session信息,添加到一个特定的静态变量中.当第二次登录时,验证 ...

  2. linux中c语言kbhit函数用法,C语言判断用户是否输入-非阻塞函数kbhit

    一.基础研究 要从地址读取数据,肯定是要定义一个指针变量p,用它来实现变换地址和取值的功能.另外程序是当两个条件中的某一个出现时才停止,所以应该用while~do循环语句循环输出n和d,并用while ...

  3. qt判断用户是否正在使用当前应用程序

    转自:https://blog.csdn.net/qq_37529442/article/details/78136917 如何在qt程序中判断当前应用程序是否被用户使用呢?我们先了解一下QAppli ...

  4. jquery的ajax判断用户是否被占用

    jquery的ajax判断用户是否被占用 四种:     了解:jquery对象.load(url,params,function(数据){});     ★: $.get(url,params,fu ...

  5. java后端判断用户是否关注公众号

    /*** 判断用户是否关注了公众号* @param openid* @return*/ public static boolean judgeIsFollow(String openid){int s ...

  6. 虚拟机Linux中判断用户输入的是 Yes 或 NO

    Linux中判断用户输入的是 Yes 或 NO #!/bin/bash # 判断用户输入的是 Yes 或 NO read -p "Are you sure?[y/n]:" sure ...

  7. h5滚动时侧滑出现_H5触摸事件中如何判断用户滑动方向

    这次给大家带来H5触摸事件中如何判断用户滑动方向,H5触摸事件中判断用户滑动方向的注意事项有哪些,下面就是实战案例,一起来看一下. 接口 TouchEvent TouchEvent 是一类描述手指在触 ...

  8. java判断用户是否在某一个区域登录_Java实现QQ登录和微博第三方登录

    来源:http://www.cnblogs.com/liuxianan转自公众号:Java后端 1. 前言 个人网站最近增加了评论功能,为了方便用户不用注册就可以评论,对接了 QQ 和微博这 2 大常 ...

  9. php判断是否已关注,php判断用户是否关注微信订阅号或公众号

    最近要做一个微信平台的投票活动,需要在关注公众号之后才能参与投票,那么,如何判断用户是否关注了公众号呢?第一想法是,通过获取公众号的关注列表,然后搜索列表中是否有参与者的openid.但是马上发现一个 ...

  10. python验证用户登录的判断_python怎么判断用户是否登录?

    python中判断用户是否登录的方法:def cmdbindex(req): if not request.user.is_authenticated(): return render(request ...

最新文章

  1. 中山学院计算机学院家长座谈会,计算机科学与技术学院举办校友座谈会
  2. .net framework 4中SpinLock和lock的区别
  3. 【转载】关于c++中的explicit
  4. Java Review - 并发编程_独占锁ReentrantLock原理源码剖析
  5. VTK:Filtering之ConnectivityFilterDemo
  6. Kubernetes二进制集群部署+Web管理界面+kubectl 命令管理+YAML文件详解(集合)
  7. c语言删除一行程序代码,删除C语言程序中所有的注释语句的实现代码
  8. swift 闭包的使用
  9. linux 修改php配置,PHP部署时的几个配置修改说明
  10. MVC HtmlHelper listbox用法
  11. 未来三年分布式光伏必然爆发
  12. 2014年5月第二个周末总结--保守自己的心
  13. pe_xscan作了3点更新 1
  14. 自动刷百度下拉词优化工具
  15. phpmyadmin linux 升级,phpMyAdmin 4.9.2发布下载,附主要更新内容介绍
  16. Java Graphics2D的使用
  17. 1月16日服务器例行维护更新公告,1月16日9—11点例行更新维护公告
  18. 用STM32F103C8芯片做流水灯
  19. 2018年南京大学计算机专业录取分数线,南京大学2018年录取分数线
  20. 数字电路——余3循环码

热门文章

  1. Qt之布局Layout的应用
  2. matlab常微分方程2次初值问题,MATLAB求解二阶常微分方程初值问题
  3. 计算机专业页面特效期末考试,《网页设计与制作》期末考试试题及答案.doc
  4. IDEA下载安装,以及汉化
  5. ip切换及时刷新交换机的arp表方法
  6. centos7 pe系统安装_CentOS 系统的安装
  7. Python安装pygame教程
  8. 计算机系徽 节徽设计,数学节节徽设计图
  9. 谷歌翻译API-python接口-Googletrans
  10. 3dmax 导出 fbx文件, 模型 到Unity中 贴图丢失