Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Работа API функции GetClipboardData под Win98 и WinNT(2000)??? / 10 сообщений из 10, страница 1 из 1
17.05.2004, 11:00
    #32519829
amel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
Проблема в том, что API функция GetClipboardData под работает WIN98, а в WINNT(2000) работает не корректно. Может был у кого такой баг???

Private Declare Function OpenClipboard Lib "user32.dll" (ByVal hwnd As Long) As Boolean
Private Declare Function GetClipboardData Lib "user32.dll" (ByVal uFormat As Long) As String
Private Declare Function CloseClipboard Lib "user32.dll" () As Boolean

DoCmd.RunCommand acCmdCopy
'DoCmd.DoMenuItem acFormBar, 1, 3, acMenuVer70

OpenClipboard (0)
FromClipboard = Trim(GetClipboardData(1)) 'В WIN98 возвращает данные нормально, а в WINNT не корректно!!!
CloseClipboard
...
Рейтинг: 0 / 0
17.05.2004, 11:05
    #32519841
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
а что такая за ошибка: "не корректно" ?

==
Если же с телепячить - то у тебя в NTскорей-всего возращается UNICODe формат. Попробуй по-юзать StrConv.
...
Рейтинг: 0 / 0
17.05.2004, 11:24
    #32519883
amel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
Нет функция StrConv не помогает.
...
Рейтинг: 0 / 0
17.05.2004, 11:29
    #32519895
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
Повторюсь: а что такая за ошибка: "не корректно" ?

===
Попробуй установить русский язык перед копированием, если поможет, то надо подправить чуть-чуть реестр.
...
Рейтинг: 0 / 0
17.05.2004, 11:34
    #32519908
amel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
Виктор, спасибо, действительно причина Я думаю в раскладке клавиатуре, но функция StrConv не помогает.

Вот тему нашел может будет интересна и для других, сейчас поюзаю и сообщу результат:
Проблема копирования русского текста через буфер
http://am.rusimport.ru/MSAccess/topic.aspx?ID=229&find=GetClipboardData
...
Рейтинг: 0 / 0
17.05.2004, 11:36
    #32519914
Sfagnum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
ты юзаешь CF_TEXT может поможет CF_OEMTEXT?

Сделать можно всё!!!
Только бы знать как...
...
Рейтинг: 0 / 0
17.05.2004, 11:47
    #32519937
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
Если бы сразу написал, что занчит "не корректно", то было все гораздо проще и быстрей.
֏!
...
Рейтинг: 0 / 0
17.05.2004, 12:04
    #32519981
amel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
Вот результат все заработало:

Private Const MAXSIZE = 4096
Private Const CF_TEXT = 1

Private Declare Function OpenClipboard Lib "user32.dll" (ByVal hwnd As Long) As Boolean
Private Declare Function GetClipboardData Lib "user32.dll" (ByVal uFormat As Long) As Long
Private Declare Function CloseClipboard Lib "user32.dll" () As Boolean
Private Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hmem As Long) As Long
Private Declare Function GlobalSize Lib "kernel32" (ByVal hmem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hmem As Long) As Long

'Взял из примера вот эту функцию
Function ClipBoard_GetData() 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"
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"
GoTo OutOfHere
End If

' 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 = Mid(MyString, 1, InStr(1, MyString, Chr$(0), 0) - 1)
ClipBoard_GetData = MyString
Else
MsgBox "Could not lock memory to copy string from."
End If

OutOfHere:

RetVal = CloseClipboard()
ClipBoard_GetData = MyString

End Function


И т.д.

DoCmd.DoMenuItem acFormBar, 1, 3, acMenuVer70
FromClipboard = Trim(ClipBoard_GetData)

Заработало!!!

Но засада:
Есть еще вопрос, почему при копировании из Access из табл. в буфер из буфера возвращается строка (RetVal = lstrcpy(MyString, lpClipMemory)) -> MyString с округленными данными??? (т.е. 30,456->30,47) А мне нужны данные полные 30,456
...
Рейтинг: 0 / 0
17.05.2004, 12:05
    #32519985
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
30,456->30,47 - это даже не округление...
...
Рейтинг: 0 / 0
17.05.2004, 12:19
    #32520010
amel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
Извините вот так: 30,456->30,46 - это даже не округление... Возможно, но фигня в том и состоит, что из буфера возвращаются обрубленные (округленные) значаения!!! Причем, если из буфера вставить в Excel, то всталяется то же двумя знаками, но можно отформатировать, чтобы увидеть все цифры после запятой.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Работа API функции GetClipboardData под Win98 и WinNT(2000)??? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]