I'm using the followin code to load a bitmap to a picture control and then trying to copy the image to the clipboard:
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 SavePicBit(str21 As String, pPic As Object, boundFrame As BoundObjectFrame, frm As Form, estNo As Long, PicRef As Long)
.....
pPic.Visible = True
pPic.SetFocus
pPic.Picture = str21
OpenClipboard 0
EmptyClipboard
SetClipboardData pPic.Image & vbNullChar, CF_BITMAP
.....
I'm able to see the correct image appear on the control pPic, but the SetClipboardData is not saving the image to the clipboard.
Any sugestions on what is missing??
I must be missing something. I had tried this code previously, but the message coming up is "argument not optional"
What do I need to declare to make this work? Also does it still need the OpenClipboard and EmptyClipboard??? This is in an Access 2003 module using VBA , not VB
is not the way to call the API. The first parameter is wFormat, which is CF_BITMAP. The second parameter are memory allocation of the handler.
Here is my code, fix it to your need. I am using other API called to load image to handler. I off to bed now, it really late for me now:
Const LR_LOADFROMFILE = &H10Const IMAGE_BITMAP = 0Const IMAGE_ICON = 1Const IMAGE_CURSOR = 2Const IMAGE_ENHMETAFILE = 3Const CF_BITMAP = 2Private Declare Function LoadImage Lib "user32" Alias "LoadImageA" (ByVal hInst As Long, ByVal lpsz As String, ByVal dwImageType As Long, ByVal dwDesiredWidth As Long, ByVal dwDesiredHeight As Long, ByVal dwFlags As Long) As LongPrivate Declare Function CloseClipboard Lib "user32" () As LongPrivate Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As LongPrivate Declare Function EmptyClipboard Lib "user32" () As LongPrivate Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As LongPrivate Declare Function IsClipboardFormatAvailable Lib "user32" (ByVal wFormat As Long) As LongPrivate Sub CopyImage()Dim hDC As Long, hBitmap As Long 'Load the bitmap into the memory hBitmap = LoadImage(0, "C:\Users\khairil\Desktop\graphic.bmp", IMAGE_BITMAP, 320, 200, LR_LOADFROMFILE) If hBitmap = 0 Then MsgBox "There was an error while loading the bitmap" Exit Sub End If 'open the clipboard OpenClipboard 0 'Clear the clipboard EmptyClipboard 'Put our bitmap onto the clipboard SetClipboardData CF_BITMAP, hBitmap 'Check if there's a bitmap on the clipboard If IsClipboardFormatAvailable(CF_BITMAP) = 0 Then MsgBox "There was an error while pasting the bitmap to the clipboard!" End If 'Close the clipboard CloseClipboard 'YOU CAN TRY AND PASTE INTO MSPAINT OR WORDEnd SubPrivate Sub CommandButton1_Click() CopyImageEnd Sub
Just call this code:
Open in new window
It works fine.