积累系统性知识
积聚技术精华
  首页    个人中心    撰写积文    建立课题    订立目标    整理积文    管理课题    管理目标    技能Get    代码积累 
BCB中利用剪贴板复制粘贴
error997 (error997)    2014-11-20 21:13:44      目标    课题
   将一个字符串拷贝到剪贴版中的不同方法:
切换到: 纯代码  
   
#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://");

   回复人: ccrun(老妖)(www.ccrun.com) ( ) 汗。。。
切换到: 纯代码  
   
#define NO_WIN32_LEAN_AND_MEAN // 从 Windows 头中排除极少使用的资料
#include <shlobj.h>
#include <vcl.h>

将它们加到cpp文件的最前面,注意是cpp,不是h文件。

转自 http://blog.csdn.net/y___y/article/details/1113703
(+0)技能Get

建议楼主:搜索关键字 |参考其他资源 |回复 |追问
  error997(error997):   个人中心    课题    目标    代码积累