Помощь - Поиск - Пользователи - Календарь
Полная версия: Паскаль + русские слова
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Страницы: 1, 2, 3
andriano
Цитата(Айра @ 19.06.2008 11:07) *

Насколько мне известно, fpc в оконном режиме работает с кодировкой win, а в полноэкранном - dos. А turbo pascal - всегда dos. По-моему, связь с компилятором очевидна..

Увы, ни то, ни другое - неверно.
Нрограмма, работающая в консольном режиме вообще не работает с кодировкой. Никак. Потому, что не может.
Кодировка - это, по сути, соответствие между кодом символа и картинкой, отображаемой на экране. Человек видит эту картинку, узнает в ней очертания знакомой буквы и считает, что определеннному номеру соответствует определенный символ.
Другими словами, соответствие:
число->картинка - определяется компьютером,
картинка->символ - определяется человеком (узнавание).
Так вот, какому числу соответствует какая картинка на экране определяется не прикладной программой, а либо Windows при работе программы в оконном режиме, либо BIOS - при работе в полноэкранном. Любая же консольная программа лишь определяет код последовательность кодов, выводимых на экран.

Русская версия Windows, либо паневропейская с настройкой на русский язык в оконном режиме консольной программы использует кодировку 866, которая в Windows называется OEM, а в полноэкранном - Windows в вывод на экран никак не вмешивается и кодировка определяется тем, что устанавливает VideoBIOS по умолчанию, т.е. расширенный IBM вариант ASCII (номер не помню).
Александр-7300
Подскажите как мне сделать так что бы в графическом режиме, компилятор Free Pascal, вместо эльфийских каракулей были нормальные русские буквы.

Сразу говорю шрифты менять не советуйте, если только у вас нет стандартного(нулевого шрифта) с русскими буквами.

Любому совету буду рад.
andriano
Цитата(Александр-7300 @ 22.06.2008 20:11) *
Любому совету буду рад.
Я, кажется, уже советовал: рисовать буковки самому.
Александр-7300
Цитата(andriano @ 22.06.2008 20:57) *

Я, кажется, уже советовал: рисовать буковки самому.


Рисовать эт конечно хорошо, но нуторно.

В TP7 у меня была токая проблема, но я ее решил при помощи запуска через бат {EN_DRV.COM и свой программы} Здесь этот фокус не прошел.

Шрифты я использую что здесь(FRP) что там(TP7) одинаковые, там русский язык работает здесь нет, следовательно русский язык там уже заложен.

Вопрос как разобрать шрифт на составляющие? при помощи чего?
И соотвественно при помощи чего создать свой шрифт?
andriano
Фонты могут браться из двух разных мест:
- из собственного файла со шрифтами,
- из того, что установлено в системе.
соответственно, и способы борьбы зависят от того, какой именно способ используется.
Кроме того, второй способ, как нетрудно догадаться, зависит еще и от используемой ОС.
Поэтому надеяться, что в двух разных продуктах, работающих в разных ОС, можно единообразно осуществлять системно зависимые вызовы, скажем так, слишком оптимистично.

PS. Кстати, чем тебе не нравится выводить текст стандатрными виндовыми средствами? Практика показывает, что любое "упрощенное" решение является тем самым и менее универсальным. И в данном случае это проявляется как раз в проблемах с кириллицей. Так что вполне вероятно, что наиболее простым способом будет самый прямой - т.е. использование функций WinAPI.
Александр-7300
Цитата(andriano @ 22.06.2008 21:45) *

Фонты могут браться из двух разных мест:
- из собственного файла со шрифтами,
- из того, что установлено в системе.
соответственно, и способы борьбы зависят от того, какой именно способ используется.
Кроме того, второй способ, как нетрудно догадаться, зависит еще и от используемой ОС.
Поэтому надеяться, что в двух разных продуктах, работающих в разных ОС, можно единообразно осуществлять системно зависимые вызовы, скажем так, слишком оптимистично.

PS. Кстати, чем тебе не нравится выводить текст стандатрными виндовыми средствами? Практика показывает, что любое "упрощенное" решение является тем самым и менее универсальным. И в данном случае это проявляется как раз в проблемах с кириллицей. Так что вполне вероятно, что наиболее простым способом будет самый прямой - т.е. использование функций WinAPI.


Я в Freepascale ноль, так что не удивляйся,

можешь привести пример с использованием WinAPI?
andriano
Я советую WinAPI именно потому, что Freepascal к нему не имеет никакого отношения. Поэтому работа через WinAPI осуществляется совершенно одинаково при использовании любого компилятора и, более того, любого языка программирования.
см.описания к:
CreateFont
SelectObject
SetTextColor
TextOut

вызывается примерно так:
  f := CreateFont(14,0,0,0,FW_NORMAL,0,0,0,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, 0{34}, 'MS San Serif');
oldf := SelectObject(dc,f);
SetTextColor(dc,0);
TextOut(dc,r1.left,r1.top,@s1[1],length(s1));
SelectObject(dc,oldf);
DeleteObject(f);
естественно, создание и уничтожения фонта делается не на каждую строку.
Александр-7300
вернемся к варианту а.
ты говорил что сам рисовал буковки.
вопрос: в чем?
andriano
Цитата(Александр-7300 @ 25.06.2008 13:05) *

вернемся к варианту а.
ты говорил что сам рисовал буковки.
вопрос: в чем?

Я рисовал буковки в экранном буфере, а по завершении - перебрасывал его на экран.
internet
Цитата(Ivs @ 12.01.2003 1:53) *

Ребята, а вы Ctrl+Shift(правый) пробовали ?  ;D

теперь попробовал. ВО всё получилось,спасибо!!!
RathaR
эм... была у меня проблема с русской кодировкой в TP, благо эта тема помогла - решил её, но вот возникла точно такаяже проблема в Turbo Delphi Explorer - работаю в ней в консольном режиме, на языке паскаль smile.gif
Всё тоже самое что и в паскале, вместо слов пишет иерохлифы и буквы врозброс...
Подскажите как с этим быть rolleyes.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.