1. 程式人生 > >BCB中利用剪貼板復制粘貼

BCB中利用剪貼板復制粘貼

lock rom bcb mil files copyfile 不同 include data

    將一個字符串拷貝到剪貼版中的不同方法:
#include <vcl/Clipbrd.hpp>
// 方法一:
    TClipboard *pClipboard = new TClipboard();
    pClipboard->AsText = "拷貝到剪貼版的文字數據";
    delete pClipboard;
// 方法二:
    TClipboard *pClipboard = new TClipboard();
    pClipboard->SetTextBuf("拷貝到剪貼版的文字數據");
    delete pClipboard;
// 方法三:
    Clipboard()->SetTextBuf("拷貝到剪貼版的文字數據");
// 方法四:
    Clipboard()->AsText = "拷貝到剪貼版的文字數據";


// 將文件Copy到剪貼板
bool CopyFileToClip(LPCSTR pcFile)
{
// sFile為拷貝文件名,多個文件以/0分隔,以/0/0結束
int nLen;
BYTE *pData;
HGLOBAL hGbl;
DROPFILES df;
if(!pcFile || !pcFile[0])
return false;
if(!OpenClipboard(0))
return false;

EmptyClipboard();
df.fNC = false;
df.fWide = false;
df.pFiles = sizeof(df);


df.pt.x = df.pt.y = 0;

for(nLen=0; pcFile[nLen]!=0; )
nLen += strlen(pcFile + nLen) + 1;
nLen += 1; //最後結尾的第二個/0字符
hGbl = GlobalAlloc(GHND, sizeof(df) + nLen);
pData = (BYTE*)GlobalLock(hGbl);
if(pData != NULL)
{
memcpy(pData, &df, sizeof(df));
memcpy(pData + sizeof(df), pcFile, nLen);

GlobalUnlock(hGbl);
if(!SetClipboardData(CF_HDROP, hGbl))
{
GlobalFree(hGbl);
hGbl = NULL;
}
}
else if(hGbl != NULL)
{
GlobalFree(hGbl);
hGbl = NULL;
}
CloseClipboard();
return (hGbl != NULL);
}
//---------------------------------------------------------------------------
// 從剪貼板Paste出文件
bool PasteFileFromClip(LPCSTR pcDesDir)
{
int nLen;
bool bReturn;
LPCSTR lpcData;
HGLOBAL hGbl;
AnsiString strTemp;
DROPFILES *pdf;
SHFILEOPSTRUCT fos;

if(!pcDesDir || !pcDesDir[0])
return false;

if(!OpenClipboard(0))
return false;
hGbl = GetClipboardData(CF_HDROP);
pdf = hGbl? (DROPFILES*)GlobalLock(hGbl): NULL;
if(pdf == NULL)
{
CloseClipboard();
return false;
}
lpcData = (LPCSTR)pdf + pdf->pFiles;

memset(&fos, 0, sizeof(fos));
if(pdf->fWide)
{
strTemp = WideCharLenToString((wchar_t*)lpcData, GlobalSize(hGbl)-pdf->pFiles);
fos.pFrom = strTemp.c_str();
}
else
fos.pFrom = lpcData;
fos.wFunc = FO_COPY;
fos.pTo = pcDesDir;
bReturn = SHFileOperation(&fos)==0;
GlobalUnlock(hGbl);
CloseClipboard();
return bReturn;
}
// if(CopyFileToClip("C://1.txt/0C://Test.exe/0"))
// PasteFileFromClip("D://");

BCB中利用剪貼板復制粘貼