FreeBasic
Главная
Вход
Регистрация
Четверг, 28.03.2024, 23:06Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Freebasic » Вопросы по языку FreeBasic » Использование кириллицы (Не видна кириллица в консоли)
Использование кириллицы
PulchraДата: Понедельник, 11.09.2017, 18:04 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 7
Репутация: 0
Статус: Offline
Здравствуйте. Хотел пощупать этот интересный диалект бейсика и столкнулся с неприятным моментом. Ковырялся на примере "Напишем свой рогалик", не смог понять, как задается шрифт (если задается). Из-за этого можно работать только в крупных экранных разрешениях, не более 800х600. Уже при 1024х768 буквы размером 8х8 становятся мелковаты для комфортного чтения.

И еще сильно поколебало мою решимость то, что в консоли не получается увидеть кириллицу. Это ставит под сомнение применимость компилятора вообще. Проверял на 2х компах под управлением  W7.

Возможно ли как-то починить эти два момента? Спасибо.
 
haavДата: Понедельник, 11.09.2017, 20:35 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Для вывода русского текста в консоль:

1) в начале программы написать эту строчку: Shell "chcp 1251". В настройках консоли должен быть установлен шрифт Lucida Console

2) можно попробовать так:

Код
Print !"Привет мир!\u"


3) использовать crt:

Код
#Include "crt.bi"
Printf( "Привет мир!")
sleep


4) примеры с winapi: http://free-basic.ru/another.html

Для графического окна:

увеличить шрифт до размера 8х16 можно с помощью команды width (в справке есть пример)

выводить русские символы в граф. окно можно при помощи библиотек: ALBOM_FONT (максимальный размер 8х16) , XFONT (любой размер , работа с юникодом)

так же можно создать свой шрифт любого цвета и любого размера. Вот например я создавал шрифт на основе COURIER NEW:
Прикрепления: Custom_Font.zip (28.6 Kb)


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
WQДата: Вторник, 12.09.2017, 22:28 | Сообщение # 3
Полковник
Группа: Проверенные
Сообщений: 215
Репутация: 7
Статус: Offline
Цитата Pulchra ()
Это ставит под сомнение применимость компилятора вообще.
Создаю программы на FB, которые показывают кириллицу, японские, китайские иероглифы, иврит и т.д. - никаких проблем
Лучше сразу переходить на использование юникода и кодировки UTF
А графическое окно FB - вещь, конечно, хорошая, но если планируется программа с нормальным графическим интерфейсом, также лучше переходить на использование средств более высокого уровня, из доступных, например, есть FLTK и IUP

А показ кириллицы в консоли еще от редактора кода зависит - если он нормально читает файлы в utf, так и при компиляции строки будут нормально отображаться
 
quiet_snow_losДата: Среда, 13.09.2017, 12:23 | Сообщение # 4
Рядовой
Группа: Пользователи
Сообщений: 16
Репутация: 0
Статус: Offline
>>>Лучше сразу переходить на использование юникода и кодировки UTF

Вы это советуете новичку? По-моему совет так себе. Он сломает себе последнюю карачку об эти стандарты.

Самое простое же - создать собственный чарсет и использовать один из восьмибитовых стандартов,
либо UTF8, либо OEM866. Используя свои процедуры печати.
Да китайского, конечно, не будет. Но вполне допустимы языки других стран(разумеется при наличии чарсета).
Камнем преткновения как и в случае с UTF(UTF-8) будут системные функции, это не критично при заточке под
конкретную локаль, но вот если потребуются другие языки - то тут уже кирдык, трахопопинга не оберёшься.
И тестить нужно на нескольких системах.

И да на FB в любом случае будут проблемы с этим, без полного понимания и без готовых исходников, а у
разных библиотек разные нюансы, потому что одним GUI оно не ограничивается. Т.е. ни тот, ни другой путь
простым однозначно не будет.

Добавлено (13.09.2017, 12:23)
---------------------------------------------
Цитата haav ()
Вот например я создавал шрифт на основе COURIER NEW

Открывается два окна, в одном(большом чёрном) сверху написано unable to retrieve image information,
в другом(серая квадратная форма) ничего нет и оно зависшее(написано не отвечает).
Windows7 x64
FreeBASIC Compiler - Version 1.05.0 (01-31-2016), built for win32 (32bit)


Сообщение отредактировал quiet_snow_los - Среда, 13.09.2017, 12:24
 
haavДата: Среда, 13.09.2017, 16:00 | Сообщение # 5
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата quiet_snow_los ()
Открывается два окна, в одном(большом чёрном) сверху написано unable to retrieve image information,
в другом(серая квадратная форма) ничего нет и оно зависшее(написано не отвечает).
Windows7 x64
FreeBASIC Compiler - Version 1.05.0 (01-31-2016), built for win32 (32bit)


Прошу прощения, исходник вообще не тот засунул smile Как только так получилось...

Перезалил архив, сейчас должно быть все нормально.

Что хорошо с подобными шрифтами, не нужно никакого дополнительно кода для вывода текста, все FB командой (Draw String).


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
PulchraДата: Среда, 13.09.2017, 16:46 | Сообщение # 6
Рядовой
Группа: Пользователи
Сообщений: 7
Репутация: 0
Статус: Offline
Спасибо за советы, частично что-то начало почти получаться smile
С консолью разобрался, выводятся самые что ни есть православные кириллические буквы, все хорошо, нравится. 

А вот с графическим окошком пока не так все радужно, но я не унываю, весь в надеждах и вообще. Особенно вообще. Честно говоря, я не большой спец в этих вот, я бейсик помню, дай бог памяти, лет 30 как устаревший - времен махрового расцвета MS-DOS, спектрумов и прочих БК0010 wacko . 

Наверное, я не совсем правильно в прошлый раз обозначил свои хотелки. Или в терминах запутался. На самом деле я, вероятно, ищу способ вывода кириллических символов в графическом окне. В тексте программы есть такая строчка: ScreenRes 640, 480, 32 - правильно же, это графическое окно? Попробовал разные манипуляции с выводом через библиотеки - пока не получается сами библиотеки правильно подключить, наверное - все равно выводятся сатанинские письмена.

Идея с подключением своего собственного шрифта мне очень импонирует, хотел бы именно так и поступить - так можно при желании иметь несколько шрифтов. Я ужасно весь извиняюсь, можно в качестве примера готовый проект, в котором будет подключаться какой-либо шрифт (один) и выводиться текст? Желательно такой пример, чтобы было поменьше буков, чтобы у некоторых были шансы разобраться smile На текущий момент моя цель - порыться в рогалике (http://free-basic.ru/g00.html) и чтобы оно стало на человеческом языке. А дальше будем посмотреть. Копаюсь с библиотекой xffont, но пока что ничего не выкопал.

П.С. Тот пример, что был в первом ответе уважаемого haav`а- увы, так и не собрался у меня, ругается на какие-то ненаходимые файлы sad
 
haavДата: Среда, 13.09.2017, 16:58 | Сообщение # 7
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата Pulchra ()
П.С. Тот пример, что был в первом ответе уважаемого haav`а- увы, так и не собрался у меня, ругается на какие-то ненаходимые файлы


Я уже писал, что засунул другой исходник по ошибке. Заново перекачайте архив, там как раз маленький читабельный пример, как вам нужно.

Цитата
Копаюсь с библиотекой xffont, но пока что ничего не выкопал.


Компилятор случайно не 64-х битный? Если так, то с xfont у вас пока что ничего не получится. Под 64-бита библиотеки нет, точнее просто ее никто не пробовал собирать под 64-х битный компилятор. А если у вас 32-bit компилятор, то там и мудрить то ничего не надо. Распаковал архив, скомпилировал пример (example_unicode2.bas) и запустил.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
PulchraДата: Пятница, 22.09.2017, 17:25 | Сообщение # 8
Рядовой
Группа: Пользователи
Сообщений: 7
Репутация: 0
Статус: Offline
Да, спасибо, я перекачал пример -  и он отлично заработал.
По поводу разрядности компилятора - эм... честно - затрудняюсь ответить smile Сейчас ковыряюсь неспешно без библиотек, раз замаячило в конце тоннеля что-то похожее на столь желаемое. 

У меня сейчас такой вот вопрос, если можно. Даже пара вопросов. Собрал из примера такое вот изящество:

'--------------------------------------------------------------------------
'--------------------------------------------------------------------------
ScreenRes 640,480,32
Dim As Any Ptr font = Imagecreate(4275,38)
'--------------------------------------------------------------------------
'Sub DisplayTitle (ByRef font As Any Ptr)
Sub DisplayTitle 
    Dim As Any Ptr font = Imagecreate(4275,38)
    Draw String(5,270),"Вывод в процедуре",,font,Alpha
End Sub
'--------------------------------------------------------------------------
Bload ("Font.bmp",Font)
Draw String(5,70),"Вывод напрямую",,font,Alpha
DisplayTitle ()
Sleep
'--------------------------------------------------------------------------
'--------------------------------------------------------------------------

На экране видна надпись "Вывод напрямую", а "Вывод в процедуре" - нет.
1. Подскажите, пожалуйста, как можно исправить этот момент?
2. Как объявить переменную font таким образом, чтобы ее было видно в процедуре?

Спасибо smile
 
WQДата: Пятница, 22.09.2017, 17:52 | Сообщение # 9
Полковник
Группа: Проверенные
Сообщений: 215
Репутация: 7
Статус: Offline
Цитата Pulchra ()
На экране видна надпись "Вывод напрямую", а "Вывод в процедуре" - нет. 1. Подскажите, пожалуйста, как можно исправить этот момент? 2. Как объявить переменную font таким образом, чтобы ее было видно в процедуре?

1. в процедуре вы создаете локальную переменную, но не загружаете в нее шрифт
Решить можно так:
Код
ScreenRes 640,480,32
Dim As Any Ptr font = Imagecreate(4275,38)
'--------------------------------------------------------------------------
'Sub DisplayTitle (ByRef font As Any Ptr)
Sub DisplayTitle
    Dim As Any Ptr font = Imagecreate(4275,38)
    Bload ("Font.bmp",Font)
    Draw String(5,270),"Вывод в процедуре",,font,Alpha
End Sub
'--------------------------------------------------------------------------
Bload ("Font.bmp",Font)
Draw String(5,70),"Вывод напрямую",,font,Alpha
DisplayTitle ()
Sleep


2. Можно объявить font как глобальную переменную и убрать в процедуре локальную font
Код
ScreenRes 640,480,32

Dim Shared As Any Ptr font ' объявляем глобальную переменную
font = Imagecreate(4275,38)

'--------------------------------------------------------------------------
Sub DisplayTitle()
Draw String(5,270),"Вывод в процедуре",,font,Alpha
End Sub
'--------------------------------------------------------------------------
Bload ("Font.bmp",font)

Draw String(5,70),"Вывод напрямую",,font,Alpha

DisplayTitle()

Sleep

3. Можно загрузить font в процедуру уже после того, как в нее был загружен шрифт
Код
ScreenRes 640,480,32
Dim As Any Ptr font = Imagecreate(4275,38)
'--------------------------------------------------------------------------
Sub DisplayTitle (ByRef font As Any Ptr)
    Draw String(5,270),"Вывод в процедуре",,font,Alpha
End Sub
'--------------------------------------------------------------------------
Bload ("Font.bmp",Font)
Draw String(5,70),"Вывод напрямую",,font,Alpha
DisplayTitle (Font)
Sleep


Сообщение отредактировал WQ - Пятница, 22.09.2017, 17:56
 
PulchraДата: Среда, 27.09.2017, 15:52 | Сообщение # 10
Рядовой
Группа: Пользователи
Сообщений: 7
Репутация: 0
Статус: Offline
Вот оно, то, что у меня сожрало столько нервов! Второй пример - это то,что нужно, так я даже смогу (при известной толике везения, конечно) использовать разные шрифты. Спасибо большое smile Засада была в незнании синтаксиса и попытке восполнить пробел обрывками знаний других ЯП.

Добавлено (27.09.2017, 15:52)
---------------------------------------------
Да, не долго радость била через край. В общем, что-то я накрепко в асфальтовых лыжах запутался: в примере, что вызвал такие бури эмоций все работает хорошо, а если копирую эти же строки в свою программу - кириллица тут же пропадает. Ребята, подскажите, плиз, что я делаю не так:


Код
Dim Shared As Any Ptr font ' объявляем глобальную переменную
font = Imagecreate(4275,38)
'--------------------------------------------------------------------------

'Displays the game title screen.
Sub DisplayTitle
   Dim As String txt

   ScreenLock
   Cls
   txt = "Привет!"
   Draw String(5,200),txt,,font
   ScreenUnlock
   Sleep

   Do:Sleep 1:Loop While Inkey <> ""
End Sub

'--------------------------------------------------------------------------

Screen 20,32
Width 8,8
WindowTitle "Dungeon of Doom"
Bload ("Font.bmp",font)

DisplayTitle


По идее, вроде бы ничего противоестественного не сделал, а такое ощущение ,что то ли графический режим не включился, что ли процедура Draw String зависла... Или что-то еще зависло


Сообщение отредактировал Pulchra - Среда, 27.09.2017, 17:38
 
WQДата: Среда, 27.09.2017, 17:30 | Сообщение # 11
Полковник
Группа: Проверенные
Сообщений: 215
Репутация: 7
Статус: Offline
Pulchra

Screen или ScreenRes должно быть включено до других графических функций, в том числе ImageCreate
В приведенном примере  графический режим действительно не включился и ImageCreate возвращает 0

Screen 20,32 нужно вставить сразу после #Include "defs.bi"


Сообщение отредактировал WQ - Среда, 27.09.2017, 17:31
 
PulchraДата: Среда, 27.09.2017, 17:41 | Сообщение # 12
Рядовой
Группа: Пользователи
Сообщений: 7
Репутация: 0
Статус: Offline
Цитата WQ ()
Screen 20,32 нужно вставить сразу после #Include "defs.bi"

Точно! Сделал по Вашему наущению - и о чудо случилось smile

Я почему-то (хотя даже догадываюсь, почему) считал, что код начнет исполняться с комментария "Тут начинается Самая Главная Программа!" smile

Эх, придется снова читать, как на басике писать smile
 
quiet_snow_losДата: Пятница, 29.09.2017, 17:57 | Сообщение # 13
Рядовой
Группа: Пользователи
Сообщений: 16
Репутация: 0
Статус: Offline
Pulchra, это классическая ошибка последовательности, сам так напарывался неоднократно.
Найти её в функциях языка намного проще, чем в собственном алгоритме на несколько килострок
разветвлённого кода. Один из самых неприятных видов ошибок, лучше проверять подозрения на
него сразу. При корректном проектировании практически не появляется, т.к. очень частая ошибка
кодеров которые хотят сесть и закодить сразу без проектной документации.


Сообщение отредактировал quiet_snow_los - Пятница, 29.09.2017, 18:00
 
Форум » Freebasic » Вопросы по языку FreeBasic » Использование кириллицы (Не видна кириллица в консоли)
  • Страница 1 из 1
  • 1
Поиск: