说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

怎么样才能调用PrintDialog组件打印,如要打印Memo组件中的文字。

编辑:说三道四文库 发布时间:2017-07-28 07:12
HTML文档下载 WORD文档下载 PDF文档下载
这里是打印代码,不错的哦:
void __fastcall TMainForm::Print1Click(TObject *Sender)
{
  Screen->Cursor = crHourGlass;
  Application->ProcessMessages();

  TList* pageList = new TList;
  int width = GetDeviceCaps(Printer()->Handle, PHYSICALWIDTH);
  int height = GetDeviceCaps(Printer()->Handle, PHYSICALHEIGHT);
  int logPixelsX = GetDeviceCaps(Printer()->Handle, LOGPIXELSX);
  int logPixelsY = GetDeviceCaps(Printer()->Handle, LOGPIXELSY);
  int xOffset = GetDeviceCaps(Printer()->Handle, PHYSICALOFFSETX);
  int yOffset = GetDeviceCaps(Printer()->Handle, PHYSICALOFFSETY);

  SendMessage(RichEdit->Handle, EM_FORMATRANGE, 0, 0);
  FORMATRANGE fr;
  memset(&fr, 0, sizeof(fr));
  fr.hdc = Printer()->Handle;
  fr.hdcTarget = Printer()->Handle;
  SetMapMode(fr.hdc, MM_TEXT);

  TRect pageRect;
  pageRect.left = 0;
  pageRect.top = 0;
  pageRect.right = MulDiv(width - xOffset, 1440, logPixelsX);
  pageRect.bottom = MulDiv(height - yOffset, 1440, logPixelsY);

  TRect rendRect;
  rendRect.left = pageRect.left + (Margins->Left * 1440) - xOffset;
  rendRect.top = pageRect.top + (Margins->Top * 1440) - yOffset;
  rendRect.right = pageRect.right - (Margins->Right * 1440);
  rendRect.bottom = pageRect.bottom - (Margins->Bottom * 1440);

  fr.chrg.cpMin = 0;
  fr.chrg.cpMax = -1;
  int textLen = RichEdit->Text.Length();
  do {
    fr.rc = rendRect;
    fr.rcPage = pageRect;
    TPrinterPage* page = new TPrinterPage;
    page->StartPos = fr.chrg.cpMin;
    fr.chrg.cpMin = SendMessage(
      RichEdit->Handle, EM_FORMATRANGE, false, (int)&fr);
    page->EndPos = fr.chrg.cpMin - 1;
    pageList->Add(page);
  } while (fr.chrg.cpMin != -1 && fr.chrg.cpMin < textLen);

  SendMessage(RichEdit->Handle, EM_FORMATRANGE, 0, 0);

  PrintDialog->MaxPage = pageList->Count;
  if (!PrintDialog->Execute()) {
    Screen->Cursor = crDefault;
    return;
  }
  Printer()->Title = "Rich Edit Printing Example " +
    ExtractFileName(OpenDialog->FileName);
  int startPage, endPage;
  if (PrintDialog->PrintRange == prPageNums) {
    startPage = PrintDialog->FromPage - 1;
    endPage = PrintDialog->ToPage - 1;
  }
  else {
    startPage = 0;
    endPage = pageList->Count - 1;
  }

  Screen->Cursor = crHourGlass;
  Application->ProcessMessages();

  textLen = RichEdit->Text.Length();
  Printer()->BeginDoc();
  SetMapMode(Printer()->Handle, MM_TEXT);
  fr.hdc = Printer()->Handle;
  fr.hdcTarget = Printer()->Handle;
  int pageCount = startPage;
  do {
    fr.rc = rendRect;
    fr.rcPage = pageRect;
    TPrinterPage* pp = (TPrinterPage*)pageList->Items[pageCount];
    fr.chrg.cpMin = pp->StartPos;
    fr.chrg.cpMax = pp->EndPos;
    Printer()->NewPage();
    SendMessage(RichEdit->Handle, EM_FORMATRANGE, true, (int)&fr);
  } while (++pageCount < endPage + 1);

  SendMessage(RichEdit->Handle, EM_FORMATRANGE, 0, 0);
  Printer()->EndDoc();

  for (int i=0;i<pageList->Count;i++)
    delete (TPrinterPage*)pageList->Items[i];
  delete pageList;
  Screen->Cursor = crDefault;
}
//---------------------------------------------------------------------------
VB如何在程序中启动 NT 的【拨号连接】对话框? VB如何在网页上使用 VB5 制作的 ActiveX 控件? VB如何中断【拨号网络连接】? 设计Browser及FTP程序 -VB资料 设计Chat程序 -VB资料 设计E-mail程序 -VB资料 使用VB获得一页的HTML代码 使用VB收发电子邮件 VB使用超链接和发送Email VB使用浏览器的文件复制对话框 输入/输出篇 -VB资料 通过WnetEnumResource函数获得网络资源 -VB资料 通往 Internet 的捷径-VB资料 显示计算机的名称 -VB资料 VB用 MAPI 控件实现发送邮件 VB用 WinSock 控件下载文件 VB用 Winsock 实现聊天的程序 VB用Internet Transfer编写FTP程序 VB用Sockets发送电子邮件 用VB 创建自己的通信程序 用VB5.0开发通信软件的技巧 用VB5开发IE 用VB编写网络寻呼 用VB编写小型的网络系统 用VB创建自己的通信程序 用VB构建Internet的应用 用VB开发标准CGI程序 用VB实现客户——服务器(TCP/IP)编程实例 用VB实现聊天讨论室和点对点会话 用VB写一个定时PING某IP的程序 用VB制作浏览器 做过考勤管理的请进………… 简单问题,麻烦各位高手!!! 请问delphi5中有没有delphi6中的object treeview功能 哪有关于网络安全方面的资料? 三层MIS中的中间件怎么用COM或EJB来实现. 请问哪里的个人主页控件支持JSP? 再次请教一个有关DataGrid不能显示而令人头晕的问题(在线等待)! 做过考勤管理的请进………… 在ASP.NET中怎样实现语句加入引用? 请问下面这个问题应该怎么解决最好?关于处理网页中的数据的 使用VB6自带的Sample中自动化示例应用程序时的一个问题 那位高手知道怎样实现曲线分析图... 一个简单SESSION 问题,请解决。在线等,没分了不好意思. 为什么在asp中使用ADODb的Connection对象的方法时不能使用事务处理 ====寂寞啊!谁帮介绍一个女孩啊(15-18)岁的!!万分感谢!==== 高分请教大虾,关于搜索的问题?。。。。 100分请教一个简单的问题?? runtime在JAVA中解释应该是什么意思? SCO上的ORACLE7建库?SOS 大家来看看,超级Bug?用DBExpress连接MSSQL,执行存储不能返回值,谁能解决,200分 高分请教,谢谢了/。。。。 我在程序中使用了MSXML,可是在干净的win98下无法运行,请问需要安装什么? 救急: SQL server的数据恢复 关于分辨率的问题。 在vb.net中能做dll吗?请大家可参与 下面的函数怎样声明? 能直接用alter语句修改某个字段的类型和长度吗? 如何做pci 插卡? 关于datalist绑定问题 我的前途???欢迎大家发表意见! 急求 如何测试asp ■■■■为防止下一场水园恶战,水源马甲联盟再次公开马甲id 密码■■■■ 自定义对象的实例怎么在ViewState里保存 把資料漚出成txt,doc,xls格式的文件,在漚出過程中,但是漚出成xls(Office2000)正常,officexp就出現亂碼? citrix数据引擎是什么? 刚刚我和她分手了 在數據窗口中怎樣打印jpg文件 为什么我的pws安装时提示需要winsock32?? 如何在grid表格或临时表里实现累加 请教一个四舍五入的问题? 各位老鳥,請問怎樣用ADO控件連接到一個Excel文件 oracle8i存储过程怎么写? 在线等待-----安装问题!!急急急急 我的拨号出了什么问题???急救!! 交換機連到交換機(兩個都是d-link的),如何連? 在php中如何将图片上传到服务器的MY SQL数据库中。紧急 关于视图位置疑问 缩进 急急!谢谢! 100分!在线等!急急急急急急急急急急急急急急急急急! 辽宁抚顺洪涝灾害死亡人数升至63人失多地遭洪涝灾害损失惨重 “潭美”逼近海洋局针对“潭美”启动海洋灾害一级应广州80名城管穿防刺背心高调执法(图易信推广联手三大门户 阿里重赏推广\让违法建筑无处遁形 浙江7个月拆违6海曙拆除市中心迄今为止最大面积的楼顶卫计委:捐献器官移植下月起计算机自动意大利海岸再现难民潮 数百偷渡客登陆连夜暴雨袭击杭城 出租车浮出水面温州三岁女孩公园玩耍时失踪 一周后尸杭州庆春立交桥下出租车遇“灭顶之灾”印度国产航母将在印度南部港口城市科钦北京高楼楼顶盖别墅 违建必须强拆朱镕基新书8月12日出版 内容亲自审武汉遭12级大风袭击 机场紧急关闭男子自拍强奸全程视频欲敲诈 案发后视马英九过境纽约 一天行程倍受瞩目西藏昌都6.1级地震 震中距昌都市约杭州:男子贪图凉爽夜宿江堤 遇涨潮被女子把自己“许配”给三户人家从中骗取北京二环岂是飞车党耍酷乐土中美互认追赃判决按下追逃“快捷键”中秋对手送“礼”建业客场小胜连吃个橘子的时间都没有!王皓助阵民间双节“拉手”有人拼假游有人留守秋之语“郑州造”手机8个月产量1.1亿部中哈之战暴露问题姚明现身亚锦赛中哈战 面对镜头他“害寻亲公告宫鲁鸣:周鹏鼓舞了球队姚明来了!《环渤海地区合作发展纲要》中哈之战暴露问题开启创意之旅 探寻最美建筑《九层妖塔》剧组将现身《一票难求》“点状”四风暗流涌习近平分别会见罗马尼亚多吃柚子预防脑血管疾病沙特王子涉性犯罪在美被捕把南南合作事业推向更高水平
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