可我一般使用Clipboard.HasFormat($C078)
检测在剪贴板上的任何 富文本格式?
不,您需要通过RegisterClipboardFormat
函数注册RTF剪贴板格式。返回值由系统生成,可能会有所不同。
注册一个新的剪贴板格式。这种格式可以用作 有效的剪贴板格式。
如果已经存在具有指定名称的注册格式,则不会注册新的 格式,并且返回值会标识现有的 格式。这使得多个应用程序能够使用相同的注册剪贴板格式来复制和粘贴数据 。
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
使用其他命名可能是一个更好的主意。例如
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
注册,如前所述。
我已经完成了这个工作,因为它是在很多网站上推荐的。然后我再将格式化文本从写字板复制到剪贴板。但剪贴板间谍程序不会列出任何'CF_RTF'格式。 – user1580348
@user,对不起,我不明白你的意思。你的意思是剪贴板间谍没有明确显示“CF_RTF”作为描述?如果是这种情况,你可以命名你的变量“'CF_RICHTEXT'”或其他,这没关系。格式标识符无论如何都是字符串,即“富文本格式”。而不是CF_BITMAP这是一个系统常量(2)。 'CF_RTF'是* custom *格式。 – kobik
那么字符串“富文本格式”是一个系统常量?否则,剪贴板无法将其识别为RichText的标识符? – user1580348