如何在RICHTEXTBOX中实现所见即所得

6742 2011-08-11 09:54:29
在RICHTEXTBOX中,我用2种字体显示,一种是自己做的字体(每个字体的宽度是一致的),另一种是宋体。

上一行是我做的字体,下一行是宋体,为何在RICHTEXTBOX中显示时是对齐的,预览时也是对齐的,但打印出来就出现错位了?

显示、预览的例子从下边网址下载:
http://www.mndsoft.com/blog/VB6/1109.html

具体情况是:如果2种字体是相同的,只是字号不同,那么好像不会出现错位。但如果2种字体不同、字号不同,那么所见即所得就实现不了了,其中某一字体的宽度似乎有了变化,不能实现对齐,而这时候预览是正常的,不知道是什么原因?
...全文
158 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
咸清 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 6742 的回复:]
在RICHTEXTBOX中,我用2种字体显示,一种是自己做的字体(每个字体的宽度是一致的),另一种是宋体。

上一行是我做的字体,下一行是宋体,为何在RICHTEXTBOX中显示时是对齐的,预览时也是对齐的,但打印出来就出现错位了?

显示、预览的例子从下边网址下载:
http://www.mndsoft.com/blog/VB6/1109.html

具体情况是:如果2种字体是相同……
[/Quote]

试试系统的其它字体有没有问题~~
估计示你的字体有问题。

这个控件的对齐貌似有强制的一个命令,貌似要改其RTF文档原文
6742 2011-08-12
  • 打赏
  • 举报
回复
显示:
宋体: 123456789
楷体:123456789
6742 2011-08-12
  • 打赏
  • 举报
回复
就如同下边的这样:
显示:
宋体: 123456789
楷体:123456789
打印:
宋体: 123456789
楷体:123456789

小字号的宋体1跑到前边去了,与大字号的楷体1不了。
要想打印的效果就如同显示的那样,应该如何做?
6742 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ybh37 的回复:]
试试系统的其它字体有没有问题~~
估计示你的字体有问题。

这个控件的对齐貌似有强制的一个命令,貌似要改其RTF文档原文
……
[/Quote]

我看了一下,估计我做的字体是没有问题的,因为我用宋体、楷体对照,也会出现同样的问题:

比如:
宋体:123456789
楷体:123456789

字号相同时,没有发现问题,即显示的与打印出来的一样。
但字号不相同时
宋体:123456789
楷体:123456789

显示时可能是宋体的1与楷体的1对齐(不对齐我们可以手工编辑强制让它对齐,如加空格等等),但打印时,大字号的字之间似乎多出了一些间隙,而小字号的字之间出现的空隙就没有大字号的那么宽。
不知道是为什么?




贝隆 2011-08-11
  • 打赏
  • 举报
回复
使用 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 Sub

Private 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 方法,动态地向该控件中充填嵌入对象。
6742 2011-08-11
  • 打赏
  • 举报
回复
如果回答成功了,这边的100也恭敬送上:

http://topic.csdn.net/u/20110728/11/8e3e3774-850d-4c5f-a6c9-0316cb305a58.html

(请在这边留下记号)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