BCB中利用剪贴板复制粘贴

Posted Mr_青山君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BCB中利用剪贴板复制粘贴相关的知识,希望对你有一定的参考价值。

    将一个字符串拷贝到剪贴版中的不同方法:
#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中利用剪贴板复制粘贴的主要内容,如果未能解决你的问题,请参考以下文章

制作电影票选购图案例中,如何利用islide插件进行复制

用VB实现复制粘贴

excel不能复制粘贴,提示“不能打开剪贴板”

Gis复制东西进属性表,粘贴的时候找不到对应属性表

三星手机怎么粘贴不了怎么回事

秒杀系统剪贴板!安卓超强复制粘贴App