|
|
|
| не смог найти реализацию в бэйсике(аксеса) а не VB.
надо программно занести данные в буфер. например жмешь кнопку а в буфер заносится значение поля | |
|
| |
|
|
|
| >>например жмешь кнопку
ну и запоминайте в переменную | |
|
| |
|
|
|
| надо именно в буфер. я же написал в теме :)
смысл в том чтоб дать пользователю скопировать данные к которым у него по сути нет доступпа(добавлени\изменение). далее он жмет ктрл-в и вуаля | |
|
| |
|
|
|
| Злой Вы.
А если надо перетащить "врукопашку" в другое приложение?
Автору:
А где находятся данные для копирования? | |
|
| |
|
|
|
| Ctrl+C
Ctrl+V
или
Ctrl+Ins
Shift+Ins
| |
|
| |
|
|
|
| Каких-то несчастных 12 API функций и пишете/читаете. | |
|
| |
|
|
|
| Я делал давно как-то так кривенько, код на кнопке:
Me.fldCopy="чего-то интересное" 'отвязанное поле
Me.fldCopy.SetFocus
If Me.fldCopy.Text = vbNullString Then Exit Sub
DoCmd.RunCommand acCmdCopy
|
При этом должна стоять опция выделения всего текста при входе в поле, иначе его придется выделять.
Контекстная менюшка была отключена. А взамен ничего. | |
|
| |
|
|
|
| это API
http://hiprog.com/index.php?option=com_content&task=view&id=205
если не связываться с API, то можно
1. использовать RunCommand acCmdCopy
2. использовать библиотеки где есть реализация работы с буфером, например MSForms Data Object | |
|
| |
|
|
|
| http://hiprog.com/index.php?option=com_content&task=view&id=205
взял отсюда.
имеем след функцию
Function fnCLPSetData(sS As String) As String
Dim hGlobalMemory As Long, lpGlobalMemory As Long
Dim hClipMemory As Long, X As Long
' Allocate moveable global memory.
'-------------------------------------------
hGlobalMemory = GlobalAlloc(GHND, Len(sS) + 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, sS)
' Unlock the memory.
If GlobalUnlock(hGlobalMemory) <> 0 Then
fnCLPSetData = ""
GoTo l_End
End If
' Open the Clipboard to copy data to.
If OpenClipboard(0&) = 0 Then
fnCLPSetData = ""
Exit Function
End If
' Clear the Clipboard.
X = EmptyClipboard()
' Copy the data to the Clipboard.
hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory)
l_End:
fnCLPSetData = sS
End Function
все отлично,но! несколько раз проработала нормально и забила видимо память. теперь при любой попытке что нить скопировать(не обязательно в бэйсике даже) ничего не происходит. а если это в бэйсике то падает ошибка "out of memory". как это обойти?
(правда против теории что память забилась есть 1 факт что по ктрл-v ничего не вставляется. но все же..) | |
|
| |
|
|
|
| http://hiprog.com/index.php?option=com_content&task=view&id=205
взял отсюда.
имеем след функцию
Function fnCLPSetData(sS As String) As String
Dim hGlobalMemory As Long, lpGlobalMemory As Long
Dim hClipMemory As Long, X As Long
' Allocate moveable global memory.
'-------------------------------------------
hGlobalMemory = GlobalAlloc(GHND, Len(sS) + 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, sS)
' Unlock the memory.
If GlobalUnlock(hGlobalMemory) <> 0 Then
fnCLPSetData = ""
GoTo l_End
End If
' Open the Clipboard to copy data to.
If OpenClipboard(0&) = 0 Then
fnCLPSetData = ""
Exit Function
End If
' Clear the Clipboard.
X = EmptyClipboard()
' Copy the data to the Clipboard.
hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory)
l_End:
fnCLPSetData = sS
End Function
все отлично,но! несколько раз проработала нормально и забила видимо память. теперь при любой попытке что нить скопировать(не обязательно в бэйсике даже) ничего не происходит. а если это в бэйсике то падает ошибка "out of memory". как это обойти?
(правда против теории что память забилась есть 1 факт что по ктрл-v ничего не вставляется. но все же..)
странно что продублировалось и сообщение вначале темы.. но всеже.
хочу добавить что в Х(X = EmptyClipboard()) передается 1 то есть очистка отрабатывает нормально. вроде бы :) | |
|
| |
|
12 Кб. |
|
| Я тут проанализировал код от lukas. Как написано у него у меня почему-то не работало. Но с буфером тоже как-то пытался завязаться. Однако его код работает, после небольшой корректуры. Просто оставил одну строку. Вот пример. И в любое приложение копируется. | |
|
| |
|
|
|
| дело в том что мне надо было копировать просто данные. получаемые например sql запросом. так как тот код почему то не работал пришлось пользоваться acCmdCopy. для этого получал данные и заносил их в Value контрола. но сам то контрол мне не нужен.. сделал его скрытным. тогда запрещают устанавливать фокус. а без этого не дают занести данные :)) в общем сделал нескрытным но максимально узким и спрятал под другим контролом. шаманство. но работает :) | |
|
| |
|
|
|
| Так сделай Visible=false по умолчанию. А при нажатии на кнопку visible=true потом фокус в него, копирование и снова далой из видимости. Только это мне кажется не сильно профессионально будет, но коли нет другого выхода, я бы так поступил. | |
|
| |