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

Formatting 在RealStudio中,如何拦截富文本的粘贴?,formatting,paste,realbasic,richtext,realstudio,Formatting,Paste,Realbasic,Richtext,Realstudio,我正在尝试创建一个简单的文本字段,用于所见即所得编辑。但是,我只希望允许某些类型的格式设置(例如,粗体、斜体、下划线和单个标题类型,但不允许使用颜色或不同字体) 问题是,如果我使用的编辑器可以接受格式化,有人可以在另一个程序中创建或复制格式化文本,然后简单地将其粘贴到文本字段中,所有的格式化都随之进行,允许我不感兴趣的内容,例如不同的字体、颜色等。我不想允许这样做 充其量,我想自动删除我不支持的任何格式。在最坏的情况下,我只想简单地将任何内容粘贴为纯文本,使他们不得不重新格式化。但在任何情况下,

我正在尝试创建一个简单的文本字段,用于所见即所得编辑。但是,我只希望允许某些类型的格式设置(例如,粗体、斜体、下划线和单个标题类型,但不允许使用颜色或不同字体)

问题是,如果我使用的编辑器可以接受格式化,有人可以在另一个程序中创建或复制格式化文本,然后简单地将其粘贴到文本字段中,所有的格式化都随之进行,允许我不感兴趣的内容,例如不同的字体、颜色等。我不想允许这样做

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


有什么想法吗?

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

在粘贴和去掉不需要的格式之后,解析结果样式可能会更容易

或者,您可以查看来自True North软件的格式化文本控件,覆盖该控件的粘贴方法(您获得了所有源代码),然后自己处理它


无论如何,我认为这将是一个相当大的工作量。

我建议创建一个新的文本字段/文本区域类,并创建一个EditPaste菜单处理程序,该处理程序(a)处理剪贴板的文本,并(b)返回true以防止发生默认粘贴。这比使用向下键事件更安全,因为用户可能会从“编辑”菜单中手动选择“粘贴”

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

要将textfield子类化并截取粘贴菜单命令,请执行以下操作:

  • 打开项目后,进入项目菜单>添加>类
  • 在项目的选项卡中选择新类,并在“属性”面板中将super设置为TextField
  • 双击类以编辑它
  • 单击类中的“添加菜单处理程序”中的工具栏按钮
  • 将菜单项名称更改为“编辑粘贴”。将代码放在“return true”之前,并确保将return true保留在那里
  • 然后,您的代码可以手动格式化和粘贴文本,并覆盖默认的粘贴功能

    该文本字段中的任何command-V或control-V都将导致该菜单处理程序启动。任何上下文菜单都将由您添加,因为real basic不会创建默认上下文菜单,因此您也可以控制它


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

    如果我甚至不确定是否可行,有没有办法通过对内置控件进行子类化,而不是花150美元购买第三方产品来实现类似的效果?例如,在Cocoa的NSTextView中,您可以截取“粘贴”消息并按自己的意愿处理它。(我是nea to RB/RS,但我是一名有28年经验的程序员,使用了大约8种语言,所以请随时了解技术或提供示例。)我差点忘了。。。我认为KeyDown还不够,因为还有其他方法可以粘贴东西。这就是为什么我想对“粘贴”调用本身进行子类化,而不是触发它的原因。我不知道如何在本机Real Studio文本区域控件中截获粘贴消息。很抱歉使用格式化文本控件的优点是它不使用本机控件。在它的下面是一个画布控件。很抱歉,我无法提供更多帮助。我已经提到,键控事件将错过一些内容(请参见下面的答案)。你能给出一个你所指的代码的例子吗?不确定如何创建整个新字段/文本区域。想要将现有的子类化。但我想截取所有可能的粘贴方式。。。菜单、命令、键盘、上下文菜单、所有操作,但我希望所有其他默认行为保持不变。我添加了有关如何对textfield子类化和拦截任何粘贴事件的编号说明。另外,作为说明,您可以以相同的方式对textfield或textarea子类化,并拦截菜单处理程序。谢谢!尽管我还没有实际测试过(没有在这台机器上运行),但你的答案看起来足够彻底,我假设你已经测试过了,所以我将你的答案标记为答案。谢谢!:)是的,我实际上启动了RB,以确保菜单处理程序拦截所有内容,并且不会因为返回true而处理标准粘贴。您可能遇到的唯一问题是从剪贴板获取格式化文本,但剪贴板对象会提供文本以及原始数据,您可以从中获取所需内容。