10949-1 (Графическое программирование на Ms Fortran), страница 3

2016-07-30СтудИзба

Описание файла

Документ из архива "Графическое программирование на Ms Fortran", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "10949-1"

Текст 3 страницы из документа "10949-1"

Character facename – имя шрифта.

Выгрузка шрифта.

Выгрузка зарегистрированных шрифтов из памяти осуществляется п/п UnRegisterFonts ()

Пример программы деления экрана на 4 области.

! File: geomshar.for

$DEBUG ! Производит дополнительные проверки при компиляции

$STORAGE:2 ! Переменные и константы целого типа:2-х байтовые (integer*2)

$DECLARE ! Генерация предупреждающих сообщений для необъявленных переменных

include 'fgraph.fi' ! Включение интерфейсов графических функций в начале каждого файла

interface to function getch() ! Объявление ф-ции getch, ее

integer getch [C, alias:'_getch'] ! атрибутов, типов формальных

end ! параметров

program Demonstr_devide_screen ! Объявление головной программы

implicit NONE ! Запретить неявное объявление типов

integer *2 i2 ! Фиктивная переменная

integer getch [EXTERN]

include 'fgraph.fd' ! Объявление типов графических функций, объявление и задание параметров, определение структур (STRUCTURE) в каждой графической п/п

i2=setvideomode($MAXRESMODE) ! Установить видеорежим с max разрешением

call devide_graph_area()

i2=getch() ! Задержка до нажатия клавиши

i2=setvideomode($DEFAULTMODE) ! Установить предыдущий видеорежим

end

! п/п деления экрана на 4 области

subroutine devide_graph_area()

include 'fgraph.fd'

integer*2 i2

integer*2 nx,ny ! Max кол-во пиксел по X и Y

integer*2 xdin,ydin ! Координаты общей точки областей

! integer*2 nr,nc ! Max кол-во строк и столбцов

real kx,ky

record /videoconfig/ vc ! Подключ. структуры videoconfig

! record /rcCOORD/ rc ! и rccoord, определенных в файле fgraph.fd

record /xyCOORD/ xy ! xy - образец типа xycoord

call clearscreen($GCLEARSCREEN)! Очистка экрана

call getvideoconfig(vc) ! Определение видеоконфигурации

kx=75.0 ! Коэф-ты в %, определяющие положе-

ky=80.0 ! ние общей точки областей

nx=vc.numxpixels ! см. файл fgraph.fd

ny=vc.numypixels ! см. файл fgraph.fd

xdin=int2(kx*nx/100)

ydin=int2(ky*ny/100)

i2 = setbkcolor($GRAY) ! Установка цвета фона

i2=setcolor(6) ! Цвет красный

i2=rectangle($GBORDER,1,1,nx-1,ny-1) ! Рамка всей области экрана

i2=rectangle($GBORDER,2,2,xdin,ydin) ! Рамка области чертежа

i2=rectangle($GBORDER,2,ydin+1,xdin,ny-2)! Рамка области ввода

i2=rectangle($GBORDER,xdin+1,2,nx-2,ydin)!Рамка информац. области

i2=rectangle($GBORDER,xdin+1,ydin+1,nx-2,ny-2)! Область автора

i2=setcolor(12) ! Цвет светлокрасный

! Оформление области автора

if (registerfonts('D:\MSLIB\*.fon').LT.0) then ! инициализация

i2=registerfonts('C:\MSLIB\*.fon') ! шрифтов

end if ! библиотеки

i2=setfont("t'Helv Cyrillic'h18w8b"C) !Установка шрифта

! i2=settextcolor(2) ! Установка цвета текста

! nr=vc.numtextrows

! nc=vc.numtextcols

call moveto(xdin+40,ydin+10, xy)

call outgtext (' ¦ ¦ + +') ! Вывод текста в текущ. позицию

call moveto(xdin+30,ydin+30, xy)

call outgtext ('+ГЕбМГ +.+.')

call moveto(xdin+50,ydin+50, xy)

call outgtext (' 1998')

