Использование кириллицы
|
|
Pulchra | Дата: Понедельник, 11.09.2017, 18:04 | Сообщение # 1 |
Рядовой
Группа: Пользователи
Сообщений: 7
Статус: Offline
| Здравствуйте. Хотел пощупать этот интересный диалект бейсика и столкнулся с неприятным моментом. Ковырялся на примере "Напишем свой рогалик", не смог понять, как задается шрифт (если задается). Из-за этого можно работать только в крупных экранных разрешениях, не более 800х600. Уже при 1024х768 буквы размером 8х8 становятся мелковаты для комфортного чтения.
И еще сильно поколебало мою решимость то, что в консоли не получается увидеть кириллицу. Это ставит под сомнение применимость компилятора вообще. Проверял на 2х компах под управлением W7.
Возможно ли как-то починить эти два момента? Спасибо.
|
|
| |
haav | Дата: Понедельник, 11.09.2017, 20:35 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Статус: 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:
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
WQ | Дата: Вторник, 12.09.2017, 22:28 | Сообщение # 3 |
Полковник
Группа: Проверенные
Сообщений: 215
Статус: Offline
| Цитата Pulchra ( ) Это ставит под сомнение применимость компилятора вообще. Создаю программы на FB, которые показывают кириллицу, японские, китайские иероглифы, иврит и т.д. - никаких проблем Лучше сразу переходить на использование юникода и кодировки UTF А графическое окно FB - вещь, конечно, хорошая, но если планируется программа с нормальным графическим интерфейсом, также лучше переходить на использование средств более высокого уровня, из доступных, например, есть FLTK и IUP
А показ кириллицы в консоли еще от редактора кода зависит - если он нормально читает файлы в utf, так и при компиляции строки будут нормально отображаться
|
|
| |
quiet_snow_los | Дата: Среда, 13.09.2017, 12:23 | Сообщение # 4 |
Рядовой
Группа: Пользователи
Сообщений: 16
Статус: 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 |
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Статус: Offline
| Цитата quiet_snow_los ( ) Открывается два окна, в одном(большом чёрном) сверху написано unable to retrieve image information, в другом(серая квадратная форма) ничего нет и оно зависшее(написано не отвечает). Windows7 x64 FreeBASIC Compiler - Version 1.05.0 (01-31-2016), built for win32 (32bit)
Прошу прощения, исходник вообще не тот засунул Как только так получилось...
Перезалил архив, сейчас должно быть все нормально.
Что хорошо с подобными шрифтами, не нужно никакого дополнительно кода для вывода текста, все FB командой (Draw String).
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
Pulchra | Дата: Среда, 13.09.2017, 16:46 | Сообщение # 6 |
Рядовой
Группа: Пользователи
Сообщений: 7
Статус: Offline
| Спасибо за советы, частично что-то начало почти получаться С консолью разобрался, выводятся самые что ни есть православные кириллические буквы, все хорошо, нравится.
А вот с графическим окошком пока не так все радужно, но я не унываю, весь в надеждах и вообще. Особенно вообще. Честно говоря, я не большой спец в этих вот, я бейсик помню, дай бог памяти, лет 30 как устаревший - времен махрового расцвета MS-DOS, спектрумов и прочих БК0010 .
Наверное, я не совсем правильно в прошлый раз обозначил свои хотелки. Или в терминах запутался. На самом деле я, вероятно, ищу способ вывода кириллических символов в графическом окне. В тексте программы есть такая строчка: ScreenRes 640, 480, 32 - правильно же, это графическое окно? Попробовал разные манипуляции с выводом через библиотеки - пока не получается сами библиотеки правильно подключить, наверное - все равно выводятся сатанинские письмена.
Идея с подключением своего собственного шрифта мне очень импонирует, хотел бы именно так и поступить - так можно при желании иметь несколько шрифтов. Я ужасно весь извиняюсь, можно в качестве примера готовый проект, в котором будет подключаться какой-либо шрифт (один) и выводиться текст? Желательно такой пример, чтобы было поменьше буков, чтобы у некоторых были шансы разобраться На текущий момент моя цель - порыться в рогалике (http://free-basic.ru/g00.html) и чтобы оно стало на человеческом языке. А дальше будем посмотреть. Копаюсь с библиотекой xffont, но пока что ничего не выкопал.
П.С. Тот пример, что был в первом ответе уважаемого haav`а- увы, так и не собрался у меня, ругается на какие-то ненаходимые файлы
|
|
| |
haav | Дата: Среда, 13.09.2017, 16:58 | Сообщение # 7 |
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Статус: Offline
| Цитата Pulchra ( ) П.С. Тот пример, что был в первом ответе уважаемого haav`а- увы, так и не собрался у меня, ругается на какие-то ненаходимые файлы
Я уже писал, что засунул другой исходник по ошибке. Заново перекачайте архив, там как раз маленький читабельный пример, как вам нужно.
Цитата Копаюсь с библиотекой xffont, но пока что ничего не выкопал.
Компилятор случайно не 64-х битный? Если так, то с xfont у вас пока что ничего не получится. Под 64-бита библиотеки нет, точнее просто ее никто не пробовал собирать под 64-х битный компилятор. А если у вас 32-bit компилятор, то там и мудрить то ничего не надо. Распаковал архив, скомпилировал пример (example_unicode2.bas) и запустил.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
Pulchra | Дата: Пятница, 22.09.2017, 17:25 | Сообщение # 8 |
Рядовой
Группа: Пользователи
Сообщений: 7
Статус: Offline
| Да, спасибо, я перекачал пример - и он отлично заработал. По поводу разрядности компилятора - эм... честно - затрудняюсь ответить Сейчас ковыряюсь неспешно без библиотек, раз замаячило в конце тоннеля что-то похожее на столь желаемое.
У меня сейчас такой вот вопрос, если можно. Даже пара вопросов. Собрал из примера такое вот изящество:
'-------------------------------------------------------------------------- '-------------------------------------------------------------------------- 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 таким образом, чтобы ее было видно в процедуре?
Спасибо
|
|
| |
WQ | Дата: Пятница, 22.09.2017, 17:52 | Сообщение # 9 |
Полковник
Группа: Проверенные
Сообщений: 215
Статус: 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
Статус: Offline
| Вот оно, то, что у меня сожрало столько нервов! Второй пример - это то,что нужно, так я даже смогу (при известной толике везения, конечно) использовать разные шрифты. Спасибо большое Засада была в незнании синтаксиса и попытке восполнить пробел обрывками знаний других ЯП.
Добавлено (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
Статус: 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
Статус: Offline
| Цитата WQ ( ) Screen 20,32 нужно вставить сразу после #Include "defs.bi" Точно! Сделал по Вашему наущению - и о чудо случилось
Я почему-то (хотя даже догадываюсь, почему) считал, что код начнет исполняться с комментария "Тут начинается Самая Главная Программа!"
Эх, придется снова читать, как на басике писать
|
|
| |
quiet_snow_los | Дата: Пятница, 29.09.2017, 17:57 | Сообщение # 13 |
Рядовой
Группа: Пользователи
Сообщений: 16
Статус: Offline
| Pulchra, это классическая ошибка последовательности, сам так напарывался неоднократно. Найти её в функциях языка намного проще, чем в собственном алгоритме на несколько килострок разветвлённого кода. Один из самых неприятных видов ошибок, лучше проверять подозрения на него сразу. При корректном проектировании практически не появляется, т.к. очень частая ошибка кодеров которые хотят сесть и закодить сразу без проектной документации.
Сообщение отредактировал quiet_snow_los - Пятница, 29.09.2017, 18:00 |
|
| |
|