FreeBasic
Главная
Вход
Регистрация
Четверг, 25.04.2024, 10:56Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » Freebasic » Вопросы по языку FreeBasic » Вывод текста в окна (текстовое - режим Screen 0 и графическое - реэим Screen 11)
Вывод текста в окна
ruddyДата: Воскресенье, 23.09.2012, 14:31 | Сообщение # 1
Сержант
Группа: Заблокированные
Сообщений: 30
Репутация: 0
Статус: Offline
Друзья, простите, но хочу продолжить уже закрытую тему (CodePage), правда совсем по другому поводу. Ниже листинг программы в кодировке Windows-1251:
#Include "windows.bi"
Dim WinString As String ' исходная строка Windows Cyrillic
Dim DosString As String ' получаемая строка MS-DOS Cyrillic
Dim Code As Integer ' код завершения
WinString = " Кодировка Windows-1251 " ' исходная строка
DosString = Space$(Len(WinString)) ' подготовка результата
Screen 0 ' нормальное текстовое окно
' вывод в него дает вполне ожидаемый результат!
'Screen 11 ' нормальное графическое окно
' вывод в него дает несколько неожиданный результат!
Code = CharToOem(WinString, DosString) ' перекодировка строки
Print " End_Code = "; Code ' для обоих окон - 1
Print WinString
Print DosString
Sleep
' Вопрос: в какой кодировке выводится текст в графическое окно
' из строк WinString и DosString? Какой параметр управляет?
Большое спасибо!
 
ShadExДата: Воскресенье, 23.09.2012, 21:28 | Сообщение # 2
Лейтенант
Группа: Проверенные
Сообщений: 51
Репутация: 1
Статус: Offline
Сдается мне, что в режиме графического окна текст нужно конвертировать в юникод или ютф-8, но это еще может зависеть от настроек ОС.

Code
#if __FB_DEBUG__ <> 0
      Shell "chcp 1251" 'win-1251
#else
      Shell "chcp 65536" 'unicode
#EndIf


Попробуйте в начале вставить этот код, он автоматически в режиме отладки в консоли будет выводить текст в вин-1251, а без отладки - в юникоде


Сообщение отредактировал ShadEx - Воскресенье, 23.09.2012, 21:29
 
haavДата: Понедельник, 24.09.2012, 07:14 | Сообщение # 3
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
В графическом экране нет возможности использовать кодировку UNICODE. Об этом прямо заявлено было одним из разработчиков (dkl). Плюс так же сказано, что это заложено в планы на будующие версии. Что касается OEM , то по умолчанию судя по всему тоже облом. Или как ALBOM в своей либе подменять текущую кодовую страницу. Кстати его либа на новой версии компиля не катит. Я подправил ее, выложено будет на http://free-basic.ru/ сегодня.

Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ruddyДата: Понедельник, 24.09.2012, 08:58 | Сообщение # 4
Сержант
Группа: Заблокированные
Сообщений: 30
Репутация: 0
Статус: Offline
1) Уважаемый ShadEx, дописал указанный кусочек:
#Include "windows.bi"
#if __FB_DEBUG__ <> 0
Shell "chcp 1251" 'Win-1251
#else
Shell "chcp 65001" ' Unicode (UTF-8)
' Shell "chcp 65536" – указана недопустимая кодовая страница!
#EndIf
но, к сожалению, ожидаемого результата не получил!
...только начало портится консольное текстовое окно...

2) Уважаемый haav, обидно, если на графическом экране нет возможности использовать кодировку UNICODE – ради чего тогда все затевалось? Если не затруднит, укажите, пожалуйста, ссылку на источник...
 
haavДата: Понедельник, 24.09.2012, 09:23 | Сообщение # 5
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Quote (ruddy)
Если не затруднит, укажите, пожалуйста, ссылку на источник...


http://www.freebasic.net/forum....p176224


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ruddyДата: Понедельник, 24.09.2012, 10:40 | Сообщение # 6
Сержант
Группа: Заблокированные
Сообщений: 30
Репутация: 0
Статус: Offline
Re: Input bug ? by dkl » Jun 22, 2012 19:27
Для меня понять это будет сложно, но раз VANYA из Ярославля поблагодарил, то, наверное, сказано правильно! Стас и Вам большое спасибо! Понимаю, что свои проблемы я должен обсуждать с людьми "своего круга", а не соваться к профи :-)

