【问题标题】:RichEdit not respecting PlainText with pasted contentRichEdit 不尊重带有粘贴内容的纯文本
【发布时间】:2011-05-18 19:30:07
【问题描述】:

我创建了一个新应用程序,放在 TRichedit 上并将 PlainText 属性设置为 true。然后我运行应用程序并将一些格式丰富的文本粘贴到 RichEdit 中。

我希望它显示为纯文本,但它显示带有格式的内容。

任何人都知道如何将 TRichedit 用作纯文本(而不是使用备忘录 :))

【问题讨论】:

  • Yes... ""要忽略文件中编码的富文本信息,请在将文本流式传输到控件之前将 PlainText 设置为 true。 "" 所以我将它设置为 True,但没有被忽略。还是我错过了什么:)

标签: delphi plaintext richedit


【解决方案1】:

您需要手动进行粘贴,确保忽略格式。

if Clipboard.HasFormat(CF_TEXT) then
  RichEdit.SelText := Clipboard.AsText; 

WM_PASTE的消息处理程序运行此代码

我目前不知道如何拦截 CTRL+V 按键并将其替换为这段代码。 WM_PASTE 消息不会发送到 Rich Edit 控件。


正如 Cody 在评论中建议的那样,一种解决方案如下:

  • 确保编辑控件中的所有文本都标记为受保护。
  • 子类TRichEdit 并覆盖CNNotify
  • 处理EN_PROTECTED 消息,如果msg=WM_PASTE 则使用上述粘贴作为文本代码,并从消息处理程序返回 1 以指示请求的操作(丰富的粘贴)被拒绝。

【讨论】:

  • 看起来你可以handle the EN_PROTECTED notification。确实很奇怪,富编辑控件不接收WM_PASTE。还好我没有花太多时间和他们在一起。
  • 也许你可以使用OnProtectChange事件。
  • 或者,如果这还不够,您可以尝试在后代中处理 CN_NOTIFY 并在 NMHdr^.code = WM_PASTE 时处理案例。
  • @TOndrej 遗憾的是,Delphi OnProtectChange 消息丢失了标识这是粘贴而不是其他更改的有用信息。
  • 这是我的印象。在那种情况下,可能 CN_NOTIFY 是最简单的。我应该更正我上面的评论,我的意思是PENProtected(NMHdr)^.msg = WM_PASTE
猜你喜欢
  • 2015-02-28
  • 2015-09-08
  • 2011-05-06
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多