吴玉兴 發表於 2022-4-14 10:33:00

Delphi Clipboard[1] 剪贴板 介绍

<p><span style="color: rgba(136, 136, 136, 1); font-size: 12px">{该文首发于博客园&nbsp;<span style="color: rgba(136, 136, 136, 1)">滔Roy</span>,无须授权即可转发,请自觉保留头部申明}</span></p>
<p><span style="font-size: 16px"><strong>Delphi Clipboard 剪贴板 介绍</strong></span></p>
<div class="cnblogs_Highlighter">
<pre class="brush:delphi;gutter:true;"><span style="font-size: 16px">uses
Clipbrd;
</span></pre>
</div>
<ul>
<li><span style="font-size: 16px">TClipboard 对象封装了Windows剪贴板</span></li>
<li><span style="font-size: 16px">剪贴板一次只能保存一份相同类型的数据,以便进行剪切,复制和粘贴。 如果我们以相同的格式将新信息发送到剪贴板,则会擦除之前的内容,但是即使将剪贴板中的内容粘贴到另一个程序中,剪贴板中的内容也会保留在剪贴板中  </span></li>
<li><span style="font-size: 16px">Delphi内已经具有对Clipboard方法的内置支持的组件,例如:TEdit、TMemo、TOLEContainer、TDDEServerItem、TDBEdit、TDBImage、TDBMemo等</span></li>
<li><span style="font-size: 16px">我们经常使用Clipbrd单元中的CutToClipboard、CopyToClipboard 、PasteFromClipboard、Clear和HasFormat方法来处理剪贴板操作和文本/图形操作</span></li>
</ul>
<p><span style="font-size: 16px"><strong>1、剪贴板格式</strong></span></p>
<p><span style="font-size: 16px">1.1&nbsp;Windows提供的默认</span></p>
<ul>
<li><span style="font-size: 16px">CF_TEXT = 1;&nbsp; &nbsp; //文本格式。每行以回车/换行(CR-LF)组合结束。空字符表示数据结束。将此格式用于ANSI文本。</span></li>
<li><span style="font-size: 16px">CF_BITMAP = 2;&nbsp; &nbsp;//位图的句柄(HBITMAP)。</span></li>
<li><span style="font-size: 16px">CF_METAFILEPICT = 3;&nbsp; //由METAFILEPICT结构定义的图元文件图片格式的句柄。当通过DDE传递CF_METAFILEPICT句柄时,负责删除hMem的应用程序还应释放CF_METAFILEPICT句柄引用的元文件</span></li>
<li><span style="font-size: 16px">CF_SYLK = 4;&nbsp; //Microsoft符号链接(SYLK)格式。</span></li>
<li><span style="font-size: 16px">CF_DIF = 5;&nbsp; //软件艺术的数据交换格式。</span></li>
<li><span style="font-size: 16px">CF_TIFF = 6;&nbsp; //标记图像文件格式。</span></li>
<li><span style="font-size: 16px">CF_OEMTEXT = 7;&nbsp; //包含OEM字符集中字符的文本格式。每行以回车/换行(CR-LF)组合结束。空字符表示数据结束。</span></li>
<li><span style="font-size: 16px">CF_DIB = 8;&nbsp; //一个内存对象,包含一个BITMAPINFO结构,后跟位图位。</span></li>
<li><span style="font-size: 16px">CF_PALETTE = 9;&nbsp; //控制调色板。每当应用程序在剪贴板中放置依赖于或采用调色板的数据时,它也应该将调色板放置在剪贴板上。如果剪贴板包含CF_PALETTE(逻辑调色板)格式的数据,应用程序应使用SelectPalette和RealizePalette函数实现(比较)剪贴板中的任何其他数据与该逻辑调色板。显示剪贴板数据时,剪贴板始终使用剪贴板上任何CF_PALETTE格式的对象作为其当前调色板。</span></li>
<li><span style="font-size: 16px">CF_PENDATA = 10;&nbsp; //用于笔计算的Microsoft Windows的笔扩展数据。</span></li>
<li><span style="font-size: 16px">CF_RIFF = 11;&nbsp; //表示比CF_WAVE标准波形格式更复杂的音频数据。</span></li>
<li><span style="font-size: 16px">CF_WAVE = 12;&nbsp; //表示标准波形格式之一的音频数据,如11 kHz或22 kHz PCM。</span></li>
<li><span style="font-size: 16px">CF_UNICODETEXT = 13;&nbsp; //Unicode文本格式。每行以回车/换行(CR-LF)组合结束。空字符表示数据结束。</span></li>
<li><span style="font-size: 16px">CF_ENHMETAFILE = 14;&nbsp; //增强元文件(HENHMETAFILE)的句柄。</span></li>
<li><span style="font-size: 16px">CF_HDROP = 15;&nbsp; //标识文件列表的HDROP类型句柄。应用程序可以通过将句柄传递给DragQueryFile函数来检索有关文件的信息。</span></li>
<li><span style="font-size: 16px">CF_LOCALE = $10;&nbsp; //数据是与剪贴板中的文本关联的区域设置标识符(LCID)的句柄(HGLOBAL)。关闭剪贴板时,如果其中包含CF_TEXT数据但没有CF_LOCALE设置数据,系统会自动将CF_区域设置格式设置为当前输入语言。您可以使用CF_LOCALE设置格式将不同的区域设置与剪贴板文本相关联。从剪贴板粘贴文本的应用程序可以检索此格式,以确定用于生成文本的字符集。请注意,剪贴板不支持多个字符集中纯文本。要实现这一点,请改用RTF等格式化文本数据类型。系统使用与CF_LOCALE关联的代码页隐式地将CF_TEXT转换为CF_Unicode文本。因此,正确的代码页表用于转换。</span></li>
<li><span style="font-size: 16px">CF_MAX = 17;&nbsp; //{注意:如果WINVER&lt;5,CF_MAX会更改值。为了保持向后兼容性,请对WINVER&lt;5使用CF_MAX,对WINVER&gt;5使用CF_MAX_XP。}</span></li>
<li><span style="font-size: 16px">CF_DIBV5 = 17;&nbsp; //一个内存对象,包含BitMapV5头结构,后跟位图颜色空间信息和位图位。</span></li>
<li><span style="font-size: 16px">CF_MAX_XP = 18;&nbsp; //{注意:如果WINVER&lt;5,CF_MAX会更改值。为了保持向后兼容性,请对WINVER&lt;5使用CF_MAX,对WINVER&gt;5使用CF_MAX_XP。}</span></li>
<li><span style="font-size: 16px">CF_OWNERDISPLAY = 128;&nbsp; //所有者显示格式。剪贴板所有者必须显示和更新“剪贴板查看器”窗口,并接收WM_ASKCBFORMATNAME、WM_HSCROLLCLIPBOARD、WM_PAINTCLIPBOARD、WM_SIZECLIPBOARD和WM_VSCROLLCLIPBOARD消息。hMem参数必须为NULL。</span></li>
<li><span style="font-size: 16px">CF_DSPTEXT = 129;&nbsp; //与专用格式关联的文本显示格式。hMem参数必须是可以以文本格式显示的数据的句柄,而不是私有格式的数据。</span></li>
<li><span style="font-size: 16px">CF_DSPBITMAP = 130;&nbsp; //与专用格式关联的位图显示格式。hMem参数必须是可以以位图格式显示的数据的句柄,而不是私有格式的数据。</span></li>
<li><span style="font-size: 16px">CF_DSPMETAFILEPICT = 131;&nbsp; //与私有格式关联的图元文件图片显示格式。hMem参数必须是可以以图元文件图片格式显示的数据的句柄,以代替私有格式的数据。</span></li>
<li><span style="font-size: 16px">CF_DSPENHMETAFILE = 142;&nbsp; //与私有格式关联的增强元文件显示格式。hMem参数必须是一个数据句柄,可以以增强的图元文件格式显示,而不是以私有格式显示数据。</span></li>
<li><span style="font-size: 16px">CF_PRIVATEFIRST = $200;&nbsp; //专用剪贴板格式的整数值范围的开始。该系列以CF_PRIVATELAST结尾。与专用剪贴板格式关联的句柄不会自动释放;剪贴板所有者必须释放此类句柄,通常是为了响应WM_DESTROYCLIPBOARD消息。</span>
<ul>
<li><span style="font-size: 16px">&nbsp; { "Private" 格式无法获得GlobalFree()'d }</span></li>
</ul>
</li>
<li><span style="font-size: 16px">CF_PRIVATELAST = 767;&nbsp; //看 CF_PRIVATEFIRST.</span></li>
<li><span style="font-size: 16px">CF_GDIOBJFIRST = 768;&nbsp; //应用程序定义的GDI对象剪贴板格式的整数值范围的开始。范围的末尾是CF_gdiobjast。清空剪贴板时,与此范围内的剪贴板格式关联的句柄不会使用GlobalFree函数自动删除。此外,当使用此范围内的值时,hMem参数不是GDI对象的句柄,而是由GlobalAlloc函数使用GMEM\u MOVEABLE标志分配的句柄。</span></li>
<li><span style="font-size: 16px">CF_GDIOBJLAST = 1023;&nbsp; //看 CF_GDIOBJFIRST</span>
<ul>
<li><span style="font-size: 16px">&nbsp; { "GDIOBJ" formats do get DeleteObject()'d }</span></li>
</ul>
</li>
</ul>
<p><span style="font-size: 16px">1.2 Delphi内默认提供的格式</span></p>
<ul>
<li><span style="font-size: 16px"> CF_COMPONENT&nbsp; &nbsp;//组件</span></li>
</ul>
<p><span style="font-size: 16px"><strong>2、Clipbrd常用方法描述:</strong></span></p>
<ul>
<li><span style="font-size: 16px">Assign&nbsp; //将给定对象分配到剪贴板。如果对象是一个TPicture或TGraphic,它将以相应的格式放置在剪贴板上(例如,TBitmap将作为CF_BITMAP放置在剪贴板上)。Picture.Assign(Clipboard) 和 Bitmap.Assign(Clipboard) 也支持分配检索剪贴板的内容。</span></li>
<li><span style="font-size: 16px">Clear&nbsp; //清除剪贴板中的内容。当剪贴板对象将数据添加到剪贴板时,会自动执行此操作。</span></li>
<li><span style="font-size: 16px">Close&nbsp; //-如果剪贴板处于打开状态,则将其关闭。打开和关闭保存剪贴板被打开的次数。在关闭剪贴板的次数与打开剪贴板的次数相同之前,它实际上不会关闭剪贴板。</span></li>
<li><span style="font-size: 16px">Open&nbsp; //打开剪贴板并防止所有其他应用程序更改剪贴板。如果只将一个项目添加到剪贴板,则无需进行此调用。如果需要向剪贴板添加多个格式,请调用Open。在添加所有格式之后。打给close。</span></li>
<li><span style="font-size: 16px">HasFormat&nbsp; &nbsp;//如果剪贴板上有给定格式,则返回true。</span></li>
<li><span style="font-size: 16px">GetAsHandle&nbsp; //以指定格式处理的原始窗口从剪贴板返回数据。句柄不属于应用程序,应该复制数据。</span></li>
<li><span style="font-size: 16px">SetAsHandle&nbsp; //将句柄以给定格式放置在剪贴板上。一旦一个句柄被赋予剪贴板,它就不应该被删除。它将被剪贴板删除。</span></li>
<li><span style="font-size: 16px">GetTextBuf&nbsp; //检索、取回数据</span></li>
<li><span style="font-size: 16px">AsText&nbsp; //允许从剪贴板放置和检索文本。如果CF_文本格式可用,则此属性对检索有效。</span></li>
<li><span style="font-size: 16px">FormatCount&nbsp; //格式数组中的格式数。</span></li>
<li><span style="font-size: 16px">Formats&nbsp; //剪贴簿上所有可用格式的列表</span></li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="color: rgba(136, 136, 136, 1)">创建时间:2022.04.14  更新时间:2022.04.14</span></p>

</div>
<div id="MySignature" role="contentinfo">
    博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你有所帮助,谢谢!<br><br>
来源:https://www.cnblogs.com/guorongtao/p/16143435.html
頁: [1]
查看完整版本: Delphi Clipboard[1] 剪贴板 介绍