![]() |
|
![]() ![]() ![]() |
|
gAlexKo |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 23.3.2011 Репутация: нет Всего: нет |
Задача: Есть прога обработки текста в её TRichEdit. Если напечатать в TRichEdit слова по русски, скопировать их в Clipboard и затем Paste например в любой текстовый редактор, то все ОК.
Но если _загрузить_ русский текст в TRichEdit и обработать его _автоматически_ (или просто не нажимать клавиш ввода текста), то после Paste в MSWord там будет крякозябры - редактор криво воспримет русский текст из Clipbord. Прикол - если перед помещением текста в Clipboard нажать хоть одну русскую букву, то Clipboard сработает нормально и поместит в MDWORD русский текст. Что делать? Для работы этой программы не всегда нужно жать русские буквы, а рекомендация этого шаманства как выход из положения некузяво. CBuilder 5.0, Windows XP SP2/3 |
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
А если перед копированием принудительно активировать русскую раскладку?
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
gAlexKo |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 23.3.2011 Репутация: нет Всего: нет |
Да, это выход. Никак не думал, что проблема связана именно с включеннием русского регистра. По идее это не должно быть связано с клипбордоским копированием. Потестил на этом: void __fastcall Tblf::bt_qt_all_to_clipboardClick(TObject *Sender) { char lname[100]; bool restore = false; GetKeyboardLayoutName(lname); if(AnsiString(lname) == AnsiString("00000409")) { LoadKeyboardLayout("00000419", KLF_ACTIVATE); //rus restore = true; } RichEditAll2Clipboard(re_quoter); re_quoter->SetFocus(); if(restore) LoadKeyboardLayout("00000409", KLF_ACTIVATE); //eng } Это сообщение отредактировал(а) gAlexKo - 10.9.2012, 21:06 |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Я, конечно, подсказать ничего не могу. Но, ИМХО, это кривой выход. А если нет русской раскладки? Что тогда? Не будет работать... -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
artsb |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
А вот и ответ нашёлся. Viktor Kushnir:
Можно попробовать так:
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
||||
|
|||||
gAlexKo |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 23.3.2011 Репутация: нет Всего: нет |
Если русскую раскладку установить нельзя, то функция LoadKeyboardLayout("00000419", KLF_ACTIVATE); //rus просто вернет NULL и как бы ничего не произойдет - как была допустим английская раскладка так и будет. Однако, если в винде вообще нет русской раскладки (винда вообще не руссифицирована), то на ней даже русский текст нельзя смотреть. А следовательно не возникнет задачи его копипастить. Это сообщение отредактировал(а) gAlexKo - 11.9.2012, 17:14 |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Это всё хорошо. Но если программой захочет воспользоваться китаец. Русского то там не будет, а вот китайский - будет. И проблема останется. Это сообщение отредактировал(а) artsb - 11.9.2012, 18:11 -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
gAlexKo |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 23.3.2011 Репутация: нет Всего: нет |
Эта програ двуязычная - англо-русская. ;) |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Ясно. Но всё равно, это не очень хороший подход. Лучше делать так, чтобы потом было меньше исправлять. Вы проверили код, который я вам дал? -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
Usper |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 13.4.2007 Репутация: 15 Всего: 15 |
![]() ![]() ![]() -------------------- На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник. |
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
Если захотеть намеренно вызвать ошибку в какой бы то ни было проге - то это обязательно получится. ![]() -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Да, давайте ребята, поощряйте развитие популяции аболтусов ))
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
gAlexKo |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 23.3.2011 Репутация: нет Всего: нет |
||||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Ну мне то что? Как хотите. Вам же потом исправлять и доделывать ) -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
gAlexKo |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 23.3.2011 Репутация: нет Всего: нет |
Каждый добавленный в прогу язык поддержки - это всякий раз масса добавленных строк соответствия для куч кнопок, надписей, хинтов, хелпов и т.д. Языки добавляются всегда постепенно. При копипасте к тому же может возникнуть необходимость локальных коррекций - разных для разных языков. По мере добавления языка (чего не будет) можно без проблем добавить в приведенной мной функции новое условие. if(AnsiString(lname) == AnsiString("00000409")) { LoadKeyboardLayout("xCodePage", KLF_ACTIVATE); //xCodePage restore = true; } это капля в море в общем объеме прироста кода. И кстати непонятно - это почему это старый rich edit не будет ключить при копипасте тем же самым образом, что я описывал. Он что, лучше написан? |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |