把图片框的完整内容复制到剪贴板

VB本身不允许你将一个Form、UserControl或PictureBox上的完整图片复制到剪贴板。如果你使用Clipboard.SetData,将只复制被载入这个对象的位图。通过使用API方法,你可以超越这个限制,保证全部内容都被复制,包括你刚刚画上的任何图形。

开始一个新项目,在窗体上放置一个Command和一个PictureBox。将PictureBox的Autoredraw属性设为1。然后添加一个标准模块,把以下代码复制进去。

Private Type RECT
 Left As Long
 Top As Long
 Right As Long
 Bottom As Long
End Type
'GDI函数:
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Const SRCCOPY = &HCC0020 ' (DWORD) dest = source
'创建一个memory DC:
Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hDC As Long) As Long
'在memory中建立一个位图:
Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hDC As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
'把一个GDI对象放入DC,返回原先的那个:
Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long
'删除GDI对象:
Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
'剪贴板函数:
Private Declare Function OpenClipboard Lib "USER32" (ByVal hWnd As Long) As Long
Private Declare Function CloseClipboard Lib "USER32" () As Long
Private Declare Function SetClipboardData Lib "USER32" (ByVal wFormat As Long, ByVal hMem As Long) As Long
Private Declare Function EmptyClipboard Lib "USER32" () As Long
Private Const CF_BITMAP = 2
Public Function CopyEntirePicture(ByRef objFrom As Object) As Boolean
Dim lhDC As Long
Dim lhBMP As Long
Dim lhBMPOld As Long
   '在内存中建立一个指向我们将要复制对象的DC:
   lhDC = CreateCompatibleDC(objFrom.hDC)
   If (lhDC <> 0) Then
     '建立一张指向将要复制对象的位图:
     lhBMP = CreateCompatibleBitmap(objFrom.hDC, objFrom.ScaleWidth \ Screen.TwipsPerPixelX, objFrom.ScaleHeight \ Screen.TwipsPerPixelY)
     If (lhBMP <> 0) Then
       '把位图选入我们刚才建立的DC中,并贮存原先在那里的老位图:
       lhBMPOld = SelectObject(lhDC, lhBMP)

       '把objFrom的内容复制到建立的位图里:
       BitBlt lhDC, 0, 0, objFrom.ScaleWidth \ Screen.TwipsPerPixelX, objFrom.ScaleHeight \ Screen.TwipsPerPixelY, objFrom.hDC, 0, 0, SRCCOPY

       '恢复DC中的内容:
       SelectObject lhDC, lhBMPOld

       '现在把位图装入剪贴板:
       EmptyClipboard
       OpenClipboard 0
       SetClipboardData CF_BITMAP, lhBMP
       CloseClipboard
       '我们在这里不用删除建立的位图——
       '它现在属于剪贴板,当剪贴板变化时,Windows将为我们删除它。
     End If

     '清除刚才建立的DC:
     DeleteObject lhDC
   End If
End Function
   为了试验这个方法,把这些代码加入窗体:
Private Sub Command1_Click()
   CopyEntirePicture Picture1
End Sub
Private Sub Form_Load()
   Dim i As Long
   '在PictureBox中画些东西:
   With Picture1.Font
     .Name = "Arial"
     .Bold = True
     .Size = 12
   End With
   For i = 1 To 20
     Picture1.ForeColor = QBColor(i Mod 15)
     Picture1.Print "http://www.archtide.com"
   Next i
End Sub

窗体加载后,PictureBox中将会有一些文本。当你点击Command后,PictureBox中的全部内容都将会被复制到剪贴板里,你可以把它粘贴到别的程序里,比如画笔、Word等等。

时间: 2024-08-21 19:08:35

把图片框的完整内容复制到剪贴板的相关文章

代码-html 如何在一个框中输入内容,然后点击按钮将此框中的内容复制到另一个框中

问题描述 html 如何在一个框中输入内容,然后点击按钮将此框中的内容复制到另一个框中 如题所说. 我想在 ""group1currency1"" 里输入一个数据 比如USD,然后点击下面的按钮,将""group1currency1""里的内容复制到"outputcurrency1". 下面是我的代码,我尝试了很多次都不成功, 希望有人能帮助我 <!DOCTYPE html><html&g

