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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В мемо отображется ????? вместо слов, что делать? 
:(
    Опции темы
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.0883 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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