Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Общие вопросы > Разные кодировки, определить и преобразовать |
Автор: Bog d`An 26.7.2005, 03:07 |
При вставке в TEdit моего приложения текста из буфера обмена вместо русских букв отображаются знаки вопроса, что не есть правильно. Как сделать правильно? Если можно, кусок кода. Зарание спасибо. |
Автор: Rrader 26.7.2005, 03:41 |
Откуда скопирован текст? |
Автор: RA 26.7.2005, 04:03 |
Это баг самого XP. |
Автор: ТоляМБА 26.7.2005, 06:02 |
Не знаю, у меня всё правильно вставляется, но одно время такой же косяк был (не помню как исправил), могу только посоветовать: 1. В свойствах Edit1 (TEdit) попробуй разные значения Font\Charset (по умолчанию там стоит Defaut_Charset) 2. Такой косяк возникает и с другими прогами, там делается следующий обход: при копировании и вставке русских символов должная стоять русская раскладка клавиатуры. |
Автор: RA 26.7.2005, 09:14 |
ТоляМБА не поможет, это чисто XP-шный баг. Где-то на форуме этот вопрос уже обсуждался. |
Автор: ТоляМБА 27.7.2005, 05:02 | ||
RAdmin, ну сегодня я утром дома посмотрел Винда ХР русифицированная без сервис паков. Делфя 7 Enterprise, не русифицированная. Создал форму с эдитом, скомпилировал, запускил экзэшник: если из ворда копировать, то даже на английской раскладке русские буквы в эдит копируются без проблем, а если из блокнота копировать или имя файла из папки, то при англий ской раскладке действительно "??????? ?????", но если переключить на русскую раскладку, скопировать, вставить, то всё читается нормально. ![]() Значит всё-таки грабли не в ХР или может в ней но в английской версии? |
Автор: Song 27.7.2005, 07:30 |
Bog d`An Просто перед копированием в буфер переведи раскладку на RU |
Автор: RA 27.7.2005, 11:34 |
ТоляМБА Грабли в XP, так как текст в виде "???????" ты получишь даже при вставке его в блокнот. |
Автор: Bes 27.7.2005, 11:55 |
см ответ Song-a |
Автор: Bog d`An 28.7.2005, 06:06 | ||
Это конечно выход ![]() Теперь серьёзно: те же исходные но теперь текст уже в буфере. Типа юзер что-то делает а прога пытается перехватить буфер обмена... |
Автор: RA 28.7.2005, 07:36 |
Поставить хук на копирование в буфер, и перед копирование менять раскладку активному окну. |
Автор: Romikgy 28.7.2005, 08:37 |
Возможно даже будет работать ![]() однак я в ХР для решения данной проблемы , где только можно , в ее настройках, ставил русские локали, и все работало. Хотя мож эт только у меня все так хорошо ![]() ![]() |
Автор: RA 28.7.2005, 08:51 |
Romikgy Это всё как пропрёт, у меня после установки SP2 этот баг то проявляется то нет, закономерность немогу понять. ![]() |
Автор: Bog d`An 1.8.2005, 04:18 | ||||||
эх... попрет не попрёт... а стабильность работы проге не помешает ![]()
Хорошая идея! Не скажешь как сделать наиболее просто ловушку на буфер? В смысле оказать гуманитарную помощь куском кода ![]() Как я понимаю, надо поставить общий хук и перехватывать сообщения о копировании в буфер? Тогда возникают вопросы: 1. Какие сообщения на это дело генерит винда? 2. Это сообщение генерится ДО копирования в буфер или ПОСЛЕ ![]() 3. Нельзя ли это сделать проще? ![]() Ну и от себя: работающий код для переключения/определения раскладки.
Сейчас скопировал этот кусок сюда с делфи - тот же глюк токо вместо знаков вопроса крокозяблики ![]() ЗЫ: Лечится, как и было сказано Song`ом, переключением раскладки, спасибо... |
Автор: Romikgy 1.8.2005, 08:14 |
А не в том ли проблема , что винда при копировании в буфер конвертит текст в юникод???? |
Автор: Song 1.8.2005, 09:36 |
Конкретно с едит-контролами дельфей не могу добиться знаков вопроса ![]() Так бы можно было пободаться |
Автор: RA 1.8.2005, 12:34 | ||
Яж говорю как пропрёт винду. У меня вопросы где-то раз в месяц. =============================== Напутствие пыонэрам: Ловить вам нужно не бабочек и не буфер а WM_COPY посланное в окно, далее определить кодировку этого окна, а потом уже решать менять ему language или нет. |
Автор: Bog d`An 2.8.2005, 03:56 | ||||
У меня XP проявляет достойное похвал постоянство на этот счёт ![]() WM_COPY посылаетссся... поссылается... а куда? Не в моё же приложение ![]() Есть ли более простой способ отследить это дело, кроме общего хука? Спасибо. |
Автор: Song 2.8.2005, 07:46 |
Bog d`An Зато WM_PASTE в твоё. |
Автор: Bog d`An 3.8.2005, 04:05 | ||||
Копирую в буфер русский текст: Вариант 1. При английской раскладке а. Вставляю в TEdit - в результате знаки вопроса б. Переключаю раскладку на русскую и вставляю в TEdit - в результате знаки вопроса Вариант 2. ПЕРЕД КОПИРОВАНИЕМ переключаю раскладку (т.е. копирую при руской раскладке) а. Вставляю в TEdit - в результате РУССКИЙ ТЕКСТ - THE BEST!!! б. Переключаю раскладку на английскую и вставляю в TEdit - в результате РУССКИЙ ТЕКСТ - THE BEST!!! И кто после этого ставит хук на вм_паст? А главное смысл? Тем более наЮга хук если паст в твоём приложении??? Добавлено @ 04:14
Нельзя ли рассказать подробнее? pls ![]() ЗЫ: "THE BEST!!!" - это не русский текст, а эмоция такая, вроде смайлика ":)" ЗЗЫ: Может всё-таки кто-нибудь посоветует, как обойтись без общего хука? ЗЗЗЫ: Той вместо такого, к-й сканит все сообщений винды на предмет вм_копи? |
Автор: Song 3.8.2005, 07:32 |
Bog d`An у меня такого нет, поэтому не могу и лекарство поэксперементировать. А что у тебя за система? |
Автор: Bog d`An 3.8.2005, 07:46 |
профессиональная свинья Добавлено @ 07:47 с сервиспаком1 русифицированная Добавлено @ 07:52 с сервиспаком1 русифицированная Song, а у тебя? |
Автор: Romikgy 3.8.2005, 08:24 | ||
У меня стоит английская версия ХР без руссификации, в настройке--регионы и языки -- понял на русский регион, и самое главное в закладке advanced (у меня так, она третья) поменять на русский , вроде как я понял не-Юникод раскладки, как я понимаю, если винда не догоняет какая раскладка она ее представляет как юникод, отсюда и вопросики ![]() |
Автор: Song 3.8.2005, 08:25 |
SP2 native english |
Автор: Bog d`An 4.8.2005, 08:09 | ||
у меня там тоже русский выбран Добавлено @ 08:13 если русская раскладка, винда догоняет что за кодировка, если английская -//- нет? |
Автор: Romikgy 4.8.2005, 08:19 | ||
Попробуй еще ниже , этого выбраного все таблицы перекодировок русского языка выбрать, более я и сам не знаю ![]() ![]() Добавлено @ 08:22
Может быть , где то винда прописала , что кирилица это кодировка анси , а англ. это юникод , у меня такого небыло, так догадки, мож шрифт по умолчанию поменять надо ??? |
Автор: Bog d`An 5.8.2005, 06:59 | ||
Ладно, щас полезу ставить галочки на китайские языки ![]() Шрифт по умолчению - напомни это где? |
Автор: Bog d`An 5.8.2005, 07:12 |
а как програмно эти галочки проставить кто-нибудь в курсе? |
Автор: Romikgy 5.8.2005, 08:39 | ||||
Я ж сказал , это чисто моя догадка!!! Но и по умолчанию что-то должно быть, это тоже 100%
Так что получилось???? |
Автор: Bog d`An 6.8.2005, 06:51 | ||||||
Romikgy нет, не помогло ![]() просто интерестно... было... Вопрос снимаю так как он не по теме... Оба...: ![]()
|
Автор: Bog d`An 7.8.2005, 08:16 | ||||
Информация для размышлений: при перетаскивании файлов в приложение
а также при перетаскивании на иконку приложения (передача как параметра комадной строки)
РУССКИЕ БУКВЫ ОТОБРАЖАЮТСЯ ПРАВИЛЬНО. Теперь если скопировать текст из мемо при любой раскладке - то глюк пропадает - вставляется нормальный русский текст... может кого этот факт натолкнёт на мысль? |
Автор: Song 8.8.2005, 08:30 |
А чего тут думать? Всё дело в юникодах. |
Автор: Bog d`An 9.8.2005, 04:49 | ||
Наверное всё же прейдётсяя создавать глобальную ловушку... ![]() поскольку это единственное предложенное решение ![]() |
Автор: Song 9.8.2005, 08:05 |
Ловишь WM_PASTE, берёшь ClipBoard.asText, преобразуешь его из юникодов, так чтобы убрать кракозябры. Далее посылаешь сообщение тому же контролу асинхронно для вставки исправленноно текста. |
Автор: RA 9.8.2005, 15:36 |
Вобщем вот то очём я писал. Не испытывал, ибо условия не позволяють. |
Автор: Bog d`An 11.8.2005, 04:03 |
ок, проведу испытания ![]() |
Автор: Bog d`An 12.8.2005, 01:07 | ||
RAdmin, спасибо, но мне не всё понятно в твоём примере - например что за сообщение такое $0400 + 2
![]() После прочтения ещё десятка страниц мануала от разных авторов, взял за основу статью Aleksey'я Pavlov'а (а точнее пример №3). Так вот - или у меня руки кривые или не всё так просто и WM_COPY не обрабатывается ![]() (я, конечно, предпочёл бы второй вариант ![]() Буду признателен, если ты посмотришь код... Так как я ещё не разобрался как прикреплять к мессажам файлы, то вышлю тебе на почту, ок? Если не лень дать адресок... |
Автор: Bog d`An 12.8.2005, 01:15 |
так... кажется уже разобрался с прикреплёнными файлами... Итак вот моё "творчество" |
Автор: Bog d`An 12.8.2005, 01:17 |
а вот то, что я переработал... присутствует статейка по ловушкам... |