FreeBasic
Главная
Вход
Регистрация
Суббота, 20.04.2024, 14:11Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Форум » Freebasic » Вопросы по языку FreeBasic » Вывод текста в окна (текстовое - режим Screen 0 и графическое - реэим Screen 11)
Вывод текста в окна
haavДата: Четверг, 27.09.2012, 07:21 | Сообщение # 16
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
При желании, сможете сами нарисовать те символы, какие нужны. Именно таким путем пошел Albom. Хотя в его заголовке не поймешь как это дело он проделал, я нашел тему на оф. сайте, где показали как это делается:

Code

screenres 640,480
type Font  
   w as integer  
   h as integer  
   d as ubyte ptr  
end type  
extern __Font  alias "__fb_font"  as Font  

with __Font
   .d[64*8+0] = &B00000000
   .d[64*8+1] = &B00111110
   .d[64*8+2] = &B01000000
   .d[64*8+3] = &B01111110
   .d[64*8+4] = &B01000001
   .d[64*8+5] = &B01000001
   .d[64*8+6] = &B01000001
   .d[64*8+7] = &B10111110
end with

while inkey=""
   locate 1+rnd*50,1+rnd*80
   color rnd*256
   print chr(64)
   sleep 10
Wend


Данный код рисует букву a под 64 символом в табличке. Никто не мешает заменить таким образом все символы 0-255


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ruddyДата: Понедельник, 01.10.2012, 15:12 | Сообщение # 17
Сержант
Группа: Заблокированные
Сообщений: 30
Репутация: 0
Статус: Offline
Уважаемый ShadEx, простите, с 26 октября жду письма, а заглянуть СЮДА не догадался в надеже на автоматический вызов при ответе! Вы правы, уже в самом начале понял, что кодировка не win-1251 и даже не OEM-866, но заявление офф. форума – "поддержка юникода в графическом режиме возможна только в будущих версиях" мне не показалась убедительной. В любом случае при выводе должен быть определенный номер используемой на графическом экране кодировки. Пусть Вас не смущает указание экранов Screen0 и Screen11 – с таким же "успехом" можно написать экран Screen21!

Попробуем с другой стороны - ответьте, пожалуйста, на такой вопрос: если прикладная программа создала диалоговое окно с использованием функции:
CreateWindowEx(0,"#32770","Первое окно",WS_VISIBLE Or _
WS_OVERLAPPEDWINDOW, 100,100,300,300,0,0,0,0)
то каким чудом можно в него направить вывод, осуществляемый стандартным оператором Print? Или нужно открывать другое окно или нужно использовать другой оператор? Речь по-прежнему идет о текстовой информации.

От скуки прочитал, что система Microsoft Windows NT и основанная на ней система Windows XP в основном использует форму UTF-16LE (UTF-16 little-endian). Можем ли мы принять, что работаем исключительно с формой UTF-16LE? И тогда всегда иметь 2-х байтное представление...

