| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 |
| а вот то, что я переработал... присутствует статейка по ловушкам... |