|
|
|
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
|
|||
|---|---|---|---|
|
#18+
Проблема в том, что 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 11:00 |
|
||
|
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
|
|||
|---|---|---|---|
|
#18+
а что такая за ошибка: "не корректно" ? == Если же с телепячить - то у тебя в NTскорей-всего возращается UNICODe формат. Попробуй по-юзать StrConv. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 11:05 |
|
||
|
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
|
|||
|---|---|---|---|
|
#18+
Нет функция StrConv не помогает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 11:24 |
|
||
|
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
|
|||
|---|---|---|---|
|
#18+
Повторюсь: а что такая за ошибка: "не корректно" ? === Попробуй установить русский язык перед копированием, если поможет, то надо подправить чуть-чуть реестр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 11:29 |
|
||
|
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
|
|||
|---|---|---|---|
|
#18+
Виктор, спасибо, действительно причина Я думаю в раскладке клавиатуре, но функция StrConv не помогает. Вот тему нашел может будет интересна и для других, сейчас поюзаю и сообщу результат: Проблема копирования русского текста через буфер http://am.rusimport.ru/MSAccess/topic.aspx?ID=229&find=GetClipboardData ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 11:34 |
|
||
|
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
|
|||
|---|---|---|---|
|
#18+
ты юзаешь CF_TEXT может поможет CF_OEMTEXT? Сделать можно всё!!! Только бы знать как... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 11:36 |
|
||
|
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
|
|||
|---|---|---|---|
|
#18+
Если бы сразу написал, что занчит "не корректно", то было все гораздо проще и быстрей. Óäà÷è! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 11:47 |
|
||
|
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
|
|||
|---|---|---|---|
|
#18+
Вот результат все заработало: 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 12:04 |
|
||
|
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
|
|||
|---|---|---|---|
|
#18+
30,456->30,47 - это даже не округление... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 12:05 |
|
||
|
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
|
|||
|---|---|---|---|
|
#18+
Извините вот так: 30,456->30,46 - это даже не округление... Возможно, но фигня в том и состоит, что из буфера возвращаются обрубленные (округленные) значаения!!! Причем, если из буфера вставить в Excel, то всталяется то же двумя знаками, но можно отформатировать, чтобы увидеть все цифры после запятой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 12:19 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32519895&tid=1674594]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
158ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 441ms |

| 0 / 0 |
