兼容性还算可以,只不过我发现有些 Windows 消息无法拦截,比如像 WM_INITMENUPOPUP

解决方案 »

  1.   

    我用了,
    如果使用游客登陆XP
    VB不能用的.
    用权限最高的用户登陆.
      

  2.   

     寫應用程序和98及2000差不多,但是我在寫DOCUMENT DLL及DOCUMENT EXE時發現無法調試,調試運行居然是直接下載,差點吐血,不知道是不是因為D版的原因,所以現在還是用的2000。 不過XP啟動比2000快得多。也比2000穩定。
      

  3.   

    Private Sub DY0(PageMaxNo As Integer, FromPage As Integer, ToPage As Integer, Copies As Integer, HONGSHU As Integer, PriPauNot As Boolean)
    Static ColLen(20) As Integer, ColString(20) As String
    Static LeftLen As Integer
    'Dim PriPauNot As Boolean
    Dim ThisLeftStar As Integer
    Dim leftstar As Integer
    If Vbook(0) <> False Then
      adoPrimaryRS.Filter = Vbook
    End If
    PrintGuiGe = 0
    RowHeight = 300
    leftstar = 350
    Col_Width = 500
    ColLen(0) = 0  'this array  must be the number!
    ColLen(1) = 600
    ColLen(2) = 1120
    ColLen(3) = 1700
    ColLen(4) = 1600
    ColLen(5) = 1140
    ColLen(6) = 1140
    ColLen(7) = 1800
    ColLen(8) = 900
    ColLen(9) = 1120
    ZonLen = 11000
    'adoPrimaryRS.MoveFirst
    PageMaxNo = PageMaxNo + 1
    If adoPrimaryRS.RecordCount < 1 Then Exit Sub
    pagecoun = Abs(Int(Sijicoun / (-PageMaxNo)))
    For COPYC = 1 To Copies
    firstpo = (PageMaxNo - 1) * (FromPage - 1)
    adoPrimaryRS.Move firstpo, 1
    pageno = FromPage - 1
    Printer.Orientation = HONGSHU + 1
    Do While Not adoPrimaryRS.EOF
    ProgressBar1.Value = 0
    'MsgBox CStr(adoPrimaryRS.AbsolutePosition)
        beizhu_row = 0
        RowNumb = 0
        PrintFont "隶书", 14, False, False, False
        PrintTextCenter "中华人民共和国机车司机驾驶证", 0, 50, ZonLen + 100 + LeftStart
        PrintFont "黑体", 18, False, False, False
        PrintTextCenter "花名册", 0, 400, ZonLen + 100 + LeftStart
        PrintFont "宋体", 11, False, False, False
        PrintText "单位:", 500, 1050
        'PrintText "单位:" & are, 500, 1050
        PrintText "制表时间:" + Format(Now, "yyyy年m月d日"), 3500, 1050
        PrintText "№: " + Trim(Str(pageno + 1)), (PrintGuiGe + 1) * 10000, 1050
        'Printer.Line (leftstar, 1280)-(leftstar + ZonLen, 1280)
        Printer.Line (350, 1280)-(11350, 1280)
        Do While Not adoPrimaryRS.EOF
        If Trim(adoPrimaryRS!cxrzw) = "司机" Then
            If RowNumb = 0 Then
                PrintFont "黑体", 9, False, False, False
                ColString(1) = "工 号"
                ColString(2) = "驾驶证编号"
                ColString(3) = "局      别"
                ColString(4) = "分  局  别"
                ColString(5) = "段      别"
                ColString(6) = "姓  名"
                ColString(7) = "出 生 年 月"
                ColString(8) = "准驾机型"
                ColString(9) = "备 注"
            Else
                PrintFont "楷体_GB2312", 9, False, False, False
                ColString(1) = loadstring(adoPrimaryRS!cgh, 9)
                ColString(2) = loadstring(adoPrimaryRS!cjszbh, 9)
                ColString(3) = loadstring(adoPrimaryRS!cjb, 16)
                ColString(4) = loadstring(adoPrimaryRS!cfjb, 16)
                ColString(5) = loadstring(adoPrimaryRS!cdb, 16)
                ColString(6) = loadstring(adoPrimaryRS!cxm, 16)
                ColString(7) = loadstring(Format(adoPrimaryRS!dcsny, "yyyy年m月d日"), 16)
                ColString(8) = loadstring(adoPrimaryRS!czjjx, 16)
                ColString(9) = loadstring(beizhu(firstpo + beizhu_row - 1), 9)
                'MsgBox firstpo + beizhu_row - 1 & "qqq" & beizhu(firstpo + beizhu_row - 1)
                If Not adoPrimaryRS.EOF Then adoPrimaryRS.MoveNext
                ProgressBar1.Value = 100 / PageMaxNo * RowNumb
            End If
            ThisLeftStar = leftstar
            For col_num = 1 To 9
                Printer.Line (ThisLeftStar, 1280 + RowHeight * RowNumb)-(ThisLeftStar, 1280 + RowHeight * (RowNumb + 1))
                'PrintTextCenter ColString(col_num), ThisLeftStar, 1280 + 20 + RowHight * RowNumb, Len(ColString(col_num))
                PrintTextCenter ColString(col_num), ThisLeftStar + 20, 1280 + RowHeight * RowNumb + 50, ColLen(col_num) - 10
                ThisLeftStar = ThisLeftStar + ColLen(col_num)
            Next
            Printer.Line (leftstar + ZonLen, 1280 + RowHeight * RowNumb)-(leftstar + ZonLen, 1280 + RowHeight * (RowNumb + 1))
            If RowNumb Mod 5 = 0 Then
                Printer.DrawWidth = 3
                Printer.Line (leftstar, 1280 + RowHeight * (RowNumb + 1))-(leftstar + ZonLen, 1280 + RowHeight * (RowNumb + 1))
                Printer.DrawWidth = 1
            Else
                Printer.Line (leftstar, 1280 + RowHeight * (RowNumb + 1))-(leftstar + ZonLen, 1280 + RowHeight * (RowNumb + 1))
            End If
            RowNumb = RowNumb + 1
            beizhu_row = beizhu_row + 1
            If RowNumb >= PageMaxNo - 1 Or adoPrimaryRS.EOF Then
                Printer.Print ""
                PrintFont "宋体", 10, False, False, True
                pageno = pageno + 1
                PrintText "总" & pagecoun & "页", leftstar + 500, 1480 + RowHeight * (RowNumb + 1)
                PrintText "制表人:", leftstar + 2000, 1480 + RowHeight * (RowNumb + 1)
                PrintText "审核人(段长):", leftstar + 5500, 1480 + RowHeight * (RowNumb + 1)
                Exit Do
            End If
        Else
            adoPrimaryRS.MoveNext
        End If
        Loop
        Printer.EndDoc
        If pageno >= pagecoun Or pageno >= ToPage Then Exit Do
        If PriPauNot Then
          MsgSet = MsgBox("第" & pageno + 1 & "页" + "已经打印完毕,继续打印吗?", vbYesNo, "警报")
          If MsgSet = vbNo Then Exit Do
          'Printer.NewPage
        End If
    Loop
        adoPrimaryRS.MoveFirst
    Next
    adoPrimaryRS.Filter = adFilterNone
    End Sub
      

  4.   

    Sub PrintFont(tName As String, nSize As Integer, bBold As Boolean, bUnderline As Boolean, bItalic As Boolean)
    Printer.FontName = tName
    Printer.FontSize = nSize
    Printer.FontBold = bBold
    Printer.FontUnderline = bUnderline
    Printer.FontItalic = bItalic
    End SubSub PrintTextCenter(tText As String, Tx As Integer, ty As Integer, tlen As Integer)
    tWidth = Printer.TextWidth(tText)
    Printer.CurrentX = Tx + Int((tlen - tWidth) / 2)
    Printer.CurrentY = ty
    Printer.Print tText
    End SubSub PrintText(tText As String, Tx As Integer, ty As Integer)
    Printer.CurrentX = Tx
    Printer.CurrentY = ty
    Printer.Print tText
    End Sub
    Sub print2text(Text As String, Tx As Integer, ty As Integer, tlen As Integer)
    Select Case Len(Trim(Text))
    Case 2
     PrintTextCenter Left(Trim(Text), 1), Tx, ty, tlen
     PrintTextCenter Right(Trim(Text), 1), Tx, ty + 420, tlen
    Case 3
     PrintTextCenter Mid(Trim(Text), 1, 1), Tx, ty, tlen
     PrintTextCenter Mid(Trim(Text), 2, 1), Tx, ty + 210, tlen
     PrintTextCenter Mid(Trim(Text), 3, 1), Tx, ty + 420, tlen
    Case 4
     PrintTextCenter Mid(Trim(Text), 1, 1), Tx, ty, tlen
     PrintTextCenter Mid(Trim(Text), 2, 1), Tx, ty + 140, tlen
     PrintTextCenter Mid(Trim(Text), 3, 1), Tx, ty + 280, tlen
     PrintTextCenter Mid(Trim(Text), 4, 1), Tx, ty + 420, tlen
    End Select
    End SubSub PrintTextRight(tText As String, Tx As Integer, ty As Integer, tlen As Integer)
    tWidth = Printer.TextWidth(tText)
    Printer.CurrentX = Tx + tlen - tWidth
    Printer.CurrentY = ty
    Printer.Print tText
    End Sub