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

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

编辑:说三道四文库 发布时间:2017-11-23 03:29
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资料 自动装入注册设置 -VB资料 自己编程模拟 MouseEnter,MouseExit 事件 -VB资料 走进VB6啃一块骨头 做成一个时间限制的测试版 -VB资料 PHP中利用jQuery实现SWF图像上传和裁剪 VB.NET或C#将DataSet快速导出到Excel中 HashSet的equals和hashCode重写问题 PendingIntent实现原理和代码 IntentService实现原理及内部代码 AsyncTask实现原理和内部代码 Neither user nor current process错误 ListView的右边滚动滑块启用方法 Live Wallpaper动态壁纸开发 控制软键盘显示和隐藏 设置Activity大小不再全屏原理 Android面试题,看看你基础如何? Android Canvas绘图抗锯齿解决方法 Android xliff和字符串资源 android.hardware.USB类介绍 Android开发经验谈之应用间数据共享 android_asset这个URL详细使用方法 Android 2.3系统自带高清UI图标下载 设置ScrollView滚动条的颜色 WakeLock使用方法示例代码 Concurrent并发库常见问题总结 Android数据库SQLite性能优化技巧 Android开发之Java设计模式基础篇 Android开发之Java设计模式入门篇 Android开发之Java设计模式 Android开发之Java并发包集合类性能分析 高分帖,很简单,告诉我,我就结帖。 高分求助!线程怎么用啊,我加了一个thread object对象,怎么启动这个线程啊,是在别的unit里面启动吗?谢谢 编译错误,怪事! 求助啊!在线等待~~~~~~~~~ 远程连接 SQL server XML数据交换技朮? 如果数据库用的是SQL Server2000,怎么做安装文件,高分!!! 如何用VB实现telnet到一台UNIX机器 使用第三方控件LsFileExplorer28,编译出错! ***怎么实现跟SQL Server中compute by类似的查询?就是先查出所有信息,最后进行统计。详情请进!*** 如何让单元格直接进入编辑状态? 如何用ADOQUERY返回的数据集中某一字段的返回值中最长的值定义其column列的宽度? 一个与时间有关的问题 为什么我的Form的图标不变 安装传奇补丁的问题,文件夹已满????????????? 求Max232\Max485资料和c51及汇编例程 在Notes中,怎樣將查詢得到的符合條件的文檔中的計算字段的值加總列印或保存起來? 看了这个,我真的害怕了!--〉天下原本就没有“真美女” (急)如何从OCX的弹出FORM,返回参数给USERCONTROLL,500分即送。 这样写那里错了? 还原精灵问题,高手请进 一个关于短信开发的数据库设计问题,高手指点。。。。 请解释一下控件的工作原理,ActiveX控件和*.ocx文件是一回事吗?如果我有一个VB调用相关控件的系统,我要转成ASP的B/S结构,应该怎么做? 关于bho的问题 ,, at指令的问题,高手看过来! 对侯捷所译C++ Primer题解中,第208页10.5(c)题答案分析的疑问?(函数模板) Windows 2000下找不到samba服务器,高手指点! AD和額外域控制器的角色轉換 两个问题? 请教大家如何从另外一个程序往一个dx的游戏上写字?? asp程序取sql存储过程返回参数的问题 初学c++,请教 加权平均分 如何快速的判断文件是否存在? 问一个软件!!! 98的提示符下加载哪个命令可以出现中文? 关于C的疑惑 asp程序取sql存储过程返回参数的问题 精品:数据库-表字段类型的写法!! 谁知道一般网站的在线人数统计功能是如何实现的? 如何处理float型的长度问题? 请大家帮忙这个存储过程该怎样设计?呵呵,不好意思!第一次发贴发错了^_^ 在线请教,找错 请高手门帮我解决一个问题! 请问如何把一个form的关闭按钮屏蔽掉而只留下标题栏? 高手::::请教一个简单的问题???? 还是.net连oracle的问题 急救!VB访问Linux服务器上的Oracle8i的问题 如何在没有安装.net的机子上运行C#程序阿?? 在模板实参推演中,数组的长度是如何得知的呢??? asp作提交表单 自动发到指定邮箱里。 急哭了!在线等待!!!!!! “好鸟相鸣,嘤嘤成韵. 好鸟相鸣 嘤嘤成韵 翻译:、斯先生和他的家人正在吃饭 请根据具体情境,按要求拟出让人们关闭手机的告示.在加油站和煤气库,手机信号会引起火灾和爆炸,使灾难从天而降.(要求:表达既要委婉,又要有警示效果) 苹果手机的环境光感器从哪里关闭 已知集合M={(x,y)|y=-x^2+2x},N={(x,y)|y=2x^2-4x},则M∩N=? Tài khoản đã được sử dụng什么意思急需~~ LQFP 64封装 39 40 脚接晶震 9 20 21 23 27 41 56 脚接GND 9 19 26 38 56 脚接VCC 满足此条件单片机有哪些是一个设备上的 其芯片型号被 打磨掉了 与朱元思书 ”泉水激石,泠泠作响;好鸟相鸣,嘤嘤成韵.“展现的话面 此命少年运不通,劳劳做事尽皆空,苦心竭力成家计,到得那时在梦中 《求解释意思》此命少年运不通,劳劳做事尽皆空,苦心竭力成家计,到得那时在梦中《求解释意思》 已知集合M={x|-2《=x《=a}是非空集合,集合P={y/y=2x+3,x属于m}集合T={z/z=x2,x属于M},若T是P的真子集,则实数a的取值范围要解析 中印签署边防合作协议 习近平提中印关梅德韦杰夫访华花絮:中俄总理相约散步伦敦唐人街罢市抗议“歧视性执法”冷空气今起渗透影响 杭州明后天早晨稍美核导弹值更官开门睡觉英王室将拍四世同堂照泰咖啡店主挑战星巴克智能手机或将遥控空袭韩首名宇航员学MBA挨批京津冀等六省联防大气污染 北京抓八大韩亚空难最后一名留医伤者出院 共留医素合菜麦饼卷Adonit Jot Dash + 一起吐槽 | 那些年遇到的奇葩老师测一测 | 5道题看你的智商达标了吗【银针试毒?】戴银饰的你,被这五大谣【不解之谜】英王室藏着数十亿珠宝,却因为一件珠宝 她与豪门丈夫离婚 十年让女神高潮的坚果 竟然不是罗永浩的!屋顶遇“天屎”被砸 英国夫妇冷冻冰箱“致癌物”阴影下,还能愉快地吃肉吗?30余国赴黎部队共庆联合国成立70周
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