在RealStudio中,如何拦截富文本的粘贴?

时间:2011-11-20 01:23:49

标签: formatting paste realbasic richtext realstudio

我正在尝试为WYSIWYG编辑创建一个简单的文本字段。但是,我只想允许某些类型的格式化(例如粗体,斜体,下划线和单个标题类型,但没有颜色或不同的字体。)

问题是,如果我使用可以接受格式化的编辑器,有人可以在另一个程序中创建或复制格式化文本,然后只需将其粘贴到文本字段中,所有格式化随之而来,允许我不感兴趣的事情in,例如不同的字体,颜色等。我不想允许。

充其量,我想自动删除任何我不支持的格式。在最坏的情况下,我想简单地将任何内容粘贴为纯文本,因为它们必须重新格式化。但在任何情况下,我都不想将剪贴板转储到文本区域。

关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:1)

您可以通过在KeyDown事件中拦截粘贴来自行拦截粘贴。然后,你可以自己解析它。这可能有点棘手,但我认为这是你能做到的唯一方法。

在粘贴并删除不需要的格式后,解析生成的StyleRun可能会更容易。

或者,您可以查看True North Software的格式化文本控件并覆盖控件的粘贴方法(获取所有源代码)并自行处理。

无论哪种方式,我认为这将是一项相当多的工作。

答案 1 :(得分:1)

我建议创建一个新的文本字段/文本区域类并创建一个EditPaste菜单处理程序,它(a)在处理剪贴板文本方面做你正在寻找的东西,(b)返回true以防止默认粘贴从发生。这比使用按键事件更安全,因为用户可以从编辑菜单中手动选择粘贴。

您可以通过创建剪贴板对象来访问剪贴板上的文本。

要对文本字段进行子类化并截取粘贴菜单命令:

  1. 打开项目后,转到项目菜单>添加>类
  2. 在项目选项卡中选择新类,然后在属性面板中将super设置为TextField
  3. 双击课程进行编辑
  4. 点击班级中的“添加菜单处理程序”中间工具栏按钮
  5. 将菜单项名称更改为“EditPaste”。将代码放在“return true”之前,并确保将返回值保留在那里。
  6. 然后,您的代码可以手动格式化和粘贴文本,并覆盖默认的粘贴功能。

    该文本字段中的任何命令-V或control-V都将导致该菜单处理程序触发。无论如何,您都会添加任何上下文菜单,因为真正的基本菜单不会创建默认的上下文菜单,因此您也可以控制它。

    要将文本字段添加到窗口,只需将对象列表上方的过滤器更改为“项目”控件,然后从中拖动该类。