Office中国论坛/Access中国论坛
标题:
在ACCESS实现自定义纸张
[打印本页]
作者:
andymark
时间:
2011-10-9 11:02
标题:
在ACCESS实现自定义纸张
在ACCESS自定义纸张源码
窗体代码:
Private Sub CmdNew_Click()
Dim PrinterName As String
Dim FormName As String
Dim FormSize As SIZEL
Dim PrinterHandle As Long
Dim LngWidth As Long
Dim LngHeight As Long
If IsNull(Me.TxtNewStyle) Then
MsgBox "请输入要创建的打印格式"
Me.TxtNewStyle.SetFocus
Exit Sub
End If
If IsNull(Me.TxtWidth) Then
MsgBox "请输入要创建的打印格式的宽度尺寸(mm)"
Me.TxtHeight.SetFocus
Exit Sub
End If
If IsNull(Me.TxtHeight) Then
MsgBox "请输入要创建的打印格式高度尺寸(mm)"
Me.TxtWidth.SetFocus
Exit Sub
End If
If Not IsNumeric(Me.TxtWidth) Then
MsgBox "打印格式宽度尺寸必须是数字类型"
Me.TxtWidth.SetFocus
Exit Sub
End If
If Not IsNumeric(Me.TxtHeight) Then
MsgBox "打印格式高度尺寸必须是数字类型"
Me.TxtWidth.SetFocus
Exit Sub
End If
Dim RetVal As Long
Dim Continue As Long
PrinterName = GetSrvName(cmbPrinter)
FormName = Me.TxtNewStyle
LngWidth = Me.TxtWidth * 1000
LngHeight = Me.TxtHeight * 1000
If PrinterName = "" Then
PrinterName = Printer.DeviceName '当前打印机
Else
MakeDefaultPrinter PrinterName '设置默认打印机
End If
RetVal = AddCustForm(FormName, Me.hwnd, LngWidth, LngHeight, PrinterName)
Select Case RetVal
Case FORM_NOT_SELECTED ' 0
' Selection failed!
MsgBox "添加错误" & " ErrorCode:" & Err.LastDllError, vbExclamation, _
"错误!"
Case FORM_SELECTED ' 1
MsgBox FormName & " 打印格式已经存在于 " & PrinterName & " ", vbExclamation
Case FORM_ADDED ' 2
'//Form added and selected.
MsgBox FormName & " 打印格式已经添加到 " & PrinterName, vbInformation
AddMyForm = True
End Select
ReGetPaperList
End Sub
Private Sub Form_Load()
Dim Prn As Printer
Dim Obj As AccessObject
For Each Prn In Printers
Me.cmbPrinter.AddItem Prn.DeviceName
Next
If cmbPrinter.ListCount > 0 Then
cmbPrinter = Printer.DeviceName
LstPaper.RowSource = GetPaperList(cmbPrinter)
End If
For Each Obj In CurrentProject.AllReports
Me.LstReport.AddItem Obj.Name
Next
End Sub
Private Sub cmbPrinter_AfterUpdate()
Call ReGetPaperList
End Sub
Private Sub CmdDelete_Click()
Dim colNetworkPrinters As New Collection
Dim srvName As String, tmpName As String
Dim FormName As String
Dim PrinterName As String
Dim i
On Error Resume Next
If Me.LstPaper.ListIndex < 0 Then
MsgBox "请选择要删除的纸张格式"
Exit Sub
End If
FormName = Mid(LstPaper, 1, InStr(1, LstPaper, " -") - 1)
tmpName = ""
srvName = GetSrvName(cmbPrinter)
If srvName <> "" Then
Call DeleteMyForm(srvName, FormName)
End If
ReGetPaperList
End Sub
Private Sub CmdReport_Click()
Dim Rpt As Report
' Dim Prt As Report
'Dim accObj As AccessObject
Dim strReportName As String
If Me.LstReport.ListIndex < 0 Then
MsgBox "请选择报表"
Exit Sub
End If
If Me.LstPaper.ListIndex < 0 Then
MsgBox "请选择打印的纸张类型"
Exit Sub
End If
strReportName = LstReport
If IsLoaded(strReportName) Then
MsgBox "不能重复打开相同的报表"
Exit Sub
End If
Select Case strReportName
Case "报表1"
Set Rpt = New Report_报表1
Case "客户标签"
Set Rpt = New Report_客户标签
Case "概览子报表"
Set Rpt = New Report_概览子报表
Case Else
Set Rpt = New Report_报表1
End Select
' Set Rpt = Reports(strReportName)
'Set Rpt = New Report_报表1
With Rpt.Printer
.PaperSize = GetPaperSize(LstPaper)
.Orientation = Me.frameOrientation.Value
End With
clnClient.Add Item:=Rpt, Key:=CStr(Rpt.hwnd)
Rpt.Visible = True
End Sub
Private Sub ReGetPaperList()
'刷新表单(纸张)列表
If Not IsNull(Me.cmbPrinter) Then
LstPaper.RowSource = ""
LstPaper.RowSource = GetPaperList(cmbPrinter)
End If
End Sub
完整代码请参考附件
复制代码
[attach]46876[/attach]
作者:
Henry D. Sy
时间:
2011-10-9 11:15
谢谢分享!
作者:
t小宝
时间:
2011-10-9 11:24
精品之作!
作者:
wuheng
时间:
2011-10-9 13:44
谢谢分享,先下再学.顶~~~~~``
作者:
轻风
时间:
2011-10-9 14:48
好东西呀!
作者:
风中漫步
时间:
2011-10-9 15:06
不错
作者:
todaynew
时间:
2011-10-9 15:09
学习一下
作者:
tzh16000
时间:
2011-10-9 15:15
太需要了...
作者:
咱家是猫
时间:
2011-10-9 15:37
收藏先,以后用得着,谢谢分享.
作者:
yanghua1900363
时间:
2011-10-9 16:43
谢谢分享
作者:
tmtony
时间:
2011-10-9 18:52
精品之作,谢谢分享!
作者:
t小宝
时间:
2011-10-9 20:19
似乎有点问题,使用新创建的自定义格式预览报表时,ACCESS崩溃,使用的打印机是Microsoft Office Document Image Writer
作者:
andymark
时间:
2011-10-9 20:42
小宝的是什么系统,麻烦换其他驱动测试
2010 和 2003 环境下都没有你说的问题
作者:
xie62
时间:
2011-10-10 09:39
谢谢分享.
作者:
zhao__feng
时间:
2011-10-10 11:43
十分需要,谢谢!!
作者:
t小宝
时间:
2011-10-10 21:23
andymark 发表于 2011-10-9 20:42
小宝的是什么系统,麻烦换其他驱动测试
2010 和 2003 环境下都没有你说的问题
如果打印机是Canon iP2700 series,不会崩溃,但也不能等到自定义页面,如我定义一个10CM*10CM的自定义纸张,用这个格式来预览,但并没有显示为正方形的纸张。
如果打印机为Microsoft Office Document Image Writer,则ACCESS崩溃。
作者:
c101
时间:
2011-10-10 22:46
谢谢分享
作者:
风中漫步
时间:
2011-10-11 08:42
是稍有点小问题
在打印机表单的描述中如果多于2个"("的话就会取PAGESIZE错误(如:B4 (JIS)257MM*364MM (12)),建议将GetPaperSize函数中的instr换为instrrev
其他的没发现问题.期待斑竹的修正版
作者:
xuwenning
时间:
2011-10-11 09:04
谢谢分享
收下来
作者:
tanhong
时间:
2011-10-11 12:05
也收藏一下,问这个的人挺多。
作者:
yyh740225
时间:
2011-10-14 11:54
正需要呢.
作者:
yy2000
时间:
2011-10-14 13:42
学习.
作者:
danis
时间:
2012-2-14 21:09
mark
作者:
VulcanTerry
时间:
2012-11-8 17:45
很有味道
作者:
fnsmydyang
时间:
2014-3-24 14:57
下载学习了。
作者:
zpy2
时间:
2014-6-25 05:55
谢谢了!!!
作者:
purplerose
时间:
2015-8-3 14:31
赞一个
作者:
siaele
时间:
2016-4-6 11:31
谢谢分享,很有启发
作者:
李力军2
时间:
2016-8-12 18:18
谢谢分享,先顶后学
作者:
灰太郎
时间:
2018-12-17 18:40
白白白白白
作者:
灰太郎
时间:
2022-1-24 16:54
123456
作者:
灰太郎
时间:
2022-2-6 19:41
123456
作者:
灰太郎
时间:
2022-2-6 19:44
12345623
作者:
shixm_1
时间:
2022-6-5 09:23
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3