PB12.5可正常从剪切板生成BMP图片,同样代码,PB12.6不可,生成的图片大小一样,但不可打开

FrankLiang 2016-06-30 03:40:08
12.5可正常从剪切板生成BMP图片,同样代码,而12.6不可,生成的图片大小一样,则不可打开
代码之前从csdn复制, 请高手帮忙指正,谢谢,附代码如下:

long lul_hBitmap
ulong lul_hdcmem, hdc
//判断剪贴板中的数据是否是BMP数据
constant ulong CF_BITMAP = 2
constant ulong DIB_RGB_COLORS = 0
constant ulong BITMAPTYPE = 19778
if IsClipboardFormatAvailable(CF_BITMAP) <> 1 then
messagebox("Stop","請用專門的截圖軟件,本次格式不正確,請再試")
return
end if
//(1)开始从剪贴板取数据
OpenClipboard(GetDesktopWindow())
lul_hBitmap = GetClipBoardData(CF_BITMAP)
CloseClipboard()
blob lb
hdc = GetDC(GetDesktopWindow())
lul_hdcmem = CreateCompatibleDC(hdc)
selectobject(lul_hdcmem, lul_hBitmap)
//(2)将取得的内存图片转换位blob数据流
ULong lul_hdc, lul_pixels
Blob lblb_header, lblb_info
BitmapInfo lstr_Info
BitmapFileHeader lstr_Header
IF lul_hBitmap = 0 THEN return
lstr_Info.bmiHeader.biSize = 40
IF GetDIBits(lul_hdcMem, lul_hBitmap, 0, 0, 0, lstr_Info, DIB_RGB_COLORS) <= 0 THEN return
lul_pixels = lstr_Info.bmiHeader.biBitCount
lstr_Info.bmiColors[lul_pixels] = 0
lblb_bitmap = Blob(Space(lstr_Info.bmiHeader.biSizeImage/2)) //原来------ Blob(Space(lstr_Info.bmiHeader.biSizeImage))
// 获取文件信息
GetDIBits(lul_hdcMem, lul_hBitmap, 0, lstr_Info.bmiHeader.biheight, &
lblb_bitmap, lstr_Info, DIB_RGB_COLORS)
// 创建BMP文件头
lstr_Header.bfType = BITMAPTYPE
lstr_Header.bfSize = lstr_Info.bmiHeader.biSizeImage
lstr_Header.bfOffBits = 54 + (lul_pixels * 4)
// 将文件头转换成blob
lblb_header = Blob(Space(7)) //原来------Blob(Space(14))
CopyBitmapFileHeader(lblb_header, lstr_Header, 14)
// 将文件内容转换为blob
lblb_info = Blob(Space(20 + lul_pixels * 2)) //原来------Blob(Space(40 + lul_pixels * 4))
CopyBitmapInfo(lblb_info, lstr_Info, 40 + lul_pixels * 4)
// 整合文件信息
lblb_bitmap = lblb_header + lblb_info + lblb_bitmap
//释放通过GetDC或GetWindowDC所检索出来的公用上下文设备
ReleaseDC(GetDesktopWindow(),hdc)
//删除通过CreteDC或CreateCompatibleDC所创建的上下文设备
DeleteDC(lul_hdcmem)

//(3)取到图片文件后,则开始保存到文件中
if len(lblb_bitmap) <= 0 then return
CONSTANT ULong INVALID_HANDLE_VALUE = -1
CONSTANT ULong GENERIC_WRITE = 1073741824
CONSTANT ULong FILE_SHARE_WRITE = 2
CONSTANT ULong CREATE_ALWAYS = 2
ULong lul_file, lul_length, lul_written
Boolean lb_rtn
// (创建)打开文件

int li_rc
lul_file = CreateFile(ls_file, GENERIC_WRITE, FILE_SHARE_WRITE, 0, CREATE_ALWAYS, 0, 0)
//IF lul_file = INVALID_HANDLE_VALUE THEN RETURN
// 写文件
lul_length = Len(lblb_bitmap)
lb_rtn = WriteFile(lul_file, lblb_bitmap, &
lul_length, lul_written, 0)
// 关闭文件
CloseHandle(lul_file)
//p_1.setpicture(lblb_bitmap)
//return 1
...全文
1688 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
FrankLiang 2016-07-16
  • 打赏
  • 举报
回复
PB12.6因要激活,故應要付升級的費用,之後獲得一個lic文件。具體聯繫SAP / novalys.net
引用 7 楼 szcesoft 的回复:
请问已经购买了PB12.5的,可以直接使用12.6吗?还是可以付部分费用升级呢?
xing88888888 2016-07-16
  • 打赏
  • 举报
回复
可能同版本有关,试下打补丁。
sz初级学者 2016-07-15
  • 打赏
  • 举报
回复
请问已经购买了PB12.5的,可以直接使用12.6吗?还是可以付部分费用升级呢?
FrankLiang 2016-07-04
  • 打赏
  • 举报
回复
補充聯繫人:Daniel.peyrous@novalys.net 或 Daniel.peyrous@gmail.com 和此人溝通很愉快,希望能幫到你。
FrankLiang 2016-07-04
  • 打赏
  • 举报
回复
糾正:, 購于網站:www.novalys.net,打了折,原價近3000USD.
FrankLiang 2016-07-04
  • 打赏
  • 举报
回复
2666 USD, 購于網站:navalys.net,打了折,原價近3000USD.
引用 3 楼 zhangyangziwo 的回复:
引用 2 楼 FrankLiang 的回复:
謝謝版主!我刚购回这一套PB12.6是正版,发现问题后,又打补丁到最新,结果还是一样。 因对剪切板API没研究,故请帮忙看看。 [quote=引用 1 楼 lzp_lrp 的回复:] 有空时试一下,按道理说pb12.5和pb12.6应该是一样的,也有可能是pb12.6的某个版本有问题
请问楼主在哪里买的12.6?多少钱?[/quote]
zhangyangziwo 2016-07-04
  • 打赏
  • 举报
回复
引用 2 楼 FrankLiang 的回复:
謝謝版主!我刚购回这一套PB12.6是正版,发现问题后,又打补丁到最新,结果还是一样。 因对剪切板API没研究,故请帮忙看看。
引用 1 楼 lzp_lrp 的回复:
有空时试一下,按道理说pb12.5和pb12.6应该是一样的,也有可能是pb12.6的某个版本有问题
请问楼主在哪里买的12.6?多少钱?
WorldMobile 2016-07-01
  • 打赏
  • 举报
回复
有空时试一下,按道理说pb12.5和pb12.6应该是一样的,也有可能是pb12.6的某个版本有问题
FrankLiang 2016-07-01
  • 打赏
  • 举报
回复
謝謝版主!我刚购回这一套PB12.6是正版,发现问题后,又打补丁到最新,结果还是一样。 因对剪切板API没研究,故请帮忙看看。
引用 1 楼 lzp_lrp 的回复:
有空时试一下,按道理说pb12.5和pb12.6应该是一样的,也有可能是pb12.6的某个版本有问题

680

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder API 调用
社区管理员
  • API 调用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