社区
PowerBuilder
帖子详情
求一个报表打印的基类
hzhxxx
2003-02-27 02:59:12
功能要求:
1. 能设置 横 束 打印方式,可以定义纸张的大小,就是毫米级别的
2. 接口简单,最好带一个打印参数设置窗口,界面要整洁
3. 基本能包括数据窗口打印功能属性的设置
hzh62@163.com
分不够,说一声
先谢谢
...全文
23
9
打赏
收藏
求一个报表打印的基类
功能要求: 1. 能设置 横 束 打印方式,可以定义纸张的大小,就是毫米级别的 2. 接口简单,最好带一个打印参数设置窗口,界面要整洁 3. 基本能包括数据窗口打印功能属性的设置 hzh62@163.com 分不够,说一声 先谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
am2000
2003-03-08
打赏
举报
回复
www.liulee.net
hzhxxx
2003-03-03
打赏
举报
回复
谢谢,看到
已经修改,可是没有
可以定义纸张的大小,就是毫米级别的
还看看
go on
balloonman2002
2003-03-03
打赏
举报
回复
http://www.kejx.com/lb5000/cgi-bin/topic.cgi?forum=2&topic=181&show=0
ice2water
2003-03-03
打赏
举报
回复
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的相应成员中。如果要传递多个参数,可以把要他们定义为一个结构来传递。
hzhxxx
2003-03-03
打赏
举报
回复
go on
888888888888
2003-03-03
打赏
举报
回复
你在到网上去搜一搜把
hzhxxx
2003-02-27
打赏
举报
回复
收到,谢谢
功能不够,你们公司就使用这个,太差了点
界面也太牵强
语言重,见练
wnglish
2003-02-27
打赏
举报
回复
也给我来一份,count_liu@eyou.com
xiaobzg
2003-02-27
打赏
举报
回复
已发,查收
MIS金智
打印
通
由于是
打印
基类
,继承者博多,因此 每次实例化时都会计算PrinterMargins会影响效率,这就是前些版本速度慢的原因。改为手动调用CalculatePageInfo()或改变 PrintDocument后在调用处重新计算
一个
PrinterMargins保存...
VISUAL-FOXPRO数据库管理系统试题.doc
A)是同
一个
数据库中的两个表 B)不同数据库中的两个表 C)两上自由表 D)
一个
是数据库表另
一个
是自由表 7、 在VisualFoxPro中,可以对字段设置默认值的表( )。 A)必须是数据库表 B)必须是自由表 C)自由表或数据库表 D)...
Delphi+Access仓库管理系统设计
本系统实现仓库管理的物品购买记录管理、入库管理、出库管理、员工管理、系统查询、
报表
打印
、数据备份数据导入与导出等等八大块的基本功能,及个各大块记录的录入和记录查询,从而达到了方便企业管理人员对本企业...
IOT日程管理系统源码 IOTScheduleManagement.rar
专业美观 RDLC 设计
报表
,方便
打印
浏览和 Excel 导出 7. 参数配置管理,可以配置系统的各种运行参数 8. 基于多数据库的数据查询模块和通用高级查询模块 9. 框架提供基于多种数据库的整合 10. 框架界面
基类
...
asp.net知识库
.NET关于string转换的
一个
小Bug Regular Expressions 完整的在.net后台执行javascript脚本集合 ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 经典正则表达式 delegate vs. event 我是谁?[C#] 表达式计算引擎...
PowerBuilder
1,075
社区成员
66,437
社区内容
发帖
与我相关
我的任务
PowerBuilder
PowerBuilder 相关问题讨论
复制链接
扫一扫
分享
社区描述
PowerBuilder 相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章