码迷,mamicode.com
首页 > 其他好文 > 详细

BCB中利用剪贴板复制粘贴

时间:2017-07-01 18:27:59      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:files   sizeof   opencl   byte   struct   复制粘贴   copyfile   多个   paste   

    将一个字符串拷贝到剪贴版中的不同方法:
#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中利用剪贴板复制粘贴

标签:files   sizeof   opencl   byte   struct   复制粘贴   copyfile   多个   paste   

原文地址:http://www.cnblogs.com/geowu/p/7102825.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!