end

Пример использования функции Getch, возвращающей код нажатой клавиши.

! Программа печати кода нажатой клавиши

$debug

interface to function getch()

integer*2 getch [C, alias:'_getch'] ! Интерфейс Си функции

end

integer *2 getch [EXTERN]

integer *2 scod

integer i

do i=1,26 ! Отступ в 26 строк

print*

enddo

1 FORMAT(32x,'КОД КЛАВИШИ - ',I3)

print*,' НАЖМИТЕ ЛЮБУЮ КЛАВИШУ'

10 print*

SCOD=getch() ! Отслеживание кода нажатой клавиши

print1,scod ! Печать кода

print*

print*,' ( Для выхода в VC - нажмите ^BREAK )' ! Прерывание выполнения программы

print*,' ( Для продолжения - любую клавишу ) '

go to 10 ! Бесконечный цикл

end

Дополнительные возможности вывода текста.

Текст стандартным шрифтом в любую позицию экрана можно вывести процедурой OutText. Процедура outtext не производит форматирование текста и работает во всех видео режимах. Текст выводится стандартным шрифтом.

Пример:

RECORD /record/ rc

……………………..

dum = SetTextColor (9) ! восстановление цвета текста

call SetTextPosition (20,20,rc)

text = ‘программа демонстрации’

call outtext (text)

Вывод текста (сверху вниз) можно осуществить только в пределах заданной области экрана (текстового окна), которое устанавливается процедурой SetTextWindow. При заполнении окна происходит прокрутка.

Синтаксис call SetTextWindow (r1,c1,r2,c2)

Где: r1,c1- текстовые координаты (строка и столбец) левого верхнего угла прямоугольного окна, r2,c2 – то же правого.

Пример работы с текстовым окном:

! File: textwin.for

! Программа установки текстового окна и ввода элементов массива

! Программа устойчива при некорректном вводе. Выход из программы осуществляется нажатием Esc

$DEBUG ! Производит дополнительные проверки при компиляции

$STORAGE:2 ! Переменные и константы целого типа:2-х байтовые (integer*2)

$DECLARE ! Генерация предупреждающих сообщений для необъявленных переменных

include 'fgraph.fi' ! Включение интерфейсов графических функций в начале каждого файла

interface to function getch() ! Объявление ф-ции getch, ее

integer getch [C, alias:'_getch'] ! атрибутов, типов формальных параметров

end

program Demonstr_Text_Window ! Объявление головной программы

implicit NONE ! Запретить неявное объявление типов

integer *2 i2 ! Фиктивная переменная

include 'fgraph.fd' ! Объявление типов графических функций, объявление и задание параметров, определение структур (STRUCTURE) в каждой графической п/п

i2=SetVideoMode($MAXRESMODE) ! Установить видеорежим с max разрешением

call SetTextWin() ! Вызов п/п

i2=SetVideoMode($DEFAULTMODE) ! Установить предыдущий видеорежим

end

subroutine SetTextWin()

include 'fgraph.fd'

integer getch [EXTERN] ! Функция возврата кода нажатой клавиши

integer*2 i2

integer*2 i, j, k, m

integer*2 nr, nc ! Max кол-во строк и столбцов

integer*2 nx, ny ! Max кол-во пиксел по X и Y

real A(3,3) ! Вспомогательный массив

real kr,kc

character*12 ValElem

character*6 vl

character*1 one

record /videoconfig/ vc ! Подключ. структуры videoconfig

record /rcCOORD/ rc ! и rccoord, определенных в файле fgraph.fd

call ClearScreen($GCLEARSCREEN)! Очистка экрана

call GetVideoConfig(vc) ! Определение видеоконфигурации

nx=vc.NumXPixels ! см. файл fgraph.fd

ny=vc.NumYPixels ! см. файл fgraph.fd

nr=vc.NumTextRows ! см. файл fgraph.fd

nc=vc.NumTextCols ! см. файл fgraph.fd

i2=SetBkColor($GRAY) ! Установка цвета фона