Спасибо!
 
}{oma6bI4Дата: Вторник, 02.10.2012, 12:56 | Сообщение # 18
Рядовой
Группа: Пользователи
Сообщений: 8
Репутация: 0
Статус: Offline
Не знаю насколько это поможет, но по поводу вывода стандартными операторами FB'а на окнах Windows тема была здесь
http://freebasic.justforum.net/t445-topic

Но основной вопрос это не снимает. Для вывода русских букв с помощью PRINT или DRAW STRING все равно сначала нужно загрузить шрифт с русскими буквами.
Как это сделать можно посмотреть здесь
http://cmapuk-xoma6bi4.narod.ru/
 
ruddyДата: Вторник, 02.10.2012, 14:22 | Сообщение # 19
Сержант
Группа: Заблокированные
Сообщений: 30
Репутация: 0
Статус: Offline
Уважаемый }{oma6bI4, сегодня все замечания и подсказки хороши – спасибо!

Особенно порадовало упоминание режима "-1" параметра "flags" оператора Screen, позволяющего "рисовать" используя функции API...

На сайт http://cmapuk-xoma6bi4.narod.ru/
уже заглядывал – там "Знакогенератор (Таблица символов) v.0.7"...

"Концептуально" хотелось бы вот чего – не вводя никаких сторонних компонент научиться пользоваться компилятором FreeBASIC и научить этому детей! Когда я смогу убедиться, что нет никакого разумного способа выводить на экран монитора и в файл на диск результаты расчетов (включая комментарии на русском языке) скажу: друзья, в работе следует использовать исключительно буквы латинского алфавита! Думаю, дети поймут наши трудности и простят нашу нерасторопность...

Еще не вечер, давайте пробовать! Недаром "класс окна" среди параметров имеет:
Class specific: Window is ANSI \ UNICODE – значит есть возможность, перейдя в кодировку UNICODE "писать любыми буквами"!
 
ShadExДата: Среда, 03.10.2012, 23:00 | Сообщение # 20
Лейтенант
Группа: Проверенные
Сообщений: 51
Репутация: 1
Статус: Offline
Quote
... не вводя никаких сторонних компонент научиться пользоваться компилятором FreeBASIC и научить этому детей! Когда я смогу убедиться, что нет никакого разумного способа выводить на экран монитора и в файл на диск результаты расчетов (включая комментарии на русском языке) скажу: друзья, в работе следует использовать исключительно буквы латинского алфавита!


Ну так если вам нужно только выводить текст - зачем вам графическая консоль?! Вот если вам нужно выводить также цветной шрифт - тогда да...
Короче вот пример(компилировать и запускать для наглядности лучше в режиме "Console (debug)")
Code

Shell "chcp 1251"
'Screen 14, 32

Print "Какойто текст во 2-ой строке"

Locate 4
Print "Какойто текст в 4-ой строке"

Locate 8, 8
Print "Какойто текст в 8-ой строке, начиная с 8-ой позиции"

Color RGB(0, 0, 255), RGB(255, 0, 0)
Print "Цветные строки можно выводить только тогда, "
Print "когда установлен графический режим консоли"
Sleep


Если расскоментируете вторую строку - то получите цветной текст, но уже без "русской" кодировки.

Quote

Недаром "класс окна" среди параметров имеет:
Class specific: Window is ANSI \ UNICODE – значит есть возможность, перейдя в кодировку UNICODE "писать любыми буквами"!

Да, есть такая возможность, но это уже GUI на WinApi

PS: ИМХО, вы бы все-таки лучше на фри-паскаль перешли, бэйсик не рекомендуется для обучения программированию... Говорят, что после него дети очень туго воспринимают другие языки...


Сообщение отредактировал ShadEx - Среда, 03.10.2012, 23:41
 
}{oma6bI4Дата: Четверг, 04.10.2012, 00:24 | Сообщение # 21
Рядовой
Группа: Пользователи
Сообщений: 8
Репутация: 0
Статус: Offline
Quote
Вот если вам нужно выводить также цветной шрифт - тогда да...

ShadEx, мне кажется Вы вводите людей в заблуждение. Попробуйте так
Code
Shell "chcp 1251"
Color 9, 12
Print "Цветные строки можно выводить НЕ только тогда, "
Print "когда установлен графический режим консоли"
Sleep


Quote
Говорят, что после него дети очень туго воспринимают другие языки...

ИМХО, утверждение устарело лет на 10. Современный синтаксис (#Lang "fb") требует явного определения переменных, тем самым прививает аккуратность и стуктурированность мыслей. А возможности позволяют изучать различные методы без необходимости объяснения дополнительных элементов.
 
haavДата: Четверг, 04.10.2012, 07:18 | Сообщение # 22
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Quote (}
Code
{oma6bI4)
Shell "chcp 1251"  Color 9, 12  Print "Цветные строки можно выводить НЕ только тогда, "  Print "когда установлен графический режим консоли"  Sleep


Единственно к примеру хочется добавить для непосвященных, что в свойствах консоли должен быть выставлен шрифт поддерживающий кириллицу:



Скажу так, что если выставить точечные шрифты, толку от команды Shell "chcp 1251" нуль.

Quote (}{oma6bI4)
ИМХО, утверждение устарело лет на 10. Современный синтаксис (#Lang "fb") требует явного определения переменных, тем самым прививает аккуратность и стуктурированность мыслей. А возможности позволяют изучать различные методы без необходимости объяснения дополнительных элементов.


Согласен. Я в свое время обучался информатике на языке ЛОГО на советском УКНЦ и это не мешало разбирать алгоритмы и справляться с поставленными задачами. Многие шли в институты и свободно осваивали программирование и становились программистами. А ведь ЛОГО намного примитивнее бейсика. Заявление Эдсгера Дейкстры считаю заблуждением. Я не знаю как другие, но я после обучения FreeBasic, большинство текстов языка СИ читаю без проблем. Да не обошлось без небольшого чтения учебника, однако читать учебник было примерно таким, как будто я повторяю пройденный материал.

Другое подтверждение electrik плохо видит, но это не мешает ему с легкостью писать на FreeBasic и адаптировать исходные тексты с СИ или ассемблера.

Так что все зависит от человека
Прикрепления: 5505735.png (14.5 Kb)


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ruddyДата: Четверг, 04.10.2012, 12:12 | Сообщение # 23
Сержант
Группа: Заблокированные
Сообщений: 30
Репутация: 0
Статус: Offline
Друзья, большое спасибо за ваше участие!
Почему возможны "большие системы"? Потому, что они строятся с использованием небольшого количества стандартизированных интерфейсов и протоколов. Программные системы не являются исключением. Коллективная работа над проектом подразумевает общность используемых средств (рано или поздно все должно быть собрано в кучку)... Для "учебного проекта" предлагается, кроме того, использовать единый язык программирования – FreeBASIC. Сегодня доступна версия FreeBASIC 0.24.0.
Скачал с сайта http://www.freebasic.net/get
файл FreeBASIC-0.24.0-win32.exe и установил на компьютер компилятор.
После установки на диске появилась папка C:\Program Files\FreeBASIC
04.10.2012 <DIR> bin
04.10.2012 <DIR> doc
04.10.2012 <DIR> examples
04.10.2012 <DIR> inc
04.10.2012 <DIR> lib
17.08.2012 143 176 changelog.txt
20.08.2012 1 417 216 fbc.exe
20.08.2012 3 638 fblogo.ico
20.08.2012 28 672 open-console.exe
20.08.2012 11 698 readme.txt
04.10.2012 65 954 uninstall.exe
04.10.2012 55 wiki.url

На этом вынужден прерваться – очень нужно, но скоро продолжу. Спасибо!
 
ShadExДата: Четверг, 04.10.2012, 21:53 | Сообщение # 24
Лейтенант
Группа: Проверенные
Сообщений: 51
Репутация: 1
Статус: Offline
Quote
А ведь ЛОГО намного примитивнее бейсика. Заявление Эдсгера Дейкстры считаю заблуждением. Я не знаю как другие, но я после обучения FreeBasic, большинство текстов языка СИ читаю без проблем.


Да Дейкстра и примитивизм тут не причем, дело в тенденциях - на всех крупных олимпиадах по програмированию писать на любой из интерпретаций бейсика вроде с недавнего времени запретили.
 
ruddyДата: Пятница, 05.10.2012, 13:53 | Сообщение # 25
Сержант
Группа: Заблокированные
Сообщений: 30
Репутация: 0
Статус: Offline
"А на воле-то, братцы, лафа" (советский фильм "Путевка в жизнь",1931).
Сообщение "ShadEx" просто потрясло (крупномасштабная провокация, сравнимая с ЕГЭ)! Может быть, опубликован список языков, на которых "будет разрешено" программировать? Вполне согласен с уважаемым "haav": "обучался информатике на языке ЛОГО... и это не мешало разбирать алгоритмы"... Фокус вот в чем – в те времена разрыв межу учителями и учениками был не столь катастрофически велик – даже самому ленивому ученику можно было объяснить, что и как делает программа... В то время учитель говорил: "ребята, это просто, у вас получится", теперь учитель говорит: "это сложно, вы не поймете"! Я не стану агитировать за FreeBASIC, он сам о себе заявит и вскоре, надеюсь, станет достойной заменой системе программирования QBasic 4.5 (не в системном программировании, а там, где занимаются, например, алгоритмизацией технологических процессов)! Напомню слова Карла V Габсбурга (1500 — 1558): "с женщинами нужно разговаривать по-французски, со слугами - по-немецки, а с лошадьми по-английски" (хотя ему приписывают самые разные высказывания). Каждый язык (в том числе и программирования) вещь до некоторой степени интимная...

Добавлено (05.10.2012, 13:36)
---------------------------------------------
Теперь по существу вопроса. Была заявлена тема: "Вывод текста в окна (текстовое - режим Screen 0 и графическое - режим Screen 11)" и задан вопрос: "В какой кодировке выводится текст в графическое окно?" Возникла это тема в связи с тем, что довольно быстро учитель и ученики поняли, что FreeBASIC (под Windows) вполне способен заменить QBasic 4.5 (под DOS) даже в режиме вывода данных на системную консоль, но "тлетворное влияние запада" сыграло свою роковую роль, и всем вдруг потребовалась графика! Иногда это требование не лишено смысла... Ну как можно запретить ученикам просто и быстро получать замечательные картинки типа "Анимация горящих колец":
http://www.freebasic-world.narod.ru/circleflame.html
Очень простой пример симуляции пламени...
Так неуклюже попытался ответить "ShadEx", спасибо ему!

Добавлено (05.10.2012, 13:53)
---------------------------------------------
Друзья, нужна ваша помощь! Ниже программа, где, видимо, делаю ошибку... Объясните, пожалуйста, влияние оператора Space$(MaxBufSize) на "ход машины" и каким чудом можно "распечатать" имя класса и имя окна (Screen 0 и Screen 11)?
#Include "windows.bi"
Dim MaxBufSize As Integer ' размер буфера заголовка
Dim hwndFound As HWND ' то, что будет возвращено
Dim pszWindowTitle As String ' текущий заголовок окна
Dim ErrorCode As UInteger ' код последней ошибки
Dim Res As UInteger ' результат операции
Screen 0
'Screen 11
MaxBufSize = 512 ' максимальный размер буфера
pszWindowTitle = Space$(MaxBufSize)
' если убрать этот оператор - шибка 12 segmentation violation
Res = GetConsoleOutputCP()
ErrorCode = GetLastError()
Print " ErrorCode = ", ErrorCode
Print " Res = ", Res
' Выбираем текущий заголовок окна.
Res = GetConsoleTitle(pszWindowTitle, MaxBufSize)
ErrorCode = GetLastError()
Print " ErrorCode = ", ErrorCode
Print " Res = ", Res ' 0
hwndFound = FindWindow(NULL, pszWindowTitle)
Print " HWND = ", hwndFound
Res = IsWindow(hwndFound)
ErrorCode = GetLastError()
Print " ErrorCode = ", ErrorCode
Print " Res = ", Res
Res = IsWindowUnicode(hwndFound)
ErrorCode = GetLastError()
Print " ErrorCode = ", ErrorCode
Print " Res = ", Res
Sleep
' При выводе на экран:
' Screen 0 Screen 11
' ---------------- ----------------
' ErrorCode = 2 ErrorCode = 0
' Res = 866 Res = 866
' ErrorCode = 2 ErrorCode = 0
' Res = 55 Res = 55
' HWND = 0 HWND = 0
' ErrorCode = 2 ErrorCode = 0
' Res = 0 Res = 0
' ErrorCode = 1400 ErrorCode = 1400
' Res = 0 Res = 0

 
}{oma6bI4Дата: Пятница, 05.10.2012, 20:27 | Сообщение # 26
Рядовой
Группа: Пользователи
Сообщений: 8
Репутация: 0
Статус: Offline
result = Space[$]( count )
Создает строку заданной длины заполненную пробелами (" ")
Т.о. в строковой переменной будет достаточно места для записи в нее извне, без этой команды происходит попытка записать блок, длина которого превышает объем отведенный для этого блока, что и приводит к ошибке.

На безупречность не претендую... ну как-то так.
Code
#include "fbgfx.bi"
#Include "windows.bi"
#Define debug 0
'#Define debug 1
Const MaxBufSize = 512 ' максимальный размер буфера заголовка
Dim hwndFound As HWND ' то, что будет возвращено
Dim hwndFound1 As Integer ' то, что будет возвращено
'Dim pszWindowTitle As String ' текущий заголовок окна
Dim pszWindowTitle As ZString * MaxBufSize' текущий заголовок окна
Dim ErrorCode As DWORD ' код последней ошибки
Dim Res As DWORD ' результат операции
Cls
'Screen 11
'pszWindowTitle = Space$(MaxBufSize)
pszWindowTitle = String(MaxBufSize,"*")
'? pszWindowTitle
If debug Then SetLastError(0)
Res = GetConsoleOutputCP() 'Всегда успешна?, обработку ошибок не требует?
'ErrorCode = GetLastError()
'Print " ErrorCode = ", ErrorCode
Print " Res(CodePage) = ";Tab(20); Res
' Выбираем текущий заголовок окна.
If debug Then SetLastError(0)
'Res = GetConsoleTitle(pszWindowTitle, MaxBufSize)
Res = GetConsoleTitle(@pszWindowTitle, MaxBufSize)
? pszWindowTitle
ScreenControl fb.GET_WINDOW_TITLE,pszWindowTitle
? pszWindowTitle
If Res=0 Or debug Then
  ErrorCode = GetLastError()
  Print " ErrorCode = ", ErrorCode
EndIf
Print " Res (Len) = ";Tab(20); Res ' 0
If debug Then SetLastError(0)
'hwndFound = FindWindow(NULL, pszWindowTitle)
hwndFound = FindWindow(NULL, @pszWindowTitle)
Print " HWND = ";Tab(20); hwndFound
'ScreenControl fb.GET_WINDOW_HANDLE,hwndFound1
'? hwndFound1
If debug Then SetLastError(0)
Res = IsWindow(hwndFound)
If Res=0 Or debug Then
  ErrorCode = GetLastError()
  Print " ErrorCode = ", ErrorCode
EndIf
Print " Res (IsWindow) = ";Tab(20); Res
If debug Then SetLastError(0)
Res = IsWindowUnicode(hwndFound)
If Res=0 Or debug Then
  ErrorCode = GetLastError()
  Print " ErrorCode = ", ErrorCode
EndIf
Print " Res (IsUnicode) = ";Tab(20); Res
Sleep
 
ShadExДата: Суббота, 06.10.2012, 02:05 | Сообщение # 27
Лейтенант
Группа: Проверенные
Сообщений: 51
Репутация: 1
Статус: Offline
Quote
Может быть, опубликован список языков, на которых "будет разрешено" программировать?


Ну вообще-то наверно вам лучше самому поискать нужные тематические ресурсы, хотя вот погуглил и нашел "Методические рекомендации" -
http://rosolymp.ru/index.php?option=com_content&view=article&id=6451&Itemid=909
Все-таки соврал я - бейсик оставили, но только "шарповый".
 
haavДата: Пятница, 04.04.2014, 12:13 | Сообщение # 28
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Сегодня совсем случайно наткнулся на еще одну фичу вывода русских символов в консоль:


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

Вот так, добавляю в конце строки управляющую последовательность \u , и все выводится на русском.

Не помню писал или нет, но вот такой пример тоже выводит русские символы в консоль:

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


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
Форум » Freebasic » Вопросы по языку FreeBasic » Вывод текста в окна (текстовое - режим Screen 0 и графическое - реэим Screen 11)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск: