如何进行打印预览编程(100分)

  • 主题发起人 主题发起人 ynwxh
  • 开始时间 开始时间
Y

ynwxh

Unregistered / Unconfirmed
GUEST, unregistred user!
我正在进行一个图形绘制程序,不知如何打印printview
 
这是个令人头痛的问题!
 
我有一点心得
 
用Api吗?
在windows中对打印机的控制是对设备描速句柄的操作,在delphi的TPrinter中,有一个HDC,
你可以用类似的方式将HDC换成相应的目标DC就可以了
 
打印预览和打印时类似的,都是在DC上画,
只不过打印是往打印机的DC上画,而预览是
往窗口的DC上画
清楚了吗?
 
原理:(不用多说了吧?!就是在不同的画布上画图。)
//=============具体实施=======================
1.打印预览单独一模块;(带Form)
该模块可包括:打印,缩放比例,图画的保存等功能,
将PaintBox放在ScrollBox上,预览图画在PaintBox中显示。

2.打印预览参数设置另做一模块;(同上)
该模块包括:打印及预览参数的设置

注意:逻辑坐标与物理设备坐标的转换。
API: Escape,GetDeviceCaps
 
我做过,可以像 Word 的预览窗体一样分页预览,但是很复杂,一下子肯定说不完,
只能给你提供一点方向性的建议。
预览的载体可以是 TPaintBox,也可以从 TCustomControl 继承一个白板。
你会要用到下面的 API 函数设置 Canvas 的坐标原点;
SetViewportOrgEx
SetWindowOrgEx
以及 SetMapMode 函数设置 DC 的映射模式,一般可以设为 MM_ISOTROPIC;
当改变预览缩放比例时,下面的函数会帮你进行坐标尺寸缩放:
SetWindowExtEx SetViewportExtEx
但要注意下面的说明:
When MM_ISOTROPIC mode is set, an application must call the SetWindowExtEx
function before calling SetViewportExtEx.
大致就是这些,细节的实现就不尽述了,希望能对你有所帮助。
Good luck.
From: BaKuBaKu
 
do you have any sample?
 
多人接受答案了。
 
后退
顶部