用js将内容复制到剪贴板兼容浏览器

 通过js将内容复制到剪贴板,本来不难,可是若考虑到浏览器的兼容性问题,就变的有点麻烦,借助flash实现浏览器的兼容 若想通过js将内容复制到剪贴板,本来不难,可是若考虑到浏览器的兼容性问题,就变的有点麻烦,使用jquery-zclip复制是一个不错的选择,借助flash实现浏览器的兼容.原理就不细讲了,下面说下如何实现.   比如我的html代码如下:   代码如下: <div class="buttonBox">  <code rel="1"

用js将内容复制到剪贴板兼容浏览器_javascript技巧

若想通过js将内容复制到剪贴板,本来不难,可是若考虑到浏览器的兼容性问题,就变的有点麻烦,使用jquery-zclip复制是一个不错的选择,借助flash实现浏览器的兼容.原理就不细讲了,下面说下如何实现. 比如我的html代码如下: 复制代码 代码如下: <div class="buttonBox"> <code rel="1"><span id="id_1">要复制的内容1</span><

js 内容复制到剪贴板方法总结

在js中有一个clipboardData.setData(sDataFormat, sData)函数可以实现  代码如下 复制代码 clipboardData.setData("text",www.111cn.net) <a href="#" onclick=javascript:clipboardData.setData("text","www.111cn.net")> 单击当前链接文本表示复制了内容到本地剪贴板

textbox操作-VB中,将textbox内容复制给excel文档

问题描述 VB中,将textbox内容复制给excel文档 我希望在VB中放入5个textbox,将5个textbox的内容分别复制给一个叫kiss的excel文档中的A.B.C.D.E列每列第一个非空单元格,完成后保存kiss.xls到原路径(桌面). 各位大侠们帮忙看看,这个第一次用,实在不会搞,折腾了好久了,谢谢啦 解决方案 用VBA http://blog.csdn.net/laotou99/article/details/12967673 不需要什么复制粘贴.另外,你可以利用excel

GWT中复制到剪贴板 js+flash实现复制 兼容性比较好_javascript技巧

但是用flash就可以复制.例子就是VeryCd,看"复制选中的连接"按钮是一个flash.看来flash的安全沙箱没有限制将内容复制到剪贴板      但是也是有限制的:  1 根据ZeroClipborad的人们说,这些flash必须通过网络加载.  Zero Clipboard Does Not Work From Local Disk This is a security restriction by Adobe Flash Player. Unfortunately, sin

使用ZeroClipboard解决跨浏览器复制到剪贴板的问题_网页编辑器

Zero Clipboard的实现原理Zero Clipboard 利用透明的Flash让其漂浮在复制按钮之上,这样其实点击的不是按钮而是 Flash ,这样将需要的内容传入Flash,再通过Flash的复制功能把传入的内容复制到剪贴板 Zero Clipboard的安装方法 首先需要下载 Zero Clipboard的压缩包,解压后把文件夹中两个文件:ZeroClipboard.js 和 ZeroClipboard.swf 放入到你的项目中. 然后把在你要使用复制功能的页面中引入Zero Cl

巧把Excel的表格内容复制成为图片

通常情况下,要将Excel的表格内容复制成图片插在Word文档中,我们除了使用抓图软件就是按键盘上的PrintScreen键来抓取,这两种方法中前者要借助第三方软件来实现,后者虽然简单,但抓取的图片也要经过裁剪.缩放等方式处理.其实在Excel中还提供了更方便的将表格内容复制成图片的方法,操作非常简便,下面大家就跟随我一起来看看吧. 1.将选区复制成图片 <中国电脑教育报>曾介绍过在Word窗口中按住Shift键再单击"文件"菜单,此时就多出了两个命令即"全部关闭

WPS文字将两个文本框中的内容串连起来

  文本框是我们大家在编辑文档过程中经常要用到的,比如说有时为了防止文字或图片移动,我们会用文本框的形式将文字或图片框起来.常规操作方法都是先在前一个文本框中输入内容,待内容填满后,再将鼠标移到下一个文本框再继续输入.这就出现了一个现象,就当内容输入完成后,如果要是增加或删减前面表格内容时,而后面文本框中的内容并不随之联动,从而造成前面的文本框内容不是跨界就是出现空白.那怎样才能将两个文本框中的内容"串"连起来,使之形成一个整体牵一发而动全身呢? 如果需要将文字直接连接到另一个文本框可