在RICHTEXTBOX中,我用2种字体显示,一种是自己做的字体(每个字体的宽度是一致的),另一种是宋体。上一行是我做的字体,下一行是宋体,为何在RICHTEXTBOX中显示时是对齐的,预览时也是对齐的,但打印出来就出现错位了?显示、预览的例子从下边网址下载:
http://www.mndsoft.com/blog/VB6/1109.html具体情况是:如果2种字体是相同的,只是字号不同,那么好像不会出现错位。但如果2种字体不同、字号不同,那么所见即所得就实现不了了,其中某一字体的宽度似乎有了变化,不能实现对齐,而这时候预览是正常的,不知道是什么原因?

解决方案 »

  1.   

    如果回答成功了,这边的100也恭敬送上:http://topic.csdn.net/u/20110728/11/8e3e3774-850d-4c5f-a6c9-0316cb305a58.html(请在这边留下记号)
      

  2.   

    使用 RichTextBox 控件
    RichTextBox 控件可用于输入和编辑文本,它同时提供了比常规的 TextBox 控件更高级的格式特性。RichTextBox 控件提供了一些属性,通过这些属性,可对该控件中任何部分的文本使用不同的格式。用这些属性,可以将文本变为粗体或斜体,改变文本的颜色,创建上标或下标。可以调整段落的左右缩进值,还可以使用悬挂式缩进。用途
    作为“无底”的文本框,可用于编写阅读特别大的文本文件的应用程序。
    在任何应用程序中实现功能完备的文本编辑器。 
    特性
    以 RTF 格式或 ASCII 文本格式打开或保存文件。可以使用该控件的方法(LoadFile 和 SaveFile),直接读写文件。也可以用该控件的属性,比如 SelRTF 和 TextRTF,联合 Visual Basic 的文件输入输出语句读写文件。
    将 .rtf 文件的内容装入 RichTextBox 控件,只需将该文件(比如从 Windows 95 “资源管理器”中)的内容直接拖入该控件,或者将其它应用程序(比如 Microsoft Word)中使用文件的突出显示部分直接拖入该控件。
    设置 FileName 属性,将 .rtf 或 .txt 文件的内容装入该控件。
    用 SelPrint 方法打印 RichTextBox 控件中的全部或部分文本。
    将 RichTextBox 控件绑定到 Data 控件,可以处理 Microsoft Access 数据库的 Memo 字段,或者其它数据库中大型的文本字段(比如 SQL 服务器中的 TEXT 数据类型)。
    在运行时,用 OLEObject 集合的 Add 方法,将嵌入对象,比如位图、图标、应用程序图标,加到该控件中。在设计时或运行时,可以拖放任何嵌入对象到控件中,包括文档,比如 Microsoft Excel 的电子表格和 Microsoft Word 文档等。 
    在设计时设置滚动条
    按照缺省规定,RichTextBox 没有滚动条。在运行时,如果在该控件中装入了较大的文件,最终用户就不能看到文件的全部内容了。为使用户能够方便地进行滚动,可将其 ScrollBars 属性设置为 1(水平的)、2(竖直的)或 3(两个都有)。这必须在设计时完成,因为 ScrollBars 属性在运行时是只读的。用 LoadFile 和 SaveFile 方法打开和保存文件
    用 LoadFile 和 SaveFile 方法可以方便地为 RichTextBox 控件打开或保存 RTF 文件。要打开文件,可用 CommonDialog 控件提供路径名,如下所示:Private Sub OpenFile()
       'RichTextBox 控件的名称是“rtfData”。
       'CommonDialog 名为“dlgOpenFile”。
       '为文件名声明 String 变量。
       '显示 “打开文件”对话框,
       '并将变量设置为文件名。
       Dim strOpen As String   
       dlgOpenFile.ShowOpen  
       strOpen = dlgOpenFile.FileName
       '用 LoadFile 方法打开该文件。
       rtfData.LoadFile strOpen
    End Sub用 SaveFile 方法,保存文件也同样简便:Private Sub SaveFile()
       Dim strNewFile As String  
       dlgOpenFile.ShowSave
       strNewFile = dlgOpenFile.FileName 
       rtfData.SaveFile strNewFile
    End Sub注意 如果文件中包含了该控件不能支持的 RTF 编码,仅相关的文本在 RichTextBox 控件中将不会出现。用 SelFontName、SelFontSize 和 SelFontColor 设置字体属性
    要改变 RichTextBox 控件中的字体特性,可以使用 SelFontName、SelFontSize 和 SelFontColor 属性。通常使用 ComboBox 控件显示这些属性的选项。随后可用 ComboBox 控件的 Click 事件改变属性。下面的代码首先在 Form 对象的 Load 事件中,充填名为“cmbFonts”的 ComboBox 控件。然后用 Click 事件改变 RichTextBox 控件的 SelFontName 属性。Private Sub Form_Load()
       Dim i As Integer
       With cmbFonts
          For i = 0 to Screen.Fonts.Count - 1
          .AddItem Screen.Fonts(i).Text
       End With
    End SubPrivate Sub cmbFonts_Click()
       rtfData.SelFontName = cmbFonts.Text
    End Sub重点 这些属性只影响选中的文本,或者,如果没有选中文本,则影响当前光标位置之后键入的文本。格式化段落的缩进、悬挂式缩进和项目符号
    RichTextBox 控件的另一个特性是它可以创建有缩进、悬挂式缩进和项目符号的段落。这三种样式显示如下:缩进和带项目符号的缩进 (rtf_3ind.bmp)要使用 SelFontName、SelFontSize 和 SelFontColor 属性,最终用户必须选中一个或多个段落。在这里,假设用户只选中了第二段,创建缩进和悬挂式缩进的代码如下所示:'假设该控件的名称是“rtfData”。
    rtfData.SelIndent = .5
    rtfdata.SelHangingIndent = 1.5请注意用于设置 SelIndent、SelHangingIndent、BulletIndent 和其它属性的值,要依赖于 RichTextBox 控件的容器的 ScaleMode 属性。例如,如果 RichTextBox 控件的容器是 Form 对象,则将该 Form 对象的 ScaleMode 属性由 7(厘米)改为 1(缇)时,SelIndent 属性必须同时由 0.5(厘米)改为 283(缇)。这是因为一厘米 = 567 缇。同时还要注意段落的 SelBullet 属性必须设置为 True,才能将该段设置为有项目符号的样式。用 SelChange 事件通知属性的变化
    要通告用户选中的任何文本的当前属性,可以使用 SelChange 事件。每当插入点改变,或者选中内容被改变时,均会产生该事件。下面的示例用 Toolbar 控件通告用户 SelBold 属性的变化。Private Sub rtfData_SelChange()
       '重新设置 Toolbar 的 Button 对象的
       ' Value 属性。该 Toolbar 控件的名称是
       '“tlbRTF”。   'SelBold 返回 0、-1 或 Null。如果它为 Null 
       '则将其 Mi xedState 属性设置为 True。   Select Case rtfData.SelBold
       Case 0 '不是粗体。
          tlbRTF.Buttons("bold").Value = tbrUnpressed
       Case -1 '粗体。
          tlbRTF.Buttons("bold").Value = tbrPressed
       Case Else '混合状态。
          tlbRTF.Buttons("bold").Mi xedState = True
       End Select
    End Sub用 SelPrint 方法打印 RichTextBox 的内容
    要打印 RichTextBox 控件,可以使用 SelPrint 方法。该方法需要一个参数,即用来打印 RichTextBox 控件内容的 Printer 对象的 hDC 属性。如果用户选中了某些文本,则只打印选中的文本。如果没有选中任何文本,则打印该控件的所有内容。下面的代码,在用户单击 CommandButton 控件后,用 CommonDialog 控件显示“打印机”对话框。Flags 属性禁用了页码,并使用户能够在该对话框中选择多种选项:Private Sub cmdPrint_Click()
       'CommonDialog 控件的名称是“dlgPrint”。
        
       dlgPrint.Flags = cdlPDReturnDC + cdlPDNoPageNums
       If rtfData.SelLength = 0 Then
          dlgPrint.Flags = dlgPrint.Flags + cdlPDAllPages
       Else
          dlgPrint.Flags = dlgPrint.Flags + cdlPDSelection
       End If
       dlgPrint.ShowPrinter
       rtfData.SelPrint dlgPrint.hDC
    End Sub详细信息 有关使用 CommonDialog 控件的详细说明,请参阅《Visual Basic程序员指南》中的“使用 CommonDialog 控件”。在控件中显示嵌入对象
    在运行时,最终用户可拖动任何嵌入对象,并放入 RichTextBox 控件。在控件中可以嵌入两种对象:以图标形式显示的对象,和以数据形式显示的对象。下图显示了具有嵌入文件对象的 RichTextBox,作为第一种类型的示例。单击后,嵌入的对象就会象预料的那样,即启动与该文件相关联的应用程序。当控件中的数据以 RTF 文件形式保存时(用 SaveFile 方法),嵌入对象中的信息也将被保存。然而,如果最终用户在该控件中嵌入位图,则将显示该位图,而不是它的图标,如下所示:单击该位图将启动 Paint 应用程序,使最终用户能够编辑该位图。用 OLEObjects 集合的 Add 方法添加嵌入对象
    用 OLEObject 集合的 Add 方法可将嵌入对象以编程方式加入该控件,如下所示:Private Sub cmdAddObject_Click()
       '将蝴蝶位图添加到该控件中。
       RichTextBox1.OLEObjects.Add , , , "bfly.bmp"
    End Sub在运行时,可用 Add、Clear 和 Remove 方法,动态地向该控件中充填嵌入对象。
      

  3.   


    试试系统的其它字体有没有问题~~
    估计示你的字体有问题。这个控件的对齐貌似有强制的一个命令,貌似要改其RTF文档原文