我修改了下,请再帮忙看看
我也不知道什么原因,这个提示好像跟我用到的控件也没关系,我用到了几个第三方控件我今天晚上把他们都改成自带控件了,你在测试下看看
在frmPageSet里面
有一个btnSave_click()事件,下面的代码里
For Each X In Printers
If X.DeviceName = cmbPrinter.Text Then
Set Printer = X
frmPrint.fps.hDCPrinter = X.hDC
Printer.PaperSize = Val(cmbPaperSize.Tag)
If Printer.PaperSize = 256 Then '自定义
Printer.Width = Val(txtWidth.Text) * 567
Printer.Height = Val(txtHeight.Text) * 567
End If
Printer.PaperBin = Val(cmbPaperbin.Tag)
Exit For
End If
Next
红色字体那行代码,也就是设置spread打印机关联的那行。去掉后就不会出现问题,加上以后,我这里打印机选择
点击确定按钮,原本设置的纵向就会变成横向,而且点击过一次确定按钮后,再进入设置界面,点击取消按钮,页码总数就会变成-1
选择另外一个虚拟打印机TinyPDF,纵向没有变成横向,但是也有小幅变化,页码总数也会变成-1
如果不点击确定就没事,我用排除法屏蔽代码,测试出是确定按钮中frmPrint.fps.hDCPrinter = X.hDC导致的,麻烦给尽快处理。 而且我也不知道我这个例程能不能真正实现和打印机同步设置,因为我最近在出差,没有打印机可以测试。
麻烦也顺便帮我测试下
谢谢 回复 22楼lifesky2006的帖子
很抱歉,你的Demo我还是无法运行起来。提示一样的错误。
页面总数和打印方向是通过什么方法设置的?猜测是 Spread 接收了打印机的默认设置改变了这两个属性。 那个错误是什么造成的“? 我在我这里两台电脑上测试都可以允许的 回复 25楼lifesky2006的帖子
页面总数和打印方向是通过什么方法设置的?猜测是 Spread 接收了打印机的默认设置改变了这两个属性。
抱歉,我暂时也不知道原因,我会尝试调试下 Demo 看能否运行通。 我在4台电脑上做了测试,工程都是可以打开的,3台XP系统,一台VMWARE虚拟机上的WIN7 64位
有2台是安装过VB的,1台是从来没有装过VB,我临时安装的,运行工程都没有问题的,您那出现的错误是在打开工程的时候还是运行的时候?
我的工程都是VB自带的控件,没有再使用第三方控件的 我再重新上传一次,同时把工程里用到的所有控件都打包进去了,您再试试
谢谢
页面总数和打印方向什么的都是参考的SPREAD的例程
页面总数设置:在frmPrint窗体里
Private Sub Form_Activate()
fpSpreadPreview1.hWndSpread = fps.hWnd
txtPage.Text = fpSpreadPreview1.PageCurrent & "/" & fps.PrintPageCount
End Sub
这个是保存以后的设置,包括打印方向和其他设置
With frmPrint.fps
For i = 0 To 3
If optPrintType(i).Value = True Then
.PrintType = i
Exit For
End If
Next
If .PrintType = 3 Then '页码范围
.PrintPageStart = Val(txtStart.Text)
.PrintPageEnd = Val(txtEnd.Text)
End If
If optLandscape.Value = True Then
.PrintOrientation = PrintOrientationLandscape
' Printer.Orientation = vbPRORLandscape
Else
.PrintOrientation = PrintOrientationPortrait
' Printer.Orientation = vbPRORPortrait
End If
.PrintMarginTop = Val(txtTop.Text) * 567
.PrintMarginBottom = Val(txtBottom.Text) * 567
.PrintMarginLeft = Val(txtLeft.Text) * 567
.PrintMarginRight = Val(txtRight.Text) * 567
tmp = ""
If InStr(txtHeader.Text, vbCrLf) > 0 Then '有换行
pl = Split(txtHeader.Text, vbCrLf)
For i = LBound(pl) To UBound(pl)
txtHeader.Text = CStr(pl(i))
tmp = tmp & GetData(txtHeader, Combo1.Text)
If i < UBound(pl) Then tmp = tmp & "/n"
Next
Else
tmp = GetData(txtHeader, Combo1.Text)
End If
.PrintHeader = tmp
tmp = ""
If InStr(txtFooter.Text, vbCrLf) > 0 Then '有换行
pl = Split(txtFooter.Text, vbCrLf)
For i = LBound(pl) To UBound(pl)
txtFooter.Text = CStr(pl(i))
tmp = tmp & GetData(txtFooter, Combo2.Text)
If i < UBound(pl) Then tmp = tmp & "/n"
Next
Else
tmp = GetData(txtFooter, Combo2.Text)
End If
.PrintFooter = tmp
.PrintColHeaders = chkColHeader.Value
.PrintRowHeaders = chkRowHeader.Value
.PrintGrid = chkGridLine.Value
.PrintBorder = chkBorder.Value
.PrintCenterOnPageH = chkHCenter.Value
.PrintCenterOnPageV = chkVCenter.Value
If Len(txtTitle.Text) > 0 Then
myTitle.Title = txtTitle.Text
myTitle.Name = txtTitle.Font.Name
myTitle.Size = txtTitle.Font.Size
myTitle.Bold = txtTitle.Font.Bold
myTitle.Italic = txtTitle.Font.Italic
myTitle.Underline = txtTitle.Font.Underline
myTitle.Strikethrough = txtTitle.Font.Strikethrough
If .ColHeaderRows = 1 Then
.ColHeaderRows = .ColHeaderRows + 1
For i = 1 To .MaxCols
.Col = i
.Row = SpreadHeader
tmp = .Text
.Row = SpreadHeader + 1
.Text = tmp
Next
End If
.Col = 1
.Row = SpreadHeader
.Text = myTitle.Title
.Font.Name = myTitle.Name
.Font.Size = myTitle.Size
.FontBold = myTitle.Bold
.FontItalic = myTitle.Italic
.FontUnderline = myTitle.Underline
.FontStrikethru = myTitle.Strikethrough
.AddCellSpan 1, SpreadHeader, .MaxCols, 1
' .TypeHAlign = TypeHAlignCenter
End If
End With
For Each X In Printers
If X.DeviceName = cmbPrinter.Text Then
Set Printer = X
frmPrint.fps.hDCPrinter = X.hDC
Debug.Print frmPrint.fps.hDCPrinter
Printer.PaperSize = Val(cmbPaperSize.Tag)
If Printer.PaperSize = 256 Then '自定义
Printer.Width = Val(txtWidth.Text) * 567
Printer.Height = Val(txtHeight.Text) * 567
End If
Printer.PaperBin = Val(cmbPaperbin.Tag)
Exit For
End If
Next
Printer.Copies = Val(txtCopies.Text) 请帮帮忙,我不知道你那里为什么不能运行我的demo,我都测试了4台电脑了,都可以运行