lifesky2006 发表于 2014-10-13 23:09:00

我修改了下,请再帮忙看看

我也不知道什么原因,这个提示好像跟我用到的控件也没关系,我用到了几个第三方控件
我今天晚上把他们都改成自带控件了,你在测试下看看


lifesky2006 发表于 2014-10-13 23:21:00

在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导致的,麻烦给尽快处理。

lifesky2006 发表于 2014-10-13 23:26:00

而且我也不知道我这个例程能不能真正实现和打印机同步设置,因为我最近在出差,没有打印机可以测试。
麻烦也顺便帮我测试下

谢谢

iceman 发表于 2014-10-14 14:38:00

回复 22楼lifesky2006的帖子

很抱歉,你的Demo我还是无法运行起来。提示一样的错误。

页面总数和打印方向是通过什么方法设置的?猜测是 Spread 接收了打印机的默认设置改变了这两个属性。

lifesky2006 发表于 2014-10-14 15:17:00

那个错误是什么造成的“? 我在我这里两台电脑上测试都可以允许的

iceman 发表于 2014-10-14 18:46:00

回复 25楼lifesky2006的帖子

页面总数和打印方向是通过什么方法设置的?猜测是 Spread 接收了打印机的默认设置改变了这两个属性。

抱歉,我暂时也不知道原因,我会尝试调试下 Demo 看能否运行通。

lifesky2006 发表于 2014-10-16 15:42:00

我在4台电脑上做了测试,工程都是可以打开的,3台XP系统,一台VMWARE虚拟机上的WIN7 64位
有2台是安装过VB的,1台是从来没有装过VB,我临时安装的,运行工程都没有问题的,您那出现的错误是在打开工程的时候还是运行的时候?
我的工程都是VB自带的控件,没有再使用第三方控件的

lifesky2006 发表于 2014-10-16 15:59:00

我再重新上传一次,同时把工程里用到的所有控件都打包进去了,您再试试
谢谢


lifesky2006 发表于 2014-10-16 16:11:00

页面总数和打印方向什么的都是参考的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 &amp; "/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 &amp; GetData(txtFooter, Combo2.Text)
                If i < UBound(pl) Then tmp = tmp &amp; "/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)

lifesky2006 发表于 2014-10-16 16:12:00

请帮帮忙,我不知道你那里为什么不能运行我的demo,我都测试了4台电脑了,都可以运行
页: 1 2 [3] 4 5
查看完整版本: 请尽快提供一份完整可用的打印实例(代码)