如何用VB打印旋转一定角度的字符

解决方案 »

  1.   

    [名称]           谈谈VB应用程序的几种打印方法[数据来源]       未知[内容简介]       空[源代码内容]谈谈Visual Basic应用程序的几种打印方法 
    浏览: 475 次 
    打印是编制应用程序过程中最复杂的事情之一,不同的打印机提供了各种不同的功能。编写能充分利用打印机性能的子程序与编写应用程序的其它部分一样都很困难。庆幸的微软的Windows平台使打印工作变得相对容易了   最近,笔者编制出一套综合试题库管理系统,完成试题的编辑、自动组卷及打印试卷等工作,在编程时,也碰到了打印问题,笔者找到了几种打印方法,现将它们整理出来,以飧读者,希望能给您的工作提供一点方便。   一、采用Visual Basic提供简单的打印函数PrintForm方法   应用程序窗体的PrintForm方法时,Visual Basic把窗体的位图送到当前打印机。该方法的优点在于它几乎不需要任何编程,但也有很大缺陷。最为突出的是当低分辨率图形在高分辨率打印机上打印时,其结果令人无法满意,会产生锯齿。下面代码将在打印机上打印窗体。 Private Sub Command1_Click() '用PrintForm打印 
         Me.PrintForm '打印窗体的可见区域 
    End Sub   二、用Printer对象 
      用Printer对象可以进行高分辨率输出,但要想产生复杂的打印输出,编程较为繁琐。Printer对象代表系统确省的打印机。Printer对象支持许多由窗体和图形框所支持的属性和方法,三种对象都有画线和画方框。应用程序可用以下列代码在Printer对象上画出一平方英寸的方框。它离左上角二英寸。注意:打印机以twips来测量距离。每英寸有1440个twips。   Printer.Line(2*1440,2*1440)-Step(1440,1440), ,B   打印机、从窗体和图形框都有Circle、PaintPicture、Print、Pset、TextHeight、TextWidth方法。使用这些方法,应用程序可以为打印机生成高分辨率输出。 
      打印文本直接用Print方法,见下列代码:   Printer.Print “Hello,China ComputerWorld!” ‘打印字符串   Printer对象还有一些窗体和图形框都没有方法:   NewPage告诉打印机,程序对当前输出页的发送已经结束。Printer对象应开始新的一页。   EndDoc告诉VISUAL BASIC,程序创建文档结束。VISUAL BASIC应将它发送到物理打印机上打印。   KillDoc取消当前打印作业。应用程序应该终止由EndDoc和KillDoc所设定的每个打印作业。   Zoom属性用于定义打印输出的缩放因子。   Copies属性用于定义打印的副本数目。   三、采用直接将数据传送打印机的方法进行打印输出   该方法也不太实用。有两种方法将数据送往打印机。第一种是用Print # 方法,就象将数据写入一个文件一样写数据。另一种方法写端口,但不是送文本,而是送特定的PCL语言,PCL表示打印控制语言(Print Control Language)。它是一种特殊语言,用转义代码来控制打印机的具体动作。因为此方法太繁琐,本文不做太多介绍,见谅。   四、使用RichTextBox控件的SelPrint方法   如果你在编程时用到了RichTextBox控制,那么你可以使用该控件的SelPrint 方法来打印,使用非常简单。下面一段代码即用RichTextBox控件的SelPrint 方法来完成打印。 Private Sub Command3_Click() 'SelPrint方法 
    CommonDialog1.Flags = cdlPDReturnDC + cdlPDNoPageNums 
    If RTF1.SelLength = 0 Then  'RTF1为窗体的RichTextBox控制 
    CommonDialog1.Flags = CommonDialog1.Flags + cdlPDAllPages 
        Else 
    CommonDialog1.Flags = CommonDialog1.Flags + cdlPDSelection 
        End If 
        CommonDialog1.CancelError = True 
        On Error Resume Next 
        CommonDialog1.ShowPrinter 
        If Err.Number = cdlCancel Then Exit Sub 
        If Err.Number < > 0 Then 
          Beep 
          MsgBox "Error printing file. 
    " & vbCrLf + Err.Description, vbOKOnly + vbExclamation, 
    "Printing Error!" 
        Exit Sub 
        End If 
        Printer.Print "" 
    RTF1.SelPrint CommonDialog1.hDC ' 
    打印RTF1控件的可见区域 
    End Sub   上面代码先进行打进设置,再进行打印。如果不需要设置,采用下面代码更为简单。 
      RTF1.SelPrint Printer.hDC '打印RTF1控件的可见区域   五、可以在VB中调用Word 97提供的OLE自动化服务   利用Word 97强大的打印功能来完成VISUAL BASIC打印,笔者认为这是最令人满意的方法。下面代码说明VB如何与Word集成。 Private Sub Command4_Click() '调用Word打印 
        Dim objWord As Object 
        Const CLASSOBJECT = "Word.Application" 
           On Error GoTo objError 
          Set objWord = CreateObject(CLASSOBJECT) 
        objWord.Visible = True 
        objWord.Documents.Add 
    With objWord 
    .ActiveDocument.Paragraphs.Last.Range.Bold = False 
    .ActiveDocument.Paragraphs.Last.Range.Font.Size = 20 
    .ActiveDocument.Paragraphs.Last.Range.Font.Name = "黑体" 
    .ActiveDocument.Paragraphs.Last.Range.Font.ColorIndex = 4 
    .ActiveDocument.Paragraphs.Last.Range.Text = 
    "我是计算机世界读者!" 
      End With 
         Clipboard.Clear 
    Clipboard.SetText "通过剪切板向WORD传送数据!" 
       objWord.Selection.Paste 
       objWord.PrintPreview = True '预览方式 
       'objWord.PrintOut'执行打印 
       'objWord.Quit'退出Word 
    Exit Sub 
    objError: 
    If Err < > 429 Then 
         MsgBox Str$(Err) & Error$ 
    Set objWord = Nothing '不能创建Word对象则退出 
        Exit Sub 
    Else 
        Resume Next 
    End If 
    End Sub   六、用VC编制DLL模块完成打印 
      在VISUAL BASIC中调用该模块的混合编程的方法进行打印输出。因涉及VC编程比较繁琐,因篇幅问题这里不再讨论,但可以肯定用VC编制的打印将更具特色。   笔者的试题库采用的是第五和第六两种方案,如果机器上没有Word ,就调用DLL打印模块。打印是编程工作中重要的一部分,总的来说,微软已经使打印变得极为简便,但还要我们做一些必须的工作。希望本文能够拓展你编程的思路,编出更好的应用程序。
         以上代码保存于: SourceCode Explorer(源代码数据库)
               复制时间: 2005-08-20 19:02:17
               软件版本: 1.0.870
               软件作者: Shawls
                 E-Mail: [email protected]
                     QQ: 9181729
      

  2.   

    在picturebox控件中绘制一定角度的字符方法
    声明:
    Private Type LOGFONT
            lfHeight As Long
            lfWidth As Long
            lfEscapement As Long
            lfOrientation As Long
            lfWeight As Long
            lfItalic As Byte
            lfUnderline As Byte
            lfStrikeOut As Byte
            lfCharSet As Byte
            lfOutPrecision As Byte
            lfClipPrecision As Byte
            lfQuality As Byte
            lfPitchAndFamily As Byte
            lfFaceName(1 To LF_FACESIZE) As Byte
    End Type
    Private Const LF_FACESIZE = 32
    Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
    Private Declare Function CreateFontIndirect Lib "gdi32" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long
    Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hDc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
    Private Declare Function SelectObject Lib "gdi32" (ByVal hDc As Long, ByVal hObject As Long) As Long
    private sub picture1_click()
    Dim lF As LOGFONT
        
        With lF
            .lfEscapement = 3.14 / 4 '字体角度
            .lfWidth = 100 '字体宽度
            .lfHeight = 100 '字体高度
        
            .lfCharSet = GB2312_CHARSET '打印汉字
        End With
        Dim Ft As Long
        dim tS as string
        tS="汉字"
        Ft = CreateFontIndirect(lF)
        SelectObject Picture1.hDc, Ft
        TextOut Picture1.hDc, 100, 100, tS, LenB(tS)
        deleteobject Ft
    end sub