• 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://");

  • 相关阅读:
    【转帖】流程与IT管理部——IT支撑业务变革的必然趋势
    【转帖】39个让你受益的HTML5教程
    【转帖】2015年2月份最佳的免费 UI 工具包
    【消息】Pivotal Pivots 开源大数据处理的核心组件
    【转帖】创业者,你为什么这么着急?
    教程:SpagoBI开源商业智能之XML Template 图表模板
    教程:Spagobi开源BI系统 Console报表设计教程
    【转帖】Mysql多维数据仓库指南 第一篇 第1章
    Kiss MySQL goodbye for development and say hello to HSQLDB
    梯度消失和梯度爆炸问题详解
  • 原文地址:https://www.cnblogs.com/geowu/p/7102825.html
Copyright © 2020-2023  润新知