Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В мемо отображется ????? вместо слов, что делать? 
:(
    Опции темы
RinOSpro
Дата 5.11.2007, 20:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Когда в мемо копируют из блокнота вместо букв одни ????????????? вопросы? Что это такое? И как это исправить?
  Вверх
Bose
Дата 5.11.2007, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 8
Всего: 51



Цитата(RinOSpro @  5.11.2007,  20:56 Найти цитируемый пост)
Когда в мемо копируют из блокнота вместо букв одни ????????????? вопросы? Что это такое? И как это исправить?

Это ошибка. =)

Это с любыми языками происходит? 


п.с. здесь не раз обсуждалась похожая проблема: лечилась она путём смены языка для ввода перед копированием. Т.е. если надо скопировать русский текст, то достаточно перед копированием изменить язык для ввода(Ctrl+Shift) на русский - как проблема изчезает. Это оно?
PM MAIL WWW Skype   Вверх
Alexeis
Дата 5.11.2007, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Или использовать юникодные контролы, который пока что нет в делфях  smile 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
RinOSpro
Дата 5.11.2007, 21:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Нет у меня нормально. Я дал другу прогу. Он говорит типа копирует из блокнота в мемо ctrl-c ctrl-v и вот такие закарючки. У меня все норм. Я както давно слышал что вроде в реестр чтото надо добавить. Только что и куда хз.
  Вверх
Alexeis
Дата 5.11.2007, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



RinOSpro, не не поможет тут реестр. Винда должна знать при помощи какой кодовой таблицы юникод в анси перекодировать. Где-то тут я показывал решение проблемы с ручным извлечением из буфера текста.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
RinOSpro
Дата 7.11.2007, 00:00 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Alexeis @  5.11.2007,  23:57 Найти цитируемый пост)
Где-то тут я показывал решение проблемы с ручным извлечением из буфера текста. 

Дай пожалуста ссылочку не найду никак.

Добавлено через 10 минут и 15 секунд
Цитата(Bose @  5.11.2007,  21:09 Найти цитируемый пост)
п.с. здесь не раз обсуждалась похожая проблема: лечилась она путём смены языка для ввода перед копированием. Т.е. если надо скопировать русский текст, то достаточно перед копированием изменить язык для ввода(Ctrl+Shift) на русский - как проблема изчезает. Это оно? 

Да это оно. Только как это программно лечить?

Это случайно не то:
function GetKeyboardState(var KeyState: TKeyboardState): BOOL; stdcall;
function SetKeyboardState(var KeyState: TKeyboardState): BOOL; stdcall;
  Вверх
WaReZMEN
Дата 7.11.2007, 08:18 (ссылка)   | (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Проблема решается просто нужно в реестре в ключе HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\CodePage заменить с параметр 1251 по 1255 значение поставить c_1251.nls. Перезапустить комп и рабоватся smile 
PM MAIL ICQ   Вверх
Rennigth
Дата 7.11.2007, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



гм... а 
Код

  SetThreadLocale(1049);

тут не поможет?

Добавлено через 49 секунд
Сслылочка на топ Showy


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
RinOSpro
Дата 7.11.2007, 15:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(WaReZMEN @  7.11.2007,  08:18 Найти цитируемый пост)
Проблема решается просто нужно в реестре в ключе HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\CodePage заменить с параметр 1251 по 1255 значение поставить c_1251.nls. Перезапустить комп и рабоватся   

А никаких последствий не будет. Типа другие приложения начнут показывать ????  ?????? ????   ?????
  Вверх
Rennigth
Дата 7.11.2007, 16:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



RinOSpro, попробуй SetThreadLocale, все должно быть пучком smile Нефиг реестр корячить. smile


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
WaReZMEN
Дата 8.11.2007, 02:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Rennigth, проблем не будет... более того я тебе скажу что это не тока с memo косяк такои получается но и фотошоп руские буквы не видет пока в реестре не подправиш...
PM MAIL ICQ   Вверх
Bose
Дата 8.11.2007, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 8
Всего: 51



Цитата(WaReZMEN @  8.11.2007,  02:11 Найти цитируемый пост)
Rennigth, проблем не будет... более того я тебе скажу что это не тока с memo косяк такои получается но и фотошоп руские буквы не видет пока в реестре не подправиш...

Ты не поверишь, но помимо русских кодовых страниц существует масса других. И именно их ты и похеришь своими правками в реестре.
PM MAIL WWW Skype   Вверх
Snowy
Дата 8.11.2007, 13:55 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



WaReZMEN, таким "мастерам" нужно руки отрывать.
После такого "исправления" в 98-х виндах не будет и ???. Вообще никаких знаков не будет.
В частности в том же фотошопе. Только пустота, вместо русских символов (и не только русских).
И во вторых, тебя пользователь просил менять ЕГО настройки системы?
Нужно подстраивать программу под систему, а не систему под свою программу.
PM MAIL   Вверх
Alix
Дата 8.11.2007, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 8
Всего: 23



Цитата(Snowy @  8.11.2007,  13:55 Найти цитируемый пост)
После такого "исправления" в 98-х виндах не будет и ???. Вообще никаких знаков не будет.
В частности в том же фотошопе. Только пустота, вместо русских символов (и не только русских).

Ты не прав. Для 5 и 6го фотошопа под 98 виндой это был реально рабочий метод добавить ему поддержку кириллицы при написании надписей (а, возможно, и названий слоев). Версии CS* (8-10) под XP никаких исправлений не требуют. 
В остальном я с тобой согласен.


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
Snowy
Дата 8.11.2007, 15:17 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Цитата(Alix @  8.11.2007,  14:40 Найти цитируемый пост)
Ты не прав. Для 5 и 6го фотошопа под 98 виндой это был реально рабочий метод добавить ему поддержку кириллицы при написании надписей
Такой, да не этот.
В 9х файлы называются не c_1251.nls, а cp_1251.nls (или что-то в этом роде.)
Соответственно, указывая c_1251.nls мы указываем то, чего нет.
И получаем соответствующий эффект...
И как итог - угробим систему.
Откуда юзеру знать, что в таком-то месте реестра не хватает буквочки?
Ему придётся сносить винду и радостно в матерной форме благодарить автора программы.
Не знали об этом? Тогда мой вам совет - лучше не трогайте систему - не создадите проблем.
Пользователь вообще может не знать русского. А просто захотел запустить - посмотреть что там.
И после этого его немецкая винда будет оккупирована кирилицей. Вот радость то...
PM MAIL   Вверх
Alexeis
Дата 8.11.2007, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Вот тут есть тот метод http://forum.vingrad.ru/index.php?show_typ...B5%D0%BD%D0%B0#


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Akella
Дата 8.11.2007, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



WinXP + SP
D2007 + Upd3

re1 это TcxRichEdit, в котором находится русский текст
tlf2 типа string

Код

      if tlf2 <> '' then begin
        Grid1.DataController.append;
        Grid1.Columns[1].EditValue := tlf2;
        Grid1.Columns[4].EditValue :=  re1.lines[i];
        Grid1.DataController.post;
      end;


user posted image

Код

begin
  SetThreadLocale(1049);
  Application.Initialize;

Не помогает

Добавлено через 7 минут и 53 секунды
помогло это:
Цитата

HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage\1252 заменить c_1252.nls на c_1251.nls


всё-таки приходится подстраивать систему под программу :(
PM MAIL   Вверх
WaReZMEN
Дата 12.11.2007, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Наконецто бан сняли....

Цитата(Akella @  9.11.2007,  05:27 Найти цитируемый пост)
помогло это:

Цитата

HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage\1252 заменить c_1252.nls на c_1251.nls



всё-таки приходится подстраивать систему под программу :(


Вот вот...

А все начали кричать 
Цитата(Snowy @  8.11.2007,  21:55 Найти цитируемый пост)
WaReZMEN, таким "мастерам" нужно руки отрывать.


я просто дал совет как я с этим борюсь. Я не говорил что это панацея от всех бед... Но в результате правки в реестре ни разу за 5 лет касиков не видел... Если ему мои способ не понравится пусть не пользуется...  Я канечно согласен что систему под программу не стоит настраивать.... но иногда нужно...


Это сообщение отредактировал(а) WaReZMEN - 12.11.2007, 01:12
PM MAIL ICQ   Вверх
aktuba
Дата 12.11.2007, 03:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 7
Всего: 38



Цитата(Akella @  8.11.2007,  22:27 Найти цитируемый пост)
всё-таки приходится подстраивать систему под программу :(

А теперь попробуй, дай программу тому, у кого используется 1252-кодировка. Много нового о себе узнаешь  smile 

Цитата(WaReZMEN @  12.11.2007,  02:12 Найти цитируемый пост)
Но в результате правки в реестре ни разу за 5 лет касиков не видел...

А я видел. Когда за границей мою программу запустили. И скажу, что это очень не хорошо! Пишешь для себя и никаких проблем? Ок. Но не надо плохому учить других!!!


--------------------
user posted image
PM MAIL WWW Skype   Вверх
WaReZMEN
Дата 12.11.2007, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



aktuba,  речи не было о том что на другом компе ему запускать.... он спросил про свои комп... И если ты за границу пишеш то нахрен на руском??? с Английскои кодировкокой то все ок. 
PM MAIL ICQ   Вверх
Akella
Дата 12.11.2007, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



aktuba,  smile так предложи другой способ  smile 
 smile

Добавлено через 3 минуты и 38 секунд
WaReZMEN, программы в основном создаются НЕ для своего компа, но всё равно на др. компах, как правило установлены точно такие же ОСи.

Уважаемые, а может вернёмся к теме? Может всё-таки есть варианты для более старших версий Delphi, нежели 5-7

Добавлено через 3 минуты и 51 секунду
хотелось бы поиметь для 2007

Это сообщение отредактировал(а) Akella - 12.11.2007, 09:07
PM MAIL   Вверх
WaReZMEN
Дата 12.11.2007, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Akella, Спасибо за поддержку. smile я тока этот способ знаю... срадостью узнаю еще какоинибудь...
PM MAIL ICQ   Вверх
MetalFan
Дата 12.11.2007, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



афигенные проблемы будут у пользователя, если понадобится работать с кодовыми страницами, которые "добрые" программисты таким образом похерили. я уже столкнулся с такой проблемой.
Цитата(Alexeis @  5.11.2007,  23:57 Найти цитируемый пост)
решение проблемы с ручным извлечением из буфера текста

самый не травмирующий ОС вариант


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Alexeis
Дата 12.11.2007, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Цитата(MetalFan @  12.11.2007,  09:36 Найти цитируемый пост)
афигенные проблемы будут у пользователя, если понадобится работать с кодовыми страницами, которые "добрые" программисты таким образом похерили. я уже столкнулся с такой проблемой.

  Я тоже, у меня были проблемы с румынским языком. 

Ручное извлечение совсем не изящное :( , но работает. Изящно только на KOL с использованием юникодных контролов.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
aktuba
  Дата 12.11.2007, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 7
Всего: 38



Цитата(WaReZMEN @  12.11.2007,  10:07 Найти цитируемый пост)
aktuba,  речи не было о том что на другом компе ему запускать.... он спросил про свои комп... И если ты за границу пишеш то нахрен на руском??? с Английскои кодировкокой то все ок.  


Цитата(RinOSpro @  5.11.2007,  22:56 Найти цитируемый пост)
Нет у меня нормально. Я дал другу прогу. Он говорит типа копирует из блокнота в мемо ctrl-c ctrl-v и вот такие закарючки.


Может все-таки начнем читать другие посты в топе тоже? Этот всего лишь 4-й... А насчет за границу по-русски... Видишь ли, и за рубежом иногда живут русские ;)

Цитата(Akella @  12.11.2007,  10:07 Найти цитируемый пост)
aktuba,  smile так предложи другой способ  smile 


Цитата(Alexeis @  6.11.2007,  00:57 Найти цитируемый пост)
решение проблемы с ручным извлечением из буфера текста. 


Вроде как дали уже хороший способ ;) Еще один способ - использовать юникодные контролы. Хватит?

Цитата(MetalFan @  12.11.2007,  10:36 Найти цитируемый пост)
я уже столкнулся с такой проблемой.


Аналогично. 
AkellaWaReZMEN, из 11 человек, которые отписали в этом топе - 3 сталкивались с проблемой после правки реестра. 3/11 = 27%, как мне кажеться весомый аргумент против данного способа.


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Akella
Дата 12.11.2007, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



я согласен, что весомые, а также согласен, что нехорошо менять 1252 на 1251  smile 
Но программа (снимок см. выше) работает со сравнительно большими объемами текстов, как минимум 5 метров в каждом файле. А файлов нужно обработать около 4-5 за одно утро. Файл нужно загрузить в мемо, потом пробежаться по всем строкам мемо и нужные выдернуть в нижнюю таблицу. Поэтому оперирование данными через буфер замедлит работы программы ещё больше.
PM MAIL   Вверх
WaReZMEN
Дата 13.11.2007, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Народ ну скажите деиствующий способ!!!! не меняя 1252 на 1251.
PM MAIL ICQ   Вверх
Alexeis
Дата 13.11.2007, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Akella, то что у тебя это просто глюк какой-то. Может в мемо просто чарсет не руский стоит и все.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
WaReZMEN
Дата 13.11.2007, 04:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



У меня такои косят был не только когда в мемо вставляеш... но и просто в редактор кода на Дельфе...

Это сообщение отредактировал(а) WaReZMEN - 13.11.2007, 04:30
PM MAIL ICQ   Вверх
aktuba
Дата 13.11.2007, 05:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 7
Всего: 38



Цитата(WaReZMEN @  13.11.2007,  02:20 Найти цитируемый пост)
Народ ну скажите деиствующий способ!!!! не меняя 1252 на 1251. 


Цитата(Alexeis @  12.11.2007,  12:49 Найти цитируемый пост)
учное извлечение совсем не изящное :( , но работает. 


Цитата(Alexeis @  12.11.2007,  12:49 Найти цитируемый пост)
Изящно только ... с использованием юникодных контролов. 




--------------------
user posted image
PM MAIL WWW Skype   Вверх
WaReZMEN
Дата 13.11.2007, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Не вы скажите как исправит чтоб showmessege не показывал "???? ??????????"
PM MAIL ICQ   Вверх
Alexeis
Дата 13.11.2007, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Цитата(WaReZMEN @  13.11.2007,  04:30 Найти цитируемый пост)
У меня такои косят был не только когда в мемо вставляеш... но и просто в редактор кода на Дельфе...

  Можно до посинения вопить, но такие проблемы по-любому будут для контролов созданных при помощи функции CreateWindowA/CreateWindowExA и в делфи и вижаулке шестой и во многих других мемах. в системах NT анси строки приводятся к юникоду, а при получении от них результата (если это функции оканчивающиеся а "А") происходить обратное преобразование Юникод -> Анси, вот тут то и происходят все проблемы, поскольку в юникоде букав многа а в анси мало, потому как их интерпретировать зависит от чарсета. Чарсет определяет какой же символ будет у символа с данным кодом. 
  1) При работе с буфером обмена чарсет определяется текущим языком.
  2) В мемо и др. компонентах чарсет можно установить (свойство Font). Если чарсет не верный, то вместо русских символов будут символы другой кодировкой. Если в системе нет такого РУССКОГО шрифта, то винде рисовать будет нечего, в лучшем случае она попытается заменить его другим кирилистическим шрифтом, но не всегда. SetThreadLocale устанавливает дефолтную локаль для преобразования юникод -> Анси, это тоже что и установка в реестре.
  3) ShowMessage это тоже VCL форма, т.е. Windows окно, потому решение см. 2


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Snowy
Дата 13.11.2007, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Цитата(WaReZMEN @  13.11.2007,  09:47 Найти цитируемый пост)
Не вы скажите как исправит чтоб showmessege не показывал "???? ??????????"
Код

MessageBoxW(Handle, 'Привет!', 'Это мессадж', 0);

PM MAIL   Вверх
Akella
Дата 14.11.2007, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



Цитата(Alexeis @  13.11.2007,  02:10 Найти цитируемый пост)
Akella, то что у тебя это просто глюк какой-то. Может в мемо просто чарсет не руский стоит и все. 

RUSSIAN_CHARSET

Добавлено через 3 минуты и 24 секунды
Цитата(Alexeis @  13.11.2007,  10:28 Найти цитируемый пост)
1) При работе с буфером обмена чарсет определяется текущим языком.

