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

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

Возможно ли как-то починить эти два момента? Спасибо.
 
haavДата: Понедельник, 11.09.2017, 20:35 | Сообщение # 2
Генерал-лейтенант
Группа: Администраторы
Сообщений: 768
Репутация: 33
Статус: 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(29Kb)


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

А показ кириллицы в консоли еще от редактора кода зависит - если он нормально читает файлы в utf, так и при компиляции строки будут нормально отображаться
 
quiet_snow_losДата: Среда, 13.09.2017, 12:23 | Сообщение # 4
Рядовой
Группа: Пользователи
Сообщений: 6
Репутация: 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
Генерал-лейтенант
Группа: Администраторы
Сообщений: 768
Репутация: 33
Статус: 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
Рядовой
Группа: Пользователи
Сообщений: 3
Репутация: 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
Генерал-лейтенант
Группа: Администраторы
Сообщений: 768
Репутация: 33
Статус: Offline
Цитата Pulchra ()
П.С. Тот пример, что был в первом ответе уважаемого haav`а- увы, так и не собрался у меня, ругается на какие-то ненаходимые файлы


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

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


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


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
PulchraДата: Пятница, Вчера, 17:25 | Сообщение # 8
Рядовой
Группа: Пользователи
Сообщений: 3
Репутация: 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Дата: Пятница, Вчера, 17:52 | Сообщение # 9
Подполковник
Группа: Пользователи
Сообщений: 124
Репутация: 2
Статус: 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
 
Форум » Freebasic » Вопросы по языку FreeBasic » Использование кириллицы (Не видна кириллица в консоли)
Страница 1 из 11
Поиск: