发布XDesigner.Writer第一个版本

XDesigner.Writer演示版程序下载地址/Files/xdesigner/XDesigner.Writer.Test.rar ,运行在微软.NET2.0环境中。

XDesigner.Writer 文本编辑器中间件软件

袁永福 2012-5-9

28348092#qq.com

XDesigner.Writer文本编辑 器组件是一个完全用C#开发的、运行在微软.NET框架 
下的软件组件,它没有使用MS Word、RicthEditBox等其他任何文本编辑器组件,完全 
靠自己实现了富格式文本编辑功能。可以非常完美的集成到.NET应用系统中,可以用 
于WinForm.NET、ASP.NET、命令行程序或者后台服务程序的开发中。本文档也是完全 
使用XDesigner.Writer编辑的,并导出为HTML文档。

在很多应用系统中要处理带格式的文本文档,此时很多 开发人员采用以下两种方 
式:

一种是使用RichTextBox控件,调用这种控件的编程接口来改变文档的内容,但这 
种方式属于间接操作文档,很吃力,难以对文档进行精细的调整。而且在ASP.NET应用 
系统中由于无法使用WinForm控件,因此也就无法使用RichTextBox控件了。实践证 
明,使用RichTextBox控件可以对格式文档进行简单的处理,但要进行很精细的处理那 
是费力不讨好的。

另外一种是使用MS Word自动化对象。这种方式能精细的控制格式文档,但系统必 
须安装MS Word软件,而且这种方式很依赖计算机的配置,当开发机器中的Word版本和 
运行时机器的Word版本不一致时,容易出现各种错误。此外使用MS Word自动化对象存 
在性能不稳定,工作不可靠的问题,很容易导致在内存中出现大量的MS Word的进程, 
产生严重的资源泄露问题。

为了解决上述问题,作者开发这个XDesigner.Writer文本编辑器组件,该组件完 
全使用C#开发的,运行在微软.NET框架的环境下。开发过程没有使用任何其他第三方 
组件,没有使用MS Word,RichEdit或其他文本编辑器组件,本软件中的文档加载,保 
存,文档的显示,文档的编辑操作以及打印等等功能全部用C#开发。未来作者将以此 
为基础开发各种功能,比如痕迹保留、加密复制粘贴、文档中特定区域只读和保护、 
断点续打、数据源绑定。

本程序是XDesigner.Writer的演示程序,仅供学习和研究使用,不要用于实际工 
程项目中。欢迎大家向软件作者提出功能意见。 作者电子邮件:[email protected]

支持的文档样式

本文本编辑器组件可以使用带格式的文本图片混排,并实现了所见即所得的编辑 
界面,其编辑样式和实际打印输出是一致的。而且能将文档保存到一个XML文件中。也 
可导出为RTF或者HTML文档。

支持文本输入域

普通文本输入域, 支持文本输入域,如下图所示: 

当插入点或者鼠标光标悬停在这个文本输入域时就会以指定的背景色高亮度突出 
显示出来。

文本输入域可以设置背景文本,当文本输入域没有任何内容时就以灰色显示背景 
文本,向用户提供提示信息。如下图所示:

  支持日期输入域 ,如下图所示,双击这个输入域或按下F2键即可弹出一个日期型 
选择界面,用户点击某个日期即可完成数据的录入。

发布XDesigner.Writer第一个版本_第1张图片

支持时间日期输入域 ,如下图所示:

发布XDesigner.Writer第一个版本_第2张图片

支持数字输入域 ,可以设置数据校验格式,例如

在这里,年龄设置为最小值为0,最大值为150。编辑器会自动进行数据校验,若 
校验不通过则以红色背景突出显示这个输入域并设置提示文本。

支持下拉列表 ,如下图所示:

这个下拉列表的列表内容可以手动编辑,也可以编程读取数据库获得。在这个列 
表中,用户可以使用拼音码快速定位列表项目,该拼音码是根据列表文本自动计算 
的,无需手工设置。

这个输入域还可以限制为用户不能直接修改文本值而只能通过弹出式的列表来选 
择值。

支持单选框和复选框。如下图所示:

发布XDesigner.Writer第一个版本_第3张图片

可以为单选或者复选框设置组名,对于单选框,同组的最多只能有一个单选框被 
勾选。而且鼠标悬停在一个单选框或者复选框时,同组的单选框或者复选框全都以蓝 
色背景高亮度显示。

级联模板, 能根据当前输入域中的值来动态的修改后续输入域是否可见,而且这种 
操作是可以套嵌的。例如:

发布XDesigner.Writer第一个版本_第4张图片 
当吸烟输入域选择为“吸烟”值时,后面的关于详细描述吸烟的文本片段将显示出 
来。当吸烟输入域选择其他值时,后面的文本片段将不显示。如下图所示:

发布XDesigner.Writer第一个版本_第5张图片

注意,详细描述吸烟情况的文本片段只是隐藏,这个过程是可逆的,当用户再次 
选择“吸烟”值时,该文本片段又会显示出来。

级联模板时可以套嵌使用的。如当用户选择“有戒烟治疗”时,后面就会显示关 
于戒烟治疗的详细描述文本片段,如下图所示:

当用户选择“无戒烟治疗”时,后面的那段片段就隐藏不显示了。

发布XDesigner.Writer第一个版本_第6张图片

在这段文本中,当用户选中了“吸烟”选项,则后面关于描述吸烟详细情况的一 
段文本输入域就显示出来,否则就隐藏掉。被隐藏的区域不是删除掉了,而且不可 
见,仍然处于等待显示的状态。类似的,当设置“有戒烟治疗”,则后面就会显示出 
关于戒烟治疗的详细信息。

字段域可以绑定数据源 ,文档对象有一些内置参数,字段域就可以绑定到这些参 
数来显示参数值。例如显示当前页码[9],当前日期:[2012/4/30 0:00:00]。

字段域也可以修改绑定的数据源,比如编辑控件有一个ServerObject属性,将数 
据源对象设置到该属性上,然后可以在文档中使用参数名ServerObject来获得该对 
象,并可读取或设置该对象的属性值。

在本演示程序中,编辑器控件的ServerObject属性设置了一个对象,然后使用字 
段域来显示和修改对象的手续值,例如,这个域显示Name属性:[张三],Birthday:[ 
1990/1/1 0:00:00],国籍:[中国]。

支持表格 ,如下图所示:

还能以如下图所示的对话框来设置表格的边框和背景:

发布XDesigner.Writer第一个版本_第7张图片

支持段落设置,提供如下图所示的对话框来设置段落的段前间距,段后间距,行 
间距。

发布XDesigner.Writer第一个版本_第8张图片

支持各种字体样式, 如下图所示:

支持数字式的列表和圆点式的列表 ,如下图所示:

发布XDesigner.Writer第一个版本_第9张图片

  支持图片 ,可以通过菜单栏插入图片,也可以使用鼠标拖拽方式从  我的电脑   
源管理器  中拖拽一个图片文件到文档中。用鼠标点击图片,则该图片处于选择状态, 
可以看到在图片周围有8个小方框,您可以使用鼠标拖拽来改变图片的大小。

显示模式

XDesigner.Writer支持页面显示模式和普通显示模式,如下图所示:

页面显示模式

发布XDesigner.Writer第一个版本_第10张图片 

普通显示模式

发布XDesigner.Writer第一个版本_第11张图片 

续打

XDesigner.Writer支持续打功能。如下图所示:

 

当文本编辑器处于续打模式,此时用户可以使用鼠标点击操作来设置续打位置,此 
时被蓝色半透明区域的内容不会打印,而且续打的第一页不打印页眉页脚。

选择区域的显示模式

XDesigner.Writer支持两种被选择区域的显示模式。

反色高亮度显示被选择区域,如下图所示:

 
半透明色高亮度显示被选择区域,如下图所示:

 

对RTF格式的支持

本编辑器全面支持 RTF 格式,能读取和保存RTF文件,也能复制和粘贴RTF格式的文 
本。本程序可以读取MS Word或Windows写字板程序保存的RTF文件,MS Word或Windows 
写字板也可正确显示本程序保存的RTF文件。

操作特性

