Страница: 1 |
Страница: 1 |
Вопрос: Clipboard заменяет 0x00 на 0x32 Почему ???
Добавлено: 07.03.06 15:01
Автор вопроса: VisBas | Web-сайт:
Clipboard заменяет 0x00 на 0x32. Почему ?
И как прочитать то, что реально наход. в буффере (если там текст, с непечатн. симв.) ?
Ответы
Всего ответов: 14
Номер ответа: 1
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #1
Добавлено: 07.03.06 15:21
В тексте вообще-то не должно быть непечатных символов. Иначе это будет не текст, и получать его нужно будет иначе, чем с CFTEXT.
И можно было бы привести код, чтобы не гадать на кофейной гуще.
Номер ответа: 2
Автор ответа:
VisBas
Вопросов: 44
Ответов: 127
Web-сайт:
Профиль | | #2
Добавлено: 07.03.06 15:41
Непечатный символ, в частности - 0x00 специально копируется из hex редактора, а затем VB должен показать его ascii код ( 0x00 ).
Вот такая вещь не прокатыв.
Label1 = Asc
все непечатные симв. замен. на 0x32 (пробел).
Как только что обнаружил, такая же ерунда со строками ресурсов.
Номер ответа: 3
Автор ответа:
VisBas
Вопросов: 44
Ответов: 127
Web-сайт:
Профиль | | #3
Добавлено: 07.03.06 15:44
Опечатался, замен. на 0x20 (пробел)
Номер ответа: 4
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #4
Добавлено: 07.03.06 16:25
Дык это не clipboard меняет, а vb. Есть у него дурная привычка в строку вместо нуля пихать пробел.
Номер ответа: 5
Автор ответа:
VisBas
Вопросов: 44
Ответов: 127
Web-сайт:
Профиль | | #5
Добавлено: 07.03.06 16:49
Понятное дело, что VB. Как бы его отучить от этой дурной привычки..
или она у него в генах, передается от версии к версии..
Номер ответа: 6
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #6
Добавлено: 07.03.06 16:55
Можно попробовать отказаться от vb объекта clipboard и vb-строк, и работать напрямую с апи.
OpenClipboard сотоварищи +
SysAllocString и компания
CopyMemory
Номер ответа: 7
Автор ответа:
VisBas
Вопросов: 44
Ответов: 127
Web-сайт:
Профиль | | #7
Добавлено: 07.03.06 17:22
Мда.. Хотелось проще и быстрее, но раз так пошел я обратно в Builder C++
Номер ответа: 8
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #8
Добавлено: 08.03.06 20:58
У класса Clipboard есть помимо методов GetText и SetText методы Get/SetData, но они работают с типом IPictureDisp. Почему-то.
Номер ответа: 9
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #9
Добавлено: 09.03.06 11:44
Вообще странно. Насколько мне известно, VB никогда не заменял нуллчары в строке на что либо еще. А при работе с буффером через GetText используются NTS, в следствие чего имеем, скажем:
Private Sub Form_Load()
Dim Str1 As String, Str2 As String
Str1 = "1234" & vbNullChar & vbNullChar & "5678"
MsgBox Len(Str1)
Clipboard.SetText Str1
Str2 = Clipboard.GetText
MsgBox Len(Str2)
End Sub
Номер ответа: 10
Автор ответа:
VisBas
Вопросов: 44
Ответов: 127
Web-сайт:
Профиль | | #10
Добавлено: 09.03.06 20:10
После твоего кода, засомневался и еще раз проверил. Странно, но факт !
Номер ответа: 11
Автор ответа:
VisBas
Вопросов: 44
Ответов: 127
Web-сайт:
Профиль | | #11
Добавлено: 09.03.06 20:18
А WinCom может врать ? Я из него копирую.
Номер ответа: 12
Автор ответа:
VisBas
Вопросов: 44
Ответов: 127
Web-сайт:
Профиль | | #12
Добавлено: 09.03.06 20:31
Разобрался :
1. Буффер не может содержать нулевого символа, т.к. последний, является указателем на конец строки.
2. WinCom, видимо при копировании, заменяет 0x00 на 0x20.
Т.о. скопированный из WinCom'a 0x00 превращается в 0x20, а vb действительно тут непричем.
Номер ответа: 13
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #13
Добавлено: 11.03.06 19:15
Скопированный отовсюду 0x00 превращается в 0x20, это сам виндовый клипбоард делает такое преобразование.
Номер ответа: 14
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #14
Добавлено: 13.03.06 10:30
Ну с каких пор клипборд такое делает?
Смотрим еще раз пост N9 и еще раз убеждаемся - при работе с текстом буффер использует Null-Terminated Strings, из чего следует - строка после vbNullChar просто отсекается. Неужто так трудно запустить и проверить?