On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
постоянный участник


Пост N: 191
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 29.11.09 22:34. Заголовок: Просветите: RU866, gtwvt (Harbour) и буфер обмена Windows.


HB_gtInfo( HB_GTI_CLIPBOARDDATA ):
1. Внутри программы копирует через буфер правильно.
2. Из винды (к примеру, Word) в программу - тоже правильно.
3. А вот из программы в винду (любое приложение) - бредятина.
HB_OemToAnsi() и HB_AnsiToOem() мало меняют что-либо. Русские буквы не появляются.
Запутался вобщем... Подскажите.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 22 , стр: 1 2 All [только новые]


постоянный участник




Пост N: 121
Зарегистрирован: 06.02.07
ссылка на сообщение  Отправлено: 29.11.09 22:56. Заголовок: У меня тоже при эксп..


У меня тоже при экспорте в Эксел получались (при копировании-вставке через буфер обмена из баз в "RU866") "крокозябры". Поборол правкой в реестре (понятно, что это как-то "через одно место" - но срабатывает):
-------
для Win98
HKLM\System\CurrentControlSet\Control\Nls\Codepage
у 1252 значение поменял с "cp_1252.nls" на "cp_1251.nls"
-------
для WinXP - в соотв.месте (не помню точно сейчас написание - вроде без "_")

Нехороших "побочных эффектов" ни я, ни пользователи (пока) не заметили (а тому уж года 2-3).

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 192
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 29.11.09 23:21. Заголовок: Спасибо, но не помог..


Спасибо, но не помогло. Что еще можно попробывать?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 122
Зарегистрирован: 06.02.07
ссылка на сообщение  Отправлено: 29.11.09 23:44. Заголовок: Тогда кусочек кода &..


Тогда кусочек кода "в студию" :) (как и что для примера берешь в клипбоард, как и куда вставляешь)
Я использовал из МиниГУИ
CopyToClipboard(cText) store cText in Windows clipboard  
RetriveTextFromClipboard() ->cText retrieve text from Windows clipboard
Function CopyRtfToClipboard(cRtfText) store cRTFText in Windows clipboard
Авось получится разобраться (не обещаю - но вдруг?..) В свое время тоже помучался...

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1239
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.11.09 10:37. Заголовок: Терминал, если для н..


Терминал, если для него используется oem-шрифт, при чтении из буфера обмена использует формат CF_OEMTEXT. При этом система автоматически выполняет перекодировку ansi->oem. Это работает.
При записи в буфер обмена терминал также использует формат CF_OEMTEXT. Приложение windows (excel) читает буфер обмена с форматом CF_TEXT. Судя по мануалам, при этом система аналогично должна выполнять перекодировку oem->ansi. Но почему-то этого не происходит.
Кстати, far корректно читает такие даные из клипбоард. Но он скорее всего сам выполняет перекодировку.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 194
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 30.11.09 10:45. Заголовок: gustow пишет: Тогда..


gustow пишет:

 цитата:
Тогда кусочек кода "в студию"


Пожалуйста:

Скрытый текст

Функция назначена на горячую клавишу в SetKey(). Работает, если активен какой-либо GET.

Pasha пишет:

 цитата:
Кстати, far корректно читает такие даные из клипбоард


У меня и Far пишет фигню. :(


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1242
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.11.09 11:45. Заголовок: Если из терминала Ha..


Если из терминала Harbour отправить текст в буфер обмена, и затем просмотреть clipboard с помощью программы:

http://www.nirsoft.net/utils/inside_clipboard.html

то видно, что с использованием форматов CF_TEXT и CF_UNICODETEXT данные считываются верно.
Почему приложения MS их неверно перекодируют - непонятно.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 196
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 30.11.09 11:55. Заголовок: Да. Так и есть...


Да. Так и есть.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1243
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.11.09 12:00. Заголовок: Хм... VFP и vfp-прог..


Хм... VFP и vfp-программы правильно читают clipboard харбора

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1244
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.11.09 12:05. Заголовок: Вывод из всего этого..


Вывод из всего этого: можно, конечно, исправить терминал, и писать в буфер обмена с использованием формата CF_TEXT, предварительно перекодировав текст из oem в ansi
Но хотелось бы понять причину, почему не срабатывает CF_OEMTEXT

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 197
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 30.11.09 12:21. Заголовок: Че-та вааще непонятн..


Че-та вааще непонятно: в буфере нормально читается строка формата C_TEXT и не читается C_OEMTEXT. Т.е., получается, что преобразование прошло нормально. Может быть где-то хранится признак, что данные записаны в буфер из терминала и некоторые проги делают преобразование еще раз? Вот в Far при создании файла (Shift-F4) кодовая страница стоит "Автоматически". Откуда он берет данные?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1245
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.11.09 14:37. Заголовок: Ага, я разобрался Ха..


Ага, я разобрался
Харбор копирует текст с форматом CF_OEMTEXT, а office читает с форматом CF_UNICODETEXT
При этом системе надо указать дополнительно язык по умолчанию (русский) командой SetClipboardData(CF_LOCALE, ..), иначе она берет английский, и неправильно перекодирует в unicode
Поправлю.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 199
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 30.11.09 14:41. Заголовок: Pasha пишет: Поправ..


Pasha пишет:

 цитата:
Поправлю


Где? На SVN?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1246
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.11.09 15:25. Заголовок: Нет, на xHarbour CVS..


Нет, на xHarbour CVS
На Harbour SVN я думаю перенесут

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 203
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 30.11.09 15:26. Заголовок: Pasha пишет: На Har..


Pasha пишет:

 цитата:
На Harbour SVN я думаю перенесут


Да, было б неплохо. Спасибо!

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1247
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.11.09 15:46. Заголовок: в модуле src\rt..


в модуле

src\rtl\gtclip.c

в функции hb_gt_winapi_setClipboard() после строки

SetClipboardData( uFormat, hglbCopy );

надо вставить:

         if( uFormat == CF_OEMTEXT ) 
{
HGLOBAL hglbLocale = GlobalAlloc(GMEM_MOVEABLE, 4);
DWORD lcid = (DWORD) GlobalLock(hglbLocale);
lcid = LOCALE_USER_DEFAULT;
GlobalUnlock(hglbLocale);
SetClipboardData(CF_LOCALE, hglbLocale);
}


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 206
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 30.11.09 16:14. Заголовок: Паша, it works! Спас..


Паша, it works!
Спасибо! :)

Петр, можно Вас попросить на SVN это выложить? Спасибо!

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 125
Зарегистрирован: 06.02.07
ссылка на сообщение  Отправлено: 30.11.09 17:42. Заголовок: Спасибо за то, что р..


Спасибо за то, что разобрались!
Еще, значит, багом меньше :) И нам всем лучше (можно будет нормально буфером обмена пользоваться - без "бубнов").

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 213
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 30.11.09 18:01. Заголовок: Эээээээхххххх... ран..


Эээээээхххххх... рано я обрадовался... :)
В буфер, вроде бы, нормально сохраняется.
А теперь обнаружил, что не из всех программ вставляется корректно.
Тот же notepad дает в кучу вопросительных знаков.
Паш, может глянешь, а?... :)

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1252
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.11.09 19:47. Заголовок: Тогда сегодня уже не..


Тогда сегодня уже не буду сбрасывать на CVS, завтра еще посмотрю

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1253
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 01.12.09 09:20. Заголовок: Проверил notepad, вс..


Проверил notepad, вставляет из БО правильно, если указать шрифт с кириллическим набором символов.
Если шрифт Terminal с кодировкой OEM/DOS, то вставляет текст все равно в кодировке 1251, т.е. неправильно, но отображаются не вопросительные знаки. Т.е. я ваш результат не получил.

Еще я заметил, что язык (CF_LOCALE) надо указывать и для CF_TEXT, т.е. в условии надо добавить CF_TEXT:

if( uFormat == CF_TEXT || uFormat == CF_OEMTEXT )



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 22 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 23
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет