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格式吗?还是有另一种方法吗?
答案 0 :(得分:9)
我是否可以使用
Clipboard.HasFormat($C078)
来检测任何内容 剪贴板上的RichText格式?
不,您需要通过RegisterClipboardFormat
功能注册RTF剪贴板格式。返回的值由系统生成,可能会有所不同。
注册新的剪贴板格式。然后可以将此格式用作a 有效的剪贴板格式。
如果已存在具有指定名称的注册格式,则为新的 格式未注册,返回值标识现有格式 格式。这使得多个应用程序可以复制和粘贴数据 使用相同的注册剪贴板格式。
var
CF_RTF: UINT;
...
initialization
CF_RTF := RegisterClipboardFormat('Rich Text Format');
然后检查:
if Clipboard.HasFormat(CF_RTF) then ...
{ or // if Windows.IsClipboardFormatAvailable(CF_RTF) then ... }
编辑:阅读文档后:How to Use Rich Edit Clipboard Operations
常量CF_RTF
已在RichEdit
单位中声明为:
CF_RTF = 'Rich Text Format';
CF_RTFNOOBJS = 'Rich Text Format Without Objects';
CF_RETEXTOBJ = 'RichEdit Text and Objects';
因此,对RegisterClipboardFormat
的返回值使用其他命名可能更好一点。 e.g。
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
注册,如上所述。