Делаю так:
- Код: Выделить всё
'класс-модуль Works
Public Function CopyToClipboard(Optional ByVal hwnd As Long, _
Optional ByVal SelectedOnly As Boolean = True) As Boolean
Dim wFormat&, hMem&, lpData&
Dim ClpWork As Works
If SelectedOnly Then
Set ClpWork = New Works
For i = 1 To Count
If Item(i).Selected Then
ClpWork.AddNewWork Item(i), True
End If
Next i
Else
Set ClpWork = Me
End If
If ClpWork.Count > 0 Then
wFormat = RegisterClipboardFormat("Work.lst")
If wFormat <> 0 Then
If OpenClipboard(hwnd) <> 0 Then
hMem = GlobalAlloc(GHND, ByVal 4&)
If hMem <> 0 Then
lpData& = GlobalLock(hMem)
If lpData <> 0 Then
CopyMemory ByVal lpData, ByVal ObjPtr(ClpWork), ByVal 4&
GlobalUnlock hMem
EmptyClipboard
Call SetClipboardData(wFormat&, hMem&)
CopyToClipboard = True
End If
End If
End If
CloseClipboard
End If
End If
End Function
Public Sub PasteFromClipboard()
Dim wFormat&, hMem&, lpData&
Dim ClpWork As Works
wFormat = RegisterClipboardFormat("Work.lst")
If wFormat <> 0 Then
If OpenClipboard(hwnd) <> 0 Then
hMem = GetClipboardData(wFormat)
If hMem <> 0 Then
lpData = GlobalLock(hMem)
If lpData <> 0 Then
CopyMemory ClpWork, ByVal lpData, ByVal 4&
GlobalUnlock hMem
For i = 1 To ClpWork.Count
AddNewWork ClpWork(i), True
Next i
End If
End If
CloseClipboard
End If
End If
End Sub
Копирование в буфер проходит без видимых ошибок.
Вставка из буфера не работает (вырубается приложение).
Неверно выполняется строка из Sub PasteFromClipboard:
- Код: Выделить всё
CopyMemory ClpWork, ByVal lpData, ByVal 4&.