Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > WinAPI
Перезагрузить страницу Буфер обмена как он работает
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Кошмар Кошмар вне форума
Member
 
Сообщений: 2,694
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 23.04.2005
По умолчанию Буфер обмена как он работает - 04.01.2007, 19:21

Кто-нибудь знает как он работает?
Вот открываю я текст в ОЕМ кодировке в текстовом редакторе. Показываются крокозябры, я меняю в редакторе кодировку на ОЕМ и появляется нормальный текст. При этом коды символов остались те же, сменилась только таблица символов, сопоставляющая определённому коду определённое начертание.
Выделяю текст, контрл Ц, открываю блокнот (он работает в кодировке виндовс), нажимаю контрл В, и... Вижу нормальный текст.. Хотя по идее в блокнот вставился текст, символы которого в кодировке ОЕМ, и в блокноте должны быть крокозябры...
Как это происходит?
Или это тот текстовый редактор перед тем, как сунуть текст в буфер преобразовал его?


импортирован с progz.ru
Ответить с цитированием
  (#2 (permalink)) Старый
Кошмар Кошмар вне форума
Member
 
Сообщений: 2,694
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 23.04.2005
По умолчанию Буфер обмена как он работает - 04.01.2007, 19:21

Кто-нибудь знает как он работает?
Вот открываю я текст в ОЕМ кодировке в текстовом редакторе. Показываются крокозябры, я меняю в редакторе кодировку на ОЕМ и появляется нормальный текст. При этом коды символов остались те же, сменилась только таблица символов, сопоставляющая определённому коду определённое начертание.
Выделяю текст, контрл Ц, открываю блокнот (он работает в кодировке виндовс), нажимаю контрл В, и... Вижу нормальный текст.. Хотя по идее в блокнот вставился текст, символы которого в кодировке ОЕМ, и в блокноте должны быть крокозябры...
Как это происходит?
Или это тот текстовый редактор перед тем, как сунуть текст в буфер преобразовал его?


импортирован с progz.ru
Ответить с цитированием
  (#3 (permalink)) Старый
Fuud Fuud вне форума
Member
 
Сообщений: 4,076
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.09.2004
По умолчанию 06.01.2007, 22:44

Не так. Просто текст кладется в разных форматах. Блокнот выбирает тот, что он поддреживает. Нопр. юникод.
Ответить с цитированием
  (#4 (permalink)) Старый
Fuud Fuud вне форума
Member
 
Сообщений: 4,076
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.09.2004
По умолчанию 06.01.2007, 22:44

Не так. Просто текст кладется в разных форматах. Блокнот выбирает тот, что он поддреживает. Нопр. юникод.
Ответить с цитированием
  (#5 (permalink)) Старый
Кошмар Кошмар вне форума
Member
 
Сообщений: 2,694
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 23.04.2005
По умолчанию 06.01.2007, 23:38

т.е. в буфере обмена сразу во всех форматах он храниться? Оо
Или я не правильно понял?


импортирован с progz.ru
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Кошмар Кошмар вне форума
Member
 
Сообщений: 2,694
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 23.04.2005
По умолчанию 06.01.2007, 23:38

т.е. в буфере обмена сразу во всех форматах он храниться? Оо
Или я не правильно понял?


импортирован с progz.ru
Ответить с цитированием
  (#7 (permalink)) Старый
Влад Влад вне форума
Профессионал
 
Сообщений: 3,882
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию 07.01.2007, 13:56

Скорее, текстовый редактор перекодирует внутреннее представление текста из OEM в ANSI, и не использует другую кодовую страницу. А когда кладет текст в клипборд, то использует в качестве источника это самое свое внутренее представление; то есть, существует два текста - один в файле на диске в кодировке OEM, второй - в памяти текстового редактора, кодировка изначально OEM (отображаются кракозяблики), потом этот же текст в памяти редактором перекодируется в ANSI (отображается читаемый текст), и он же кладется в клипборд как CF_TEXT, уже перекодированный в ANSI, и затем, будучи вставлен в другой редактор, "нормально" отображается. Можно легко проверить: считав текст в кодировке OEM, не выполняя преобразование в ANSI, скопировать "кракозяблики" в клипборд и вставить в другой редактор - так кракозяблики и останутся...

См. MSDN: Clipboard Formats.
Ответить с цитированием
  (#8 (permalink)) Старый
Влад Влад вне форума
Профессионал
 
Сообщений: 3,882
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию 07.01.2007, 13:56

Скорее, текстовый редактор перекодирует внутреннее представление текста из OEM в ANSI, и не использует другую кодовую страницу. А когда кладет текст в клипборд, то использует в качестве источника это самое свое внутренее представление; то есть, существует два текста - один в файле на диске в кодировке OEM, второй - в памяти текстового редактора, кодировка изначально OEM (отображаются кракозяблики), потом этот же текст в памяти редактором перекодируется в ANSI (отображается читаемый текст), и он же кладется в клипборд как CF_TEXT, уже перекодированный в ANSI, и затем, будучи вставлен в другой редактор, "нормально" отображается. Можно легко проверить: считав текст в кодировке OEM, не выполняя преобразование в ANSI, скопировать "кракозяблики" в клипборд и вставить в другой редактор - так кракозяблики и останутся...

См. MSDN: Clipboard Formats.
Ответить с цитированием
  (#9 (permalink)) Старый
Кошмар Кошмар вне форума
Member
 
Сообщений: 2,694
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 23.04.2005
По умолчанию 07.01.2007, 14:39

спасиб


импортирован с progz.ru
Ответить с цитированием
  (#10 (permalink)) Старый
Кошмар Кошмар вне форума
Member
 
Сообщений: 2,694
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 23.04.2005
По умолчанию 07.01.2007, 14:39

спасиб


импортирован с progz.ru
Ответить с цитированием
  (#11 (permalink)) Старый
Fuud Fuud вне форума
Member
 
Сообщений: 4,076
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.09.2004
По умолчанию 11.01.2007, 00:29

Цитата:
т.е. в буфере обмена сразу во всех форматах он храниться? Оо
да
Ответить с цитированием
  (#12 (permalink)) Старый
Fuud Fuud вне форума
Member
 
Сообщений: 4,076
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.09.2004
По умолчанию 11.01.2007, 00:29

Цитата:
т.е. в буфере обмена сразу во всех форматах он храниться? Оо
да
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
Vovik-ukr Vovik-ukr вне форума
Member
 
Сообщений: 33
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 12.11.2006
По умолчанию 08.02.2007, 23:10

только не во всех форматах, а только в тех, которые предоставит владелец буфера обмена.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение числа в буфер обмена Shaurman C++ Builder 6 24.10.2010 22:58
Копирование в буфер обмена wcp PHP 1 12.11.2009 11:38
WinApi буфер обмена AquilA WinAPI 1 07.06.2007 23:51
Буфер обмена как результат - не срабатывает OpenClipboard bartwell Windows CE 10 02.06.2007 14:52
Требуется программно загрузить текст в буфер обмена wenom C++ Builder 1 20.03.2007 00:20
Программно очистить буфер обмена Kat Visual Basic 7 10.05.2006 12:59
Кирилица и буфер обмена Fuud Delphi 4 29.10.2004 15:05
Буфер обмена где найти документацию Andrey1 Общие вопросы программирования 3 17.10.2004 13:29
Выделение и копирование текста в буфер обмена Fess exe Visual C++ 2 14.05.2004 00:05
Копирование текста в буфер обмена Gloomy Delphi 3 18.10.2003 11:46
Как скопировать текст из TStaticText в буфер обмена Gloomy Delphi 7 12.09.2003 23:31
Копирование текста из строки редактирования в буфер обмена rust-resisting Visual C++ 1 15.08.2003 04:25



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2023, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов