注:此文中程序原为VB书写.老妖改为CB版.
如果你想知道剪贴板上是否包含来自excel的数据,或者你想判别rich text格式是否可用以激活粘贴菜单时,以下程序可以告诉你如何判别当前剪贴板上所有可用的格式,包括自定义格式。
// Unit1.cpp 开始----------------- //---------------------------------------------------------------------------
#include <vcl.h> #pragma hdrstop
#include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //已知的剪贴板数据格式如下: char *strClipboardFormats[17]={"cf_text","cf_bitmap","cf_metafilepict","cf_sylk", "cf_dif","cf_tiff","cf_oemtext","cf_dib","cf_palette", "cf_pendata","cf_riff","cf_wave","cf_unicodetext", "cf_enhmetafile","cf_hdrop","cf_locale","cf_max"};
//获取自定义数据格式的名称 String GetUnknownFormatName(long lFormatID);
//--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender) { int lr; int icount;
ListBox1->Items->Clear(); if(OpenClipboard(Handle)) { try { lr=EnumClipboardFormats(0); if(lr!=0) { do { icount++; if(lr<18) ListBox1->Items->Add(strClipboardFormats[lr]); else ListBox1->Items->Add(GetUnknownFormatName(lr)); lr = EnumClipboardFormats(lr); }while(lr!=0); } } catch(...) { CloseClipboard(); } } CloseClipboard(); } //--------------------------------------------------------------------------- String GetUnknownFormatName(long lFormatID) { //对于自定义格式,我们可以向剪贴板要注册过的名字: char strBuf[255]; long lr; lr = GetClipboardFormatName(lFormatID,strBuf,255); if(lr!=0) return String(strBuf); else return "-----None-------"; }
//---------程序结束--------------------
当你点击按钮后,当前所有可用的剪贴板数据格式将会添加到ListBox中。列表区被设为格式名,每一行的数据被设为剪贴板格式的id。要在列表中看到自定义格式,试试在点击按钮之前,从Word、写字板或IE中复制一些东西。
---测试环境:W2k ADV Server + sp3 BCB 6.0 + sp3
|