delphi – 如何在剪贴板上可靠地检测RICHTEXT格式?
Embarcadero RAD Studio VCL具有TClipboard.HasFormat方法,其用途例如: Clipboard.HasFormat(CF_TEXT)或Clipboard.HasFormat(CF_BITMAP)等.
但我没有找到任何支持的CF_RTF或CF_RICHTEXT格式描述符,它在剪贴板中指示了富文本格式. 所以我在Microsoft WordPad中创建了一些格式化文本并将其复制到剪贴板.然后我用剪贴板间谍程序来检查剪贴板上的格式: 这列出了3种RichText格式,格式描述符为C078,C16B和C1A5. 这些格式描述符是普遍的还是依赖于单个系统或当前情况?即,我通常可以使用Clipboard.HasFormat($C078)来检测剪贴板上的任何RichText格式吗?还是有另一种方法吗? 解决方法
不,您需要通过
var CF_RTF: UINT; ... initialization CF_RTF := RegisterClipboardFormat('Rich Text Format'); 然后检查: if Clipboard.HasFormat(CF_RTF) then ... { or // if Windows.IsClipboardFormatAvailable(CF_RTF) then ... } 编辑:阅读文档后: 常量CF_RTF已在RichEdit单元中声明为: CF_RTF = 'Rich Text Format'; CF_RTFNOOBJS = 'Rich Text Format Without Objects'; CF_RETEXTOBJ = 'RichEdit Text and Objects'; 因此,对RegisterClipboardFormat的返回值使用其他命名可能更好一点.例如 uses RichEdit; ... var CF_RICHTEXT: UINT; ... initialization CF_RICHTEXT := RegisterClipboardFormat(RichEdit.CF_RTF); 和: if Clipboard.HasFormat(CF_RICHTEXT) then ... 注意:已经有一些保留的系统剪贴板格式,如CF_TEXT(= 1),CF_BITMAP(= 2)等……但“CF_RTF”或“CF_RICHTEXT”不是其中之一.它是RICHEDIT通用控件使用的自定义格式,并通过RegisterClipboardFormat注册,如前所述. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |