社区
非技术版
帖子详情
如何把两个datawindow的数据打印到同一页纸上面
kofworld
2002-01-31 10:33:51
dw_1,字段位置格式会根据不同的设定而变化,freeform自由报表格式
dw_2,grid格式
希望各位高手踊跃发言。
...全文
212
11
打赏
收藏
如何把两个datawindow的数据打印到同一页纸上面
dw_1,字段位置格式会根据不同的设定而变化,freeform自由报表格式 dw_2,grid格式 希望各位高手踊跃发言。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
readwhiteswl
2002-01-31
打赏
举报
回复
download
wclarity
2002-01-31
打赏
举报
回复
组合报表,套上这两个datawindow不就可以了?
baiyin_danny
2002-01-31
打赏
举报
回复
同意楼上看法,用组合报表就可以!
killerdanny
2002-01-31
打赏
举报
回复
用组合报表不可以吗?
tiantianpb
2002-01-31
打赏
举报
回复
据窗口一般都是打印一个就走一张纸,很难实现同一张纸上打印两个数据窗口,当然也并非完全不可以,但有限制。原理:
第一个DW最好为FREEFORM的风格,第二个DW不能为GRID风格,例如将第一个数据窗口的DETAIL区的一条记录加入到第二个数据窗的HEADER区中,再打印第二个数据窗口,以实现两个数据窗口的合并打印。
代码:
//这里用到两个函数f_print_dw()与f_print_dw_describe()
1、打印按纽代码:
//将dw_1中数据与dw_2中数据合并打印
f_print_dw(dw_1,dw_2)
2、f_print_dw(fp_dw_key[datawindow],fp_dw[datawindow])函数说明
///////////////////////////////
//参数一定要为传址形式 //
//fp_dw_key → reference //
//fp_dw → reference //
/////////////////////////////
//fp_dw_key必须为一自由格式的DATAWINDOW
//本函数实现在同一页纸上打印两个DATAWINDOW
//实现方法
//先把一个数据窗口作为文本对象加入到另一个数据窗口中,然后打印,打印完后再恢复数据窗口
string l_attr_list //数据窗口对象的语法
string l_error
string l_object_list // DWO对象列表,以TAB键分开
string l_object
int l_new_field
int l_pos, l_start
int l_dw_height // 数据窗口fp_dw中header区的高度
int l_dw_key_height // 数据窗口fp_dw_key中detail区的高度
l_dw_key_height = integer(fp_dw_key.describe("datawindow.detail.height"))
l_dw_height = integer((fp_dw.describe("datawindow.header.height")))
//增加DW中HEADER区的尺寸,为DW_key上的东西设置空间
//modify()成功返回空字符串
l_error = fp_dw.modify("datawindow.header.height=" + &
string(l_dw_key_height + l_dw_height))
if l_error <> "" then
l_object = "header"
//发生错误时程序转移
goto Error_City
end if
//将对象移到DW中的开阔区域
// 取得以TAB字符分离的数据窗口fp_dw中DWO对象的列表
l_object_list = fp_dw.describe("datawindow.objects")
l_pos = 0
do // 假定列表不为空
l_start = l_pos
l_pos = pos(l_object_list, "~t", l_start + 1)
if l_pos = 0 then l_pos = 9999
l_object = mid(l_object_list, l_start + 1, l_pos - l_start - 1)
//将header区的所有对象都向下移
if fp_dw.describe(l_object + ".band") = "header" then
//行控件比较特殊,它是X1,X2,Y1,Y2
if fp_dw.describe(l_object+".type")="line" then
fp_dw.modify(l_object + ".y1 ='" + &
string(integer(fp_dw.describe(l_object+".y1")) + &
l_dw_key_height) + "'")
fp_dw.modify(l_object+".y2='" + fp_dw.describe(l_object+".y1") +"'")
else
fp_dw.modify(l_object + ".y ='" + &
string(integer(fp_dw.describe(l_object+".y")) + &
l_dw_key_height) + "'")
end if
end if
loop until l_pos = 9999
//把数据窗口fp_dw_key中的对象以TEXT的形式 COPY 到数据窗口fp_dw中的header区
//取得以TAB字符分离的数据窗口fp_dw_key中DWO对象的列表
l_object_list = fp_dw_key.describe("datawindow.objects")
l_pos = 0
l_new_field = 0
do // 假定列表不为空
l_start = l_pos
l_pos = pos(l_object_list, "~t", l_start + 1)
if l_pos = 0 then l_pos = 9999
l_object = mid(l_object_list, l_start + 1, l_pos - l_start - 1)
l_attr_list = f_print_dw_describe(fp_dw_key, l_object)
if l_attr_list = "" then return false
l_new_field = l_new_field + 1
l_error = fp_dw.modify("create text (" + &
l_attr_list + " name = hdr" + string(l_new_field) + ")")
if l_error <> "" then goto Error_City
loop until l_pos = 9999
// 打印
print(fp_dw)
//如果没有打印机,可以将以下部份RETURN TRUE之前的代码屏蔽起来,就可以看到变化后的后果了
// 恢复数据窗口
// 去除新增加的FIELD
//for l_pos = 1 to l_new_field
// fp_dw.modify("destroy hdr" + string(l_pos))
//next
//// 移动列
//l_object_list = fp_dw.describe("datawindow.objects")
//l_pos = 0
//do
// l_start = l_pos
// l_pos = pos(l_object_list, "~t", l_start + 1)
// if l_pos = 0 then l_pos = 9999
// l_object = mid(l_object_list, l_start + 1, l_pos - l_start - 1)
// if fp_dw.describe(l_object + ".band") = "header" then
// fp_dw.modify(l_object + ".y ='" + &
// string(integer(fp_dw.describe(l_object+".y")) - &
// l_dw_key_height) + "'")
// end if
//loop until l_pos = 9999
//
//// 收宿数据窗口header区
//fp_dw.modify("datawindow.header.height=" + string(l_dw_key_height))
//
return true
////////////////////
Error_City:
messagebox("Error in col " + l_object, l_error)
return false
3、f_print_dw_describe(fp_dw[datawindow],fp_col[string])
//////////////////////////////////////////////
//fp_dw → reference 传值 //
//fp_col → value 传直 //
// 目的: 描述各列的属性,返回给f_print_dw //
//////////////////////////////////////////////
string l_error
string l_bg_color, l_color, l_fontface, l_height, l_text, l_x, l_y, l_width
string l_fontheight
l_bg_color = fp_dw.describe(fp_col + ".background.color")
if l_bg_color = "!" then
l_error = "bg_color"
goto Error_City
end if
l_color = fp_dw.describe(fp_col + ".color")
if l_color = "!" then
l_error = "color"
goto Error_City
end if
l_fontface = fp_dw.describe(fp_col + ".font.face")
if l_fontface = "!" then
l_error = "fontface"
goto Error_City
end if
l_fontheight = fp_dw.describe(fp_col + ".font.height")
if l_fontface = "!" then
l_error = "fontheight"
goto Error_City
end if
l_height = fp_dw.describe(fp_col + ".height")
if l_height = "!" then
l_error = "height"
goto Error_City
end if
l_width = fp_dw.describe(fp_col + ".width")
if l_width = "!" then
l_error = "width"
goto Error_City
end if
l_x = fp_dw.describe(fp_col + ".x")
if l_x = "!" then
l_error = "x"
goto Error_City
end if
l_y = fp_dw.describe(fp_col + ".y")
if l_y = "!" then
l_error = "y"
goto Error_City
end if
choose case left(fp_dw.describe(fp_col + ".coltype"), 5)
case "char("
l_text = fp_dw.getitemstring(1, fp_col)
case "datet"
l_text = string(fp_dw.getitemdatetime(1, fp_col))
case "numbe"
l_text = string(fp_dw.getitemnumber(1,(fp_col)))
case "!" // 假定为text
l_text = fp_dw.describe(fp_col + ".text")
end choose
l_color = "33554432"
l_bg_color = "1086374080"
return " band = header " + &
" color = '" + l_color + "'" + &
" background.color = '" + l_bg_color + "'" + &
" font.face = '" + l_fontface + "'" + &
" font.height = '" + l_fontheight + "'" + &
" height = '" + l_height + "'" + &
" text = '" + l_text + "'" + &
" width = '" + l_width + "'" + &
" x = '" + l_x + "'" + &
" y = '" + l_y + "'"
Error_City:
messagebox("Error in col " + fp_col, l_error)
return ""
kofworld
2002-01-31
打赏
举报
回复
用
long job
job=printopen()
dw_1.print(job,0,0)
只能打印window里datawindow control
大小的区域,不能打印所有的数据,而我的需要有多少数据打多少数据
kofworld
2002-01-31
打赏
举报
回复
是否
dw_1.print()
printpage(0)
dw_2.print()
lesni
2002-01-31
打赏
举报
回复
在PrintPage事件中返回0
fa791222
2002-01-31
打赏
举报
回复
用composite样式不就可以
newhandle
2002-01-31
打赏
举报
回复
虚心学习。u~p
kofworld
2002-01-31
打赏
举报
回复
如何控制组合报表composite中dw_1和dw_2的字段的属性,例如visible,text,高度等等
最好有程序的例子
powerbuilder论文
摘要:
数据
窗口(
Data
Window
)是PowerBuilder 的技术核心,也可以说成是它的一项专利。如何充分发掘
数据
窗口的技术优 势是用好PowerBuilder 的关键。本文基于PowerBuilder 提供的Modify 函数就如何解决在一个
数据
窗口中进行多表更新和数 据窗口的精确页面
打印
作了一定的研究和分析,并给出了具体的使用方法和应用实例。
计算机软件-商业源码-
打印
机设置.zip
计算机软件-商业源码-
打印
机控制DLL,内有PB7的DEMO.zip
软考复习资料
软考复习资料,对于需要准备软考的朋友很实用,里面的内容和详细和精辟。
PB进阶代码(很全的)
《PowerBuilder 9.0进阶开发篇》(实例与技巧篇)配书光盘使用说明 本光盘内容为本书所有实例的源代码。如下: 第1章 窗口、控件与界面 1.1 类Outlook工具栏界面实现 -- Outlook 1.2 制作Splash窗口 -- Splash 1.3 制作美观的状态条 -- StatusBar 1.4 创建图标栏应用 -- Systray 1.5 MDI窗口显示背景图片 -- MDIBmp 1.6 窗口中控件显示ToolTips -- ToolTips 1.7 打造不一样的命令按钮 -- PictureButton 1.8 透明文本的实现 -- TransparentST 1.9 导航图界面的制作 -- FlowChat 1.10 制作图文并茂的菜单 -- BmpMenu 1.11 窗口内控件大小与窗口大小同步 -- Autosize 1.12 动态创建控件 -- DynamicControl 1.13 控件融合技术 -- SplitBar 第2章
数据
窗口 2.1
数据
窗口PDF格式文档输出 -- PDF 2.2
数据
窗口组合条件查询 -- Query 2.3
数据
窗口通用排序 -- UniversalSort 2.4
数据
窗口通用显示列定制窗口的实现 -- ColumnVisible 2.5
数据
窗口中实现增量查询 -- zlcx 2.6
数据
窗口的多表更新 -- UpdateMultable 2.7 单击标题栏对
数据
窗口排序 -- TitleSort 2.8 动态
数据
窗口 -- Dynamic
Data
Window
2.9 复合
数据
窗口 -- AddTitle 2.10
数据
窗口
打印
处理 -- PrintPreview/PrintPreview3 (PrintPreview和PrintPreview3内容是相同的,但在实现上有些区别) 2.11
数据
窗口统计图类型的动态改变 -- GraphType 2.12
数据
窗口统计图数值动态显示的实现 -- GraphValue 2.13
数据
窗口中按钮的封装 -- DwButton 第3章 PowerScript 3.2 实现客户端程序的自动升级 -- CSUPgrade 3.3 进制转换 -- NumberConvert 3.4 注册表函数应用 -- Regedit 3.5 人民币大写转换函数 -- AmountUppder 3.6 在应用程序中关闭外部程序 -- CloseApp 3.7 在应用程序中启动控制面板项目 -- RunControl 3.8 非Tab分隔符文本文件导入
数据
窗口 -- ImportFile 3.9 编译后的程序带参数运行 -- CommandParm 3.10 取当月的最后一天函数 -- GetLastDay 3.11 限制同一程序多次运行 -- OnlyOnce 本章所使用的资源文件 -- pic 第4章
数据
库与SQL 4.2 PowerBuilder + ASA8的C/S编程 -- Client-Server 4.4 动态SQL及其应用 -- DynamicSQL 4.5 存取二进制大对象 -- Blob 4.6 PowerBuilder应用取服务器时间 -- GetServerTime 4.7 PowerBuilder扩展属性系统表及其应用 -- SystemTable 4.8 连接任意ODBC
数据
源 -- ODBCList 4.9 可定制参数的
数据
库连接 -- ServerSet 第5章
打印
专题 通用
打印
例子 -- Print 第6章 用户对象 6.1.1 创建定制的用户对象(创建弹压式按钮) -- ToggleButton 6.1.2 创建标准的可视用户对象(扩展的
数据
窗口) --
Data
window
6.1.3 创建可视外部用户对象(状态条) -- StatusBar 6.2.2 创建通用不可视用户对象(FTP应用) -- Ftp 第7章 API 7.2.1 改变窗口的显示风格 -- Change
Window
7.2.2 使窗口的图片透明化 -- Trans
Window
7.2.3 改变窗口的关闭形式 -- CloseStyle 7.2.4 PB中实现图形的复制与粘贴以及图像的简单处理 -- PictureBox 7.3.1 获得系统的内部进程 -- System Thread 7.3.2 获得系统基本信息 -- SystemInformation 7.4.1 检测物理网络的连通情况 -- Mping 7.4.2 关闭、重启、注销计算机 -- Exit
Window
7.5.1 使用Visual C++开发动态链接库 -- DllForPb9 7.5.2 使用Delphi开发动态链接库 -- SetScreen 7.5.3 使用Visual Basic开发ActiveX动态链接库 -- CPUInfo 第8章 pipeline
数据
管道 -- pipeline 第9章 DDE、OLE、COM使用技术 9.1.3 DDE客户端实现步骤 -- DDE 9.2.5 不可视的OLE对象 -- pbtowordandexcel 9.2.6 ActiveX控件 -- Media 9.2.7 使用外部OLE控件处理
数据
库中的二进制
数据
-- DBOLE 9.2.8 OLE精彩应用——开发具有XP风格的菜单 -- XPMenu 9.3.3 PowerBuilder中的COM组件实现 -- pb9com 第10章 编译发行 编译 -- TestInstall 第11章 Jaguar 包含开发Jaguar组件和调用Jaguar组件的
两个
例子的源程序 第12章 PBNI PBNI应用技术 -- PBNI 本光盘所收集内容的著作权为作者所有;作者授权清华大学出版社独家出版该光盘;清华大学出版社享有该光盘的专有出版权。 注意事项: 1. 第4章部分例程需要配置名为pbbook的ODBC
数据
源; 第5章例程需要配置名为PrintDB的ODBC
数据
源。 2. 某些例程可能会因环境原因而无法运行,但源代码可供参考。 3. 部分例程所在目录有说明文件,请注意阅读。 4. 如有疑问,欢迎到以下网站探讨: PB编程俱乐部 http://www.kejx.com 或 http://kjx.126.com 摆渡人工作室 http://www.pbsite.com 技术支持: 电 话:010-62791976-220或010-62791977-220(编辑部) 传 真:010-62788903 E-mail:kjx@163.com(柯建勋) ztao@pbsite.com(张涛) oyzx_sp@263.net(编辑) 通信地址:北京市清华大学校内金地公司 邮 编:100084
PB
Data
Window
38个技巧
1. 使
Data
Window
列只能追加不能修改 如何使
Data
Window
中的
数据
只能追加新记录而不能修改,利用 Column 的 Protect 属性可以很方便的做到这一点,方法如下: 将每一列的 Protect 属性设置为: If( IsRowNew(), 0, 1) ) 在 PowerScript 中可以动态修改 Protect 属性: dw_1.Modify("c
非技术版
401
社区成员
11,495
社区内容
发帖
与我相关
我的任务
非技术版
PowerBuilder 非技术版
复制链接
扫一扫
分享
社区描述
PowerBuilder 非技术版
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章