а я не работаю с буфером обмена

Добавлено через 5 минут и 49 секунд
Значит такая идея возникла:
1. вначале работы процедуры запоминаем язык
2. переключаемся на русский программно
3. выполняем процедуру
4. переключаемся обратно

Недостаток: если нет русского, могут будут проблемы, может быть даже AV из-за того, что нет русского.

У кого-нибудь ещё есть предложения?

Добавлено через 6 минут и 29 секунд
Цитата(Alexeis @  13.11.2007,  10:28 Найти цитируемый пост)
 2) В мемо и др. компонентах чарсет можно установить (свойство Font).

так установлено ещё в дизайнере при проектировании приложенияч
PM MAIL   Вверх
Alexeis
Дата 14.11.2007, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Akella, попробуй шрифт сменить на какой-нибудь стандартный. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Akella
Дата 14.11.2007, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



у меня так получилось, используя LoadKeyboardLayout

Код

Var
 Layout: array[0.. KL_NAMELENGTH] of char;

begin
  //как запомнить? не знаю, надеюсь другие помогут
  try
    //устанавливаем русский язык программно
    LoadKeyboardLayout(StrCopy(Layout,'00000419'),KLF_ACTIVATE);
   
    //что-то выполняем
  finally
    //восстанавливаем 
    LoadKeyboardLayout(StrCopy(Layout, вставить запомненный язык),KLF_ACTIVATE);  
  end;


Добавлено @ 10:37
т.е. по идее если даже нет в системе русского, то LoadKeyboardLayout загрузит и активирует, возможно что только для данного сеанса программы, а это именно то, что нам и нужно

так можно узнать список установленных раскладок

Это сообщение отредактировал(а) Akella - 14.11.2007, 10:40
PM MAIL   Вверх
Rennigth
Дата 14.11.2007, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



Цитата(Akella @  14.11.2007,  10:28 Найти цитируемый пост)
//как запомнить? не знаю, надеюсь другие помогут

GetKeyboardLayout


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Akella
Дата 14.11.2007, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



кстати сам шрифт, используемый в контроле тоже влияет, я вот вышеописанный пример попробовал с разными, нормально работает с Lucidia Console

Добавлено через 49 секунд
Rennigth,  smile  smile 
PM MAIL   Вверх
Rennigth
Дата 14.11.2007, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



Цитата(Akella @  14.11.2007,  12:19 Найти цитируемый пост)
Rennigth,      

Как-то так:
Код

var
  Layout: array[0.. KL_NAMELENGTH] of char;
  lSaveLangID: DWORD;
begin
  lSaveLangID := GetKeyboardLayout(GetCurrentThreadId);
  try
    LoadKeyboardLayout(StrCopy(Layout,'00000419'),KLF_ACTIVATE);

  finally
    ActivateKeyboardLayout(lSaveLangID, 0);
  end;




--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Akella
Дата 18.11.2007, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



Вот ещё пример вставки текста из буфера обмена. Очень похож на предыдущий.
Код

uses ClipBrd;
var
      CYR : PCHAR = '00000419';
      keys : array [0..99] of char;
begin
...
      GetKeyboardLayoutName(keys);
      LoadKeyboardLayout(CYR, KLF_ACTIVATE);
      Memo1.Text := Clipboard.AsText;
      LoadKeyboardLayout(keys, KLF_ACTIVATE);
...


Это сообщение отредактировал(а) Akella - 18.11.2007, 16:09
PM MAIL   Вверх
Akella
Дата 21.11.2007, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



при объявлении строковых типом можно ещё воспользоваться не String, а Widestring
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.