Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.08.2010, 12:38   #1
fondreykus-1
 
Регистрация: 27.01.2010
Сообщений: 9
Печаль WriteConsoleOutputCharacter проблема отображения русского алфавита

Здравствуйте. Пользуюсь FreePascal в режиме Delphi compatible
Наткнулся вот на что: WriteConsoleOutputCharacter не хочет правильно отображать русский алфавит. Точнее, если написать следующее:
Код:
var  
  Wr: LongWord;
  P:_COORD;
  Output: Handle;
  Buff: Array[1..80] of Char;
begin
  Output:=GetStdHandle(STD_OUTPUT_HANDLE);
  P.x:=2;
  P.y:=2;
  Buff:='абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
  WriteConsoleOutputCharacter(Output,@Buff,33,P,Wr);
end.
то половина букв будет просто проигнорирована, в строке будут пустые места. Причём с английским алфавитом такого не случается. Можно ли это как-нибудь "вылечить"? Заранее спасибо
fondreykus-1 вне форума Ответить с цитированием
Старый 31.08.2010, 12:45   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Перекодируй Buff функцией CharToOem, а уж потом выводи.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.08.2010, 12:58   #3
fondreykus-1
 
Регистрация: 27.01.2010
Сообщений: 9
По умолчанию

Поправьте, если я ошибаюсь, но FreePascal это OEM редактор и CharToOem там уже ни к чему. Проблема в том, что WriteLn(Buff[1..33]) работает как надо, а WriteConsoleOutputCharacter выкидывает фокусы.
fondreykus-1 вне форума Ответить с цитированием
Старый 31.08.2010, 13:11   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А при чем тут редактор?
У тебя сама программа консольная не понимает русского, вот ты и используй функцию-переводящую русский текст в понятную кодировку для консольного выполнения.
Цитата:
WriteLn(Buff[1..33]) работает как надо
Ну дык он стало быть кодрует этой функцией внутрях. Чего им не пользуешся, али задание такое?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.08.2010, 13:40   #5
fondreykus-1
 
Регистрация: 27.01.2010
Сообщений: 9
По умолчанию

Спасибо, обойдусь, наверно, без WriteConsoleOutputCharacter
fondreykus-1 вне форума Ответить с цитированием
Старый 31.08.2010, 17:41   #6
fondreykus-1
 
Регистрация: 27.01.2010
Сообщений: 9
По умолчанию

Ура! Мне подсказали в чём проблема!
Как выяснилось, то что WriteConsoleOutputCharacter в место некоторых русских букв рисует пустые места - известный баг консоли.
помогает:
1. установка консоли векторного шрифта.
2. использование WriteConsoleOutputCharacterW.
3. использование других функций консоли для достижения требуемого эффекта.
fondreykus-1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с отображением русского языка (Windows Forms C++ CLI) Alex TGM Помощь студентам 0 17.08.2010 11:13
Проблема с отображением русского языка в программе(C++ CLR) Alex TGM Помощь студентам 0 16.08.2010 22:26
проблема отображения шрифта в Дэлфи Lord777 Общие вопросы Delphi 2 06.01.2010 18:55
задача со сменой букв русского алфавита koresh3 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 04.01.2010 15:52
перекодировка алфавита world12_tk Помощь студентам 6 20.07.2009 22:40