社区
DataWindow
帖子详情
怎样编写打印预览和打印功能的代码
longyangyang
2003-01-04 01:16:05
怎样编写打印预览和打印功能的代码?
...全文
190
5
打赏
收藏
怎样编写打印预览和打印功能的代码
怎样编写打印预览和打印功能的代码?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ljl_7880
2003-01-08
打赏
举报
回复
做个标记
linjwa
2003-01-07
打赏
举报
回复
要的话email甩出来。
YewPu
2003-01-06
打赏
举报
回复
我有例子。
jspandpb
2003-01-04
打赏
举报
回复
你可以到下面的地址去下载小木鱼写的例程,一个非常好的例程,
http://extend.hk.hi.cn/~kjx/download/download.htm
print_pre.zip文件.
ice2water
2003-01-04
打赏
举报
回复
下面一篇文章,关于打印的都全了。
PB中一个类Word打印对话框的实现
Powerbuilder数据窗口可用于生成各种复杂的 报表,但如何让用户在使用时控制打印份数、打印范围等信息呢?
我们在开发我局MIS系统时,经过对我局报表打印需求的分析,提出了如下的功能要求:
1.必须能够控制象打印份数、打印(页码)范围等信息,这是基本的要求。
2.我们系统中装有多台打印机,必须能让用户根据自己需要选择使用哪台打印机,必要时能对所选打印机进行配置。
3.在设计时,对每一个报表需要什么样的纸张,要多大的边距合适,都已确定,所以使用时不需要页面的设置。但由于不同的报表使用不同的纸张,必须在使用时给出提示,以便用有机会换上合适的纸张(或换用合适的打印机)。
根据以上要求,我们设计了如下图所示的对话框。 下面把设计过程以及用到的技术介绍一下。
首先使用窗口画板画出窗口,名字为w_printdlg,窗口类型为respons。“打印机”组框中的“名称”文本控制的名字为st_printname,“设置”按钮的名字为cb_printsetup。“页面范围”组框中的无线按钮组名字分别为rb_pagearrangeall、rb_pagearrangecurrent、rb_pagearrange,单行编辑框名字为sle_pagearrange,其enable属性为false。“副本”组框中的编辑域名字为em_copies。“打印”旁边的下拉列表框名字为ddlb_printwhat,列表有三项,分别为所选页面、偶数页、奇数页。“纸张”组框中的下拉列表框名字为ddlb_paper,列表内容为Poerbuiler定义的43种纸张类型,分别用0-42的数字来表示。“纵向”无线按钮的名字为rb_portrait,“横向”无线按钮的名字为rb_landscape。表示纵向和横向的图片框分别为p_portrait和p_landscape。 命令按钮“确定”和“取消”的名字分别为cb_ok和cb_cancel。
以上工作完成之后,就要着手编写程序。
首先为窗口定义实例变量idw_toprint,类型为datawindow,用于保存要打印的数据窗口。再定义一个窗口事件ue_initcontrols(也可以定义为窗口函数),其程序内容如下:
//eventue_initcontrols()
//设置窗口中各控件的初始值
st_printername.text = idw_toprint.object.
datawindow.printer //当前打印机名字
em_copies.text = "1" //默认打印份数为1
rb_pagearrangeall.checked = true //默认范围为全部页
sle_pagearrange.enabled = false //页面范围编辑框无效
ddlb_printwhat.SelectItem(1) //默认为“所选页面”
//打印方向
integer li_temp
li_temp = integer(idw_toprint.object.datawindow.print.orientation) //取出设计时的方向
if li_temp = 1 then //横向
rb_landscape.checked = true //选中
p_landscape.visible = true //图片显示
p_portrait.visible = false
elseif li_temp = 2 then //纵向
rb_portrait.checked = true
p_portrait.visible = true
p_landscape.visible = false
end if
//纸张类型
li_temp = integer(idw_toprint.object.datawindow.print.Paper.Size) //设计时的纸张类型
ddlb_paper.SelectItem(li_temp+1) //列表框中选中
然后,在窗口的open事件中编写如下脚本:
//openevent
//要使用OpenWithParm()打开,参数中包含要打印的数据窗口。
idw_toprint = message.powerobjectparm
//从参数中取出要打印的数据窗口
this.eventue_initcontrols() //初始化窗口各控件
在无线按钮rb_pagearrangall的clicked事件中编写脚本如下:
sle_pagearrange.enabled = false
在无线按钮rb_pagearrangcurrent的clicked事件中编写脚本如下:
sle_pagearrange.enabled = false
在无线按钮rb_pagearrang的clicked事件中编写脚本如下:
sle_pagearrange.enabled = true//当此无线按钮选中时才可用
在命令按钮cb_printersetup中编写如下脚本:
//cb_printersetup
PrintSetup() //设置打印机
parent.eventue_initcontrols()
在无线按钮rb_portrait的clicked事件中编写如下脚本:
//纵向
p_landscape.visible = false
p_portrait.visible = true//显示纵向图片框
在无线按钮rb_landscape的clicked事件中编写如下脚本:
//横向
p_portrait.visible = false
p_landscape.visible = true
在命令按钮cb_cancel的clicked事件中编写如下脚本
//cb_cancel执行程序
CloseWithReturn(parent,2) //如果选择取消,返回2
在命令按钮cb_ok的clicked事件中编写如下脚本
//cb_ok执行程序
string str_temp
integer li_temp
long ll_row
//打印什么
li_temp = ddlb_printwhat.FindItem(ddlb_printwhat.text,0) - 1
idw_toprint.object.datawindow.print.page.rangeinclude = li_temp
//打印范围
ifrb_pagearrangeall.checkedthen//全部页
str_temp = ""
elseifrb_pagearrangecurrent.checkedthen//当前页
ll_row = idw_toprint.GetRow()
idw_toprint.object.datawindow.print.preview = "Yes"
//设成预览模式
str_temp = idw_toprint.Describe("evaluate('Page()',"+String(ll_row)+")") //计算页码
idw_toprint.object.datawindow.print.preview = "No"
elseif rb_pagearrange.checkedthen //输入范围
str_temp = sle_pagearrange.text
end if
idw_toprint.object.datawindow.print.page.range=str_temp
//副本份数
iflen(em_copies.text)>0then
idw_toprint.object.datawindow.print.copies
=Integer(em_copies.text)
endif
//纸的方向
li_temp=0
if rb_landscape.checked then
li_temp=1
elseif rb_portrait.checked then
li_temp=2
endif
idw_toprint.object.datawindow.print.orientation=li_temp
//纸的尺寸
li_temp= ddlb_paper.FindItem(ddlb_paper.Text,0)
//第li_temp项
idw_toprint.object.datawindow.print.paper.size=li_temp
closewithreturn(parent,1)
几点说明:
1.原点访问语法:程序中多次用到了象datawindowcontrol.object.datawindow.print.attribute语法,用语控制数据窗口的打印属性。原点访问语法用语代替原来的Discribe和Modify函数,更符合面向对象的语言习惯。关于print属性的详细信息,请参见Powerbuilder帮助。
2.当前打印页的计算:先用GetRow得到当前行数, 再用Describe和Evaluate函数来计算数据窗口表达式,得出当前页号。注意在计算之前,先把要打印的数据窗口置成预览模式,否则计算出来的是显示页号,和打印页号不一致。
3.窗口内外信息的传递:虽然你可以用全局变量传递信息,但那决不是一个好的注意。使用OpenWithParm函数打开窗口可以向窗口传递一个参数,使用CloseWithReturn函数关闭窗口可以返回一个参数,根据参数的类型,其结果被放在系统全局变量message的相应成员中。如果要传递多个参数,可以把要他们定义为一个结构来传递。
易语言画板模拟
打印
预览
源码
易语言画板模拟
打印
预览
源码例程程序结合易语言应用接口支持库,通过画板实现了模拟
打印
预览
的效果。本易语言例程源码是易语言论坛用户
编写
的教程,属于易语言进阶教程。本易语言例程还使用到易语言特殊
功能
支持库。 点评:易语言画板模拟
打印
预览
源码结合易语言应用接口支持库,通过画板实现了模拟
打印
预览
的效果。 @易语言
代码
大全详解。
vfp
打印
工具vfp
打印
预览
代码
vfp
打印
预览
表单 vfp
打印
工具 直接调用
在对话框中实现
打印
预览
并实现
打印
窗口内容的例子
实现了在对话框中添加MFC文档视图结构的
打印
预览
功能
,并实现了窗口内容的
打印
输出。 编译环境:VS2005
VB
打印
预览
VB
打印
预览
VB
打印
预览
VB
打印
预览
VB
打印
预览
FastReport 自定义
预览
打印
窗口
其实也没有什么,只是针对
打印
的窗口缩放写了一点
代码
,而且还有些问题,希望哪位大虾修改一下!
DataWindow
611
社区成员
20,469
社区内容
发帖
与我相关
我的任务
DataWindow
PowerBuilder DataWindow
复制链接
扫一扫
分享
社区描述
PowerBuilder DataWindow
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章