我试图为所见即所得编辑创建一个简单的文本字段。但是,我只想允许某些类型的格式(例如,粗体,斜体,下划线和单一标题类型,但没有颜色或不同的字体)
问题是,如果我使用一个可以接受格式的编辑器,有人可以在另一个程序中创建或复制格式化的文本,然后简单地将其粘贴到文本字段中,所有的格式都随之而来,允许我不感兴趣的东西,如不同的字体,颜色等。我不允许那样。
最好的情况是,我希望自动删除我不支持的任何格式。在最坏的情况下,我想简单地粘贴任何纯文本,使他们不得不重新格式化。但是无论如何我都不想把剪贴板放到文本区。
对如何做到这一点有什么想法吗?
我建议创建一个新的文本字段/文本区域类,并创建一个EditPaste菜单处理程序,它(a)在处理剪贴板的文本方面做你正在寻找的事情,(b)返回true以防止默认粘贴发生。这比使用Key down事件更安全,因为用户可能会手动从编辑菜单中选择paste。
您可以通过创建剪贴板对象来访问剪贴板上的文本。
子类化textfield并拦截粘贴菜单命令:
- 项目打开后,点击项目菜单>添加>类
- 在项目选项卡中选择新类,并在属性面板中将super设置为TextField
- 双击类进行编辑
- 在你的类中点击"添加菜单处理程序"中间工具栏按钮
- 将菜单项名称更改为"EditPaste"。把你的代码放在"return true"之前,并确保在那里留下返回true。
您的代码可以手动格式化和粘贴文本,并覆盖默认的粘贴函数。
文本域中的任何command-V或control-V都将触发该菜单处理程序。任何上下文菜单都会由你添加,因为real basic不会创建默认的上下文菜单,所以你也可以控制它。
要将文本字段添加到窗口中,只需将对象列表上方的过滤器更改为Project controls,并从那里拖动类。
您可以通过在KeyDown事件中拦截粘贴来拦截它。然后,您可以自己解析它。这可能有点棘手,但我认为这是唯一的方法。
在粘贴之后解析生成的StyleRun并去掉不想要的格式可能会更容易。
或者,您可以查看True North Software的格式化文本控件,并覆盖该控件的粘贴方法(您可以获得所有源代码),然后自己处理它。
无论如何,我认为这将是相当多的工作。