MartyConnelly
martyconnelly at shaw.ca
Thu Aug 18 13:32:56 CDT 2005
Long way around for a shortcut. But this might not be so safe.
'set reference to FM20.dll in windows/system32 'MS Forms 2.0 Object Library
function getclipboard() as string
Dim dobD As DataObject
Dim strS As String
Set dobD = New DataObject
dobD.GetFromClipboard
strS = dobD.GetText
'or put in formatted see object browser
' dobD.SetText ("Huh??")
' dobD.PutInClipboard
Debug.Print strS
getclipboard= strS
Set dobD = Nothing
End Sub
John W. Colby wrote:
>>I've even got a simple class to take care of text to and from the clipboard
>>
>>
><g>
>
>And of course, so do I now, thanks to you. <grin> This is what makes this
>group great.
>
>John W. Colby
>www.ColbyConsulting.com
>
>Contribute your unused CPU cycles to a good cause:
>http://folding.stanford.edu/
>
>-----Original Message-----
>From: accessd-bounces at databaseadvisors.com
>[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Heenan, Lambert
>Sent: Thursday, August 18, 2005 12:03 PM
>To: 'Access Developers discussion and problem solving'
>Subject: RE: [AccessD] copy string to clipboard
>
>
>
>-----Original Message-----
>From: accessd-bounces at databaseadvisors.com
>[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of John W. Colby
>Sent: Thursday, August 18, 2005 11:00 AM
>To: 'Access Developers discussion and problem solving'
>Subject: RE: [AccessD] copy string to clipboard
>
>
>Where is the matching ClipGetText?
>
>John W. Colby
>www.ColbyConsulting.com
>
>------------------------
>It's another simple API call...
>
>Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As
>Long) As Long
>
>I've even got a simple class to take care of text to and from the clipboard
><g>
>
>'*************************** clsClipBoard *************
>
>Option Compare Database
>Option Explicit
>
>
>
>' Obtaining Clipboard Data using API
>' (needed for VBA since no Clipboard Object) -- can also paste the data to a
>control ' *************************************************************
>
>' ******* Place following in declarations *********
>Private Declare Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As
>Long Private Declare Function CloseClipboard Lib "user32" () As Long Private
>Declare Function EmptyClipboard Lib "user32" () As Long Private Declare
>Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As
>Long) As Long Private Declare Function GetClipboardData Lib "user32" (ByVal
>wFormat As
>Long) As Long
>Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags&, ByVal
>dwBytes As Long) As Long Private Declare Function GlobalLock Lib "kernel32"
>(ByVal hMem As Long) As Long Private Declare Function GlobalUnlock Lib
>"kernel32" (ByVal hMem As Long) As Long Private Declare Function GlobalSize
>Lib "kernel32" (ByVal hMem As Long) As Long Private Declare Function lstrcpy
>Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long
>
>Const GHND = &H42
>Const CF_TEXT = 1
>Const MAXSIZE = 4096
>
>Function GetTextData() As String
> Dim hClipMemory As Long
> Dim lpClipMemory As Long
> Dim MyString As String
> Dim RetVal As Long
>
> If OpenClipboard(0&) = 0 Then
> MsgBox "Cannot open Clipboard. Another app. may have it open", ,
>"Clipboard"
>
> Exit Function
> End If
>
> ' Obtain the handle to the global memory
> ' block that is referencing the text.
> hClipMemory = GetClipboardData(CF_TEXT)
> If IsNull(hClipMemory) Then
> MsgBox "Could not allocate memory", , "Clipboard"
> Else
>
> ' Lock Clipboard memory so we can reference
> ' the actual data string.
> lpClipMemory = GlobalLock(hClipMemory)
>
> If Not IsNull(lpClipMemory) Then
>
> MyString = SPACE$(MAXSIZE)
> RetVal = lstrcpy(MyString, lpClipMemory)
> RetVal = GlobalUnlock(hClipMemory)
>
> ' Peel off the null terminating character.
> MyString = uMid(MyString, 1, InStr(1, MyString, Chr$(0), 0) - 1)
> Else
> MsgBox "Could not lock memory to copy string from.", , "Clipboard"
> End If
>
> End If
>
> RetVal = CloseClipboard()
> GetTextData = MyString
>
>End Function
>
>Sub SetTextData(MyString As String)
> Dim hGlobalMemory As Long, lpGlobalMemory As Long
> Dim hClipMemory As Long, x As Long
>
> ' Allocate movable global memory.
> '-------------------------------------------
> hGlobalMemory = GlobalAlloc(GHND, Len(MyString) + 1)
>
> ' Lock the block to get a far pointer
> ' to this memory.
> lpGlobalMemory = GlobalLock(hGlobalMemory)
>
> ' Copy the string to this global memory.
> lpGlobalMemory = lstrcpy(lpGlobalMemory, MyString)
>
> ' Unlock the memory.
> If GlobalUnlock(hGlobalMemory) <> 0 Then
> MsgBox "Could not unlock memory location. Copy aborted.", ,
>"Clipboard"
> Else
> ' Open the Clipboard to copy data to.
> If OpenClipboard(0&) = 0 Then
> MsgBox "Could not open the Clipboard. Copy aborted.", , "Clipboard"
> Exit Sub
> End If
>
> ' Clear the Clipboard.
> x = EmptyClipboard()
>
> ' Copy the data to the Clipboard.
> hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory)
> End If
>
> If CloseClipboard() = 0 Then
> MsgBox "Could not close Clipboard.", , "Clipboard"
> End If
>
>End Sub
>
>'********************************************
>
>
--
Marty Connelly
Victoria, B.C.
Canada