You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

64位C++Builder剪贴板报错:Unsupported clipboard problem求助

解决64位C++Builder剪贴板"Unsupported clipboard problem"报错问题

问题原因

64位VCL的Clipboard()->Assign()方法对剪贴板中的部分位图格式(如带Alpha通道的DIBV5、非标准位图格式)兼容性不如32位版本,直接赋值时会触发格式不支持错误。

解决方案

1. 先校验格式再处理

先判断剪贴板是否包含CF_BITMAP或CF_DIB等标准位图格式,绕开Assign()的自动转换逻辑:

// 检查剪贴板是否包含标准位图格式
if (Clipboard()->HasFormat(CF_BITMAP)) {
    TBitmap *BMP = new TBitmap();
    // 通过句柄直接赋值,避免格式转换问题
    BMP->Handle = reinterpret_cast<HBITMAP>(Clipboard()->GetAsHandle(CF_BITMAP));
    
    Image1->Width = BMP->Width;
    ImageVue->Height = BMP->Height;
    Image1->Picture->Bitmap->Assign(BMP);
    
    delete BMP;
} else if (Clipboard()->HasFormat(CF_DIB)) {
    // 处理DIB格式的剪贴板数据
    HANDLE hDIB = Clipboard()->GetAsHandle(CF_DIB);
    if (hDIB) {
        TBitmap *BMP = new TBitmap();
        BMP->LoadFromResourceHandle(0, reinterpret_cast<int>(hDIB));
        
        Image1->Width = BMP->Width;
        ImageVue->Height = BMP->Height;
        Image1->Picture->Bitmap->Assign(BMP);
        
        delete BMP;
    }
} else {
    ShowMessage("剪贴板中无可用的位图数据");
}

2. 检查版本兼容性

若使用的是C++Builder XE系列早期版本,64位VCL剪贴板模块存在已知bug,建议升级到10.4 Sydney及以后版本,或安装对应版本的官方补丁。

3. 处理带Alpha通道的位图(可选)

如果剪贴板中的是带透明通道的PNG/32位位图,可直接用TPngImage处理:

#include <Vcl.Imaging.pngimage.hpp>

if (Clipboard()->HasFormat(CF_PNG)) {
    TPngImage *PNG = new TPngImage();
    PNG->Assign(Clipboard());
    
    Image1->Width = PNG->Width;
    ImageVue->Height = PNG->Height;
    Image1->Picture->Assign(PNG);
    
    delete PNG;
}

内容的提问来源于stack exchange,提问作者Jim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:35:08