本文本编辑器实现了所见即所得的编辑模式,在编辑界面中文档的显示样式和最 
终打印输出样式保持一致,没有差别。此外还实现了 续打 功能,您按下视图主菜单的  
续打模式  菜单项目,则文本编辑器进入续打显示模式,此时文档的一部分被半透明的 
蓝色区域覆盖,你可以使用鼠标点击操作来设置续打位置,此时打印时,蓝色区域覆 
盖的部分将不会打印,而且发生续打的那页不会打印页眉和页脚。

本文本编辑器实现了100次的重做和撤销操作能力。您对文档的任何修改都能撤销 
和重做。但对系统设置中的操作修改了文档样式则无法进行重做或撤销。

本文本编辑器支持OLE拖拽,你可以从资源管理器中拖拽一个图片文件到文档中, 
也可以从IE浏览器或者MS Word或支持OLE拖拽的软件中拖拽一段文本到文档中。你可 
以从其他程序复制图片,纯文本或RTF文本数据到文档中。

性能

本文本编辑器虽然是使用相对比较缓慢的.NET开发的,但运行时的响应速度是比 
较快的,基本上没有闪烁,能处理比较大的文档,但超过100页则处理有些迟钝。而且 
删除或粘贴过万字符的文档时响应会有些迟钝。本程序启动时会有点慢,这是.NET程 
序的通病:(。

在本演示程序中,你可以点击工具条上的“系统设置”按钮来打开系统设置对话 
框来设置本文本编辑器的一些性能参数,可以设置三种文字显示质量,也可以设置启 
用或禁止双缓冲设置。下图就是系统设置对话框的图片

VBA功能

XDesigner.Writer支持VBA功能,能将一段VBA代码嵌入在文档中,伴随文档的编 
辑操作而执行。

例如有以下VBA代码。

sub Document_DocumentContentChanged()

window.StatusText = DateTime.Now.ToString() + " 修改了文档内容"

end sub

sub Document_SelectionChanged()

window.StatusText = DateTime.Now.ToString() + " 移动的插入点的位置"

end sub

sub Document_DocumentLoad()

window.StatusText = DateTime.Now.ToString() + " 加载了文档"

end sub

当用户编辑了文档,在嵌入在文档中的这段VBA代码就能实时运行。开发者可以编 
写VBA脚本代码来增强XDesigner.Writer的功能。

开发接口

XDesigner.Writer提供了丰富的开发接口,以及良好的设计时支持。

XDesigner.Writer提供了一个类型全名为XDesigner.Writer.Controls. 
WriterControl类型的WinForm控件,该控件用于显示和编辑文档内容。

标准软件命令功能清单

模块

命令名

说明

Browse

浏览文档相关的功能命令,不会修改文档内容。

AboutControl

显示关于软件组件的对话框。

CtlMoveDown

模拟Ctl+向下光标按键的功能,能向下滚动整个文档视 图而不修改当前插入点的位置。

CtlMoveUp

模拟Ctl+向上光标按键的功能,能向上滚动这个文档视 图而不修改当前插入点的位置。

JumpPrintMode

启动或取消续打状态。

MoveDown

将插入点移动到下一行。

MoveEnd

将插入点移动到行尾。

MoveHome

将插入点移动到行首。

MoveLeft

将插入点向前移动到上一个字符的前面。

MovePageDown

让视图向下翻页,并移动插入点。

MovePageUp

让视图向上翻页,并移动插入点。

MoveRight

将插入点向后移动到下一个字符的前面。

MoveUp

将插入点移动到上一行。

PageViewMode

切换到分页视图模式。

NormalViewMode

切换到普通视图模式。

Replace

暂不支持。

Search

暂不支持。

SelectAll

文档内容全选。

ShiftMoveDown

将插入点移动到下一行,并选择所经过的文档内容。

ShiftMoveEnd

将插入点移动到行尾,并选择所经过的文档内容。

ShiftMoveHome

将插入点移动到行首,并选择所经过的文档内容。

ShiftMoveLeft

将插入点向前移动一个字符,并选择所经过的文档内 容。

ShiftMovePageDown

将视图向下翻页,修改插入点的位置,并选择所经过的 文档内容。

ShiftMovePageUp

将视图向上翻页,修改插入点的位置,并选择所经过的 文档内容。

ShiftMoveRight

将插入点向后移动一个字符,并选择所经过的文档内 容。

ShiftMoveUp

将插入点移动到上一行,并选择所经过的文档内容。

Edit

编辑文档内容相关的命令功能,会修改文档内容。

AlignCenter

段落水平居中对齐。

AlignJustify

段落水平两边对齐。

AlignLeft

段落水平左对齐。

AlignRight

段落水平右对齐。

BackColor

暂不支持。

Backspace

退格,删除文档选择区域或插入点前一个文档元素。

Bold

设置或取消粗体字体样式。

BorderBackgourndFormat

设置表格单元格的边框和底纹。

BorderBottom

暂不支持。

BorderLeft

暂不支持。

BorderRight

暂不支持。

BorderTop

暂不支持。

BulletedList

设置段落为圆点列表样式。

Color

设置文本颜色。

Copy

复制。

Cut

剪切。

Delete

删除。

DeleteField

删除文本域。

DocumentValueValidate

对文档所有的数据输入域进行数据校验。

EditImageAdditionShape

编辑图片元素附加的额外图形数据。

ElementProperties

编辑元素属性。

FirstLineIndent

设置或取消段落首行缩进。

Font

设置文档中所选择的文字的字体。

FontName

设置文档中所选择的文字的字体名称。

FontSize

设置文档中所选择的文字的字体大小。

InsertCheckBox

在插入点位置插入复选框。

InsertImage

在插入点位置插入图片。

InsertLineBreak

在插入点位置插入软回车。

InsertMode

切换替换和插入的编辑模式。

InsertParameter

暂不支持。

InsertRTF

插入一段RTF文档。

InsertString

插入一段纯文本。

Italic

设置或取消文档中所选择的字体为斜体样式。

NumberedList

设置段落为数字式的列表方式。

ParagraphFormat

设置段落格式,包括行间距,段前段后间距等。

Paste

粘贴。

Redo

重复执行操作。

Strikeout

设置或取消删除线字体样式。

Subscript

设置或取消下标字体样式。

Superscript

设置或取消上标字体样式。

Underline

设置或取消下划线字体样式。

Undo

撤销刚刚执行的操作。

File

文档操作相关的命令。

FileNew

标准的新增文件操作。

FileOpen

标准的打开本地文件操作。

FilePageSettings

编辑文档的页面设置。

FilePrint

打印文档。

FilePrintCurrentPage

打印当前页。

FileSave

标准的保存文件操作。

FileSaveAs

标准的另存为文件操作。

DocumentOptions

显示文档属性设置对话框。

Table

表格相关的操作。

Table_DeleteColumn

删除选中的表格列,可一次删除多个表格列。

Table_DeleteRow

删除选中的表格行,可一次删除多个表格行。

Table_DeleteTable

删除整个表格。

Table_InsertColumnLeft

在当前单元格的左边插入新的表格列。

Table_InsertColumnRight

在当前单元格的右边插入新的表格列。

Table_InsertRowDown

在当前行的下面插入新的表格行。

Table_InsertRowUp

在当前行的上面插入新的表格行。

Table_InsertTable

在文档中插入新的表格。

Table_MergeCell

合并单元格。

Table_SplitCell

拆分单元格。


 

例如在窗体中放置一个类型为XDesigner.Writer.Controls. WriterControl 的控件,名 
称为myEditorControl ,则可以使用以下代码来调用一些功能模块:

例如使用下面的代码就能在文档的当前位置插入字符串:

myEditControl.ExecuteCommand( "InsertString"  false  "abc" );

使用下面的代码就能在文档的当前位置插入一小段RTF内容:

myEditControl.ExecuteCommand( "InsertRTF"  false  @"{\rtf1\ansi\ansicpg936\deff0\ 
deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset134 \'cb\'ce\'cc\'e5;}}

{\colortbl ;\red255\green0\blue0;}

{\*\generator Msftedit 5.41.21.2510;}{\info{\horzdoc}{\*\lchars ([\'7b\'a1\'a4\'a1\ 
'ae\'a1\'b0\'a1\'b4\'a1\'b6\'a1\'b8\'a1\'ba\'a1\'be\'a1\'b2\'a1\'bc\'a3\'a8\'a3\' 
ae\'a3\'db\'a3\'fb\'a1\'ea\'a3\'a4}{\*\fchars !),.:\'3b?]\'7d\'a1\'a7\'a1\'a4\'a1\ 
'a6\'a1\'a5\'a8\'44\'a1\'ac\'a1\'af\'a1\'b1\'a1\'ad\'a1\'c3\'a1\'a2\'a1\'a3\'a1\' 
a8\'a1\'a9\'a1\'b5\'a1\'b7\'a1\'b9\'a1\'bb\'a1\'bf\'a1\'b3\'a1\'bd\'a3\'a1\'a3\'a2 
\'a3\'a7\'a3\'a9\'a3\'ac\'a3\'ae\'a3\'ba\'a3\'bb\'a3\'bf\'a3\'dd\'a3\'e0\'a3\'fc\' 
a3\'fd\'a1\'ab\'a1\'e9}}

\viewkind4\uc1\pard\sa200\sl276\slmult1\lang2052\f0\fs22 1\cf1 2\cf0 3\par

}" );

使用下面的代码就能直接以XML的方式设置控件的文档内容:

            myEditControl.XMLText =  @"<?xml version='1.0'?>

<XTextDocument xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd=' 
http://www.w3.org/2001/XMLSchema'>

  <XElements>

    <Element xsi:type='XTextBody'>

      <XElements>

        <Element xsi:type='XString'>

          <Text>111</Text>

        </Element>

        <Element xsi:type='XString' StyleIndex='0'>

          <Text>111</Text>

        </Element>

        <Element xsi:type='XString' StyleIndex='1'>

          <Text>11</Text>

        </Element>

        <Element xsi:type='XString' StyleIndex='2'>

          <Text>1</Text>

        </Element>

        <Element xsi:type='XString'>

          <Text>11</Text>

        </Element>

        <Element xsi:type='XParagraphFlag' />

      </XElements>

    </Element>

    <Element xsi:type='XTextHeader'>

      <XElements>

        <Element xsi:type='XParagraphFlag' />

      </XElements>

    </Element>

    <Element xsi:type='XTextFooter'>

      <XElements>

        <Element xsi:type='XParagraphFlag' />

      </XElements>

    </Element>

  </XElements>

  <Info>

    <CreationTime>2012-03-29T15:47:51.1032576+08:00</CreationTime>

    <LastModifiedTime>2012-03-29T15:47:51.1042577+08:00</LastModifiedTime>

    <LastPrintTime>1980-01-01T00:00:00</LastPrintTime>

    <Operator>XDesigner.Writer Version:1.0.1111.28434</Operator>

  </Info>

  <DefaultFont>

    <Size>12</Size>

  </DefaultFont>

  <ContentStyles>

    <Default>

      <FontName>宋体</FontName>

      <FontSize>12</FontSize>

    </Default>

    <Styles>

      <Style Index='0'>

        <Bold>true</Bold>

      </Style>

      <Style Index='1'>

        <FontSize>24</FontSize>

        <Bold>true</Bold>

      </Style>

      <Style Index='2'>

        <FontSize>24</FontSize>

      </Style>

    </Styles>

  </ContentStyles>

  <DocumentGraphicsUnit>Document</DocumentGraphicsUnit>

  <PageSettings>

    <DesignerPaperWidth>0</DesignerPaperWidth>

    <DesignerPaperHeight>0</DesignerPaperHeight>

  </PageSettings>

  <CustomerParameters />

</XTextDocument>" ;

XDesigner.Writer支持WPF,如使用以下XAML代码就能建立一个包含文本编辑器控 
件的WPF窗体,这样就能在C#代码中以myWriterControl的名称访问文本编辑器控件 
了。

< Window  x : Class ="XDesigner.Writer.WPFTest.MainWindow"

 xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

 xmlns : x ="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns : my ="clr-namespace:XDesigner.Writer.Controls;assembly=XDesigner.Writer"

 Title ="MainWindow"  Height ="463"  Width ="777"  Loaded ="Window_Loaded">

< Grid >

< WindowsFormsHost  Margin ="0,29,0,0">

< my : WriterControl  x : Name ="myWriterControl"  BackColor ="Gray"  BorderStyle ="Fixed3D 
"  AllowDrop ="True" />

</ WindowsFormsHost >

</ Grid >

</ Window >


你可能感兴趣的:(table,文档,VBA,WinForm,文本编辑,rtf)