水晶报表的问题,如何用程序在2000/xp系统中添加自定义纸张

ebw_ren 2004-09-17 03:19:02

看了很多类似的文章,请教一下,如何在系统中用程序添加自定义纸张。

我在水晶报表中,选了自定义纸张ps1,调试PaperSize=132 我把这个ps1在打印机的服务器属性里删掉,再加了个ps2的自定义纸张,发现水晶报表里的自定义纸张变成了ps2,也就是说报表是通过PaperSize来选择自定义纸张的,如果我们选择了个ps1的自定义纸张,在其他机子上PaperSize的值一般是不同的,所以这个自定义纸张到别的机子上就没用,

但程序可以指定报表的PaperSize,主要问题是换了机子,怎么知道我这个ps1的PaperSize呢,如果程序能够添加自定义纸张,并且返回PaperSize,那么关于报表的自定义纸张的问题就解决了

另:看了很多人说要在客户的机子上重新设置自定义纸张,再编译程序,否则就是默认纸张,就是为了更换PaperSize,同一个自定义纸张名字如果在不同机子上,一般是不同的。
...全文
203 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ebw_ren 2004-09-20
  • 打赏
  • 举报
回复
看了微软的写法,知道怎么加了。
这个水晶报表真拿他没办法,看来只有改默认设置了。
ebw_ren 2004-09-20
  • 打赏
  • 举报
回复
天哪,头都破了,为什么在代码中改水晶报表的PaperSize不能改成自定义的? 改成系统自带的就行,晕倒哦,是不是方法不对,或是版本不对,我是8.0的,是这样写的
Dim myPaperSize As Integer
myPaperSize = getPaperSize(m_dsrReport.PrinterName, m_dsrReport.PortName, "自定义纸张名")
If myPaperSize <> -1 Then
m_dsrReport.PaperSize = myPaperSize
Else
MsgBox "自定义纸张不存在,请(省略掉100字)"
End If
End Sub
ebw_ren 2004-09-20
  • 打赏
  • 举报
回复
这个函数可以根据纸张名来获取PaperSize,如果你要找的纸张名不存在,就提示用户添加吧,就是不知道程序怎么加,一定有api可以加的吧。
调用的时候可以这样 PaperSize = getPaperSize(m_dsrReport.PrinterName, m_dsrReport.PortName, "自定义纸张名")
Public Function getPaperSize(DeviceName As String, Port As String, PaperSizeName As String)
Dim Ret As Long, PaperSizes() As Integer
Dim PaperNames() As String, PageNames() As Byte
Dim allNames As String
Dim lStart As Long, lEnd As Long

getPaperSize = -1

Ret = DeviceCapabilities(DeviceName, Port, DC_PAPERS, ByVal 0&, ByVal 0&)
ReDim PaperSizes(1 To Ret) As Integer
Ret = DeviceCapabilities(DeviceName, Port, DC_PAPERS, PaperSizes(1), ByVal 0&)

ReDim PaperNames(1 To Ret) As String
ReDim PageNames(1 To Ret * 64) As Byte
Call DeviceCapabilities(DeviceName, Port, DC_PAPERNAMES, PageNames(1), ByVal 0&)

allNames = StrConv(PageNames, vbUnicode)
i = 1
Do
lEnd = InStr(lStart + 1, allNames, Chr$(0), vbBinaryCompare)
If (lEnd > 0) And (lEnd - lStart - 1 > 0) Then
PaperNames(i) = Mid$(allNames, lStart + 1, lEnd - lStart - 1)
i = i + 1
End If
lStart = lEnd
Loop Until lEnd = 0

Dim Cnt As Long
For Cnt = 1 To Ret
If UCase(CStr(PaperNames(Cnt))) = UCase(PaperSizeName) Then
getPaperSize = PaperSizes(Cnt)
End If
Next
End Function
wumylove1234 2004-09-18
  • 打赏
  • 举报
回复
像我这样吧,改打印机默认设置,打印完之后再改回来!
wumylove1234 2004-09-18
  • 打赏
  • 举报
回复
FAQ列表的应该是只对Printer有效的.因为我试过,用AR的Pritner对象,跟本不起做用.
再说一句,AR的Printer的Hdc是0.跟本没用.
wwqna 2004-09-18
  • 打赏
  • 举报
回复
http://support.microsoft.com/default.aspx?scid=kb;zh-cn;282474
看看人家微软写的吧!
wumylove1234 2004-09-18
  • 打赏
  • 举报
回复
对了,你是不是有针打呢?有针打的话,你加我一下QQ,1669436,我正好没有针打做测试!!!!!!!!!!!!!!!!!!!!!

希望你尽快联系我!
RUKYO 2004-09-18
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=195778

http://www.china-askpro.com/msg18/qa80.shtml
wumylove1234 2004-09-17
  • 打赏
  • 举报
回复
我想AR和CR不知道一样不一样.
AR也是跟据PaperSize来获取纸型的,现在在程序中是对的,然后我发给别人测试,结果就不对,后来我才发现当PaperSize发生改变时,报表又会自动转成"打印机默认"!

周一有针打就可以测试了.如果成功,我会把代码发出来.

http://community.csdn.net/Expert/topic/3376/3376389.xml?temp=.5108301

关注我的帖子吧.
wumylove1234 2004-09-17
  • 打赏
  • 举报
回复
AR的问题我也正在解决这个问题中.现在有些进展,已在某针打上测试成功(网友测试,没见到打印效果).用了大堆API!
popraincn 2004-09-17
  • 打赏
  • 举报
回复
这我问题我也一直在想,可是还没有什么结果,不好意思。。


那位高人可以为我们这帮小弟指点迷津啊。。。
yelang771 2004-09-17
  • 打赏
  • 举报
回复
up
ebw_ren 2004-09-17
  • 打赏
  • 举报
回复
怎么没人讨论哦,是不是太简单了
ebw_ren 2004-09-17
  • 打赏
  • 举报
回复
这里有vc的
http://www.vccode.com/file_show.php?id=2164

1,217

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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