i2=SetColor(2) ! Цвет рисования зеленый

i2=SetTextColor(6) ! Цвет текста красный

kr=0.8

kc=0.75

call SetTextWindow(Int(kr*nr)+2,2,nr-1,Int(kc*nc)) ! Текстовое окно

i2=rectangle($GBORDER,1,Int(kr*ny),Int(kc*nx),ny-1)! Рамка области ввода

do i=1,3

do j=1,3

call SetTextPosition(1,2,rc) ! Установка начальной позиции

write(vl,11) i, j ! Помещение индексов массива в буфер (внутренний файл) (по формату 11)

call OutText(' Ведите элемент массива А'//vl)

ValElem=' ' ! Символьное обнуление

m=0 ! Числовое обнуление

do k=1,24 ! Количество вводимых цифр

i2=getch() ! Возврат кода нажатой клавиши

if (i2.eq.13) exit ! Нажат ввод

if (i2.eq.27) return ! Нажата Esc (выход из программы)

call GetTextPosition(rc) ! Возврат текущей позиции

call SetTextPosition(rc.row,rc.col,rc) ! и ее установка

write(one,'(a)') char(i2) ! Печать в буфер введенного символа

if (i2.eq.8) then ! Нажата клавиша Backspace

call SetTextPosition(rc.row,rc.col-1,rc)

write(one,'(a)') ' ' ! При нажатии BackSpace удаляется

end if ! последний введенный символ (запись в буфер пробела)

call OutText(one) ! Печать введенного символа

if (i2.eq.8) call SetTextPosition(rc.row,rc.col-1,rc) ! При печати пробела смещаемся влево, поэтому возврат

if (i2.ge.48.and.i2.le.57.or.i2.eq.43.or.i2.eq.45.or.i2.eq.46.or.i2.eq.69.or.i2.eq.101) then

! Перечислены коды следующих символов:0,1,2,3,4,5,6,7,8,9,+,-,.,E,e

m=m+1 ! Отсчет количества введенных символов

if (m.eq.12) exit ! Максимум 12 символов

write(ValElem,'(a,a)') ValElem(1:m),char(i2) ! В буфер помещается первые m символов и введенный

else

if (i2.ne.8) call SetTextPosition(2,2,rc)

if (i2.ne.8) call OutText(' Ошибка ввода! ')

if (i2.eq.8) write(ValElem,'(a,a)') ValElem(1:m),' ' ! При нажатии Backspace

if (i2.eq.8) m=m-1 ! Удаление последнего символа

end if

end do

call SetTextPosition(3,2,rc)

read(ValElem,'(f12.0)') A(i,j) ! Преобразование символа в число (через буфер)

write(5,*)'Элемент массива ',A(i,j)

i2=getch() ! Задержка до нажатия клавиши

call ClearScreen($GWINDOW) ! Очистка текстового окна

i2=SetColor(8) ! Цвет зеленый

i2=rectangle($GFILLINTERIOR,0,0,nx,ny)

i2=SetColor(2) ! Цвет зеленый

i2=rectangle($GBORDER,1,Int(kr*ny),Int(kc*nx),ny-1)

end do

end do

11 format('(',i1,',',i1,') ')

end

Для переноса текста в пределах окна используется функция WrapOn.

Пример:

dum = WrapOn($gwrapon), где:

$gwrapon – символическая константа, указывающая на перенос строки по границе окна

$gwrapoff – обрывание строки по границе окна.

Функция не оказывает влияние на вывод текста шрифтом (с помощью outgtext).

Вставка рисунка из файла

Вставка рисунка формата pcx в любую позицию экрана возможно с использованием файлов библиотек gx_cl.lib и pcx_cl.lib, gxint.for, pcxint.for. Вставляемый рисунок должен иметь формат pcx.

! File: ins_pic.for

! Программа демонстрации вывода рисунка из файла на экран

! ?? Закомментировать строки 156,157 файла gxlib.for

! Компиляция производится с подключением библиотек gx_cl.lib, pcx_cl.lib

! (fl ins_pic.for gx_cl.lib pcx_cl.lib)

$DEBUG ! Производит дополнительные проверки при компиляции

$STORAGE:2 ! Переменные и константы целого типа:2-х байтовые

$INCLUDE: 'gxint.for' ! Подключение библиотечных файлов

$INCLUDE: 'pcxint.for'

$include: 'fgraph.fi' ! Включение интерфейсов графических ф-ций

program InsertPcxImage! Объявление головной программы

implicit NONE ! Запретить неявное объявление типов

include 'fgraph.fd' ! Объявление типов графических функций

include 'gxlib.for'

include 'pcxlib.for'

integer*2 i2 ! Фиктивная переменная

integer*2 pcxType

character*20 pcxImage

parameter (pcxType=gxVGA_12) ! см. стр.178 файл gxlib.for

! parameter (pcxType=gxVGA_11) ! см. стр.178 файл gxlib.for

parameter (pcxImage='bpaexp.pcx'C) ! Имя файла рисунка

record /videoconfig/ vc

i2 = gxSetDisplay(pcxType) ! Определение используемого типа монитора и режима

i2 = gxSetMode(gxGRAPHICS)

i2=setvideomode($MAXRESMODE) ! Установить видеорежим с max разрешением

call getvideoconfig(vc)

i2 = pcxFileDisplay(pcxImage,100,100,0) ! Вставка рисунка

read*

i2=setvideomode($DEFAULTMODE) ! Установить предыдущий видеорежим

end

Формат файла PCX

Первые 128 байт каждого файла PCX или PCC содержат заголовок файла изображения. Заголовок определяет ширину и глубину изображения, количество плоскостей, число бит на точку, а также другую информацию, необходимую для многократного создания изображения.

Заголовок несколько изменен в новой версии пакета. В него добавлены три новых поля: PALINFO, SHRES и SVRES. Поле palinfo определяет, является ли изображение цветным (palinfo=1) или в оттенках серого (palinfo=2). Когда программа PC Paintbrush загружает изображение, и она видит, что это серое изображение, программа устанавливает палитру как свою собственную внутреннюю серую палитру. Пакет не обрабатывает палитры подобным способом (текущая палитра ВСЕГДА хранится ВМЕСТЕ с изображением), поэтому он игнорирует это поле. Однако, в целях совместимости, пакет устанавливает флаг palinfo для обозначения цвета.

Два других поля, shres и svres, предназначены для хранения разрешения развертки (сканнера). Они были созданы для того, чтобы не путать замену разрешения экрана на разрешение развертки (сканнера) в полях hres и vres. Прежние пользователи заметят, что это было бы показано как 'Разрешение дисплея: 75 х 75' при использовании утилиты pcxHdr. Теперь поля hres и vres будут содержать экранное разрешение создающего устройства, во всех будущих версиях Paintbrush (1.62 и выше).

Доступ к заголовку может быть произведен при помощи любой функции заголовка пакета. Структура заголовка уже была определена для каждого языка.

Некоторые относящиеся к графике термины

Bitmap‑Способ кодирования изображения пиксел за пикселом.

Buffer‑буфер. Область временного хранения данных, часто используется для компенсации разницы в скорости работы различных компонентов системы. Часто, в качестве буфера используется дополнительная память, зарезервированная для временного хранения данных, которые передаются между центральным процессором системы и периферией (такой, как винчестер, принтер или видеоадаптером). Особенно полезен буфер для компенсации разницы в уровнях интенсивности потоков данных, для обеспечения места размещения данных, когда процессы асинхронны (например, данные переданные в контроллер видеоплаты должны дождаться, когда графический процессор закончит выполнение текущей операции, и считает новую порцию информации), и для сохранения данных в неизменном виде (как буфер для видеокадра). Некоторые буферы являются частью адресуемой памяти центрального процессора системы, другие буферы памяти являются частью периферийных устройств.

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5209
Авторов
на СтудИзбе
430
Средний доход
с одного платного файла
Обучение Подробнее