编辑器配置Copy命令用于复制数据到系统剪切板,配置Cut命令执行剪切操作,配置Paste命令用于粘贴系统剪切板中的数据,配置SpecifyPaste命令用于进行选择性粘贴。
剪切和粘贴操作对文档内容带来的影响都可以使用Undo、Redo命令来重做和撤销。
4.5.1.1.2. OLE拖拽
编辑器控件支持OLE拖拽操作。当编辑器控件的AllowDrop属性值为true,则支持OLE拖拽将数据复制到文档中;当编辑器控件的AllowDragContent数值为为true时,则支持OLE拖拽操作将数据复制或者移动到编辑器的其他部分或者其他程序中。
在执行OLE拖拽操作时,用户按下Ctl键则执行OLE拖拽复制操作,否则执行OLE拖拽移动操作。
OLE拖拽操作支持的数据格式和使用系统剪切板时支持的数据格式一样。
目前版本的DCWriter编辑器有一个已知的缺陷,那就是在同一个编辑器中执行OLE拖拽移动操作后,需要执行两次Undo命令才能完全撤销操作。
4.5.1.2. 数据过滤
编辑器控件支持数据过滤,从数据插入到编辑器的文档中时,开发者可以编程对数据进行过滤。这里的外界数据包括粘贴所得的数据、OLE拖拽所得的数据、用户手工输入的文档数据或者应用程序调用编辑器命令插入的数据。
DCWriter定义了一个签名为“public delegate void FilterValueEventHandler( object sender , FilterValueEventArgs args )”的委托。开发者只要创建一个委托对象,然后添加到AppHost中即可启用。
这个委托的第二个参数类型为DCSoft.Writer.Dom.FilterValueEventArgs,它的成员有: public DCSoft.Writer.Dom.InputValueSource Source{get;set;} 数据来源,可选值有
Clipboard:数据来自Windows系统剪切板。 UI:数据来自用户界面的用户输入。 Unknow:未知。
public string SourceName{get;set;}
数据来源的名称。
public InputValueType Type{get;set;}
数据类型,可选值有:
Text:纯文本数据。 RTF:RTF文档数据。 Image:图片数据。 FileName:文件名。
Dom:DCWriter文档DOM数据。
public object Value{get;set;} 要处理的数据。
public bool Cancel{get;set;}
取消相关数据操作的标记。
开发者可以使用以下代码来实现数据过滤: //使用这行代码来注册启动数据过滤器 ctl.AppHost.Services.AddService( typeof(DCSoft.Writer.Dom.FilterValueEventHandler ), new DCSoft.Writer.Dom.FilterValueEventHandler(MyFilterData)); // 数据过滤代码 private void MyFilterData(object sender, FilterValueEventArgs args) { 用户代码。 } 这样开发者就能实现数据过滤功能,比如在电子病历中,只能同一个人的病历之间的文本可以复制粘贴,而不同人的病历文本是不能粘贴的。使用数据过滤就能实现这个功能。
4.5.2. WPF开发
编辑器控件可以用于WPF开发。以下XAML代码即可将一个编辑器控件添加到WPF窗体中:
4.5.3. SmartClient+WEB开发
编辑器控件能用于SmartClient+Web开发,这样就能嵌入在WEB页面中运行而能应用于B/S系统。注意:该功能在客户端中仅支持IE7.0或者更高版本,其他版本的浏览器不支持;服务器端技术架构理论上不受限制,不过还是推荐使用ASP.NET。
实现该功能需要完成以下步骤:
1. B/S系统客户端环境的配置。需要在客户端安装微软.NET框架2.0或更高版本,推荐为
2.0或3.5。
2. 在IE的设置中将WEB服务器地址设置为可信站点。 3. 设置.NET框架的安全模式。具体为执行命令行““.NET框架安装目录/Caspol.exe -force -pp
off -machine -chggroup 1.5 FullTrust””。
4. 将DCWriter软件DLL文件拷贝到服务器某个目录下,推荐为发布目录的Lib子目录下。 5. 在WEB页面中插入以下HTML代码 6. 这样就可以在WEB页面中编写JavaScript代码来访问编辑器控件。例如 // 设置编辑器中的XML内容。 document.getElementById(\).XMLText = someXml ; // 获得编辑器中的XML内容。 someXml = document.getElementById(\).XMLText; // 执行命令,在文档中插入字符串 document.getElementById(\).ExecuteCommand(\张三李四王五\
由于DCWriter并不是完全的COM公开,而且有很多操作是JavaScript语法所不支持的,因此建议开发者在SmartClient开发中不要直接使用WriterControl类型。而是自己开发一个控件,该控件可以包含WriterControl控件或者从其派生出来,而且添加自定义的属性方法。例如使用以下代码定义一个用户自定义控件: using System; using System.Collections.Generic; using System.Text; using DCSoft.Writer.Security; namespace DCSoft.Writer.Test { [System.ComponentModel.ToolboxItem(false)] [System.Runtime.InteropServices.ComVisible(true)] [System.Runtime.InteropServices.Guid(\)] public class TestControl : DCSoft.Writer.Controls.WriterControl { public TestControl() { this.Document = new Dom.XTextDocument(); this.DocumentOptions = new DocumentOptions(); // Enable permission control
this.DocumentOptions.SecurityOptions.EnableLogicDelete = true; this.DocumentOptions.SecurityOptions.EnablePermission = true; this.DocumentOptions.SecurityOptions.ShowLogicDeletedContent = true; this.DocumentOptions.SecurityOptions.ShowPermissionMark = true; } ///
不过由于用户需要另外建立WinForm类型的控件来开发自定义控件,将生成自己的DLL文件,此时需要将DCSoft.Writer.dll和自定义DLL文件复制到WEB服务器上,这样开发、部署和测试都不是很方便。此时可以使用微软提供的ILMerge工具将两个DLL文件合并为一个DLL文件,这样就能解决这个问题。
关于ILMerge可参考微软的相关文档,本软件开发商也可提供ILMerge的GUI工具软件。
4.6. 文档元素
DCWriter支持的文档中包含多种文档元素,常用的有: