|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.11.2018, 18:54 | #1 |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
[РЕШЕНО][Delphi] При копировании из редактора кода или текстовых полей разработанного приложения русский текст вставляется крокозябрами / в испорченной кодировке.
Иногда так бывает, что надо скопировать текст/код, содержащий кириллические буквы, из редактора кода или текстовых полей разработанного приложения.
Проблема состоит в том, что, когда такой текст вставляется в другие текстовые редакторы, кириллические символы вставляются в неверной кодировке. Например, такой код: Код:
_________ Решение проблемы: Перед тем, как копировать текст, переключите язык ввода на русский. Всё должно скопироваться и вставиться нормально. См. следующее сообщение, там ещё одно решение. ____________ Ключевые слова для поиска темы Текст код из Делфи Delphi вставляется криво крокозябрами кракозябрами в испорченной неверной кодировке Последний раз редактировалось Вадим Мошев; 24.11.2018 в 20:37. |
24.11.2018, 18:00 | #2 |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
Ещё одно решение проблемы
Переключение языка ввода перед копированием текста – пожалуй, рабочий вариант во всех случаях. Но он не всегда удобен в том плане, что конечному пользователю надо сообщать дополнительно (либо в справочной документации, либо на форме самого приложения) о необходимости переключения языка ввода. Можно переключать язык ввода автоматически перед работой с буфером обмена (далее - БО), но, как я говорил ранее, проблема возникает и тогда, когда происходит копирование из стороннего приложения в наше. Если способ отследить такое и существует, мне он неизвестен. Потом, переключение языка ввода без ведома пользователя - в некотором роде моветон, с моей точки зрения, поэтому такой способ здесь не рассматривается.
Сейчас я расскажу о способе решения проблемы, который был найден мной в ходе разработки своей небольшой программы. Во-первых, вам нужно подключить модуль RusClipboard.pas (согласно информации в Интернете, автор - Игорь Цысь (Igoreha), igoreha@i.com.ua) Код модуля: Код:
Код:
Код:
Код:
Код:
Код:
Чтобы это работало, нам надо разместить окно нашего приложения в цепочке наблюдателей БО. Для этого сначала мы создадим приватное поле с типом HWND: Код:
Код:
В обработчике закрытия формы нам надо изъять помещённое ранее окно из цепочки наблюдателей. Для этого вызывается функция changeClipboardChain. Она принимает два аргумента, первый из которых – дескриптор извлекаемого окна, а второй дескриптор замещающего окна. Мы его получали ранее, это окно, следующее за нашем в цепочке. Имеем: Код:
Все эти операции достаточно выполнить в модуле основной формы. Во всех остальных формах вашего проекта работа с БО также будет происходить корректно. Демонстрацию работы данного способа я размещаю как в приложении, так и во внешней ссылке. Ссылка на демо-проект на яндексДиске: https://yadi.sk/d/3JpEtpV6UpruSQ Вложение: D.rar Смотрите важное продолжение здесь: http://www.programmersforum.ru/showp...15&postcount=4 Последний раз редактировалось Вадим Мошев; 17.06.2019 в 21:52. |
24.11.2018, 18:23 | #3 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Самое простое решение - перейти на юникодный делфи. И танцы с бубном отпадут )
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
11.12.2018, 18:04 | #4 |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
Как я заметил, неприятность выше описанного метода заключается в том, что иногда при помещении текста в буфер обмена, появляется ошибка "Не могу открыть буфер обмена" ("can't open clipboard" или как-то так), при этом текст копируется без проблем.
Чтобы избежать появления этой ошибки, я советую тело обработчика помещения текста в буфер обмена обернуть в try/except. В секции except писать ничего не надо - текст копируется нормально, но задача состоит в том, чтобы избежать появления сообщения об ошибке. Возможно, это быдлокод, но лучшего / более красивого решения я пока не могу предложить. Таким образом, этот код будет выглядеть так: Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Редактор кода Delphi 10.2: новый код button вставляется в модуль куда хочет | KBO | Общие вопросы Delphi | 13 | 17.03.2018 02:48 |
Защита значений текстовых полей от HEX редактора. | Вавел из ГМТУ | Общие вопросы Delphi | 7 | 18.03.2017 10:48 |
Ошибка Дан произвольный русский текст. Проверить каких букв в нем больше: гласных или согласных(Delphi) | Sunshinee | Помощь студентам | 6 | 15.12.2015 19:14 |
текст из текстовых полей | Kolombina | Microsoft Office Word | 12 | 25.02.2011 17:31 |