Вывод текста в окна
|
|
haav | Дата: Четверг, 27.09.2012, 07:21 | Сообщение # 16 |
![haav](/avatar/00/5416-572652.jpg) Генералиссимус
Группа: Администраторы
Сообщений: 1376
Статус: 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 |
![ruddy](https://2994127467.uid.me/avatar.jpg) Сержант
Группа: Заблокированные
Сообщений: 30
Статус: 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
Статус: Offline
| Не знаю насколько это поможет, но по поводу вывода стандартными операторами FB'а на окнах Windows тема была здесь http://freebasic.justforum.net/t445-topic
Но основной вопрос это не снимает. Для вывода русских букв с помощью PRINT или DRAW STRING все равно сначала нужно загрузить шрифт с русскими буквами. Как это сделать можно посмотреть здесь http://cmapuk-xoma6bi4.narod.ru/
|
|
| |
ruddy | Дата: Вторник, 02.10.2012, 14:22 | Сообщение # 19 |
![ruddy](https://2994127467.uid.me/avatar.jpg) Сержант
Группа: Заблокированные
Сообщений: 30
Статус: 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
Статус: 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
Статус: Offline
| Quote Вот если вам нужно выводить также цветной шрифт - тогда да... ShadEx, мне кажется Вы вводите людей в заблуждение. Попробуйте так Code Shell "chcp 1251" Color 9, 12 Print "Цветные строки можно выводить НЕ только тогда, " Print "когда установлен графический режим консоли" Sleep
Quote Говорят, что после него дети очень туго воспринимают другие языки... ИМХО, утверждение устарело лет на 10. Современный синтаксис (#Lang "fb") требует явного определения переменных, тем самым прививает аккуратность и стуктурированность мыслей. А возможности позволяют изучать различные методы без необходимости объяснения дополнительных элементов.
|
|
| |
haav | Дата: Четверг, 04.10.2012, 07:18 | Сообщение # 22 |
![haav](/avatar/00/5416-572652.jpg) Генералиссимус
Группа: Администраторы
Сообщений: 1376
Статус: Offline
| Quote ( }Code {oma6bI4) Shell "chcp 1251" Color 9, 12 Print "Цветные строки можно выводить НЕ только тогда, " Print "когда установлен графический режим консоли" Sleep
Единственно к примеру хочется добавить для непосвященных, что в свойствах консоли должен быть выставлен шрифт поддерживающий кириллицу:
Скажу так, что если выставить точечные шрифты, толку от команды Shell "chcp 1251" нуль.
Quote (}{oma6bI4) ИМХО, утверждение устарело лет на 10. Современный синтаксис (#Lang "fb") требует явного определения переменных, тем самым прививает аккуратность и стуктурированность мыслей. А возможности позволяют изучать различные методы без необходимости объяснения дополнительных элементов.
Согласен. Я в свое время обучался информатике на языке ЛОГО на советском УКНЦ и это не мешало разбирать алгоритмы и справляться с поставленными задачами. Многие шли в институты и свободно осваивали программирование и становились программистами. А ведь ЛОГО намного примитивнее бейсика. Заявление Эдсгера Дейкстры считаю заблуждением. Я не знаю как другие, но я после обучения FreeBasic, большинство текстов языка СИ читаю без проблем. Да не обошлось без небольшого чтения учебника, однако читать учебник было примерно таким, как будто я повторяю пройденный материал.
Другое подтверждение electrik плохо видит, но это не мешает ему с легкостью писать на FreeBasic и адаптировать исходные тексты с СИ или ассемблера.
Так что все зависит от человека
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
ruddy | Дата: Четверг, 04.10.2012, 12:12 | Сообщение # 23 |
![ruddy](https://2994127467.uid.me/avatar.jpg) Сержант
Группа: Заблокированные
Сообщений: 30
Статус: 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
Статус: Offline
| Quote А ведь ЛОГО намного примитивнее бейсика. Заявление Эдсгера Дейкстры считаю заблуждением. Я не знаю как другие, но я после обучения FreeBasic, большинство текстов языка СИ читаю без проблем.
Да Дейкстра и примитивизм тут не причем, дело в тенденциях - на всех крупных олимпиадах по програмированию писать на любой из интерпретаций бейсика вроде с недавнего времени запретили.
|
|
| |
ruddy | Дата: Пятница, 05.10.2012, 13:53 | Сообщение # 25 |
![ruddy](https://2994127467.uid.me/avatar.jpg) Сержант
Группа: Заблокированные
Сообщений: 30
Статус: 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
Статус: 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
Статус: Offline
| Quote Может быть, опубликован список языков, на которых "будет разрешено" программировать?
Ну вообще-то наверно вам лучше самому поискать нужные тематические ресурсы, хотя вот погуглил и нашел "Методические рекомендации" - http://rosolymp.ru/index.php?option=com_content&view=article&id=6451&Itemid=909 Все-таки соврал я - бейсик оставили, но только "шарповый".
|
|
| |
haav | Дата: Пятница, 04.04.2014, 12:13 | Сообщение # 28 |
![haav](/avatar/00/5416-572652.jpg) Генералиссимус
Группа: Администраторы
Сообщений: 1376
Статус: Offline
| Сегодня совсем случайно наткнулся на еще одну фичу вывода русских символов в консоль:
Код Print !"Привет мир!\u" sleep Вот так, добавляю в конце строки управляющую последовательность \u , и все выводится на русском.
Не помню писал или нет, но вот такой пример тоже выводит русские символы в консоль:
Код #Include "crt.bi" Printf( "Привет мир!") sleep
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
|