Добавлено (24.09.2012, 10:40)
---------------------------------------------
Сижу вот и думаю, а с чего все вдруг решили, что текст в графическое окно выводится в кодировке Unicode (UTF-8)? Не скрою, и мне так кажется! Но сейчас я хочу выводить текст в графическое окно исключительно в кодировке ANSI (Windows-1251) и в кодировке OEM (CP866). Должен же быть параметр оператора Screen для управления выводом...

 
ShadExДата: Вторник, 25.09.2012, 20:28 | Сообщение # 7
Лейтенант
Группа: Проверенные
Сообщений: 51
Репутация: 1
Статус: Offline
Quote
' Shell "chcp 65536" – указана недопустимая кодовая страница!


Извиняюсь, в тот момент держал в уме размер WORD - вот и написал глупость smile

Quote
Но сейчас я хочу выводить текст в графическое окно исключительно в кодировке ANSI (Windows-1251) и в кодировке OEM (CP866). Должен же быть параметр оператора Screen для управления выводом...


Ну вам же сказали, что пока это не осуществимо, но если вам нужно только выводить текст, то подключайте библиотеку Станислава и создавайте окно с окрашенным в чёрный цвет EditorGadget на весь размер окна - и просто выводите текст в гаджет в Win-1251 или CP866.
 
ruddyДата: Среда, 26.09.2012, 09:14 | Сообщение # 8
Сержант
Группа: Заблокированные
Сообщений: 30
Репутация: 0
Статус: Offline
Ну, уважаемый ShadEx, не знаю, что такое "гаджет", но спрошу: а в какой кодировке позволено "штатно" (средствами FreeBASIC) выводить "просто текст" в открытое прикладной программой "обычное графическое окно", например, Screen 11? Ранее мне сказали, что "в графическом экране нет возможности использовать кодировку UNICODE. Об этом прямо заявлено было одним из разработчиков"... Так теперь Вы утверждаете, что нельзя и в кодировке ANSI (Windows-1251), и в кодировке OEM (CP866). Наверное, я не совсем точно выражаюсь – простите!
 
}{oma6bI4Дата: Среда, 26.09.2012, 16:02 | Сообщение # 9
Рядовой
Группа: Пользователи
Сообщений: 8
Репутация: 0
Статус: Offline
В графическом окне FB'а по умолчанию нет ни 866 ни 1251, там вообще нет русского языка. Для того чтобы русские буквы появились необходимо дополнительно их загрузить, например с помощью Albom_font, или как у меня из отдельного файла:
http://cmapuk-xoma6bi4.narod.ru/files/chargen-0.7.7z


Сообщение отредактировал }{oma6bI4 - Среда, 26.09.2012, 16:07
 
ruddyДата: Среда, 26.09.2012, 16:28 | Сообщение # 10
Сержант
Группа: Заблокированные
Сообщений: 30
Репутация: 0
Статус: Offline
Уважаемый }{oma6bI4, могу согласиться, что используемый набор символов не содержит русских букв – такое бывает :-) Но скажите, пожалуйста, номер используемой на графическом экране кодировки? Они же все стандартизированы...
 
}{oma6bI4Дата: Среда, 26.09.2012, 16:38 | Сообщение # 11
Рядовой
Группа: Пользователи
Сообщений: 8
Репутация: 0
Статус: Offline
Смысл в понятии "номере кодировки" появится после загрузки шрифта с набором символов в кокой либо кодировки. Т.е. номер кодировки будет определятся именно выбором шрифта. Кроме того, Вам ничто не мешает расположить символы в любом удобном Вам порядке, и на любые позиции, тем самым получив свою собственную кодировку.
 
ruddyДата: Среда, 26.09.2012, 16:52 | Сообщение # 12
Сержант
Группа: Заблокированные
Сообщений: 30
Репутация: 0
Статус: Offline
По серости своей полагал, что "ихние" разработчики придерживаются "основополагающего" документа:
http://msdn.microsoft.com/en-us/library/dd317756(VS.85).aspx
в котором, например, есть следующие кодировки:
Code Page Identifiers
866 cp866 OEM Russian; Cyrillic (DOS)
1251 windows-1251 ANSI Cyrillic; Cyrillic (Windows)
20866 koi8-r Russian (KOI8-R); Cyrillic (KOI8-R)
28595 iso-8859-5 ISO 8859-5 Cyrillic
65001 utf-8 Unicode (UTF-8)
Я ошибался?

Добавлено (26.09.2012, 16:52)
---------------------------------------------
Работаю под Windows XP (SP3), использую сборку c оболочкой IDE FbEdit v.1.0.7.6c с компилятором FreeBASIC v.0.22.0. Ничего не трогаю!!!

 
}{oma6bI4Дата: Среда, 26.09.2012, 16:55 | Сообщение # 13
Рядовой
Группа: Пользователи
Сообщений: 8
Репутация: 0
Статус: Offline
Если я не ошибаюсь то в графическом окне FB'а кодировка ASCII. В которой русского (Cyrillic) нет по определению.
 
ruddyДата: Среда, 26.09.2012, 17:05 | Сообщение # 14
Сержант
Группа: Заблокированные
Сообщений: 30
Репутация: 0
Статус: Offline
Думаю, что Вы ошибаетесь!
Я не крутой специалист (и вообще не специалист в системном программировании), но зрительно символы сильно отличаются от принятых в ASCII.
Вот мой адрес – eugene_r@mail.ru - в случае необходимости вышлю картинки экранов с наблюдаемыми строками символов для Screen0 и Screen11.
 
ShadExДата: Среда, 26.09.2012, 22:23 | Сообщение # 15
Лейтенант
Группа: Проверенные
Сообщений: 51
Репутация: 1
Статус: Offline
Quote
а в какой кодировке позволено "штатно" (средствами FreeBASIC) выводить "просто текст" в открытое прикладной программой "обычное графическое окно", например, Screen 11?


Вы не сравнивайте Screen 0 и Screen 11 - это разные консоли, если пояснить кратко, то "Screen 0" - это просто "обертка" для станд. окна терминала в ОС, а "Screen 11" - это такой себе "простенький канвас", эмулирующий собой dos'овский терминал, поэтому там просто вывод осуществлятся по типу отрисовки растровых символов в одной кодировке, и как вы уже поняли - эта кодировка не win-1251 и даже не OEM-866, да и к тому же, как выяснилось по ссылке с офф. форума - поддержка юникода в граф. режиме "возможна только в будущих версиях".

Quote
но зрительно символы сильно отличаются от принятых в ASCII.


Вот сейчас специально запустил ваш пример - у меня выводит греческие символы, но это ничего не значит, ведь главное, чтобы там правильно выводился латинский алфавит, а особенно все символы из французкого, ведь создатель FB родом из Франции smile

Quote
По серости своей полагал, что "ихние" разработчики придерживаются "основополагающего" документа:
http://msdn.microsoft.com/en-us/library/dd317756(VS.85).aspx


"Ихние" разработчики больше придерживаются документов распространенных в среде *NIX, а там нативная однобайтная кодировка для русского - KOI8 (была раньше - сейчас по стандарту UTF-8), и на микрософт им по большому счёту начхать, так как у них главная задача - попасть в список офф. поддержки компилятором GCC. Насколько я понял - в начале своего развития FB задумывался, как среда портирования старых програм/игр с QBasic, и вот эта графическая консоль была создана для отрисовки той простенькой графики из игр "бородатого" прошлого... И так как в том же "бородатом" прошлом игры с русской локализацией можно было пересчитать по пальцам одной руки(да-да, чтоб поиграть в более-менее сложную игру - школьнику приходилось зубрить всемирный буржуйский диалект), да и русских фанатов Qbasic, у которых бы руки чесались портировать программы, написанные будучи еще в школьном возрасте, как мне думается, было очень немного, то соответсвенно о включении русских кодировок в отрисовку на графической консоли никто даже и не заморачивался.


Сообщение отредактировал ShadEx - Среда, 26.09.2012, 22:55
 
Форум » Freebasic » Вопросы по языку FreeBasic » Вывод текста в окна (текстовое - режим Screen 0 и графическое - реэим Screen 11)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: