formula one ,如何自己写打印预览及打印程序?

deadog 2002-05-29 11:45:10
请各位大虾帮帮忙。formula one的打印预览功能不好,想自己写,还没有好办法,谁写过?
...全文
96 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
耙子 2002-06-05
  • 打赏
  • 举报
回复
屏幕DC是严格的打印的点阵的对应。
而且这个DC对应的画布的大小和打印机的打印分辨率有密切的关系。

300*300DPI和600*600DPI的时候连个DC对应的画布也是长宽各差一倍的。

我用的这个大银鱼似的方法可以说是个偏门。

1.设定这个缩放比例预览的时候一定要在预览生成后恢复原来的数值,这样才不影响打印。具体方法
GetPrintScale 取得当前的数值保存
SetPrintScale 设定新的大小为了预览
PrintPreviewDC 生成预览
SetPrintScale 恢复原来的比例

2.由于你设定了新的放缩比例,会导致一个问题就是页数的计算会变化,比喻你缩放了50%,那么原来是10页的内容现在其实就只需要5页了,这违背了我们的目的,所以我的建议是同样在预览前修改纸张的大小,按照于是的比例缩小当前的纸张大小。同上面一样,预览生成后要恢复原来的内容。

3.预览的大小还受到打印分辨率的影响,所以计算预览效果的时候一定要得到当前的分辨率,并把此参数引入的预览画面生成的计算中取。
int GetDeviceCaps(
HDC hdc,
int nIndex);

下面是BCB代码得到当前打印机的水平和垂直分辨率
GetDeviceCaps(Printer()->Canvas->Handle, LOGPIXELSX);
GetDeviceCaps(Printer()->Canvas->Handle, LOGPIXELSY);

4.我的另一个想法,
如果能设定当前打印机的分辨率,或者模拟一个打印机,把他的分辨率设为和屏幕一样,那么就可以直接在一个DC上面直接用了,没什么比例的概念了。
想调整预览的放缩倍数只要修改这个打印机的分辨率就行了。100%的情况就是
把打印机的分辨率设定为96*96dpi (window小字体),
这个办法我一直没成功。

关注你的进展。
谢谢,共同探讨。
耙子 2002-06-05
  • 打赏
  • 举报
回复
这个问题我们正在delphi区里面探讨,已经小有成效了。欢迎你也来探讨。

呵呵。
deadog 2002-05-30
  • 打赏
  • 举报
回复
我的工程是完全依赖formula one的,所以最好能针对F1进行。
IsMe 2002-05-29
  • 打赏
  • 举报
回复
使用printer对象就可以
表格打印程序的重点是如果定义表格,使得能够最大程度地通用,可以参考现有的控件或设计器
wzsswz 2002-05-29
  • 打赏
  • 举报
回复
欢迎使用OrchidPrinter. OrchidPrinter是一款专门针对中国国情并参照国外的类似软件编制的工具软件 这个软件可以让您快速,容易的进行预览及打印输出.它支持多列,文本自动换行,页头和页尾,表格及段落. OrchidPrinter 也支持右键弹出菜单.
在您能够使用OrchidPrinter control前,您必需把它加入工程.
在您发布您的程序时,您必须安装OrchidPrinter control及相应的支持文件到用户的Microsoft Windows SYSTEM目录下.

OrchidPrinter使用Twips作为作图单位,其原点在页的左上角.请记住1英寸等于1440 Twips,1点等于20 Twips.其坐标不得大于
32767.
希望您对 Windows 的 GUI 比较熟悉,对 GUI 的各种对象及 Windows 的C,C++程序有一定的了解,这对您的高效使用大有益处.


作者 : 史仲浩
email : shizhonghao@sohu.com

************************************************************************************************************************************

Properties (default: Paragraph)

(About) AbortCaption AbortTextButton
AbortDocument AbortTextPage BackColor
BorderStyle BrushColor BrushStyle

CalcParagraph CalcTable CalcText

CharHeight CharWidth Collate
ColorMode Columns Copies
CurrentColumn CurrentLine CurrentPage
CurrentX CurrentY Device
DPI Draw Driver
Duplex EmptyColor Enabled

Error FiredCount Footer

hDC HdrColor HdrFont
Header Height HelpContextID
IndentFirst IndentLeft IndentRight
IndentTab Index Left
LineSpacing MarginBottom MarginLeft
MarginRight MarginTop Name
Ndevices Orientation PageBorder

PageHeight PageWidth PaperHeight
PaperSize PaperSizes PaperWidth
Paragraph Parent PenColor
PenStyle PenWidth Picture

Polygon Polyline Port
Preview PreviewMode PreviewPage

ShadowColor ShadowLine Table
TableAlign TableBorder TableSep
Text TextAlign TextAngle
TextColor TwipsPerPixelX TwipsPerPixelY
X1 X2 Y1
Y2 Zoom

************************************************************************************************************************************

Events

EndDoc EndPage Error
NewColumn NewLine NewPage
NewTableCell PrepareFooter PrepareHeader
StartDoc

************************************************************************************************************************************

Methods

AddTable ClearError DrawCircle
DrawEllipse DrawLine DrawRectangle
EndDoc NewColumn NewPage
PrintDoc StartDoc
deadog 2002-05-29
  • 打赏
  • 举报
回复
谢谢两位的帮助!
我知道一般的控件都可以实现对picturebox等控件的打印及预览。
但我想要的是对FORMULA ONE 控件的打印及预览。
有对F1控件比较了解的吗?
wenw 2002-05-29
  • 打赏
  • 举报
回复
http://www.csdn.net/cnshare/soft/openfile.asp?kind=1&id=9735
http://www.csdn.net/cnshare/soft/openfile.asp?kind=1&id=9117
我这里还有源程序

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